1

私が現在受講しているクラスでは、かなりの量のプロットが行われています。スピードアップするために、plot の代わりに fplot を使い始めました。今、2 つの関数を再入力せずに組み合わせる方法があるかどうか疑問に思っています。

このようなもの:

t = @(x) x;
w = @(x) x;

d = @(x) t + w;
fplot(d,[-1,1]);

これを行う機能により、デバッグと編集がはるかに簡単になり、コーディング時間を大幅に節約できます。

私が思いついたアイデアの 1 つは、関数を持ち運ぶために文字列を使用することでした。

すなわち

t = 'x';
w = 'x';

d = @(x) t + w;

しかし、元に戻す方法を見つけることができませんでした (対応する ASCII 値を除く)。

別の方法として、楕円を使用して線を分割して見やすくすることもあると思いますが、それではコアの問題は解決しません。

背景や理解を深めたい場合: 以下は、プロットする必要のある関数の例です。

Cn = @(a) (1 - (rn/rc)^2*cos(dc)^2)*cos(dc)^2*sin(2*a);
Ca = @(a) ((1 - sin(dc)^4) * (rn/rc)^2) + (2 * sin(dc)^2 * cos(a)^2 + cos(dc)^2 * sin(a)^2) * (1 - (rn/rc)^2 * cos(dc)^2);

Cl = @(a) ((1 - (rn/rc)^2*cos(dc)^2)*cos(dc)^2*sin(2*a)) * cos(a) - (((1 - sin(dc)^4) * (rn/rc)^2) + (2 * sin(dc)^2 * cos(a)^2 + cos(dc)^2 * sin(a)^2) * (1 - (rn/rc)^2 * cos(dc)^2))*sin(a);
Cd = @(a) ((1 - (rn/rc)^2*cos(dc)^2)*cos(dc)^2*sin(2*a)) * sin(a) + (((1 - sin(dc)^4) * (rn/rc)^2) + (2 * sin(dc)^2 * cos(a)^2 + cos(dc)^2 * sin(a)^2) * (1 - (rn/rc)^2 * cos(dc)^2)) * cos(a);

ld = @(a) (((1 - (rn/rc)^2*cos(dc)^2)*cos(dc)^2*sin(2*a)) * cos(a) - (((1 - sin(dc)^4) * (rn/rc)^2) + (2 * sin(dc)^2 * cos(a)^2 + cos(dc)^2 * sin(a)^2) * (1 - (rn/rc)^2 * cos(dc)^2))*sin(a)) / (((1 - (rn/rc)^2*cos(dc)^2)*cos(dc)^2*sin(2*a)) * sin(a) + (((1 - sin(dc)^4) * (rn/rc)^2) + (2 * sin(dc)^2 * cos(a)^2 + cos(dc)^2 * sin(a)^2) * (1 - (rn/rc)^2 * cos(dc)^2)) * cos(a));

これらの多くは、宿題の一部として自分で導出した方程式であるため、1 つの関数の導出を間違えると、すべての関数を書き直さなければなりません。これでは、Cn と Cl (Cn と Ca を使用) が与えられましたが、Ca と Cd を自分で導出する必要があります。「ld」は単に cl を cd で割ったものです。

簡略化すると、次のようになります。

Cl = @(a) Cn * cos(a) - Ca * sin(a)
Cd = @(a) Cn * sin(a) + Ca * cos(a)

ld = @(a) Cl / Cd

このサイトを熟読して回答を得ることができましたが、この質問または同様の質問をしている他の人を見つけることができませんでした. これに対する解決策がある別の投稿を知っている場合は、最初にそれを読んでいただければ幸いです。あなたが助けてくれることを願っています!

4

2 に答える 2

2

「明白な船長」というニックネームが付けられても、関数ハンドルを構成する簡単な方法を述べます。:-)

%'The operators .*, .^ and ./ are safer when "a" is not scalar'
%'assuming that everything else is'
Cn = @(a) (1 - (rn/rc)^2*cos(dc)^2)*cos(dc)^2*sin(2*a);
Ca = @(a) ((1 - sin(dc)^4) * (rn/rc)^2) + (2 * sin(dc)^2 * cos(a).^2 + cos(dc)^2 * sin(a).^2) * (1 - (rn/rc)^2 * cos(dc)^2);

Cl = @(a) Cn(a) .* cos(a) - Ca(a) .* sin(a);
Cd = @(a) Cn(a) .* sin(a) + Ca(a) .* cos(a);

ld = @(a) Cl(a) ./ Cd(a);

呼び出しは再び明らかです。

ld(3);
ld([1,2;3,4]);
于 2015-09-28T11:49:20.930 に答える
0

tint = @(x) x;はハンドルであり、ハンドルなどの操作を実行できないことは明らかです+-/*

私はこのようなことをします:

f1 = @(x)(x.^2 + x.^3);
f2 = @(x)(2 * x.^2 + 5 * x);
x = linspace(-1,1,100);
y1 = feval(f1,x) + feval(f2,x);
y2 = feval(f1,x) ./ feval(f2,x);
plot(x,y1,'r',x,y2,'b')
于 2015-09-28T10:15:41.160 に答える