数值分析斯特芬森迭代法
- 格式:pdf
- 大小:73.97 KB
- 文档页数:2
《计算方法》实验报告 实验名称:实验1 非线性方程的迭代法实验题目:0104x 23=-+x 实验目的:用简单迭代法和Steffensen 迭代法求方程的根 基础理论:简单迭代法和Steffensen 迭代法 实验环境:操作系统:Windows XP ;实验平台:matlab实验过程:方法一:简单迭代法程序:phi=inline('0.5*sqrt(10-x^3)') %迭代函数x0=input('x0=');del=input('del=');N=input('N='); n=1;fprintf('\n k x(k) ');fprintf('\n %2d %f ',0,x0);while n<Nx=phi(x0);if abs(x-x0)<delfprintf('\n \n 近似解 = %f \n',x);return;endfprintf(' \n %2d %f ',n,x);n=n+1; x0=x;endfprintf(' \n \n%d 次迭代后未达到精度要求.\n',N);结果:结果分析:利用简单迭代法求出的该非线性方程在[1,,2]内的实根大约为1.365230.方法二:Steffensen迭代法程序:phi=inline('0.5*sqrt(10-x^3)') %迭代函数x0=input('x0=');del=input('del=');N=input('N=');n=1;fprintf('\n k x(k) ');fprintf('\n %2d %f ',0,x0);while n<=Ny=phi(x0);z=phi(y);x=phi(x0-(y-x0)^2/(z-2*y+x0));if abs(x-x0)<delfprintf('\n \n近似解= %f \n',x);return;endfprintf(' \n %2d %f ',n,x);n=n+1;x0=x;endfprintf(' \n \n%d次迭代后未达到精度要求.\n',N);结果:结果分析:利用Steffensn迭代法求出该非线性方程在[1,,2]内的实根大约为1.365230,两种方法对比,显然Steffensn迭代法比简单迭代法迭代的次数少,更快。
非线性方程牛顿迭代法与斯特芬森迭代法的研究与比较非线性方程牛顿迭代法与斯特芬森迭代法的研究与比较申林坚(南昌航空大学 测试与光电工程学院 江西 南昌 330063)摘要:本文针对一个具体的非线性方程032=-x e x 进行研究,首先作出了了函数xe x xf -=23)(的图像,大体判定其零点(即方程解)在(3,4)区间内, 接着用牛顿迭代法和斯特芬森迭代法进行求解分析,牛顿法的迭代公式为)()(1k k k k x f x f x x '-=+, 斯特芬森迭代法公式为),(),(,2)(21k k k k kk k k k k k y z x y x y z x y x x ϕϕ==+---=+记录两种方法求得指定精度解所需迭代次数及所需计算时间,并对其优缺点 进行了分析。
关键词:非线性方程;牛顿迭代法;斯特芬森迭代法引言非线性是实际问题中经常出现的,并且在科学与工程计算中的地位越来越重要,很多我们熟悉的线性模型都是在一定条件下由非线性问题简化得到的,为得到更符合实际的解答,往往需要直接研究非线性模型,从而产生非线性科学,它是21世纪科学技术发展的重要支柱。
本论文通过对特定非线性方程032=-x e x 进行求解,介绍了两种常用的迭代法牛顿迭代法和斯特芬森迭代法,详尽阐述了其各自的数学几何原理及优缺点比较,从而更深入的理解非线性方程的迭代法求解。
正文一.作出)(x f 的图像,确定隔根区间 在Matlab 中输入以下指令并回车:x=(-10:0.001:10); y=3*x.^2-exp(x); plot(x,y);grid on ;-10-8-6-4-202468104图1得到图1所示)(x f 的图像,易知,当10-<x 及10>x 时,)(x f 无零点 将y 轴方向放大,输入命令axis([-10 10 -2 2]),得到图2-10-8-6-4-20246810-2-1.5-1-0.500.511.52图2可知函数有三个零点,隔根区间为(-2,0),(0,2),(2,4) 将x 轴方向放大,输入命令axis([-2 4 -2 2]),得到图3-2-101234-2-1.5-1-0.500.511.52图3可将隔根区间进一步缩小为(-1,0),(0,1),(3,4)二.牛顿迭代法求区间(3,4)中的根对于方程0)(=x f ,如果)(x f 是线性函数,则它的求根是容易的。
第7章复习与思考题求f (X )= 0的零点就等价于求(x )的不动点,选择一个初始近似值X 0,将它代入X =「(X ) 的右端,可求得X 1 h%X °),如此反复迭代有 X k 1 二(X k ), k =0,1,2,..., (X)称为迭代函数,如果对任何X 。
• [a,b],由x k 卜h%x k ),k =0,1,2,...得到的序列〈X k 1有极限则称迭代方程收敛,且X* =®(x*)为®(X )的不动点 故称X k q 二(X k ), k =0,1,2,...为不动点迭代法。
5•什么是迭代法的收敛阶?如何衡量迭代法收敛的快慢?如何确定X k 1 二「(X k )(k =0,1,2,...)的收敛阶P219设迭代过程X k 1'h%X k )收敛于 (X)的根X*,如果当k > 时,迭代误差e k = x k - x *满足渐近关系式—t C,C =const 式 0 e/则称该迭代过程是 p 阶收敛的,特别点,当 p=1时称为线性收敛,P>1时称为超线性收敛, p=2时称为平方收敛。
以收敛阶的大小衡量收敛速度的快慢。
6•什么是求解f(x)=0的牛顿法?它是否总是收敛的?若 f(X*) =0,X*是单根,f 是光 滑,证明牛顿法是局部二阶收敛的。
牛顿法:当| f (X k )卜J 时收敛。
7•什么是弦截法?试从收敛阶及每步迭代计算量与牛顿法比较其差别。
在牛顿法的基础上使用 2点的的斜率代替一点的倒数求法。
就是弦截法。
收敛阶弦截法1.618小于牛顿法2 计算量弦截法 <牛顿法(减少了倒数的计算量)8•什么是解方程的抛物线法?在求多项式全部零点中是否优于牛顿法? P229X-mX k 1 =X kf (X k ) f (X k )设已知方程f (x) = 0的三个近似根,X k,X k^,X k^2,以这三点为节点构造二次插值多项式p(x),并适当选取p2(x)的一个零点X k卅作为新近似根,这样确定的迭代过程称为抛物线法。
2016计算方法复习务必通过本提纲例子和书上例子掌握如下书本内容:1. 会高斯消去法;会矩阵三角分解法;会Cholesky 分解的平方根法求解方程组2. 会用插值基函数;会求Lagrange, 会计算差商和Newton 插值多项式和余项3. 会Jacobi 迭代、Gauss —Seidel 迭代的分量形式,迭代矩阵,谱半径,收敛性4. 会写非线性方程根的Newton 迭代格式;斯蒂芬森加速5. 会用欧拉预报-校正法和经典四阶龙格—库塔法求解初值问题6. 会最小二乘法多项式拟合7. 会计算求积公式的代数精度;(复化)梯形公式和(复化)辛普生公式求积分;高斯-勒让德求积公式第1章、数值计算引论(一)考核知识点误差的来源类型;绝对误差和绝对误差限,相对误差和相对误差限,有效数字;误差的传播。
(二) 复习要求1。
了解数值分析的研究对象与特点。
2。
了解误差来源与分类,会求有效数字; 会简单误差估计. 3.了解误差的定性分析及避免误差危害。
(三)例题例1. 设x =0.231是精确值x *=0。
229的近似值,则x 有2位有效数字。
例2. 为了提高数值计算精度, 当正数x 充分大时, 应将)1ln(2--x x 改写为)1ln(2++-x x .例3. 3*x 的相对误差约是*x 的相对误差的1/3 倍.第2章、非线性方程的数值解法(一)考核知识点对分法;不动点迭代法及其收敛性;收敛速度; 迭代收敛的加速方法;埃特金加速收敛方法;Steffensen 斯特芬森迭代法;牛顿法;弦截法. (二) 复习要求1.了解求根问题和二分法.2。
了解不动点迭代法和迭代收敛性;了解收敛阶的概念和有关结论。
3。
理解掌握加速迭代收敛的埃特金方法和斯蒂芬森方法。
4。
掌握牛顿法及其收敛性、下山法, 了解重根情形. 5.了解弦截法. (三)例题1。
为求方程x 3―x 2―1=0在区间[1.3,1.6]内的一个根,把方程改写成下列形式,并建立相应的迭代公式,迭代公式不收敛的是( )(A )11,1112-=-=+k k x x x x 迭代公式 (B )21211,11kk x x x x +=+=+迭代公式(C ) 3/12123)1(,1k k x x x x +=+=+迭代公式 (D )231x x =-迭代公式11221+++=+k k kk x x x x 解:在(A)中,2/32)1(21)(,11)(,11--='-=-=x x x x x x ϕϕ2/3)16.1(21->=1.076故迭代发散。
Steffensen迭代法是一种重要的数值计算方法,它在数值分析领域有着广泛的应用。
该方法通过迭代逼近函数的根,是一种高效、稳定的求解非线性方程的工具。
Steffensen迭代法基于不动点理论,通过构造一个逐步逼近根的序列来求解方程。
它的基本思想是利用函数在某一点的局部线性逼近来逼近根的位置。
具体来说,我们从一个初始值开始,通过对函数进行局部线性逼近,计算出一个新的逼近值。
然后,我们再次对函数进行局部线性逼近,得到一个更接近根的新的逼近值。
通过不断迭代,我们可以逐步逼近方程的根。
Steffensen迭代法的迭代公式为:\[ x_{n+1} = x_n - \frac{{(f(x_n))^2}}{{f(x_n+f(x_n))-f(x_n)}} \]其中,\( x_n \) 是第n次迭代的逼近值,\( f(x) \) 是需要求根的函数。
与其他迭代方法相比,Steffensen迭代法具有较快的收敛速度和较高的精度。
它适用于求解各种非线性方程,包括多项式方程、三角函数方程、指数函数方程等。
在实际应用中,Steffensen迭代法常被用于求解方程的根,特别是当方程的根位于某一区间内时,该方法的效果更加显著。
然而,Steffensen迭代法也存在一些限制。
首先,该方法对初始值的选择较为敏感,不同的初始值可能导致迭代结果的差异。
其次,当方程的根位于奇点附近时,该方法可能出现发散现象。
因此,在应用Steffensen迭代法时,我们需要对问题进行合理的分析和判断,选择合适的初始值,以获得准确的迭代结果。
总之,Steffensen迭代法是一种重要的数值计算方法,它通过逐步逼近函数的根,高效、稳定地求解非线性方程。
在实际应用中,我们可以根据具体问题的需求选择合适的初始值和迭代次数,以获得较为精确的解。
博士研究生入学考试《数值分析(机电院)》考试大纲第一部分考试形式和试卷结构一、考试方式:考试采用闭卷笔试方式,试卷满分为100分。
二、考试时间:180分钟。
三、试卷内容结构:约占 60%,主观题约占 40%。
四、试卷题型结构:试卷由三部分组成:选择/判断、填空、分析/计算。
其中:1、选择/判断题,约占20%。
测试考生对本课程基本概念、基本知识和数值计算常用算法设计与分析方法的掌握程度。
2、填空题,约占40%。
测试考生运用数值计算相关基础知识和基本方法,开展计算、简要分析以及求解实际问题的能力。
3、分析、计算题,约占40%。
测试考生综合运用数值计算理论、典型方法解决综合问题,并开展相关计算方法收敛性以及误差分析等能力。
第二部分考察的知识及范围1.误差度量与数值算法设计误差基本概念:误差来源与分类,截断误差、舍入误差、绝对误差、相对误差,有效数字以及数值稳定性。
函数计算误差分析:一元函数误差估计,四则运算误差估计。
数值算法设计原则:简化计算步骤以节省计算量(秦九韶算法)、减少有效数字损失,选择数值稳定的算法。
2.函数的插值方法以及误差估计插值问题的基本概念:插值问题的描述,插值多项式的存在和唯一性,差商、差分的概念以及性质。
拉格朗日插值:线性插值与抛物插值,n次拉格朗日插值,插值余项公式。
牛顿插值:均差的概念与性质,牛顿插值公式及其余项,差分的概念与性质。
埃尔米特插值:两点三次埃尔米特插值及其余项,n点埃尔米特插值,非标准埃尔米特插值及其余项。
分段低次插值:分段线性插值,分段三次埃尔米特插值。
三次样条插值:三次样条函数建立,三次样条插值方法。
3.函数逼近与曲线拟合正交多项式:函数内积、欧几里德范数,正交函数序列,正交多项式,勒德让多项式,切比雪夫多项式。
最佳平方逼近:最佳平方逼近问题及解法,基于正交函数、勒德让多项式、切比雪夫多项式的最佳平方逼近。
最小二乘法:最小二乘曲线拟合问题的提出和解法,最小二乘计算,最小二乘法的应用(算术平均、超定方程组)。
steffensen定理
斯蒂芬森定理在数学领域通常指的是与迭代法相关的理论,特别是在数值分析中。
具体而言,斯蒂芬森方法是一种用于求解非线性方程的数值迭代方法,它利用了割线近似导数的思想来加速收敛速度。
斯蒂芬森方法的基本思想是:
给定一个函数f(x)和其零点附近的一个初始近似值x₀,通过构造函数图像上两点间的割线来逼近函数的二阶导数信息,并据此生成下一个迭代点。
相比于简单的固定步长或一次导数牛顿法,斯蒂芬森方法由于使用了二阶信息,因此在适当条件下能够实现至少二阶的局部收敛速度。
公式表达时,首先计算f(x₀),然后根据f(x₀)得到一个新的点x₁,接着在(x₀,f(x₀))和(x₁,f(x₁))两点之间构建割线,并令该割线与x轴交点对应的横坐标作为下一次迭代的位置。
这种方法可以看作是对牛顿法的一种改进,特别适用于那些不能直接计算或者精确度不高的导数情况。
1.下列数据点的插值x 0 1 4 9 16 25 36 49 64y 0 1 2 3 4 5 6 7 8可以得到平方根函数的近似,在区间[0,64]上作图.(1)用这9个点作8次多项式插值Ls(x).(2)用三次样条(第一边界条件)程序求S(x).从得到结果看在[0,64]上,哪个插值更精确;在区间[0,1]上,两种插值哪个更精确?解:(1)拉格朗日插值多项式,求解程序如下syms x l;x1=[0 1 4 9 16 25 36 49 64];y1=[0 1 2 3 4 5 6 7 8];n=length(x1);Ls=sym(0);for i=1:nl=sym(y1(i));for k=1:i-1l=l*(x-x1(k))/(x1(i)-x1(k));endfor k=i+1:nl=l*(x-x1(k))/(x1(i)-x1(k));endLs=Ls+l;endLs=simplify(Ls) %为所求插值多项式Ls(x).输出结果为Ls =-/*x^2+95549/72072*x-1/00*x^8-2168879/0*x^4+19/0*x^7+657859/*x^3+33983/ 0*x^5-13003/00*x^6(2)三次样条插值,程序如下x1=[0 1 4 9 16 25 36 49 64];y1=[0 1 2 3 4 5 6 7 8];x2=[0:1:64];y3=spline(x1,y1,x2);p=polyfit(x2,y3,3); %得到三次样条拟合函数S=p(1)+p(2)*x+p(3)*x^2+p(4)*x^3 %得到S(x)输出结果为:S =/6464-2399/88*x+/1984*x^2+2656867/624*x^3(3)在区间[0,64]上,分别对这两种插值和标准函数作图,plot(x2,sqrt(x2),'b',x2,y2,'r',x2,y3,'y')蓝色曲线为y=函数曲线,红色曲线为拉格朗日插值函数曲线,黄色曲线为三次样条插值曲线可以看到蓝色曲线与黄色曲线几乎重合,因此在区间[0,64]上三次样条插值更精确。
计算底点纬度Bf的数值迭代算法作者:吴琼烟来源:《新教育时代》2015年第12期摘要:本文研究了不动点迭代法、斯特芬森迭代法、牛顿-瑞弗森迭代法和割线法等四种数值迭代算法及其在底点纬度计算中的应用,并用MATLAB软件予以实现。
将数值迭代算法结果与经典算法结果进行比较,结果表明:利用数值迭代算法求解底点纬度,简单易行,准确可靠。
关键词:底点纬度数值迭代算法 MATLAB根据子午线弧长反求底点纬度Bf 是椭球大地测量学中的一项重要内容,是高斯投影坐标反算的基础。
底点纬度是高斯反算过程中一个重要的中间变量,当参数Bf 的值确定之后,接下来高斯投影反算的过程就变得非常简单了,从某种程度上讲,高斯投影坐标反算过程的关键就在于求出底点纬度Bf 的值。
底点纬度的求解本质上讲就是一个非线性方程的求根问题,数值分析中对此类问题有成熟的计算方法,即数值迭代算法,同时借助于计算机程序设计进行计算,可得到准确的数值解,涉及的数学技巧较少,简单易行,准确可靠。
一、计算底点纬度的经典算法由子午线弧长反求底点纬度是由纬度值计算子午线弧长的逆问题,下面首先对子午线弧长计算的经典算法进行介绍,在此基础上再对计算底点纬度的经典算法进行说明。
1.子午线弧长计算的经典算法大地测量学经典教材[1]给出了计算子午线弧长的基本公式:从赤道到大地纬度为B处的子午线弧长为(1)式中,M为子午线曲率半径,a为椭球长半轴,e为椭球第一偏心率。
对于(1)式而言,由于被积函数结构复杂,其原函数无法求出,故不能直接用牛顿-莱布尼茨积分进行计算。
在经典教材中,采用近似解析法,即把被积函数M按照牛顿二项式定理展开为e的幂级数,并将正弦的幂函数展开为余弦的倍数函数,然后逐项进行积分,考虑到计算结果的目的和精度,得到以下两个实用计算公式:(2)(3)(4)(5)2.底点纬度计算的经典算法已知从赤道到某点处的子午线弧长X,计算该点的大地纬度Bf ,即为底点纬度计算。
数值分析上机题目及参考答案一、下表给出了飞行中鸭子的上部形状的节点数据,试用三次样条插值函数(自然边界条件)和20次Lagrange插值多项式对数据进行插值。
用图示出给定的数据,以及()s x和20()L x。
x0.9 1.3 1.9 2.1 2.6 3.0 3.9 4.4 4.7 5.0 6.0 y 1.3 1.5 1.85 2.1 2.6 2.7 2.4 2.15 2.05 2.1 2.25 x7.0 8.0 9.2 10.5 11.3 11.6 12 12.6 13.0 13.3y 2.3 2.25 1.95 1.4 0.9 0.7 0.6 0.5 0.4 0.25编写三次样条函数m文件:function[f,f0]=scyt(x,y,y2_1,y2_N,x0)%y2_1和y2_N分别为自然边界条件%插值点x的坐标:x0syms t;f=0.0;f0=0.0;if(length(x)==length(y))n=length(x);elsedisp('x和y的维数不相等');return;endfor i=1:nif(x(i)<=x0)&&(x(i+1)>=x0)index=i;break;endendA=diag(2*ones(1,n));A(1,2)=1;A(n,n-1)=1;u=zeros(n-2,1);lamda=zeros(n-1,1);c=zeros(n,1);for i=2:n-1u(i-1)=(x(i)-x(i-1))/(x(i+1)-x(i-1));lamda(i)=(x(i+1)-x(i))/(x(i+1)-x(i-1));c(i)=3*lamda(i)*(y(i)-y(i-1))/(x(i)-x(i-1))+3*u(i-1)*(y(i+1)-y(i))/(x (i+1)-x(i));A(i,i+1)=u(i-1);A(i,i-1)=lamda(i);endc(1)=3*(y(2)-y(1))/(x(2)-x(1))-(x(2)-x(1))*y2_1/2;c(n)=3*(y(n)-y(n-1))/(x(n)-x(n-1))-(x(n)-x(n-1))*y2_N/2;m=zgf(A,c);h=x(index+1)-x(index);f=y(index)*(2*(t-x(index))+h)*(t-x(index+1))^2/h/h/h+y(index+1)*(2*(x (index+1)-t)+h)*(t-x(index))^2/h/h/h+m(index)*(t-x(index))*(x(index+1 )-t)^2/h/h-m(index+1)*(x(index+1)-t)*(t-x(index))^2/h/h;f0=subs(f,'t',x0);其中的zgf函数为追赶法,其程序为function x=zgf(A,b)n = rank(A);for(i=1:n)if(A(i,i)==0)disp('Error: 对角有元素为0!');return;endend;d = ones(n,1);a = ones(n-1,1);c = ones(n-1);for(i=1:n-1)a(i,1)=A(i+1,i);c(i,1)=A(i,i+1);d(i,1)=A(i,i);endd(n,1) = A(n,n);for(i=2:n)d(i,1)=d(i,1) - (a(i-1,1)/d(i-1,1))*c(i-1,1);b(i,1)=b(i,1) - (a(i-1,1)/d(i-1,1))*b(i-1,1);endx(n,1) = b(n,1)/d(n,1);for(i=(n-1):-1:1)x(i,1) = (b(i,1)-c(i,1)*x(i+1,1))/d(i,1);end在matlab命令窗口输入:>> x=[0.9 1.3 1.9 2.1 2.6 3.0 3.9 4.4 4.7 5.0 6.0 7.0 8.0 9.2 10.5 11.3 11.6 12 12.6 13.0 13.3];>> y=[1.3 1.5 1.85 2.1 2.6 2.7 2.4 2.15 2.05 2.1 2.25 2.3 2.25 1.95 1.4 0.9 0.7 0.6 0.5 0.4 0.25];>> [f,f0]=scyt(x,y,0,0,x0,3.5) %其中给出了 x=3.5处y的值f =1000/729*(27/5*t-1377/100)*(t-39/10)^2+1000/729*(522/25-24/5*t)*(t-3) ^2+100/81*(-6396162352027119/288230376151711744*t+19188487056081357/2 88230376151711744)*(39/10-t)^2-100/81*(-176836856862157557/9007199254 7409920+4534278381080963/9007199254740992*t)*(t-3)^2f0 =2.5851三次样条插值图像为>> plot(x,y,'r*');grid拉格朗日插值函数程序,定义m文件function f=lglr(x,y,x0)%插值点x的坐标:x0%求得的拉格朗日插值多项式在x0处的值,fsyms t;if(length(x)==length(y))n=length(x);elsedisp('x和y的维数不相等');return;endf=0.0;for(i=1:n)l=y(i);for(j=1:i-1);l=l*(t-x(j))/(x(i)-x(j));end;f=f+l; simplify(f); if(i==n)if(nargin==3)f=subs(f,'t',x0) elsef=collect(f);f=vpa(f,6); %插值多项式的系数化为6位小数end end end在命令窗口输入>> f=lglr(x,y) f =-337.863*t^2+219.386*t-.171512e-3*t^13+.706734*t^8+.152386e-4*t^14-.105677e-5*t^15-.271334*t^9+304.616*t^3-.108815e-1*t^11+.622166e-1*t^10+65.2964*t^5+.152863e-2*t^12-13.7172*t^6+.477508*t^7+.559234e-7*t ^16+.769797e-14*t^20-.985682e-12*t^19-60.7814-176.003*t^4+.588899e-10*t^18-.217905e-8*t^17 %拉格朗日20次公式>> f=lglr(x,y,3.5) f =194.2495分析结果知道,拉格朗日插值次数达到了20次,但是和三次样条的结果相差很多,拉格朗日的插值次数不是越高越好。