在MATLAB中创建相等长度的矢量

  • 本文关键字:MATLAB 创建 matlab
  • 更新时间 :
  • 英文 :


我目前很困惑,为什么在这段代码中,我的向量的长度偏离了1。当我检查这两个长度时,我的Y向量总是一个。尽管我认为我特别将其设置为向量t的确切长度。有什么建议吗?

func = @(y,t) y*sin(t);
for i = [1/4,1/8,1/16,1/32,1/64]
[Y,t] = runge_kutta(-1,1,i,func);
disp(length(Y));
disp(length(t));
end
function [Y,t] = runge_kutta(y0,T,dt,f)
t = 0:dt:T;
Y = zeros(1,length(t));
Y(1) = y0;
for i = 1:length(t)
k_1 = f(t(i),Y(i));
k_2 = f(t(i)+0.5*dt,Y(i)+0.5*dt*k_1);
k_3 = f((t(i)+0.5*dt),(Y(i)+0.5*dt*k_2));
k_4 = f((t(i)+dt),(Y(i)+k_3*dt));
Y(i+1) = Y(i) + (1/6)*(k_1+2*k_2+2*k_3+k_4)*dt;
end
end

在函数runge_kutta中,for循环从1到length(t),但您使用i+1Y进行索引,因此当i=length(t)时,for循环会在索引length(t)+1处向Y添加一个值。

关键是代码的第17行。

请参阅,在具有指定输入值的runge_kutta函数中,t是1x5向量。然后,您输入for循环,在i=2、i=3、i=4和最后i=5的值上循环。当循环到达第17行时,即i = 5,通过运行Y(i+1) = Y(i) + (1/6)*(k_1+2*k_2+2*k_3+k_4)*dt;,您将向Y向量添加一个额外元素,因此您的Y现在是1x6。

我不知道runge-kutta方法,但如果你想让你的tY总是有相同的长度,有很多方法可以根据你想要实现的目标来实现。如果你想去掉Y的最后一个元素,你可以在第16行和第17行之间插入一些东西,看起来像这样:

if i == length(t)
break
end

这将在for循环的最后一次迭代中将额外元素添加到Y之前终止循环。

相关内容

  • 没有找到相关文章

最新更新