我尝试使用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中每个位置的零点。我错过了什么?
答案 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));