在matlab中实现前向Euler方法

时间:2018-04-16 01:39:49

标签: matlab

我尝试使用matlab实现前向Euler方法,但不了解我得到的错误。这就是我写的:

function y = ForwardEulerMethod(f,y0,T,N)
h=T/N;
t=zeros(N+1,1);
for i=0:N
    t(i)=i.*h; %line 5
end
y=zeros(N+1,1);
y(0)=y0;
for i=1:N
    y(i)=y(i-1)+h.*f(t(i-1),y(i-1));
end
end 

我的错误是第5行,并说,"下标索引必须是真正的正整数或逻辑。"我熟悉这条规则,但不知道我是如何打破它的。我只是试图用数值替换t中每个位置的零点。我错过了什么?

2 个答案:

答案 0 :(得分:0)

您正在迭代i = 0:N并将其用作t(i)=i.*h,因此您在第一次迭代期间尝试访问t(0)。 Matlab索引从1开始,因此出错。

执行到目前为止,您还有其他行会导致相同的错误。

答案 1 :(得分:0)

同意上面的@vijoc。您在多个位置使用0进行索引。您可以更改索引值的方式,也可以完全取消for循环,如下所示:

function y = ForwardEulerMethod(f,y0,T,N)
h=T/N;
t=0:N .* h; % this takes the place of the first for-loop
y=zeros(N+1,1);
y(1)=y0;
for i=2:N+1
    y(i)=y(i-1)+h.*f(t(i-1),y(i-1));
end
end

如果函数f采用如下的向量输入,你甚至可以替换第二个循环:

y(1) = y0;
y(2:end) = y(1:end-1) + h .* f(t(1:end-1), y(1:end-1));