常微分方程的数值解法
主要研究以下常微分方程的数值解法
{dxdy=f(x,y),y(x0)=y0,微分方程初值条件
欧拉法
欧拉法
微分方程中 f(x,y) 表征了对于微分方程的解 y=y(x) 于点 P(x,y) 上的导数
因此当步长足够小时, 利用导数的性质可以得到
xn+1−xnyn+1−yn≈f(xn,yn)
因此可以设定固定的步长 h 从初值点 P0(x0,y0) 递推到目标点 Pn(xn,yn), 有
yt=yt−1+h⋅f(x0+th,yt−1)
后退欧拉法
于欧拉法类似, 但采用后推型的近似式以实现迭代 (注意右侧系数的区别)
xn+1−xnyn+1−yn≈f(xn+1,yn+1)
其中 yn+1 无法直接得到, 可先使用 yn 近似
yt(0)=yt−1+h⋅f(xt−1,yt−1)
再迭代得到更精确的值 (注意下标)
yt(k)=yt−1+h⋅f(xt,yt(k−1))
梯形欧拉法
根据数值积分的梯形公式, 结合欧拉法与后退欧拉法, 可以得到更精确的迭代式
yt(k)=yt−1+2h[f(xt−1,yt−1)+f(xt,yt(k−1))]
改进欧拉法
即仅迭代一次的梯形法, 将迭代初值称为预测值
{ytˉ=yt−1+h⋅f(xt−1,yt−1),yt=yt−1+2h[f(xt−1,yt−1)+f(xt,ytˉ)],预测值校正值
数值解法的精度
局部截断误差
假设前 i 步的计算结果均为正确, 则在第 i 步有局部截断误差 (注意是同级精确值 - 同级计算值)
Ri=y(xi+1)−yi+1
算法精度
当截断误差满足 (o(pn) 表示高阶无穷小, O(pn) 表示等价无穷小)
Ri=khp+1+o(pp+2)=O(pp+1)
由于截断误差在每次递推的过程都存在, 因此阶数还需要再降低, 由此定义, 此时此算法具有 p 阶精度
欧拉法与后退欧拉法的精度
对于这两种方法, 利用泰勒展开可以得到, 均有 p=1, 属于一阶精度
梯形欧拉法精度
对于梯形欧拉法, 有 p=2, 属于二阶精度
精度计算
y′(xi)=f(xi,yi)
- 由于步长确定, 因此可以展开 xi+1=xi+h
- 由于 xi+1−xi=h 已知, 因此可以使用泰勒展开
y(xi+h)−y(xi)=y(xi)+hy′(xi)+2h2y′(xi)+⋯+n!hny(n)(xi)+O(hn+1)
- 对于 f(xi+1)−f(xi)=y′(xi+1)−y′(xi) 也可对 y′(x) 使用泰勒展开
- 变形 y(xi+1)+y(xi)=[y(xi+1)−y(xi)]+2y(xi)