上式两端同除以h, 得?n?1?0令h?0, 如果?(x,y,h), 则有
y'(x)??(x,y,h)?0
即
?(x,y,h)?f(x,y)
所以p?0的显示单步法均与初值问题(2.1)相容.由此各阶RK方法与初值问题(2.1)相容.
2.5.2 收敛性
定义2.6 一种数值方法称为是收敛的, 如果对于任意初值y0及任意x?(a,b], 都有
limyn?y(x) (x?a?nh)
h?0其中y(x)为初值问题(2.1)的准确解.
按定义, 数值方法的收敛性需根据该方法的整体截断误差?n?1来判定. 已知Euler方法的整体截断误差有估计式
?n?1?当h?0,
hML(b?a)e?1?O(h) 2L?n?1?0, 故Euler方法收敛.
定理 2.1 设显式单步法具有p阶精度, 其增量函数?(x,y,h)关于y满足Lipschitz条件, 问题(2.1)是精确的, 既y(x0)?y0, 则显式单步法的整体截断误差为
?n?1?y(xn?1)?yn?1?O(hp).
定理 2.2设增量函数?(x,y,h)在区域S上连续, 且关于y满足Lipschitz条件时, 则显式单步法收敛的充分必要条件是相容性条件成立, 即
?(x,y,h)?f(x,y).
2.5.3 稳定性
?定义 2.7 如果存在正常数h0及C, 使得对任意的初始出发值y0,y0, 单步法(2.10)的?相应精确解yn,yn, 对所有的0?h?h0, 恒有
yn??yn?Cy0??y0, nh?b?a
则称单步法是稳定的.
定理2.3若?(x,y,h)对于x?[a,b], h?(0,h0]以及一切实数y, 关于y满足Lipschitz条件, 则单步法(2.7)是稳定的.
定义 2.8对给定的微分方程和给定的步长h, 如果由单步法计算yn时有大小为?的误差, 即计算得出?yn?yn??, 而引起其后之值ym(m?n)的变化小于?, 则说该单步法是绝对稳定的.
一般只限于典型微分方程
y'??y
考虑数值方法的绝对稳定性, 其中?为复常数(我们仅限于?为实数的情形). 若对于所有的?h?(?,?), 单步法都绝对稳定, 则称(?,?)为绝对稳定区间.根据以上定义我们可以得出Euler方法的绝对稳定区间为(-2,0), 梯形公式的绝对稳定区间为(??,0), Runge-Kutta的绝对稳定区间为(-2.78,0).
3 实例分析
例3.1分别用Euler法、改进Euler法、Runge-Kutta解初值问题
?y'??2xy2(0?x?1.2) ?y(0)?1?的数值解, 取h=0.1, N=10, 并与真实解作出比较.
由于该简单方程可以用数学方法求得其精确描述式y?1, 所以可以据此检验近1?x2似数值解同真实解的误差情况. 对于其他一些结构复杂的常微分方程的数值解实现方法也是一样的.
(1)使用欧拉算法进行一般求解
经过欧拉算法程序计算得出yi在各点xi处的近似数值解及各自同精确解的误差, 如下表3.1
表3.1
x[i]各分点 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 y[i](数值解) 1.000000 0.980000 0.941584 0.888389 0.825250 0.757147 0.688354 0.622018 y(x[i])(精确解) 0.990099 0.961538 0.917431 0.862069 0.800000 0.735294 0.671141 0.609756 y(x[i])?y[i](误差) 0.009901 0.018462 0.024153 0.026320 0.025250 0.021852 0.017213 0.012262 0.9 1.0 1.1 1.2 0.560113 0.503642 0.452911 0.407783 0.552486 0.500000 0.452489 0.409836 0.007626 0.003642 0.000422 0.002053 从实验结果看误差已经不算太小, 况且这还仅仅是一个用于实验的比较简单的常微分方程, 对于实际工程中应用的结构复杂的方程其求解结果的误差要远比此大得多, 由于还存在着局部截断误差和整体截断误差, 因此可采取一定措施来抑制减少误差, 尽量使结果精确.
(2)使用改进欧拉算法进行一般求解
经过改进欧拉算法程序计算得出yi在各点xi处的近似数值解及各自同精确解的误差,
如下表3.2
表3.2 x[i]各分点 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1.0 1.1 1.2
y[i](数值解) 0.990000 0.961366 0.917246 0.861954 0.800034 0.735527 0.671587 0.610399 0.553289 0.500919 0.453479 0.410859 y(x[i])(精确解) 0.990099 0.961538 0.917431 0.862069 0.800000 0.735294 0.671141 0.609756 0.552486 0.500000 0.452489 0.409836 y(x[i])?y[i](误差) 0.000099 0.000173 0.000185 0.000115 0.000034 0.000233 0.000446 0.000643 0.000803 0.000919 0.000990 0.001023 可以看出, 这种经过改进的欧拉算法所存在的误差已大为减少, 误差的减少主要是
由于先利用了欧拉公式对yi?1的值进行了预估, 然后又利用梯形公式对预估值作了校正, 从而在预估—校正的过程中减少了误差. 此算法有一定的优点, 在一些实际而且简单的工程计算中可以直接单独应用.