常微分方程初值问题数值解法 下载本文

(3)使用经典Runge-Kutta法进行一般求解

经过经典Runge-Kutta法程序计算得出yi在各点xi处的近似数值解及各自同精确解的误差, 如下表3.3

表3.3

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.990099 0.961538 0.917431 0.862068 0.799999 0.735294 0.671141 0.609756 0.552487 0.500001 0.452489 0.409837 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.000000 0.000000 0.000001 0.000001 0.000001 0.000001 0.000000 0.000000 0.000000 0.000001 0.000001 0.000001 从表3.3记录的程序运行结果来看, 所计算出来的常微分方程的数值解是非常精确的, 用浮点数进行运算时由近似所引入的误差几乎不会对计算结果产生影响, 这样高的精度是很令人满意的. 无论是从计算速度上还是从计算精度要求上, 都能很好地满足工程计算的需要.

例3.2分别用Euler法、改进Euler法、Runge-Kutta解初值问题

?y'??2xy2(0?x?1.2) ?y(0)?1?的数值解, 取等分数分别为N=12, 24, 36, … ,120, 分别计算出与真实解的最大误差.

(1) 使用欧拉算法进行一般求解

经过计算我们可以得出初值问题在取不通步长时, 数值解与真实解的最大误差如表3.4

表3.4

N(等分数) 12 24 36 48 60 最大误差 0.026320 0.012547 0.008233 0.006126 0.004878 N(等分数) 72 84 96 108 120 最大误差 0.004052 0.003465 0.003027 0.002687 0.002416 从表3.4记录的程序运行结果来看当等分数N变大时, 它的误差正在减小, 根据定义2.6我们可以证得该方法是收敛的. (2)使用改进欧拉算法进行一般求解

经过计算我们可以得出初值问题在取不通步长时, 数值解与真实解的最大误差如表3.5

表3.5

N(等分数) 12 24 36 48 60 最大误差 0.001023 0.000255 0.000113 0.000063 0.000041 N(等分数) 72 84 96 108 120 最大误差 0.000028 0.000021 0.000016 0.000013 0.000010 从表3.5记录的程序运行结果来看当等分数N变大时, 它的误差正在减小, 根据定义2.6我们可以证得该方法是收敛的.

(3)使用经典Runge-Kutta法进行一般求解

经过计算我们可以得出初值问题在取不通步长时, 数值解与真实解的最大误差如表3.6

表3.6

N(等分数) 最大误差 N(等分数) 最大误差 12 24 36 48 60 0.000001 0.000000 0.000000 0.000000 0.000000 72 84 96 108 120 0.000000 0.000000 0.000000 0.000000 0.000000 从表3.6记录的程序运行结果来看当等分数N变大时, 它的误差正在减小, 根据定义2.6我们可以证得该方法是收敛的. (4)收敛速度对比

为对比以上三种方法的收敛速度, 我们计算出了它们的误差精度达到10?5的最小等分

数N如下表3.7

表3.7

方法 Euler法 改进Euler法 Runge-Kutta法 N(最小等分数) 2900 40 5 误差精度 10?5 10?5 10?5 从表3.7记录的程序运行结果来看Runge-Kutta法的收敛速度最快, 改进Euler法其次, 而Euler法最差. 由此看来Runge-Kutta法是他们当中最理想的数值解法.

小结

针对工程计算中遇到的常微分方程初值问题的求解, 根据实际情况引如了计算机作为辅助计算工具, 并根据高等数学的有关知识将欧拉公式、改进的欧拉公式、经典龙格-库塔方法等融入到计算机程序算法之中, 充分利用了计算机的速度优势, 大大减轻了工程技术人员的劳动强度, 同时也使计算结果更加可靠、准确。但在实际应用时, 针对不同的工程函数选择合适的求解方法需要有较高的要求, 既要考虑到方法的简易, 又要减少计算量, 同时又不能让截断误差超出指定范围. 一般来说经典龙格-库塔算法精确度高又利于计算机编程实现, 收敛速度快, 稳定性也很好, 可以考虑作为首选实现算法.