新浪博客

常微分方程初值问题的数值解法

2015-06-15 22:37阅读:

  1. 课题名称

    通过编写程序使用数值方法解常微分方程初值问题。

  2. 解决的问题

    利用Euler方法和改进的Euler方法求解初值问题:



    分别取步长0.1, 0.2, 0.4. 此初值问题的精确解为:




  3. 采用的数值方法

    1. Euler方法

    本实验采用了Euler方法和改进Euler方法。

    对于一阶常微分方程初值问题:



    Euler方法是解常微分方程初值问题最简单最古老的一种数值方法,其基本思路就是把上式中的导数项用差商逼近,从而将一个微分方程转化为一个代数方程,以便求解。

    设在中取等距离结点h,在结点上,由上式有:



    又由差商定义可得:



    所以有:



用的近似值带入上式,则有计算的Euler公式:



通过对Euler法公式泰勒展开进行分析可以发现Euler方法为1阶方法。


  1. 改进的Euler方法

利用梯形公式对Euler方法进行改进,可得:



改进的Euler方法是用Euler方法先求一个预测值,再用这个预测值来计算,即:



用泰勒展开容易知道改进的Euler方法具有二阶精度。


  • 算法程序

    要实现的方法是Euler法和改进Euler法,源程序在实验报告附件中,这里展示部分核心代码。

    首先是迭代式的实现函数,实现代码如下:



    以及一个求解精确值的函数,用于比较和计算误差:



    接下来是Euler法的实现过程,利用之前的式子:



    然后是改进Euler法的实现过程,同样是利用之前的式子:



    完成了以上工作之后,只需要编写一个简单的测试函数就可以调用了:




  • 数值结果

    对于初值问题:



    实验测试结果如下:



    分别去不同步长数值结果统计如下:


    表格 1 h=0.1

x
精确解
Euler法解
改进Euler法解
Euler法误差
改进Euler法误差
0
3
3
3
0
0
0.1
2.991697
3
2.991667
0.008303
0.00003
0.2
2.967145
2.983333
2.967087
0.016189
0.000057
0.3
2.927397
2.950482
2.927322
0.023085
0.000076
0.4
2.874147
2.902639
2.874072
0.028493
0.000075
0.5
2.809627
2.841656
2.809583
0.032029
0.000044
0.6
2.736491
2.769955
2.736518
0.033464
0.000027
0.7
2.657655
2.690401
2.657804
0.032746
0.000148
0.8
2.576133
2.606147
2.576456
0.030014
0.000323
0.9
2.494853
2.520442
2.495402
0.025589
0.000549
1
2.416484
2.436434
2.417301
0.01995
0.000816
1.1
2.343285
2.356965
2.34439
0.01368
0.001105
1.2
2.27698
2.28438
2.278371
0.007399
0.00139
1.3
2.218693
2.220377
2.220337
0.001684
0.001645
1.4
2.168938
2.165922
2.170779
0.003016
0.001841
1.5
2.127674
2.121244
2.129634
0.00643
0.001961
1.6
2.094403
2.08591
2.096396
0.008493
0.001993
1.7
2.068304
2.058985
2.070244
0.009319
0.00194
1.8
2.04837
2.039217
2.050183
0.009153
0.001813
1.9
2.033534
2.025235
2.035165
0.008299
0.001632
2
2.022765
2.015705
2.024182
0.00706
0.001417


表格 2 h=0.2

x
精确解
Euler法解
改进Euler法解
Euler法误差
改进Euler法误差
0
3
3
3
0
0
0.2
2.96715
3
2.966667
0.032855
0.000478
0.4
2.87415
2.933333
2.873358
0.059187
0.000789
0.6
2.73649
2.807758
2.735935
0.071267
0.000556
0.8
2.57613
2.641782
2.576739
0.065648
0.000606
1
2.41648
2.461357
2.419284
0.044873
0.0028
1.2
2.27698

我的更多文章

下载客户端阅读体验更佳

APP专享