Function returns scalar independent of input, but I need a matrix output

3 visualizzazioni (ultimi 30 giorni)
I have function handle f:
f = @(x)4.3206303272e-05.*x(1).^2+2.39837699915e-05.*x(2).^2
Where x is a vector. I want to plot the mesh of this function, but each input returns a scalar. For example:
f([1 0]) = 4.3206e-05
f([1:4 5:7]) = 1.3914e-04
f3([rand(3) rand(3)]) = 5.3729e-06
How come, and how can I change this?
I came to a function handle because of this: Link
  2 Commenti
Torsten
Torsten il 30 Mar 2022
Modificato: Torsten il 30 Mar 2022
Use arrayfun.
Or make a simple loop over the (x/y) combinations for which you want to evaluate the handle.
In the form given, the handle only accepts x to be a single vector, not a vector of vectors, since x(1) and x(2) are indexed.
DB
DB il 31 Mar 2022
I did not understand how to apply arrayfun. However, using a double for loop worked, and I got the mesh grid as desired! Thank you so much!

Accedi per commentare.

Risposte (1)

KSSV
KSSV il 30 Mar 2022
clc; clear all ;
f = @(x1, x2)4.3206303272e-05.*x1.^2+2.39837699915e-05.*x2.^2 ;
f(1,0)
ans = 4.3206e-05
f([1:4]', [5:8]')
ans = 4×1
0.0006 0.0010 0.0016 0.0022
f(rand(3,1),rand(3,1))
ans = 3×1
1.0e-04 * 0.3743 0.2474 0.1337
  1 Commento
DB
DB il 31 Mar 2022
Yes but I have x as a 2x1 vector, and not x1 and x2, and I cannot seem to rewrite it to this. Furthermore, shouldn't it be possible with just a vector x? I mean it would take a lot of lines if you have a lot of variables.

Accedi per commentare.

Prodotti

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by