Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在MATLAB中绘制不同步长值的多个图形?_Matlab - Fatal编程技术网

如何在MATLAB中绘制不同步长值的多个图形?

如何在MATLAB中绘制不同步长值的多个图形?,matlab,Matlab,我想为ODE的解决方案绘制多个图,以检查步长对收敛的影响,如何调整以下MATLAB代码,使同一绘图中多个“h”值的多个图 x(1)=0; y(1)=2; z(1)=4; h=0.2; for i=1:5 x(i+1)=i*h; ky1=-2*y(i)+5*exp(-x(i)); kz1=-(1/3)*y(i)*z(i)^2; ky2=-2*(y(i)+ky1*h/2)+5*(exp(-(x(i)+h/2))); kz2=-(1/3)*(y(i)+ky1*

我想为ODE的解决方案绘制多个图,以检查步长对收敛的影响,如何调整以下MATLAB代码,使同一绘图中多个“h”值的多个图

x(1)=0;
y(1)=2;
z(1)=4;
h=0.2;

for i=1:5
    x(i+1)=i*h;
    ky1=-2*y(i)+5*exp(-x(i));
    kz1=-(1/3)*y(i)*z(i)^2;
    ky2=-2*(y(i)+ky1*h/2)+5*(exp(-(x(i)+h/2)));
    kz2=-(1/3)*(y(i)+ky1*h/2)*(z(i)+kz1*h/2)^2;
    ky3=-2*(y(i)+ky2*h/2)+5*(exp(-(x(i)+h/2)));
    kz3=-(1/3)*(y(i)+ky2*h/2)*(z(i)+kz2*h/2)^2;
    ky4=-2*(y(i)+ky3*h)+5*(exp(-(x(i)+h)));
    kz4=-(1/3)*(y(i)+ky3*h)*(z(i)+kz3*h)^2;
    y(i+1)=y(i)+(ky1+2*ky2+2*ky3+ky4)*h/6;
    z(i+1)=z(i)+(kz1+2*kz2+2*kz3+kz4)*h/6;
end

step = [0:5]';
x_i=x';
y_i=y';
z_i=z';

table(step, x_i, y_i, z_i)

plot(x,y,'--mo');
hold on
plot(x,z,'--ro');

legend('y(x) 4th-order RK method (h=0.2)','z(x) 4th-order RK method (h=0.2)');
xlabel('x')
ylabel('y & z')
grid on


您可以在
h=[1,0.5,0.2,0.1,0.01]
中添加一个遍历每个索引的外部for循环。在这里,我将所有进行计算的代码推送到一个名为
Calculate()
的函数中。使用向量/矩阵中的值循环此函数,
h
将允许您获得关于
h
的绘图

完整脚本:都在同一个情节中


完整脚本:在子地块中


使用MATLAB R2019b运行

您可以添加一个外部for循环,该循环遍历
h=[1,0.5,0.2,0.1,0.01]
中的每个索引。在这里,我将所有进行计算的代码推送到一个名为
Calculate()
的函数中。使用向量/矩阵中的值循环此函数,
h
将允许您获得关于
h
的绘图

完整脚本:都在同一个情节中


完整脚本:在子地块中


使用MATLAB R2019b运行

似乎您已经知道如何在同一个图形中绘制多个图形。难点是什么?请具体说明你的问题@CrisLuengo我需要用h=[1,0.5,0.2,0.1,0.01]在同一个图中绘制y(x)和z(x),看起来你已经知道如何在同一个图中绘制多个图了。困难是什么?请具体说明你的问题@CrisLuengo我需要在同一个图中绘制y(x)和z(x),其中h=[1,0.5,0.2,0.1,0.01]
x(1)=0;
y(1)=2;
z(1)=4;
h = [1,0.5,0.2,0.1,0.01];

for Index = 1: length(h)
[x,y,z] = Calculate(x,y,z,h(Index));

plot(x,y,'--mo');
hold on
plot(x,z,'--ro');

end

legend('y(x) 4th-order RK method (h=0.2)','z(x) 4th-order RK method (h=0.2)');
xlabel('x');
ylabel('y & z');
grid on


function [x,y,z] = Calculate(x,y,z,h)

for i=1:5
    x(i+1)=i*h;
    ky1=-2*y(i)+5*exp(-x(i));
    kz1=-(1/3)*y(i)*z(i)^2;
    ky2=-2*(y(i)+ky1*h/2)+5*(exp(-(x(i)+h/2)));
    kz2=-(1/3)*(y(i)+ky1*h/2)*(z(i)+kz1*h/2)^2;
    ky3=-2*(y(i)+ky2*h/2)+5*(exp(-(x(i)+h/2)));
    kz3=-(1/3)*(y(i)+ky2*h/2)*(z(i)+kz2*h/2)^2;
    ky4=-2*(y(i)+ky3*h)+5*(exp(-(x(i)+h)));
    kz4=-(1/3)*(y(i)+ky3*h)*(z(i)+kz3*h)^2;
    y(i+1)=y(i)+(ky1+2*ky2+2*ky3+ky4)*h/6;
    z(i+1)=z(i)+(kz1+2*kz2+2*kz3+kz4)*h/6;
end

step = [0:5]';
x_i=x';
y_i=y';
z_i=z';

table(step, x_i, y_i, z_i)

end
x(1)=0;
y(1)=2;
z(1)=4;
h = [1,0.5,0.2,0.1,0.01];

for Index = 1: length(h)
[x,y,z] = Calculate(x,y,z,h(Index));

subplot(length(h),1,Index); plot(x,y,'--mo');
hold on
subplot(length(h),1,Index); plot(x,z,'--ro');
legend(['y(x) 4th-order RK method (h=' num2str(h(Index)) ')'],['z(x) 4th-order RK method (h=' num2str(h(Index)) ')']);
xlabel('x');
ylabel('y & z');
grid on

end

function [x,y,z] = Calculate(x,y,z,h)

for i=1:5
    x(i+1)=i*h;
    ky1=-2*y(i)+5*exp(-x(i));
    kz1=-(1/3)*y(i)*z(i)^2;
    ky2=-2*(y(i)+ky1*h/2)+5*(exp(-(x(i)+h/2)));
    kz2=-(1/3)*(y(i)+ky1*h/2)*(z(i)+kz1*h/2)^2;
    ky3=-2*(y(i)+ky2*h/2)+5*(exp(-(x(i)+h/2)));
    kz3=-(1/3)*(y(i)+ky2*h/2)*(z(i)+kz2*h/2)^2;
    ky4=-2*(y(i)+ky3*h)+5*(exp(-(x(i)+h)));
    kz4=-(1/3)*(y(i)+ky3*h)*(z(i)+kz3*h)^2;
    y(i+1)=y(i)+(ky1+2*ky2+2*ky3+ky4)*h/6;
    z(i+1)=z(i)+(kz1+2*kz2+2*kz3+kz4)*h/6;
end

step = [0:5]';
x_i=x';
y_i=y';
z_i=z';

table(step, x_i, y_i, z_i)

end