@guoxiaowhu
2016-03-29T03:27:55.000000Z
字数 1885
阅读 1556
未分类
作者:郭潇
采用Euler方法求解课本第一章的习题1.5,提供在一般情形下求解此问题的程序,并在文中给出在某一具体情形下的结果,之后分析了该解法求得的数值解与精确的解析解之间的差距大小与步长的关系。
此题的大意是讲有两种核A、B会相互衰变(或者说振荡),用表示A核的数目,表示B核的数目,它们之间满足常微分方程组
用差分代替微分
整理上式得递推式
,,参数,步长
求解结果绘制如图,其中虚线是数值解法得到的结果,图中将其与精确的解析解(见后文)进行比较:
相应的数值解的数据保留在文档chapter1.txt里。
注:为确保精确解作图的连续性,我划分了400个点作出精确解的曲线,这是不随输入步长大小变化的,保证了精确解的曲线的精确性。
该方程的解析解
,,参数,初始条件和参量均不变,减小步长使得
得到结果如下图
可以看到数值结果与精确解更加接近了,相差不多,定量地将此时数值解的计算误差绘制出来的图如下
随迭代次数的增加,误差的大小也呈现类似的趋势(先起后伏,最后收敛到零);在此步长下,误差的绝对值不大于1,大约是步长1s时的误差的一半。
还可以展示出时的计算误差
误差的绝对值不超过0.2
在同样的初始条件下,经过大量的计算可以发现,它们的误差都服从上述的规律。下面我通过数据定量分析误差的绝对值与步长之间的关系。
在相同的初始条件和参数下,输入不同的步长dt(),然后选取每组中的最具有代表性的数据(即时计算误差取得的最大值)进行拟合,发现它们之间有良好的线性关系,如下图
,线性相关度极高;纵截距-0.01987,几乎过原点,说明误差大小与时间步长之间几乎是成正比的。
本文重点研究了,,参数的条件下,时间步长对计算结果的影响,得出以下结论:
①计算误差的大小随迭代次数的增加先迅速增大后缓慢减小,最后收敛到零,并在附近取得最大值。
②在各种参数都不变的条件下,计算误差的大小近似与步长成正比。
笔者在完成此稿之前阅读过陈锋与陈洋遥的作业,受到过他们的启发,还有感谢老师提供了原始程序的模版。