system("pause");
return0;
}
实验结果:
程序运行结果讨论和分析:
对于第一种迭代格式,收敛区间[-8.2-0.4],在该收敛区间内迭代收敛于-1.53209,只能求得方程的一个根;
对于第二种迭代格式,收敛区间[-1.51.8],在该收敛区间内迭代收敛于-0.34730,同样只能求得方程的一个根;
对于第三种迭代格式,收敛区间[-0.3+∞),在该收敛区间内迭代收敛于1.87937,只能求得方程的一个根;
由以上结果很容易发现,初值的选取对迭代敛散性有很大影响。
以第一种迭代格式为例,当初值大于等于-0.3时,迭代格式发散;当初值小于等于-8.3时,迭代格式也发散;只有初值在-0.3和-8.3之间时,迭代格式才收敛于—1.53209。
其他迭代格式也有这样的性质,即收敛于某个数值区间,超出这个区间迭代格式就是发散的,这就是所谓迭代格式的收敛性。
自主题:
机械运动的数值仿真
背景:
描述物理学里把物体位置的变化叫机械运动。
如我们所知,力的作用效果有:
改变物体的运动状态改变物体的形状改变物的运动状态大多会引起物体的位置变化,引起机械运动。
改变物体的形状而不改变它的运动状态就叫是非机械运动中的一种。
在工程实际与生产生活中我们常常需要对特定对象的机械运动进行研究分析得出其机械运动的规律,然后将该规律应用于对人们有益的方面。
实例:
如下图1(左)所示,假设有一烟花火箭,其初始条件为零。
将其放在地方然后点火,该烟花火箭的初始质量为
,其中粉末燃料占
。
经过实验得知,燃料的持续时间为
。
燃料所产生的恒定推力为
。
这也说明燃料的消耗率恒定。
空气产生的阻力和烟花火箭的速度的平方成正比:
。
这里,要求选择一种数值方法对其运动过程进行仿真并且其截断误差为
或者更高。
要求计算出该烟花火箭的最高高度,同时计算出从燃料消耗到该烟花火箭运动到最高点的时间延迟。
数学原理及数学模型:
该实际问题要求其截断误差要求大于或等于
,这就使得较为简单的欧拉法,中点法不适合本例。
龙格-库塔法以其优异的数值特性成为解决本问题的首选。
图1烟花火箭的机械运动的数值仿真(左)和结构力学问题的数值求解(右)
很显然,该问题属于变质量的运动学问题,在该运动过程中,其前两秒是在驱动力和阻力的共同作用下加速上升的,而后的时间内,该烟花火箭是在空气的阻力下减速上升的,同时注意到空气的阻力和速度的平方成正比。
为了对该运动过程进行数值仿真,那么必须建立相应的微分方程组。
分析该运动过程可知,应该将该运动过程分为两部分:
加速上升过程和减速上升过程。
从而得到相应的微分方程组。
加速上升过程:
(1)
减速上升过程:
(2)
式中,
为上升的高度,
为上升过程的速度,
为重力加速度。
表示加速上升过程的最终高度,
表示加速上升过程的最终速度。
使用龙格-库塔法求解如上的微分方程组。
该系统的数值仿真结果如图2所示。
图2(左)是该烟花火箭的上升过程高度的数值仿真,图2(右)是其上升过程速度的数值仿真。
同时亦可以得到烟花火箭上升的最大高度和问题中所需的时间延迟:
从如上的分析和仿真可知,使用数值方法进行机械运动的数值仿真,可以简化本身复杂变化的物理运动过程。
同时注意到,即使改变机械运动的初始条件或者系统的某些特征,其对应的仿真只需要进行简单的调整。
而且其仿真精度也可以得以预见。
图2烟花火箭的上升过程高度(左)和速度(右)的数值仿真
编程过程:
加速上升过程
f[x_,y_]:
=5200/(120-35t)-0.4x^2/(120-35t)-10;
g[x_,y_]:
=x;
{x,y}={0,0};
h=0.1;
t=0.1;
xx=Table[0,{i,1,70}];
yy=Table[0,{i,1,70}];
tt=Table[0,{i,1,70}];
Do[a=f[x,y];xa=x+h(a+f[x+h,y+h*a])/2;
b=g[x,y];ya=y+h(b+g[x+h,y+h*b])/2;
Print[k,"",t,"",xa,"",ya];
{t,x,y,xx[[k]],yy[[k]],tt[[k]]}={t+h,xa,ya,xa,ya,t+h},{k,1,20}]
tt
{0.6,1.1,1.6,2.1,2.6,3.1,3.6,4.1,4.6,5.1,5.6,6.1,6.6,7.1,7.6}
xx
{17.3174,37.9564,61.2759,85.0712,104.674,113.404,109.842,75.5189,8.73997,-59.2801,-96.8113,-111.485,-117.825,-121.341,-123.752}
yy
{0.125,8.90869,28.0119,58.7749,101.435,153.898,210.725,265.771,303.655,308.15,278.635,230.354,174.737,115.949,55.4041}
ListPlot[Table[{tt[[i]],xx[[i]]},{i,1,20}],PlotStyle®PointSize[0.02]]
ListPlot[Table[{tt[[i]],xx[[i]]},{i,1,20}],PlotStyle®PointSize[0.02]]
ListPlot[Table[{tt[[i]],xx[[i]]},{i,1,20}],PlotJoined®True]
ListPlot[Table[{tt[[i]],yy[[i]]},{i,1,20}],PlotStyle®PointSize[0.02]]
ListPlot[Table[{tt[[i]],yy[[i]]},{i,1,20}],PlotJoined®True]
减速上升过程
f[x_,y_]:
=-0.4x^2/(120-35*2)-10;
g[x_,y_]:
=x;
{x,y}={85.3977,78.2347};
h=0.1;
t=2.1;
Do[a=f[x,y];xa=x+h(a+f[x+h,y+h*a])/2;
b=g[x,y];ya=y+h(b+g[x+h,y+h*b])/2;
Print[k,"",t,"",xa,"",ya];
{t,x,y,xx[[20+k]],yy[[20+k]],tt[[20+k]]}={t+h,xa,ya,xa,ya,t+h},{k,1,50}]
ListPlot[Table[{tt[[i]],xx[[i]]},{i,1,61}],PlotStyle®PointSize[0.02]]
ListPlot[Table[{tt[[i]],yy[[i]]},{i,1,61}],PlotStyle®PointSize[0.02]]
ListPlot[Table[{tt[[i]],xx[[i]]},{i,1,61}],PlotJoined®True]
ListPlot[Table[{tt[[i]],yy[[i]]},{i,1,61}],PlotJoined®True]
结果讨论和分析:
通过以上的编程计算我们可以看到数值分析在实际中的应用,综合运用数值分析知识和相关软件可以快速便捷的解决实际问题并且能够给出直观的,让人一目了然的结果,对促进科学研究具有重要意义。