0

次のmatlab関数を作成しました

function [t x] = MSD(xo, z, fo, c)
T = 1/fo; t = 0:T/10:10*T; fd = fo * sqrt(1-z*z);
wo = 2*pi*fo; w1 = wo * z; wd = 2*pi * fd;
x = xo * exp(-w1*t) .* cos(wd*t);
grid on;
plot(t,x,c); 

xlabel('time [s]'); 
ylabel('displacement');
s = sprintf('unforced Mass-Spring Damper [damped freq: %.3f Hz]', fd); title(s);
end

実行すると、コマンド ウィンドウに次のエラーが表示されます。

MSD(.1, .7,.4, .2)
??? Error using ==> plot
Data must be a single matrix Y or a list of pairs X,Y

Error in ==> MSD at 13
plot(t,x,c);
4

2 に答える 2

5

Acorbe の答えは正しいですが、その理由は説明されていません。

つまり、コマンドを使用して、次のように vectorに対してvector をplotプロットできます。xy

plot(x, y)

または、同じ軸上に複数のグラフをプロットします (x1に対するベクトル、 に対するベクトルy1など...)。たとえば、次のようになります。x2y2

plot(x1, y1, x2, y2, x3, y3, ...)

後者の構文では、入力ベクトルの数を偶数にする必要があります。これは、入力ベクトルをペアでプロットするためです。

グラフcと交差する線として表示したいと思います。x(t)このy(t) = cためには、プロットできるように新しい関数を作成する必要があります。

y = c * ones(size(t));  % # Or c * ones(1, length(t)) like Acorbe has shown

これは単純に、各要素が に等しい t と同じサイズのベクトルを作成しcます。x(t)そうして初めて、次のように と同じ軸にプロットできます。

plot(t, x, t, y)

または短い形式で:

plot(t, x, t, c * ones(size(t)))


問題が解決することを願っています。

于 2012-11-08T18:44:20.740 に答える
2

したがって、あなたの呼び出しは

 plot(t,x,t,c*ones(1,length(t)));

これは、単純化すると、次と同等です。

 plot(t,x);
 hold on

 c_vect = c * ones(1, length(t));  //you need a vector (constant in this case) 
                                   //to be plotted against t!!
                                   //ones(1, length(t)) will give you
                                   //[1111 ... 1] (as many ones as 
                                   //the entries of t)
 plot(t,c_vect);
于 2012-11-08T18:33:35.370 に答える