中点方法、改进欧拉及Heun方法

解一道题

在这里插入图片描述

格式的表达

在这里插入图片描述

在这里插入图片描述
代码示例:

%% 用三种方法求解公式
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时:
在这里插入图片描述
他们都是二阶精度格式,其中改进欧拉的效果会更好一些

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值