作业帮 > 综合 > 作业

关于matlab中plotyy命令的疑问(采用数组化编程和for循环的差别)

来源:学生作业帮 编辑:神马作文网作业帮 分类:综合作业 时间:2024/09/20 12:30:00
关于matlab中plotyy命令的疑问(采用数组化编程和for循环的差别)

在用matlab中plotyy命令作双纵坐标图时遇到下列问题:(1)当采用for循环时

for x=0:0.1:20

    y1 =200*exp(-0.05*x)*sin(x)

    y2 = 0.8*exp(-0.5*x)*sin(10*x)

    plotyy(x,y1,x,y2)

    hold on

end

图像为:

(2)当采用数组化编程时

x = 0:0.01:20;

y1 = 200*exp(-0.05*x).*sin(x);

y2 = 0.8*exp(-0.5*x).*sin(10*x);

plotyy(x,y1,x,y2)

图像为:

问题:

(1)为什么会出现这种差别

(2)如果我用for循环编程想得到图2所示的效果,应该如何操作

附言:这只是个简单的例子,笔者编程能力有限,现编一个较复杂的程序,采用的是for循环做的,数据处理时想用双纵坐标图


关于matlab中plotyy命令的疑问(采用数组化编程和for循环的差别)
需要用循环的话:
x=0:0.1:20;
len = length(x);
y1 = zeros(len,1); y2 = y1;
for i=1:len
y1(i) =200*exp(-0.05*x(i))*sin(x(i));
y2(i) = 0.8*exp(-0.5*x(i))*sin(10*x(i));
end
plotyy(x,y1,x,y2)
Matlab的基本数据类型是矩阵,能够用向量化编程时尽量避免使用循环!
分析:
for x=0:0.1:20
%每次产生一个点对
y1 =200*exp(-0.05*x)*sin(x)
y2 = 0.8*exp(-0.5*x)*sin(10*x)
plotyy(x,y1,x,y2) 每次在前一次的基础上加上一个点
hold on
end
显示的内容并没错,你可以用 axis([0 20 -200 200]) 查看结果
黑色部分是因为你逐点绘制时,会添加很多刻度和刻度标记,这些内容太过密集,看上去就那样了
再问: 能不能只通过设置坐标轴格式,就能达到第二个图所示的效果,谢谢
再答: 显然不能,逐点添加的话当前点不会与之前的点连接(连接关系无法确定)。
鉴于x递增,你可以选择
axes,hold on
y1 = []; y2 = [];
for i=1:len
y1 =[y1;200*exp(-0.05*x(i))*sin(x(i))];
y2= [y2;0.8*exp(-0.5*x(i))*sin(10*x(i))];
plotyy(x(1:i),y1,x(1:i),y2)
end
hold off
这样实际上是在不断重复的画,最先plot的点将被画i次。