it-swarm-ja.com

関数から1つの図にプロットするMatlab

4つの入力引数を使用して関数y(t)をプロットする関数を作成しました。

function plot_me_n1(A,B,m1,m2) 
t = linspace(0,10,10/0.01);
y=A*exp(-m1*t) - B*exp(-m2*t);
plot(t,y,'color',Rand(1,4));
title('equation', 'fontsize', 10);
ylabel('y(t)');
xlabel('t');
end

ここで、plot_me_n1関数の複数の変数に渡して複数のプロットを作成する別の関数を作成しています。

figure                 
hold all
A=[-8,8,-8];
B=[9,-9,-9];
m1=-3;
m2=-4;
arrayfun(@(a,b) plot_me_n1(a,b,m1,m2),A, B);
hold off

問題は、複数のプロットを同時に表示しようとしているのに、最後のプロットのみが表示されることです。他のスクリプトに依存せずにplot_me_n1関数を単独で機能させたいので、plot()を関数の外部に移動することはできません。では、すべてのプロットを1つの図に同時に表示できるようにするにはどうすればよいでしょうか。これらのコードを改善する方法についてのリファクタリングコメントは大歓迎です。ありがとう。

実際、スクリプトは正常に機能しており、プロットが互いに重なり合っているだけです。

1
ZeroVash

holdコマンドは、図形の軸を操作します。コードは図を生成しますが、holdを呼び出すと軸が含まれていません。

これを修正するには、plotコマンドの直後にholdを配置して、前のプロットを同じ図に保持します。

...
plot(t,y,'color',Rand(1,4));
hold on
...

また、hold allはMatlabの将来のリリースで削除される予定です。代わりに、hold onを使用してください。

1
JockeR