无法绘制数据

Amr*_*Amr 0 matlab plot

我编写了以下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
Run Code Online (Sandbox Code Playgroud)

当我运行它时,命令窗口中出现以下错误:

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);
Run Code Online (Sandbox Code Playgroud)

Eit*_*n T 5

Acorbe的答案是正确的,但它没有解释原因.

简而言之,您可以使用该plot命令在矢量上绘制x矢量y,如下所示:

plot(x, y)
Run Code Online (Sandbox Code Playgroud)

或绘制相同轴上的几个图形(矢量x1对y1,向量x2对等y2,等等),例如:

plot(x1, y1, x2, y2, x3, y3, ...)
Run Code Online (Sandbox Code Playgroud)

后一种语法要求输入向量的数量是偶数,因为它通过成对绘制它们.

我相信你想要显示c为与x(t)图形相交的线条.为此,您需要创建一个新功能,y(t) = c以便您可以绘制它:

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

这只是创建一个具有相同t大小的向量,其中每个元素等于c.只有这样你才能将它绘制在相同的轴上x(t),如下所示:

plot(t, x, t, y)
Run Code Online (Sandbox Code Playgroud)

或以较短的形式:

plot(t, x, t, c * ones(size(t)))
Run Code Online (Sandbox Code Playgroud)


希望这能说明问题!