【问题标题】:Implementing forward Euler method in matlab在matlab中实现前向欧拉法
【发布时间】:2018-04-16 15:04:17
【问题描述】:

我正在尝试使用 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 中每个位置的零。我错过了什么?

【问题讨论】:

标签: matlab


【解决方案1】:

同意上面的@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));

【讨论】:

    【解决方案2】:

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

    一旦执行到那么远,您还有其他行会导致相同的错误。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-02-25
      • 1970-01-01
      • 2015-07-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多