I have to convert a code written using syms, to a code with function handle. (my prof doesn't want me to use syms)
how can I select the element of the array?
I write a simpler code
A=@(x)[sin(x), cos(x);1, -1];
B=@(x)[sin(x);cos(x)];
C=@(x) A(x)*B(x); % this is an array of 2 element
D=@(x) C(first element) - C(second element)

 Réponse acceptée

Walter Roberson
Walter Roberson le 12 Juin 2020

0 votes

First = @(x) x(1);
Second = @(x) x(2);
D = @(x) First(C(x)) - Second(C(x));
However, this will execute C twice. More efficient would be
FirstMinusSecond = @(x) x(1) - x(2);
D = @(x) FirstMinusSecond(C(x))

2 commentaires

Simo
Simo le 13 Juin 2020
ok it works thanks, but if I want to plot D?
---------------------
l=linspace(0,3*pi);
plot(l,D(l))
--------------------
error:
--------------------
Error using vertcat
Dimensions of arrays being concatenated are not consistent.
Error in Untitled3 (line 3)
A=@(x)[sin(x), cos(x);1, -1];
Error in Untitled3 (line 5)
C=@(x) A(x)*B(x); % this is an array of 2 element
Error in Untitled3 (line 7)
D = @(x) FirstMinusSecond(C(x));
Error in Untitled3 (line 10)
plot(l,D(l))
Your A and B and C are only valid if x is a scalar, and your D would be unlikely to return the value you want if x is not a scalar. If you want to plot then instead of
plot(l,D(l))
do
y = arrayfun(D, l);
plot(l, y)

Connectez-vous pour commenter.

Plus de réponses (0)

Catégories

En savoir plus sur Operators and Elementary Operations dans Centre d'aide et File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by