迭代法求解开普列方程.docx
《迭代法求解开普列方程.docx》由会员分享,可在线阅读,更多相关《迭代法求解开普列方程.docx(14页珍藏版)》请在冰豆网上搜索。
![迭代法求解开普列方程.docx](https://file1.bdocx.com/fileroot1/2022-11/29/ee25170e-db98-445d-a626-c64cda0fad84/ee25170e-db98-445d-a626-c64cda0fad841.gif)
迭代法求解开普列方程
迭代法求解开普列方程
作者:
罗波
学号:
200820302008
1课题题目
开普列方程是天体力学中的一个重要方程
,其中,x是某个行星的平均近点角,y是它的偏近点角,ε是它的轨道的偏心率。
取ε=0.9,对区间[0,
]中30个等分点的x计算出y的数值解。
2课题背景
开普勒定律是开普勒发现的关于行星运动的定律。
他于1609年在他出版的《新天文学》上发表了关于行星运动的两条定律,又于1618年,发现了第三条定律。
开普勒很幸运地能够得到,著名的丹麦天文学家第谷·布拉赫所观察与收集的,非常精确的天文资料。
大约于1605年,根据布拉赫的行星位置资料,开普勒发现行星的移动遵守三条相当简单的定律。
开普勒的定律给予亚里士多德派与托勒密派在天文学与物理学上极大的挑战。
他主张地球是不断地移动的;行星轨道不是周转圆的,而是椭圆形的;行星公转的速度不等恒。
这些论点,大大地动摇了当时的天文学与物理学。
经过了几乎一世纪披星戴月,废寝忘食的研究,物理学家终于能够用物理理论解释其中的道理。
牛顿利用他的第二定律和万有引力定律,在数学上严格地证明开普勒定律,也让人们了解其中的物理意义。
3专业背景
迭代算法是用计算机解决问题的一种基本方法。
它利用计算机运算速度快、适合做重复性操作的特点,让计算机对一组指令(或一定步骤)进行重复执行,在每次执行这组指令(或这些步骤)时,都从变量的原值推出它的一个新值。
牛顿迭代法(Newton'smethod)又称为牛顿-拉夫逊方法(Newton-Raphsonmethod),它是牛顿在17世纪提出的一种在实数域和复数域上近似求解方程的方法。
多数方程不存在求根公式,因此求精确根非常困难,甚至不可能,从而寻找方程的近似根就显得特别重要。
方法使用函数f(x)的泰勒级数的前面几项来寻找方程f(x)=0的根。
牛顿迭代法是求方程根的重要方法之一,其最大优点是在方程f(x)=0的单根附近具有平方收敛,而且该法还可以用来求方程的重根、复根。
另外该方法广泛用于计算机编程中。
对于不动眯迭代法,其迭代格式简单,通过对原方程变形构造
通过重复计算能够得到满足一定精度的数值解,但由于其对于函数要求高,迭代次数多,对于牛顿鬼迭代法和不动点迭代法都有改进,得到收敛性较好的迭代格式。
4问题分析
对于超越方程
无法求得其解析解,必须通过数值方法求其解,对于不同x、ε值,会造成方程有不同的收敛速度,经过Plot画图可以得出函数只有一种类型的拐点,对于牛顿迭代法其初值可以随便选择,通过画图选择其初始点为1.0,分别构造不动点格式与牛顿迭代格式,分别进行迭代,得到结构,比较其迭代次数,而得出牛顿迭代法与不动点迭代法其性能上差别。
5程序及注释
不动点迭代法程序以及程序注释
e=0.9;%给变量取值
formatlong%设定数据格式
n=29;%[0pi]中取值个数
x=0:
pi/n:
pi;%给出向量值
k=0;%记录迭代法数
er=1e-8;%给出误差限
ee=1;
y0=1.5;%给出初值
fori=1:
1:
30%设定要计算的X值次数
whileee>er
y=x(i)+e*sin(y0);%不动点迭代格式
ee=abs(y-y0);%确定新误差值
y0=y;
k=k+1;%失迭代次数记录
end
m(i)=k;%记录X值迭代次数
z(i)=y;%记录相应Y值
ee=1;%复原值,进行下一个X值计算
y0=1.5;
k=0;
end
对于以上程序说明,由于题目给出值相对比较简单首先进行不动点迭代法计算,题目中要求给出30个[0,
]值,语句x=0:
pi/n:
pi让x值为题目中需要计算的30个x值,用循环变量i分别对于x值分别进行提取,使之嵌入到for循环中,对于迭代格式用while循环采用标准迭代格式进行,对于while循环的结果用向量m(1:
30)、z(1:
30)分别记录其迭代格式结果。
牛顿迭代法程序及程序说明
e=0.9;%给变量取值
formatlong
n=29;%[0pi]中取值个数
x=0:
pi/n:
pi;%给出向量值
k=0;%记录迭代法数
er=1e-8;%给出误差限
ee=1;
y0=1;%给出初值
fori=1:
1:
30%设定要计算的X值次数
whileee>er
y1=y0-(y0-e*sin(y0)-x(i))/(1-e*cos(y0))%牛顿迭代格式
ee=abs(y0-y1);%确定新误差值
y0=y1;
k=k+1;%失迭代次数记录
end
m(i)=k;%记录X值迭代次数
z(i)=y1;%记录相应Y值
ee=1;%复原值,进行下一个X值计算
y0=1;
k=0;
end
程序与不动点迭代格式类似,仅牛顿迭代格式不一样,通过上面两程序运行,得到不同迭代格式算法下其收敛速度关系。
6数据及图形
以下表格为不动点迭代格式数据记录
X取值
0.000000
0.108331
0.216662
0.324992
0.433323
0.541654
结果
0.000000
0.660470
0.947341
1.144413
1.300692
1.433140
次数
150
48
27
18
13
9
X取值
0.649985
0.758315
0.866646
0.974977
1.083308
1.191639
结果
1.549786
1.655118
1.751923
1.842065
1.926857
2.007264
次数
6
7
10
13
16
19
X取值
1.299969
1.408300
1.516631
1.624962
1.733292
1.841623
结果
2.084019
2.157696
2.228751
2.297558
2.364428
2.429619
次数
23
27
31
36
42
49
X取值
1.949954
2.058285
2.166616
2.274946
2.383277
2.491608
结果
2.493357
2.555834
2.617219
2.677664
2.737305
2.796264
次数
56
65
75
86
99
113
X取值
2.599939
2.708270
2.816600
2.924931
3.033262
3.141593
结果
2.854654
2.912582
2.970147
3.027443
3.084562
3.141593
次数
128
142
156
168
175
178
以下表格为牛顿失代法生成的数据
X取值
0.000000
0.108331
0.216662
0.324992
0.433323
0.541654
结果
0.000000
0.660470
0.947341
1.144413
1.300692
1.433140
次数
6
5
4
5
5
5
X取值
0.649985
0.758315
0.866646
0.974977
1.083308
1.191639
结果
1.549786
1.655118
1.751923
1.842065
1.926857
2.007264
次数
6
6
6
6
6
6
X取值
1.299969
1.408300
1.516631
1.624962
1.733292
1.841623
结果
2.084019
2.157696
2.228751
2.297558
2.364428
2.429619
次数
6
6
5
6
6
6
X取值
1.949954
2.058285
2.166616
2.274946
2.383277
2.491608
结果
2.493357
2.555834
2.617219
2.677664
2.737305
2.796264
次数
7
7
8
11
37
16
X取值
2.599939
2.708270
2.816600
2.924931
3.033262
3.141593
结果
2.854654
2.912582
2.970147
3.027443
3.084562
3.141593
次数
8
14
59
9
9
37
由上面结果可以看出来牛顿迭代法其收敛性远好于不动点迭代法,下面给出原函数图形,图中给x在[0,
]上取值时函数
求解结果迭代次数的变化曲线
图中红色曲线为牛顿迭代法迭代次数,蓝色线为不动点迭代法迭代次数随X值变化曲线,由图上可以看出来,在初值选定适当时,牛顿迭代法迭代次数少,算法稳定,不动点迭代法,迭代次数要多许多。
7实验总结
通过实验验证了牛顿迭代法有二阶收敛性,只要初值选取适当,其收敛速度很快,对于函数变化,相比不动点迭代其也稳定得多,占用内存较小。
在本实验中,对于编程开始忘记了对于每一次计算结果后,对于误差限、迭代次数以及初始点y0均要复原,开始没有察觉到此问题,程序没有调出。
拉格郞日插值法逼近函数
作者:
罗波
学号:
200820302008
1课题题目
在区间[–5,5]上取11阶切比雪夫多项式的零点
k=0,1,……10
作插值结点,计算函数
在结点处yk=f(xk)处值。
构造插值多项式
其中
取自变量点分别
在点处L10(tk),f(tk)并绘出两条曲线比较。
2背景技术
实践中常有这样的问题:
由实验得到某一函数y=f(x)在一系列点x0,x1,…,xn处的值y0,yi,…,yn,其函数的解析表达式是未知的,需要构造一个简单函数P(x)作为y=f(x)的近似表达式;或者y=f(x)虽有解析式,但计算复杂,不便于使用,需要用一个比较简单且易于计算的函数P(x)去近似代替它;插值法是通过给定n+1个互异的插值节点,让你求一条n次代数曲线近似地表示待插值的函数曲线,而拉格郎日插值法就是通过插值结点线性逼近曲线。
3问题分析
题目中要求通过切比雪夫结点对于函数进行模拟,其插值结点可以通过切比雪夫结点公式给出,由于是一个常规等式,在Matlab中通过向量计算可以得到,针对于此结点通过forwhile循环能够构造拉格郎日多项式,对于多项式对于原函数进行逼近,可以发觉切比雪夫结点有比较好的逼近效果,只要当拉格郞日多项式给出,用Matlab中plot函数可以得到函数逼近效果。
做为问题补充对于结点做线性扩张,便于与切比雪夫结点进行比较
4程序及注释
此程序涉及到的循环语句较多,所以构造了函数文件,画图文件等,下面定义函数文件ff.m,存在matlab工作路径下面,构造切比雪夫结点多项式。
functionyy=ff(x)%声明定义函数
yy=0;%为迭加项附初值
k=0:
1:
10;
xc=5*cos((2*k+1)*pi/22);%切比雪夫切点生成
fi=inline('1/(1+x^2)');%生成逼近函数的内联函数形式
n=length(xc);%切比雪夫结点长度
fori=1:
1:
n%拉格郎日多项式和循环
l(i)=1;%乘积项初值
forj=1:
1:
n
ifj~=i
l(i)=(x-xc(j))*l(i);%拉格郎日多项式分子
l(i)=l(i)/(xc(i)-xc(j));%拉格郎日多项式分母
end
end
yy=yy+l(i)*fi(xc(i));%进行加权求和
end
end
对于以上函数为用切比雪夫构造出拉格郎日多项式,在Matlab中通过y=ff(x),可以得到相应的插值多项式函数值,在上面程序中,其算法是先定义插值向量k,通过切比雪夫等式得到相应插值节点,将其长度记录到整数n中,然后通过两个for循环得到捫格郎日多项式,外循环主要是对于n个插值节点进行加权求和,而内循环则对于多项式每项进行L(i)计算,其要经过n-1次循环才能计算出。
对于以上所定义函数在plot.m文件对于上述函数进行调用,可以得到对于原函数进行逼近的曲线拟合其Matlab程序如下:
fi=inline('1/(1+x.^2)');%须进行模拟原函数
ezplot(fi);%简单画图命令
axis([-5501]);%坐标控制
holdon%在一个图中画出
x=-5:
0.05:
5
fori=1:
1:
201%对于每一个x值利用ff.m计算
y(i)=ff(x(i))
end
plot(x,y,'r')%用红色线画出
上述程序中,由于ff.m仅针对一个变量x,所以用for循环来计算需要画图的y值,若能生成向量运算,其复杂度会大大降低。
除了切比雪夫结点外,在本题中会用到均匀插值法,对它进行比较,得到相应值。
5数据及结果
1.在插值结点处函数值与拉格朗日插值多项式值比较
插值结点
4.54816
3.7787479
2.7032041
1.4086628
1.416E-15
函数值
0.0461132
0.0654496
0.1203759
0.3350835
1
多项式值
0.0461132
0.0654496
0.1203759
0.3350835
1
插值结点
-1.408663
-2.703204
-3.778748
-4.54816
-4.949107
函数值
0.3350835
0.1203759
0.0654496
0.0461132
0.0392254
多项式值
0.3350835
0.1203759
0.0654496
0.0461132
0.0392254
通过上面表格可以看见在插值结点捫拉格郎日多项式与原函数值完成一样,因为结点处函数值没有任何误差
2.在不同点处函数值比较
题目中要求
处值,由于数据量太大,所以下面表格给出
处点其函数值与多项式值的对比,在画图时给出
处的图形对比,由于函数对称,所以仅给出在[-5,0]上函数数据值对比
x取值
-5
-4.8
-4.6
-4.4
-4.2
-4
函数值
0.038462
0.041597
0.045126
0.049116
0.053648
0.058824
多项式值
-0.005327
0.087053
0.058303
0.016231
0.002359
0.021317
x取值
-3.8
-3.6
-3.4
-3.2
-3
-2.8
函数值
0.064767
0.071633
0.079618
0.088968
0.100000
0.113122
多项式值
0.060754
0.103958
0.137054
0.152308
0.148780
0.131319
x取值
-2.6
-2.4
-2.2
-2
-1.8
-1.6
函数值
0.128866
0.147929
0.171233
0.200000
0.235849
0.280899
多项式值
0.108677
0.091307
0.089266
0.110486
0.159570
0.237177
x取值
-1.4
-1.2
-1
-0.8
-0.6
-0.4
函数值
0.337838
0.409836
0.500000
0.609756
0.735294
0.862069
多项式值
0.339976
0.461107
0.591036
0.718685
0.832686
0.922632
3.多项式逼近与函数逼近结果
上较中蓝色线红函数结果,红色为多项式逼近结果,下较给出在取值不同点数量时其逼近结果曲线,根据原理,其取值点越多,则无误差点则多,函数模拟越精确。
从上图也可以看出来,两条曲线交点数量为11,便为无误差点数量。
4.不同插值数比较
下图给出了其插值点分别为5点,11点,16点,21点时其曲线拟合情况,可以看见其插值点越多,拟合出来曲线性能越好。
6点插值11点插值
16点插值21点插值
6等间距插值
切比雪夫是一种比较优化插值方法,对于切比雪夫插值与常规等间距插值进行比较得到下面两图,其插值点分别为11点插值与21点插值,下图为插值法,蓝色为原函数曲线,红色为切比雪夫插值,绿色为等距离插值,从中可以看出切比雪夫与原曲线拟合较好,等距离插值在中心距离有比较好的逼近,但随着曲线变化,边沿部分变得很大,与原函数差别较大,随着插值结点增多,其拟合部分长度增加,但不能拟合部分值更大。
距离与切比雪夫11点插值
距离与切比雪夫21点插值
7实验总结
本课题仿真了对于函数
进行多点切比雪夫结点拉格郎日模拟,发觉其插值点越多,其拟合效果越佳,原因是插值结点越多,其无误差点越少,对于其结点也进行了等间距模拟,发觉等间距拟合其中间拟合较好,边沿与实际值相差较远。
本程序由于循环较多,其难度高,采用了函数形式,使得编程简单,但程序运行时间长,占用CPU时间较多。