题 9.1
令 f(x,y)=y−y2x,x0=0,y0=1。
-
Euler 法:
yn+1=yn+hf(xn,yn)
从而:
y1=y0+hf(x0,y0)=1+0.1×1=1.1
解析解为:
y(x1)=1.2≈1.095445
绝对误差:
∣e1∣=∣y(x1)−y1∣≈0.004555
-
改进 Euler 法
yn+1=yn+2h[f(xn,yn)+f(xn+1,yn+hf(xn,yn))]
其中:
y0+hf(x0,y0)=1.1
从而:
y1=y0+2h[f(x0,y0)+f(x1,y0+hf(x0,y0))]=1+0.05×(1+f(0.1,1.1))=1+0.05×(1+110101)=22002411≈1.095909
解析解为:
y(x1)=1.2≈1.095445
绝对误差:
∣e2∣=∣y(x1)−y1∣≈0.000464
可见改进 Euler 法的精度比 Euler 法高一个数量级。
-
四阶 Runge-Kutta 法:
k1k2k3k4yn+1=hf(xn,yn)=hf(xn+2h, yn+21k1)=hf(xn+2h, yn+21k2)=hf(xn+h, yn+k3)=yn+61(k1+2k2+2k3+k4)
故:
k1k2k3k4=0.2×1=0.2=0.2×f(0.1,1.1)=0.2×(1.1−1.10.2)≈0.183636=0.2×f(0.1,1.091818)≈0.181727=0.2×f(0.2,1.181727)≈0.168648
从而:
y1=y0+61(k1+2k2+2k3+k4)≈1.183229
解析解为:
y(x1)=1.4≈1.183216
绝对误差:
∣e3∣=∣y(x1)−y1∣≈0.000013
题 9.2
局部截断误差为:
ln+1=y(xn+1)−y~n+1
其中 y~n+1 满足:
y~n+1=y(xn)+h[cf(xn,y(xn))+(1−c)f(xn+1,y~n+1)]
对 y(xn+1) 在 xn 处展开:
y(xn+1)=y(xn)+hy′(xn)+2h2y′′(xn)+6h3y′′′(xn)+O(h4)
对 y(xn) 在 xn+1 处展开:
y(xn)=y(xn+1)−hy′(xn+1)+2h2y′′(xn+1)−6h3y′′′(xn+1)+O(h4)
也即:
y(xn+1)=y(xn)+hy′(xn+1)−2h2y′′(xn+1)+6h3y′′′(xn+1)+O(h4)
将两式分别乘以 c 与 (1−c) 后相加,得到 y(xn+1) 的表示:
y(xn+1)=y(xn)+h[cy′(xn)+(1−c)y′(xn+1)]+2h2[cy′′(xn)−(1−c)y′′(xn+1)]+6h3[cy′′′(xn)+(1−c)y′′′(xn+1)]+O(h4)
令:
y∗=y(xn)+h[cf(xn,y(xn))+(1−c)f(xn+1,y(xn+1))]=y(xn)+h[cy′(xn)+(1−c)y′(xn+1)]
由 y~n+1 的定义与 y∗ 的定义相减:
y~n+1−y∗=h(1−c)[f(xn+1,y~n+1)−f(xn+1,y(xn+1))]=h(1−c)fy(xn+1,η)(y~n+1−y(xn+1))=−h(1−c)fy(xn+1,η)ln+1
从而:
ln+1=y(xn+1)−y∗+y∗−y~n+1=y(xn+1)−y∗+h(1−c)fy(xn+1,η)ln+1
也即:
ln+1[1−h(1−c)fy]=y(xn+1)−y∗
从而:
ln+1=1−h(1−c)fyy(xn+1)−y∗=[y(xn+1)−y∗][1+h(1−c)fy+O(h2)]=2h2[cy′′(xn)−(1−c)y′′(xn+1)]+O(h3)=h2(c−21)y′′(xn+1)+O(h3)
由上可知,对任意参数 c,均有 ln+1=O(h2),因此对任意 c,该数值格式都是相容的。
且当 c=21 时,局部截断误差阶最高,为 2 阶。此时即为梯形公式。