对于我的计算课程,我被要求使用Euler方法解决ODE。 我的代码运行了,但是现在我被问到以下内容:
“根据N = 100,200,400,800增加N次......所以你可以得到答案y100,y200,y400,y800 ....”
这是我的代码:
function [xar,yar] = eulsol(a,b,ybouco,N)
h=(b-a)/N;
T=a:h:b;
y(1)=ybouco;
for i = 100:N
f(i) = -8*y(i) + 0.5*T(i) + (1/16);
y(i+1) = y(i)+h*f(i);
end
xar=T;
yar=y;
end
根据增加的x
(100,200,400,800 ......),有人可以帮我在MATLAB中获得一个很好的表格,它会向我显示数组y
和N
吗? / p>
答案 0 :(得分:1)
我们将K定义为步数。在您的示例中,K = 4(N = 100,200,400,800)。如果N = 100,200,400,800,1600,3200,则K = 6
注意N的第i个元素对应于100 * 2 ^(i-1):
i = 1 => N = 100 * 2^(1-1) = 100
i = 2 => N = 100 * 2^(2-1) = 200
i = 3 => N = 100 * 2^(3-1) = 400
依旧......
因此,如果你想计算N = 100,200,400,800,你的代码应该是:
function [xar,yar] = eulsol(a,b,ybouco,K)
N_max = 100 * 2^(K-1)
h=(b-a)/N_max;
T=a:h:b;
y(1)=ybouco;
for i = 1:K
N = 100 * 2^(i-1)
f(N) = -8*y(N) + 0.5*T(N) + (1/16);
y(N+1) = y(N)+h*f(N);
end
xar=T;
yar=y;
end
如果要在for循环中创建正确的N,这个答案,但你应该检查你的代码!如你所见:对于i = 1,你有N = 100并且要计算F(100)你需要y(100),但你没有y(100),只有y(1)。 也许正确答案是F(i)= -8 * y(i)+ 0.5 * T(N)+(1/16); 但同样,想要的是T(N)?
正如@Argyll所说,请解释你想要什么,你不应该指望人们从错误的代码中理解你的问题。