フィルターのクリア

array of function handle

7 ビュー (過去 30 日間)
Simo
Simo 2020 年 6 月 12 日
コメント済み: Walter Roberson 2020 年 6 月 13 日
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)

採用された回答

Walter Roberson
Walter Roberson 2020 年 6 月 12 日
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 件のコメント
Simo
Simo 2020 年 6 月 13 日
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))
Walter Roberson
Walter Roberson 2020 年 6 月 13 日
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)

サインインしてコメントする。

その他の回答 (0 件)

カテゴリ

Help Center および File ExchangeConversion Between Symbolic and Numeric についてさらに検索

Community Treasure Hunt

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

Start Hunting!

Translated by