解一道题
格式的表达
代码示例:
%% 用三种方法求解公式
h = 0.01; t = 0:h:1;N = length(t);
y = zeros(1,N);y(1) = 1;
df = @(t,y)(-y+t+1);
%改进Euler法(迭代方法)
w = y(1);
for k = 1:N-1
wk = w + h*df(t(k), w);
z1 = wk;
z2 = Inf;
while abs(z1-z2)>eps
z2 = z1;
z1 = w + (h/2)*(df(t(k),w)+df(t(k+1),z1));
end
w = z1;
y(k+1) = w;
end
impE = y(N)
%中点法
y = zeros(1,N);y(1) = 1;
k = 1;
while k<=N-1
y_half = y(k)+(h/2)*df(t(k),y(k));
y(k+1) = y(k)+df(t(k)+h/2,y_half)*h;
k = k+1;
end
cenE = y(N)
%Heun
y = zeros(1,N);y(1) = 1;
k = 1;
while k<=N-1
y(k+1) = y(k)+(h/4)*(df(t(k),y(k))+3*df(t(k)+2*h/3,y(k)+2*h/3*df(t(k),y(k))));
k = k+1;
end
Heun = y(N)
%% 误差
f = @(t)(exp(-t)+t);
error1 = abs(f(1) - impE)
error2 = abs(f(1) - cenE)
error3 = abs(f(1) - Heun)
结果如下:
error1为改进欧拉法
error2为中点法
error3为Heun法
当h=0.1时:
当h=0.01时:
他们都是二阶精度格式,其中改进欧拉的效果会更好一些