实验三求代数方程的近似根

合集下载

牛顿迭代法收敛定理

牛顿迭代法收敛定理

关于牛顿迭代法的课程设计实验指导非线性方程(或方程组)问题可以描述为求 x 使得f (x ) = 0。

在求解非线性方程的方法中,牛顿迭代法是求非线性方程(非线性方程组)数值解的一种重要的方法。

牛顿是微积分创立者之一,微积分理论本质上是立足于对世界的这种认识:很多物理规律在微观上是线性的。

近几百年来,这种局部线性化方法取得了辉煌成功,大到行星轨道计算,小到机械部件设计。

牛顿迭代法正是将局部线性化的方法用于求解方程。

一、牛顿迭代法及其收敛速度牛顿迭代法又称为牛顿-拉夫逊方法(Newton-Raphson method ),是一种在实数域和复数域上通过迭代计算求出非线性方程的数值解方法。

方法的基本思路是利用一个根的猜测值x 0做初始近似值,使用函数f (x )在x 0处的泰勒级数展式的前两项做为函数f (x )的近似表达式。

由于该表达式是一个线性函数,通过线性表达式替代方程中的求得近似解x 1。

即将方程f (x ) = 0在x 0处局部线性化计算出近似解x 1,重复这一过程,将方程f (x ) = 0在x 1处局部线性化计算出x 2,求得近似解x 2,……。

详细叙述如下:假设方程的解x *在x 0附近(x 0是方程解x *的近似),函数f (x )在点x 0处的局部线化表达式为)()()()(000x f x x x f x f '-+≈由此得一次方程 0)()()(000='-+x f x x x f求解,得 )()(0001x f x f x x '-= 如图1所示,x 1比x 0更接近于x *。

该方法的几何意义是:用曲线上某点(x 0,y 0)的切线代替曲线,以该切线与x 轴的交点(x 1,0)作为曲线与x 轴的交点(x *,0)的近似(所以牛顿迭代法又称为切线法)。

设x n 是方程解x *的近似,迭代格式)()(1n n n n x f x f x x '-=+ ( n = 0,1,2,……) 就是著名的牛顿迭代公式,通过迭代计算实现逐次逼近方程的解。

计算机数值方法试题

计算机数值方法试题

数值计算方法试题一、填空(共20分,每题2分)1、设,取5位有效数字,则所得的近似值x=_____。

2、设一阶差商,则二阶差商3、数值微分中,已知等距节点的函数值则由三点的求导公式,有4、求方程的近似根,用迭代公式,取初始值,那么5、解初始值问题近似解的梯形公式是6、,则A的谱半径=,A的=7、设 ,则=和=8、若线性代数方程组AX=b 的系数矩阵A为严格对角占优阵,则雅可比迭代和高斯—塞德尔迭代都_____9、解常微分方程初值问题的欧拉(Euler)方法的局部截断误差为_____10、设,当时,必有分解式,其中L为下三角阵,当其对角线元素足条件时,这种分解是唯一的.二、计算题(共60 分,每题15分)1、设(1)试求在上的三次Hermite插值多项式H(x)使满足H(x)以升幂形式给出.(2)写出余项的表达式2、已知的满足,试问如何利用构造一个收敛的简单迭代函数,使0,1…收敛?3、试确定常数A,B,C和,使得数值积分公式有尽可能高的代数精度。

试问所得的数值积分公式代数精度是多少?它是否为Gauss型的?4、推导常微分方程的初值问题的数值解公式:三、证明题1、设(1)写出解的Newton迭代格式(2)证明此迭代格式是线性收敛的2、设R=I-CA,如果,证明:(1)A、C都是非奇异的矩阵(2)参考答案:一、填空题1、2.31502、3、4、1.55、6、7、8、收敛9、O(h)10、二、计算题1、1、(1)(2)2、由,可得因故故,k=0,1,…收敛。

3、,该数值求积公式具有5次代数精确度,它是Gauss型的4、数值积分方法构造该数值解公式:对方程在区间上积分,得,记步长为h,对积分用Simpson求积公式得所以得数值解公式:三、证明题1、证明:(1)因,故,由Newton迭代公式:n=0,1,…得,n=0,1,…(2)因迭代函数,而,又,则故此迭代格式是线性收敛的。

2、证明:(1)因,所以I–R非奇异,因I–R=CA,所以C,A都是非奇异矩阵(2)故则有(2.1)因CA=I–R,所以C=(I–R)A—1,即A-1=(I–R)—1C又RA-1=A—1–C,故由(这里用到了教材98页引理的结论)移项得 (2.2)结合(2。

第2章方程的近似解法

第2章方程的近似解法

第二章 方程求根在许多实际问题中,常常会遇到方程f(x)=0求解的问题。

当f(x)为一次多项式时,f(x)=0称为线性方程,否则称为非线性方程。

对于非线性方程,由于f(x)的多样性,求其根尚无一般的解析方法可以使用,因此研究非线性方程的数值解法是十分必要的。

法、迭代法、牛顿法及割线法。

这些方法均是知道根的初始近似值后,进一步把根精确化,直到达到所要求的 精度为止。

也即求非线性方程根的数值方法。

第一节 第一节 增值寻根法与二分法2.1.1 增值寻根法设非线性方程f(x)=0的根为*x ,增值寻根法的基本思想是,从初始值0x 开始,按规定 的一个初始步长h 来增值。

令 1n x +=n x +h(n=0,1,2,…),同时计算f(1n x +)。

在增值的计算过程中可能遇到三种情形:(1) f(1n x +)=0,此时1n x +即为方 程的根*x 。

(2) f(n x )和f(1n x +)同符号。

这说明区间[n x , 1n x +]内无根。

(3) f(n x )和f(1n x +)异号,f(n x )·f(1n x +)<0此时当f(x)在区间[n x , 1n x +]上连续时,方程f(x)=0在[n x , 1n x +] 一定有根。

也即我们用增值寻根法找到了方程根的存在区间,n x 或1n x +均可以视为根的近似值。

下一步就是设法在该区间内寻找根 *x 更精确的近似值,为此再用增值寻根法 把n x 作为新的初始近似值,同时把步长缩小,例如选新步长1100h h =,这 样会得到区间长度更小的有根区间,从而也得到使f(x)n x ,作为*x 更 精确的近似值,若精度不够,可重复使用增值寻根法,直到有根区间的长度|1n x +-n x |<ε(ε为所要求的精度)为止。

此时f(n x )或f(1n x +)就可近似认为是零。

n x 或1n x +就是满足精度的方程的近似根(如图2-1).2—1例1 用增值寻根法求方程f(x)=324x x +-10=0的有根区间。

(整理)matlab实例教程-比较实用.

(整理)matlab实例教程-比较实用.

实验一特殊函数与图形一、问题背景与实验目的二、相关函数(命令)及简介三、实验内容四、自己动手一、问题背景与实验目的著名的Riemann函数大家都很熟悉了,但是关于它的图像你是否清楚呢除了最上面那几点,其他都很难画吧你想不想看看下面那些“挤在一起”的点是怎样分布的呢还有几何中的马鞍面、单叶双曲面等是怎样由直线生成的,是不是也想目睹一下呢这些,都离不开绘图.实际上绘图一直是数学中的一种重要手段,借助图形,往往可以化繁为简,使抽象的对象得到明白直观的体现.比如函数的基本性质,一个图形常可以使之一目了然,非常有效.它虽不能代替严格的分析与证明,但在问题的研究过程中,可以帮助研究人员节约相当一部分精力.此外,它还可以使计算、证明、建模等的结果得到更明白易懂的表现,有时,这比科学论证更有说服力.同时,数学的教学与学习过程也离不开绘图.借助直观的图形,常可以使初学者更容易接受新知识.如数学分析中有不少函数,其解析式着实让人望而生畏,即使对其性质作了详尽的分析,还是感到难明就里;但如果能看到它的图形,再配合理论分析,则问题可以迎刃而解.又如在几何的学习中,会遇到大量的曲线与曲面,也离不开图形的配合.传统的手工作图,往往费力耗时,效果也不尽理想.计算机恰恰弥补了这个不足,使你可以方便地指定各种视角、比例、明暗,从各个角度进行观察.本实验通过对函数的图形表示和几个曲面(线)图形的介绍,一方面展示它们的特点,另一方面,也将就Matlab软件的作图功能作一个简单介绍.大家将会看到,Matlab 的作图功能非常强大.二、相关函数(命令)及简介1.平面作图函数:plot,其基本调用形式:plot(x,y,s)以x作为横坐标,y作为纵坐标.s是图形显示属性的设置选项.例如:x=-pi:pi/10:pi;y=sin(x);plot(x,y,'--rh','linewidth',2,'markeredgecolor','b','markerfacecolor','g')图1在使用函数plot时,应当注意到当两个输入量同为向量时,向量x与y必须维数相同,而且必须同是行向量或者同是列向量.绘图时,可以制定标记的颜色和大小,也可以用图形属性制定其他线条特征,这些属性包括:linewidth 指定线条的粗细.markeredgecolor 指定标记的边缘色markerfacecolor 指定标记表面的颜色.markersize 指定标记的大小.若在一个坐标系中画几个函数,则plot的调用格式如下:plot(x1,y1,s1,x2,y2,s2,……)2.空间曲线作图函数:plot3,它与plot相比,只是多了一个维数而已.其调用格式如下:plot3(x,y,z,s).例如:x=0:pi/30:20*pi;y=sin(x);z=cos(x);plot3(x,y,z)得到三维螺旋线:图23.空间曲面作图函数:(1)mesh函数.绘制彩色网格面图形.调用格式:mesh(z),mesh(x,y,z)和mesh(x,y,z,c).其中,mesh(x,y,z,c)画出颜色由c指定的三维网格图.若x、y均为向量,则length(x)=n,length(y)=m,[m,n]=size(z).(2)surf在矩形区域内显示三维带阴影曲面图.调用格式与mesh类似.(3)ezmesh用符号函数作三维曲面网格图.调用格式:ezmesh(x,y,z)其中x = x(s,t), y = y(s,t),z = z(s,t).画图区域默认为: -2*pi < s < 2*pi 且-2*pi < t < 2*pi.或者用格式:ezmesh(x,y,z,[smin,smax,tmin,tmax])(4)ezsurf用符号函数作三维曲面图.调用格式与ezmesh类似.(5)sphere画球体命令.4.meshgrid,调用格式:[x,y]=meshgrid(m,n),这里的m,n为给定的向量,可以定义网格划分区域和划分方法.矩阵x和矩阵y是网格划分后的数据矩阵.5.图像的修饰与其他函数:(1)axis equal 控制各个坐标轴的分度,使其相等;(2)colormap设置绘图颜色.调用格式:colormap([r g b])其中r,g,b都是0-1之间的数.或者用格式:colormap(s)s颜色映像相应的颜色系颜色映像相应的颜色系autumn红黄色系hsv色调饱和色系gray线性灰色系hot黑红黄白色系cool青和洋红色系pink柔和色系(3(4)find找出符合条件的元素在数组中的位置.调用格式:y=find(条件)例如:输入:a=[4 5 78 121 4 665 225 4 1];b=find(a>7)输出: b =3 4 6 7三、实验内容数学分析中,特别是积分部分,我们接触了不少有趣的函数,由于其中有的不是一一对应的,用上面的方法无法画出它们的图像,这时就只能用参数了.此外还有些图形只能用参数来画,比如空间曲线,在计算机上不接受“两个曲面的交线”这种表示,所以也只能用参数来实现.用参数方式作图的关键在于找出合适的参数表示,尤其是不能有奇点,最好也不要用到开方.所以要找的参数最好是有几何意义的.当然这也不可一概而论,需要多积累经验.1.利用函数plot在一个坐标系中画以下几个函数图像,要求采用不同颜色、不同线形、不同的符号标记.函数为:.程序如下:t=0:pi/20:2*pi;x=sin(t);y=cos(t);z=sin(2*t);plot(t, x, '--k*', t, y, '-rs', t, z, ':bo')图像如下:图32.绘制类似田螺线的一条三维螺线(方程自己设计).程序如下:t=0:.1:30;x=2*(cos(t)+t.*sin(t));y=2*(sin(t)-t.*cos(t));z=*t;plot3(x,y,-z) %取–z 主要是为了画图看起来更清楚axis equal图像如下:图43.利用函数,绘制一个墨西哥帽子的图形.程序如下:[a,b]=meshgrid(-8:.5:8); %先生成一个网格c=sqrt(a.^2+b.^2)+eps;z=sin(c)./c;mesh(a,b,z)axis square图像如下:图5思考:这里的 eps 是什么其作用是什么4.利用surf绘制马鞍面图形(函数为:).程序如下:[x,y]=meshgrid(-25:1:25,-25:1:25);z=x.^2/9-y.^2/4;surf(x,y,z)title('马鞍面')grid off图像如下:图65.分别用ezmesh和ezsurf各绘制一个圆环面,尝试将两个圆环面放在一个图形界面内,观察它们有什么不同之处.提示:圆环面的方程为:,而圆环面的参数方程为:程序参见附录1.图像如下:图76.绘制黎曼函数图形,加深对黎曼函数的理解.说明:黎曼函数的定义为程序参见附录2.图像如下:图8四、自己动手1.作出下图所示的三维图形:图9提示:图形为圆环面和球面的组合.2.作出下图所示的墨西哥帽子及其剪裁图形:图103.画出球面、椭球面、双叶双曲面、单叶双曲面.4.若要求田螺线的一条轴截面的曲边是一条抛物线:时.试重新设计田螺线的参数方程,并画出该田螺线.5.作出下图所示的马鞍面(颜色为灰色,并有一个标题:“马鞍面”):图116.绘制图8所示的黎曼函数图形,要求分母的最大值的数值由键盘输入(提示:使用input语句).回目录下一页实验二定积分的近似计算一、问题背景与实验目的二、相关函数(命令)及简介三、实验内容1.矩形法2.梯形法3.抛物线法4. 直接应用Matlab命令计算结果四、自己动手一、问题背景与实验目的利用牛顿—莱布尼兹公式虽然可以精确地计算定积分的值,但它仅适用于被积函数的原函数能用初等函数表达出来的情形.如果这点办不到或者不容易办到,这就有必要考虑近似计算的方法.在定积分的很多应用问题中,被积函数甚至没有解析表达式,可能只是一条实验记录曲线,或者是一组离散的采样值,这时只能应用近似方法去计算相应的定积分.本实验将主要研究定积分的三种近似计算算法:矩形法、梯形法、抛物线法.对于定积分的近似数值计算,Matlab有专门函数可用.二、相关函数(命令)及简介1.sum(a):求数组a的和.2.format long:长格式,即屏幕显示15位有效数字.(注:由于本实验要比较近似解法和精确求解间的误差,需要更高的精度).3.double():若输入的是字符则转化为相应的ASCII码;若输入的是整型数值则转化为相应的实型数值.4.quad():抛物线法求数值积分.格式: quad(fun,a,b) ,注意此处的fun是函数,并且为数值形式的,所以使用*、/、^等运算时要在其前加上小数点,即 .*、./、.^等.例:Q = quad('1./(x.^3-2*x-5)',0,2);5.trapz():梯形法求数值积分.格式:trapz(x,y)其中x为带有步长的积分区间;y为数值形式的运算(相当于上面介绍的函数fun)例:计算x=0:pi/100:pi;y=sin(x);trapz(x,y)6.dblquad():抛物线法求二重数值积分.格式:dblquad(fun,xmin,xmax,ymin,ymax),fun可以用inline定义,也可以通过某个函数文件的句柄传递.例1:Q1 = dblquad(inline('y*sin(x)'), pi, 2*pi, 0, pi)顺便计算下面的Q2,通过计算,比较Q1 与Q2结果(或加上手工验算),找出积分变量x、y的上下限的函数代入方法.Q2 = dblquad(inline('y*sin(x)'), 0, pi, pi, 2*pi)例2:Q3 = dblquad(@integrnd, pi, 2*pi, 0, pi)这时必须存在一个函数文件:function z = integrnd(x, y)z = y*sin(x);7.fprintf(文件地址,格式,写入的变量):把数据写入指定文件.例:x = 0:.1:1;y = [x; exp(x)];fid = fopen('','w'); %打开文件fprintf(fid,'% %\n',y); %写入fclose(fid) %关闭文件8.syms 变量1 变量2 …:定义变量为符号.9.sym('表达式'):将表达式定义为符号.解释:Matlab中的符号运算事实上是借用了Maple的软件包,所以当在Matlab中要对符号进行运算时,必须先把要用到的变量定义为符号.10.int(f,v,a,b):求f关于v积分,积分区间由a到b.11.subs(f,'x',a):将 a 的值赋给符号表达式 f 中的 x,并计算出值.若简单地使用subs(f),则将f的所有符号变量用可能的数值代入,并计算出值.三、实验内容1.矩形法根据定积分的定义,每一个积分和都可以看作是定积分的一个近似值,即在几何意义上,这是用一系列小矩形面积近似小曲边梯形的结果,所以把这个近似计算方法称为矩形法.不过,只有当积分区间被分割得很细时,矩形法才有一定的精确度.针对不同的取法,计算结果会有不同,我们以为例(取),(1)左点法:对等分区间,在区间上取左端点,即取,,理论值,此时计算的相对误差(2)右点法:同(1)中划分区间,在区间上取右端点,即取,,理论值,此时计算的相对误差(3)中点法:同(1)中划分区间,在区间上取中点,即取,,理论值,此时计算的相对误差如果在分割的每个小区间上采用一次或二次多项式来近似代替被积函数,那么可以期望得到比矩形法效果好得多的近似计算公式.下面介绍的梯形法和抛物线法就是这一指导思想的产物.2.梯形法等分区间,相应函数值为().曲线上相应的点为()将曲线的每一段弧用过点,的弦(线性函数)来代替,这使得每个上的曲边梯形成为真正的梯形,其面积为,.于是各个小梯形面积之和就是曲边梯形面积的近似值,,即,称此式为梯形公式.仍用的近似计算为例,取,,理论值,此时计算的相对误差很显然,这个误差要比简单的矩形左点法和右点法的计算误差小得多.3.抛物线法由梯形法求近似值,当为凹曲线时,它就偏小;当为凸曲线时,它就偏大.若每段改用与它凸性相接近的抛物线来近似时,就可减少上述缺点,这就是抛物线法.将积分区间作等分,分点依次为,,对应函数值为(),曲线上相应点为().现把区间上的曲线段用通过三点,,的抛物线来近似代替,然后求函数从到的定积分:由于,代入上式整理后得同样也有……将这个积分相加即得原来所要计算的定积分的近似值:,即这就是抛物线法公式,也称为辛卜生(Simpson)公式.仍用的近似计算为例,取,=,理论值,此时计算的相对误差4. 直接应用Matlab命令计算结果(1)数值计算方法1:int('1/(1+x^2)','x',0,1) (符号求积分)方法2:quad('1./(1+x.^2)',0,1) (抛物线法求数值积分)方法3:x=0::1;y=1./(1+x.^2);trapz(x,y) (梯形法求数值积分)(2)数值计算方法1:int(int('x+y^2','y',-1,1),'x',0,2) (符号求积分)方法2:dblquad(inline('x+y^2'),0,2,-1,1) (抛物线法二重数值积分)四、自己动手1.实现实验内容中的例子,即分别采用矩形法、梯形法、抛物线法计算,取,并比较三种方法的精确程度.2.分别用梯形法与抛物线法,计算,取.并尝试直接使用函数trapz()、quad()进行计算求解,比较结果的差异.3.试计算定积分.(注意:可以运用trapz()、quad()或附录程序求解吗为什么)4.将的近似计算结果与Matlab中各命令的计算结果相比较,试猜测Matlab中的数值积分命令最可能采用了哪一种近似计算方法并找出其他例子支持你的观点.5.通过整个实验内容及练习,你能否作出一些理论上的小结,即针对什么类型的函数(具有某种单调特性或凹凸特性),用某种近似计算方法所得结果更接近于实际值6.学习的程序设计方法,尝试用函数 sum 改写附录1和附录3的程序,避免for 循环.上一页回目录下一页实验三求代数方程的近似根(解)一、问题背景和实验目的二、相关函数(命令)及简介三、实验内容四、自己动手一、问题背景和实验目的求代数方程的根是最常见的数学问题之一(这里称为代数方程,主要是想和后面的微分方程区别开.为简明起见,在本实验的以下叙述中,把代数方程简称为方程),当是一次多项式时,称为线性方程,否则称之为非线性方程.当是非线性方程时,由于的多样性,尚无一般的解析解法可使用,但如果对任意的精度要求,能求出方程的近似根,则可以认为求根的计算问题已经解决,至少能满足实际要求.本实验介绍一些求方程实根的近似值的有效方法,要求在使用这些方法前先确定求根区间,或给出某根的近似值.在实际问题抽象出的数学模型中,可以根据物理背景确定;也可根据的草图等方法确定,还可用对分法、迭代法以及牛顿切线法大致确定根的分布情况.通过本实验希望你能:1. 了解对分法、迭代法、牛顿切线法求方程近似根的基本过程;2. 求代数方程(组)的解.二、相关函数(命令)及简介1.abs( ):求绝对值函数.2.diff(f):对独立变量求微分,f 为符号表达式.diff(f, 'a'):对变量a求微分,f 为符号表达式.diff(f, 'a', n):对变量 a 求 n 次微分,f 为符号表达式.例如:syms x tdiff(sin(x^2)*t^6, 't', 6)ans=720*sin(x^2)3.roots([c(1), c(2), …, c(n+1)]):求解多项式的所有根.例如:求解:.p = [1 -6 -72 -27];r = roots(p)r =4.solve('表达式'):求表达式的解.solve('2*sin(x)=1')ans =1/6*pi5.linsolve(A, b):求线性方程组 A*x=b 的解.例如:A= [9 0; -1 8]; b=[1; 2];linsolve(A, b)ans=[ 1/9][19/72]6.fzero(fun, x0):在x0附近求fun 的解.其中fun为一个定义的函数,用“@函数名”方式进行调用.例如:fzero(@sin, 3)ans=7.subs(f, 'x ', a):将 a 的值赋给符号表达式 f 中的 x,并计算出值.例如:subs('x^2 ', 'x ', 2)ans = 4三、实验内容首先,我们介绍几种与求根有关的方法:1.对分法对分法思想:将区域不断对分,判断根在某个分段内,再对该段对分,依此类推,直到满足精度为止.对分法适用于求有根区间内的单实根或奇重实根.设在上连续,,即,或,.则根据连续函数的介值定理,在内至少存在一点,使.下面的方法可以求出该根:(1)令,计算;(2)若,则是的根,停止计算,输出结果.若,则令,,若,则令,;.……,有、以及相应的.(3) 若 (为预先给定的精度要求),退出计算,输出结果;反之,返回(1),重复(1),(2),(3).以上方法可得到每次缩小一半的区间序列,在中含有方程的根.当区间长很小时,取其中点为根的近似值,显然有以上公式可用于估计对分次数.分析以上过程不难知道,对分法的收敛速度与公比为的等比级数相同.由于,可知大约对分10次,近似根的精度可提高三位小数.对分法的收敛速度较慢,它常用来试探实根的分布区间,或求根的近似值.2. 迭代法1)迭代法的基本思想:由方程构造一个等价方程从某个近似根出发,令,可得序列,这种方法称为迭代法.若收敛,即,只要连续,有即可知,的极限是的根,也就是的根.当然,若发散,迭代法就失败.以下给出迭代过程收敛的一些判别方法:定义:如果根的某个邻域中,使对任意的,迭代过程,收敛,则称迭代过程在附近局部收敛.定理1:设,在的某个邻域内连续,并且,,则对任何,由迭代决定的序列收敛于.定理2:条件同定理 1,则定理3:已知方程,且(1) 对任意的,有.(2) 对任意的,有,则对任意的,迭代生成的序列收敛于的根,且.以上给出的收敛定理中的条件要严格验证都较困难,实用时常用以下不严格的标准:当根区间较小,且对某一,明显小于1时,则迭代收敛(参见附录3).2) 迭代法的加速:a) 松弛法:若与同是的近似值,则是两个近似值的加权平均,其中称为权重,现通过确定看能否得到加速.迭代方程是:其中,令,试确定:当时,有,即当,时,可望获得较好的加速效果,于是有松弛法:,松弛法的加速效果是明显的 (见附录4),甚至不收敛的迭代函数经加速后也能获得收敛.b) Altken方法:松弛法要先计算,在使用中有时不方便,为此发展出以下的 Altken 公式:,是它的根,是其近似根.设,,因为,用差商近似代替,有,解出,得由此得出公式;;,这就是Altken 公式,它的加速效果也是十分明显的,它同样可使不收敛的迭代格式获得收敛(见附录5).3. 牛顿(Newton)法(牛顿切线法)1) 牛顿法的基本思想:是非线性方程,一般较难解决,多采用线性化方法.记:是一次多项式,用作为的近似方程.的解为记为,一般地,记即为牛顿法公式.2) 牛顿法的收敛速度:对牛顿法,迭代形式为:注意分子上的,所以当时,,牛顿法至少是二阶收敛的,而在重根附近,牛顿法是线性收敛的.牛顿法的缺点是:(1)对重根收敛很慢;(2)对初值要求较严,要求相当接近真值.因此,常用其他方法确定初值,再用牛顿法提高精度.4. 求方程根(解)的其它方法(1) solve('x^3-3*x+1=0')(2) roots([1 0 -3 1])(3) fzero('x^3-3*x+1', -2)(4) fzero('x^3-3*x+1',(5) fzero('x^3-3*x+1',(6) linsolve([1, 2, 3; 4, 5, 6; 7, 8, 0], [1, 2, 3]')体会一下,(2)(5) 用了上述 1 3 中的哪一种方法以下是本实验中的几个具体的实验,详细的程序清单参见附录.具体实验1:对分法先作图观察方程:的实根的分布区间,再利用对分法在这些区间上分别求出根的近似值.输入以下命令,可得的图象:f='x^3-3*x+1';g='0';ezplot(f, [-4, 4]);hold on;ezplot(g, [-4, 4]); %目的是画出直线 y=0,即 x 轴grid on;axis([-4 4 -5 5]);hold off请填写下表:实根的分布区间该区间上根的近似值在某区间上求根的近似值的对分法程序参见附录1.具体实验2:普通迭代法采用迭代过程:求方程在附近的根,精确到第 4 位小数.构造等价方程:用迭代公式:,用 Matlab 编写的程序参见附录2.请利用上述程序填写下表:分析:将附录2第4行中的分别改为以及,问运行的结果是什么你能分析得到其中的原因吗看看下面的“具体实验3”是想向你表达一个什么意思.用 Matlab 编写的程序参见附录3.具体实验3:收敛/发散判断设方程的三个根近似地取,和,这些近似值可以用上面的对分法求得.迭代形式一:收敛 (很可能收敛,下同)不收敛 (很可能不收敛,下同)不收敛迭代形式二:收敛不收敛不收敛迭代形式三:不收敛收敛收敛具体实验4:迭代法的加速1——松弛迭代法,,迭代公式为程序参见附录4.具体实验5:迭代法的加速2——Altken迭代法迭代公式为:,,程序参见附录5.具体实验6:牛顿法用牛顿法计算方程在-2到2之间的三个根.提示:,迭代公式:程序参见附录6 (牛顿法程序).具体实验7:其他方法求下列代数方程(组)的解:(1)命令:solve('x^5-x+1=0')(2)命令:[x, y]=solve('2*x+3*y=0', '4*x^2+3*y=1')(3) 求线性方程组的解,已知,命令:for i=1:5for j=1:5m(i, j)=i+j-1;endendm(5, 5)=0;b=[1:5]'linsolve(m, b)思考:若,或是类似的但阶数更大的稀疏方阵,则应如何得到四、自己动手1.对分法可以用来求偶重根附近的近似解吗为什么2.对照具体实验2、4、5,你可以得出什么结论3.选择适当的迭代过程,分别使用:(1)普通迭代法;(2)与之相应的松弛迭代法和 Altken 迭代法.求解方程在附近的根,精确到4位小数,请注意迭代次数的变化.4.分别用对分法、普通迭代法、松弛迭代法、Altken 迭代法、牛顿切法线等5种方法,求方程的正的近似根,.(建议取.时间许可的话,可进一步考虑的情况.)上一页回目录下一页。

代数方程的牛顿迭代法

代数方程的牛顿迭代法

7-18-19-代数方程的牛顿迭代法牛顿迭代法(Newton's method)是一种用于数值求解代数方程的迭代方法,通常用于找到方程的根。

它的基本思想是通过不断逼近方程的根,直到满足某个精度要求。

下面是使用牛顿迭代法求解代数方程的一般步骤:
假设要求解方程 f(x) = 0。

1. 选择一个初始猜测值 x₀,通常选择接近根的值。

2. 计算 f(x₀) 和 f'(x₀),其中 f'(x₀) 是 f(x) 的导数。

3. 计算下一个近似根的值:x₁ = x₀ - f(x₀) / f'(x₀)。

4. 重复步骤 2 和 3,直到满足停止条件,如达到指定精度或经过一定数量的迭代。

数学表示为: xᵢ₊₁ = xᵢ - f(xᵢ) / f'(xᵢ)
这个迭代过程将不断逼近方程的根,直到满足精度要求。

下面是一个示例,假设要解方程f(x) = x² - 4 = 0,其中我们知道根是 x = 2。

我们使用牛顿迭代法来逼近这个根:
1. 初始猜测值 x₀ = 3。

2. 计算 f(x₀) = 3² - 4 = 5 和 f'(x₀) = 2 * 3 = 6。

3. 计算下一个近似根:x₁ = 3 - 5 / 6 = 2.1667。

4. 重复步骤 2 和 3,直到达到所需的精度或迭代次数。

不断迭代,最终我们会得到x ≈ 2,它是方程的根。

请注意,牛顿迭代法的有效性和收敛性取决于初始猜测值的选择,以及方程 f(x) 和它的导数 f'(x) 的性质。

有时可能需要多次尝试不同的初始猜测值来确保收敛到正确的根。

方程求根的数值方法

方程求根的数值方法

方程求根的数值方法数值方法是一种求解方程根的近似方法,它通过一系列计算和迭代来逼近方程的根。

这些方法常用于无法通过代数方法求得解析解的复杂方程,或者是当方程没有明确的解析解时。

在这篇文章中,我们将讨论三种常用的数值方法:二分法、牛顿法和割线法。

二分法是一种基于零点定理的根查找方法。

零点定理指出,如果一个函数在区间[a,b]的两个端点处取得正负值,那么这个函数在这个区间内至少存在一个根。

二分法的基本思想是将区间二分,并判断根是否在分割后的子区间内。

具体步骤如下:1.选择一个初始区间[a,b],使得f(a)和f(b)异号。

2.计算区间中点c=(a+b)/23.如果f(c)等于0或者f(c)的绝对值小于给定的误差限,那么c是近似的根。

4.如果f(c)和f(a)异号,那么根在左半区间[a,c]内;否则,根在右半区间[c,b]内。

5.重复步骤2到4,直到找到满足条件的近似根。

二分法的优点是简单易懂,收敛速度较快;缺点是每次迭代只能减少一半的区间长度。

牛顿法是一种迭代法,通过对函数f(x)的一阶导数进行线性逼近,来求得方程f(x)=0的根。

具体步骤如下:1.选择一个初始近似根x0。

2.计算函数f(x)在x=x0处的导数f'(x0)。

3.计算线性逼近方程的解x1=x0-f(x0)/f'(x0)。

4.如果f(x1)的绝对值小于给定的误差限,那么x1是近似的根。

5.否则,令x0=x1,重复步骤2到4,直到找到满足条件的近似根。

牛顿法的优点是收敛速度快,通常是二次收敛;缺点是对于一些特殊的函数,可能会出现发散或者陷入局部最优解的情况。

割线法是对牛顿法的改进,它通过将区间的两个端点连接起来,构建一条割线来逼近方程的根。

具体步骤如下:1.选择两个初始近似根x0和x1,使得f(x0)和f(x1)异号。

2.计算割线的斜率k=(f(x1)-f(x0))/(x1-x0)。

3.计算线性逼近方程的解x2=x1-f(x1)/k。

试位法求根

试位法求根

试位法求根
试位法(也称为逐步逼近法或二分法)是一种数值求解非线性方程近似根的方法。

该方法基于连续函数的中值定理,通过逐步缩小区间来逼近方程的根。

试位法求根的具体步骤如下:
1.确定初始区间:首先,需要确定一个包含方程根的初始区间[a, b]。


可以通过观察函数图像或使用其他方法(如作图法)来估计。

2.计算中点:计算区间[a, b]的中点c,即c = (a + b) / 2。

3.判断中点:将中点c代入原方程f(x) = 0,计算f(c)的值。

根据f(c)
的符号与f(a)、f(b)的符号关系,可以判断根所在的子区间。

o如果f(c) = 0,则c就是方程的精确根,算法结束。

o如果f(c)与f(a)异号,则根位于子区间[a, c]内,更新b = c。

o如果f(c)与f(b)异号,则根位于子区间[c, b]内,更新a = c。

o如果f(c)与f(a)、f(b)同号,则需要重新选择初始区间或尝试其他方法。

4.迭代逼近:重复步骤2和3,直到满足停止准则。

通常,停止准则可以
是区间长度小于某个给定的精度要求,或者迭代次数达到预设的最大
值。

5.输出近似根:当满足停止准则时,输出当前区间的中点作为方程的近似
根。

试位法求根的优点是简单易行,对于单根方程具有较好的收敛性。

然而,该方法也存在一些局限性,例如收敛速度较慢、对初始区间的选择敏感等。

在实际应用中,可以根据问题的特点和要求选择合适的求根方法。

Newton迭代法浅析

Newton迭代法浅析

目录第一章:绪论 (2)第二章 Newton迭代原理 (3)2.1 一般迭代思想的设计 (3)2.2 Newton迭代法的原理 (3)2.3小结: (5)第三章 Newton迭代法的收敛性 (6)3.1 Newton迭代法中不收敛的情况 (6)3.2 定理证明 (7)3.3 Newton迭代法的收敛性分析 (10)3.4小结: (12)第四章两种改进的Newton迭代法 (14)4.1 改进初值x的Newton下山法 (14)4.2 一种新的Newton迭代法加速设计 (15)4.3小结: (16)第五章 Newton迭代法的应用 (17)5.1 Newton迭代法的Matlab实现 (17)5.2 数值举例 (17)5.3小结: (20)总论 (21)参考文献 (22)致谢 (23)第一章绪论在自然科学和工程技术中很多问题的解决常常归结为解非线性方程(组)或者线性方程(组)代数方程组,例如电学中的网络问题,船体数学放样中建立三次样条函数问题,用最小而乘求是实验数据的曲线拟合问题,用差分或者有限元方法解常微分方程等。

关于非线性方程(组)的求解,一般有两类解法:直接法和迭代法。

我们知道,只有一次、二次和三次方程有规范的求根公式,而高于三次的方程0)xf是不存在求根公式的。

因此求根变得一异常的困难。

而科学计算却(很好解决了这一问题,其中最基本的算迭代法了,它对于解决非线性方程(组)的根变得异常方面。

就迭代法而言,Newton迭代法可算是其经典之作。

Newton迭代法又称为Newton-Raphson迭代法,它是Newton在17世纪提出的一种在实数域和复数域上近似求解方程的方法。

牛顿迭代法是求非线性方程(组)根的重要方法之一,其迭代格式简单,且在单根附近具有平方收敛,而且该法还可以用来求方程的重根、复根。

关于Newton迭代法,许多学者为之做了相当多的研究,并且留下了很多经典的文献([2-6])。

Newton迭代法在解决Banach空间中非线性方程或方程组的应用更为重要,如梯形Newton迭代法。

matlab中方程根的近似计算

matlab中方程根的近似计算

实验一方程根的近似计算一、问题求非线性方程的根二、实验目的1、学会使用matlab中内部函数roots、solve、fsolve、fzero求解方程,并用之解决实际问题。

4、熟悉Matlab的编程思路,尤其是函数式M文件的编写方法。

三、预备知识方程求根是初等数学的重要内容之一,也是科学和工程中经常碰到的数值计算问题。

它的一般形式是求方程f(x)=0的根。

如果有x*使得f(x*)=0,则称x*为f(x)=0的根,或函数f(x)的零点。

并非所有的方程都能求出精确解或解析解。

理论上已经证明,用代数方法可以求出不超过3次的代数方程的解析解,但对于次数大于等于5的代数方程,没有代数求根方法,即它的根不能用方程系数的解析式表示。

至于超越方程,通常很难求出其解析解。

不存在解析解的方程就需要结合具体方程(函数)的性质,使用作图法或数值法求出近似解。

而计算机的发展和普及又为这些方法提供了广阔的发展前景,使之成为科学和工程中最实用的方法之一。

下面介绍几种常见的求近似根的方法。

1. 求方程近似解的简单方法1.1 图形方法—放大法求根图形的方法是分析方程根的性态最简洁的方法。

不过,不要总是想得到根的精确值。

这些值虽然粗糙但直观,多少个根,在何范围,一目了然。

并且还可以借助图形局部放大功能,将根定位得更加准确一些。

例1.1 求方程x5+2x2+4=0的所有根及其大致分布范围。

解(1)画出函数f(x)=x5+2x2+4的图形,确定方程的实数根的大致范围。

为此,在matlab命令窗中输入clfezplot x-x,grid onhold onezplot('x^5+2*x^2+4',[-2*pi,2*pi])1-1 函数f(x)=x5+2x2+4的图形clfx=-2*pi:0.1:2*pi;y1=zeros(size(x));y2= x.^5+2*x.^2+4;plot(x,y1,x,y2)grid onaxis tighttitle('x^5+2x^2+4')xlabel('x')从图1-1可见,它有一个实数根,大致分布在-2与2之间。

《数值分析》_实验

《数值分析》_实验

( )
( )
4、另外选取一个近似表达式,尝试拟合效果的比较; 5、* 绘制出曲线拟合图。 三、目的和意义 1、掌握曲线拟合的最小二乘法; 2、最小二乘法亦可用于解超定线代数方程组; 3、探索拟合函数的选择与拟合精度间的关系
第5页
数值分析实验,宋伦继
6
实验四 数值积分与数值微分
一、问题提出 选用复合梯形公式,复合 Simpson 公式,Romberg 算法,计算
x
*
⎡ 0 ⎤ ⎢ −6 ⎥ ⎥ ⎢ ⎢ 20 ⎥ ⎥ ⎢ ⎢ 23 ⎥ ⎢ 9 ⎥ ⎥ ⎢ ⎢− 22⎥ ⎢ − 15 ⎥ ⎥ ⎢ ⎥ ⎢ 45 ⎦ ⎣
=
( 1,
-1,
0,
2,
1,
-1,
0,
2)
T
第7页
数值分析实验,宋伦继
8
3、三对角形线性方程组
⎡ 4 − 1 0 0 0 0 0 0 0 0 ⎤ ⎡ x1 ⎤ ⎡ 7 ⎤ ⎢− 1 4 − 1 0 0 0 0 0 0 0 ⎥ ⎢ x ⎥ ⎢ 5 ⎥ ⎥ ⎢ 2⎥ ⎥ ⎢ ⎢ ⎢ 0 − 1 4 − 1 0 0 0 0 0 0 ⎥ ⎢ x3 ⎥ ⎢ − 13⎥ ⎥⎢ ⎥ ⎥ ⎢ ⎢ ⎢ 0 0 − 1 4 − 1 0 0 0 0 0 ⎥ ⎢ x4 ⎥ ⎢ 2 ⎥ ⎢ 0 0 0 − 1 4 − 1 0 0 0 0 ⎥ ⎢ x5 ⎥ ⎢ 6 ⎥ ⎥⎢ ⎥ = ⎢ ⎥ ⎢ ⎢ 0 0 0 0 − 1 4 − 1 0 0 0 ⎥ ⎢ x6 ⎥ ⎢− 12⎥ ⎢ 0 0 0 0 0 −1 4 −1 0 0 ⎥ ⎢ x ⎥ ⎢ 14 ⎥ ⎥ ⎢ 7⎥ ⎥ ⎢ ⎢ ⎢ 0 0 0 0 0 0 − 1 4 − 1 0 ⎥ ⎢ x8 ⎥ ⎢−4⎥ ⎢ 0 0 0 0 0 0 0 − 1 4 − 1⎥ ⎢ x ⎥ ⎢ 5 ⎥ ⎥ ⎢ 9⎥ ⎥ ⎢ ⎢ ⎥ ⎥⎢ ⎥ ⎢ 0 0 0 0 0 0 0 0 −1 4 ⎦ ⎢ −5⎦ ⎣ ⎣ ⎣ x10 ⎦

解三次方程求解方法与实际应用

解三次方程求解方法与实际应用

解三次方程求解方法与实际应用三次方程是指最高次项的指数为3的代数方程。

解决三次方程的问题在数学和实际应用中经常出现。

本文将介绍几种常用的方法来解三次方程,并探讨其在实际应用中的意义和用途。

一、牛顿迭代法牛顿迭代法是一种基于切线逼近的数值计算方法。

对于三次方程f(x)=0,我们可以将其转化为求解方程F(x)=x^3-P=0的问题。

其中P为给定的值。

下面是牛顿迭代法的基本步骤:1. 初始化一个近似解x0;2. 计算相应的函数值F(x0)和导数值F'(x0);3. 利用切线斜率来计算新的近似解x1=x0-F(x0)/F'(x0);4. 重复步骤2和步骤3,直到满足收敛条件。

牛顿迭代法是一种高精度的数值计算方法,适用于解决复杂的三次方程问题。

它在实际应用中广泛用于科学计算、工程设计和金融建模等领域。

二、卡尔达诺公式卡尔达诺公式是一种通过换元的方式来解三次方程的方法。

对于三次方程ax^3+bx^2+cx+d=0,我们可以通过变量替换x=y-b/3a来消去二次项的系数,得到新的形式ay^3+py+q=0。

其中p=(3ac-b^2)/3a^2,q=(2b^3-9abc+27a^2d)/27a^3。

接下来,我们继续利用卡尔达诺公式来解决y^3+py+q=0的问题。

首先,我们需要计算一个新的变量D=-(p/3)^3-(q/2)^2,然后根据D的值来确定方程的根的情况。

1. 当D>0时,方程有一个实根和两个复根;2. 当D=0时,方程有三个实根,其中一个是重根;3. 当D<0时,方程有三个不同的实根。

卡尔达诺公式提供了一种解决三次方程的具体步骤,尽管它比较复杂,但在实际应用中,通过计算机程序可以轻松地实现。

三、实际应用三次方程的解决方法在实际应用中有着广泛的用途。

以下是一些例子:1. 金融建模:在金融风险管理中,我们经常需要解决类似于期权定价和资产配置的问题,其中涉及到三次方程的求解。

2. 电子工程:在电路设计和信号处理中,三次方程的求解可以帮助我们理解和优化电子系统的性能。

第七讲MATLAB中求方程的近似根(解)教学目的学习matlab中求根命令

第七讲MATLAB中求方程的近似根(解)教学目的学习matlab中求根命令

第七讲MATLAB中求方程的近似根(解)教学目的:学习matlab中求根命令,了解代数方程求根求解的四种方法,即图解法、准解析法、数值方法以及迭代方法,掌握对分法、迭代法、牛顿切法线求方程近似根的基本过程;掌握求代数方程(组)的解的求解命令.教学重点:求方程近似解的几种迭代方法,代数方程(组)的解的求解命令的使用方法.利用所学的编程知识,结合具体的实例,编制程序进行近似求根.掌握相关的代数方程(组)的求解命令及使用技巧.教学难点:方程的近似求解和非线性方程(组)的求解.一、问题背景和实验目的求代数方程0xf的根是最常见的数学问题之一(这里称为代数方程,主要是想和(=)后面的微分方程区别开.为简明起见,在本实验的以下叙述中,把代数方程简称为方程),当)f为线性方程,否则称之为非线性方程.(x(=x)f是一次多项式时,称0当0(xf的多样性,尚无一般的解析解法可使用,但如f是非线性方程时,由于))x(=果对任意的精度要求,能求出方程的近似根,则可以认为求根的计算问题已经解决,至少能满足实际要求.同时对于多未知量非线性方程(组)而言,简单的迭代法也是可以做出来的,但在这里我们介绍相关的命令来求解,不用迭代方法求解.通过本实验,达到下面目的:1. 了解对分法、迭代法、牛顿切线法求方程近似根的基本过程;2. 求代数方程(组)的解.首先,我们先介绍几种近似求根有关的方法:1.对分法对分法思想:将区域不断对分,判断根在某个分段内,再对该段对分,依此类推,直到满足精度为止.对分法适用于求有根区间内的单实根或奇重实根.设)af⋅bf,即()0f a>,()0f a<,()0f b<或()0f b>.则),(<(x[bf在]a上连续,0()根据连续函数的介值定理,在)fξ=.a内至少存在一点ξ,使()0,(b下面的方法可以求出该根:(1) 令0()/2x a b =+,计算0()f x ;(2) 若0()0f x =,则0x 是()0f x =的根,停止计算,输出结果0x x =.若 0()()0f a f x ⋅<,则令1a a =,10b x =,若0()()0f a f x ⋅>,则令10a x =,1b b =;111()/2x a b =+.……,有k a 、k b 以及相应的()/2k k k x a b =+.(3) 若()k f x ε≤ (ε为预先给定的精度要求),退出计算,输出结果()/2k k k x a b =+; 反之,返回(1),重复(1),(2),(3).以上方法可得到每次缩小一半的区间序列{[,]}k k a b ,在(,)k k a b 中含有方程的根. 当区间长k k b a -很小时,取其中点()/2k k k x a b =+为根的近似值,显然有2111()/2()/(2)()/2k k k k k k x b a b a b a ξ+---≤-=-==-以上公式可用于估计对分次数k .分析以上过程不难知道,对分法的收敛速度与公比为12的等比级数相同.由于1021024=,可知大约对分10次,近似根的精度可提高三位小数.对分法的收敛速度较慢,它常用来试探实根的分布区间,或求根的近似值. 2. 迭代法a) 松弛法:由方程()0f x =构造一个等价方程()x x φ=.则迭代方程是:1(1)()k k k k k x x x ωωφ+=-+,1/(1'())k k x ωφ=-,其中'()1x φ≠.松弛法的加速效果是明显的 (见附录4),甚至不收敛的迭代函数经加速后也能获得收敛.b) Altken 方法:松弛法要先计算'()k x φ,在使用中有时不方便,为此发展出以下的 Altken 公式:(1)()k k x x φ= ;(2)(1)()k k x x φ=;(2)(2)(1)2(2)(1)1()/(2)k k k k k k k x x x x x x x +=---+, ,2,1,0=k这就是Altken 公式,它的加速效果也是十分明显的,它同样可使不收敛的迭代格式获得收敛(见附录5).3. 牛顿(Newton)法(牛顿切线法)()0f x =是非线性方程其迭代公式为:1(()/'())k k k k x x f x f x +=- ,2,1,0=k即为牛顿法公式.牛顿法的缺点是:(1)对重根收敛很慢;(2)对初值0x 要求较严,要求0x 相当接近真值*x .因此,常用其他方法确定初值0x ,再用牛顿法提高精度. 以下是本实验中的几个具体的实验 具体实验1:对分法先作图观察方程:3310x x -+=的实根的分布区间,再利用对分法在这些区间上分别求出根的近似值.程序如下: function [y,p]=erfen()clc, x=[];a=[];b=[]; a(1)=1;b(1)=2; i=1;x(i)=(a(i)+b(i))/2; e=abs(f(x(i))); ezplot('x^3-3*x+1',[a(1),b(1)]);hold on, plot([a(i),b(i)],[0,0]) while e>10^(-5)plot([a(i),a(i)],[0,100],[x(i) x(i)],[0 100],[b(i) b(i)],[0 100]),pause(0.5) if f(a(i))*f(x(i))<0a(i+1)=a(i);b(i+1)=x(i);x(i+1)=(a(i+1)+b(i+1))/2; elsea(i+1)=x(i);b(i+1)=b(i);x(i+1)=(a(i+1)+b(i+1))/2; ende=abs(f(x(i)));i=i+1; endy=x(i);p=[a;x;b]' function u=f(x) u=x^3-3*x+1; end end图形如下:结果为:1.5321具体实验2:普通迭代法采用迭代过程:1()k k x x φ+=求方程3310x x -+=在 0.5 附近的根,精确到第 4 位小数.构造等价方程:3(1)/3x x =+用迭代公式: 31(1)/3k k x x +=+, ,2,1,0=k 具体实验3:迭代法的加速1——松弛迭代法3()(1)/3x x φ=+,2()'x x φ=,21/(1)k k x ω=-迭代公式为31(1)(1)/3k k k k k x x x ωω+=-++clc;x=[];w=[]; x(1)=1;w(1)=1/(1-x(1)); for i=1:10w(i)=1/(1- x(i)); x(i+1)=(1-w(i))*x(i)+ w(i)*(x(i)^3+1)/3; end x另外有程序可以参考,详见参见附录4. 具体实验4:迭代法的加速2——Altken 迭代法迭代公式为:(1)3(1)/3k k x x =+,(2)(1)3(1)/3k k x x =+(2)(2)(1)2(2)(1)1()/(2)k k k k k k k x x x x x x x +=---+, ,2,1,0=k%(符号计算)syms x fx gx;gx=(x^3+1)/3;fx=x^3-3*x+1; disp('k x x1 x2') x=0.5;k=0; ffx=subs(fx, 'x', x); while abs(ffx)>0.0001;u=subs(gx, 'x', x);v=subs(gx, 'x', u);disp([num2str(k), ' ', num2str(x), ' ', num2str(u), ' ', num2str(v)]) x=v-(v-u)^2/(v-2*u+x);k=k+1;ffx=subs(fx, 'x', x); enddisp([num2str(k), ' ', num2str(x), ' ', num2str(u), ' ', num2str(v)]) %(数值计算)function [y,p]=althken() % 求方根的迭代程序 clc,format long e , x(1)=6; i=1;p=[];ezplot('x^3-3*x+1',[x(1)-9,x(1)+1]);hold on plot([x(1)-20,x(1)+2],[0,0]) while abs(f(x(i)))>=10^(-5) plot(x(i),0,'*')t1=phi(x(i));t2=phi(t1); x(i+1)=t2-(t2-t1)^2/(t2-2*t1+x(i)+eps); p=[p;[i, x(i),t1,t2]]; i=i+1; pause(0.1) endp,y=x(i), i, format function u=phi(x) u=(x^3+1)/3; endfunction u=f(x) u=x^3+1-3*x; end end具体实验5:牛顿法用牛顿法计算方程3310x x -+=在-2到2之间的三个根. 提示:3()31f x x x =-+,2'()33f x x =-迭代公式:2321(31)/(33)k k k k k x x x x x +=--+-function [y,p]=newton() % 求方根的迭代程序 clc,format long e , x(1)=6; i=1; p=[]; ezplot('x^3-3*x+1',[x(1)-9,x(1)+1]);hold on plot([x(1)-20,x(1)+2],[0,0]) while abs(f(x(i)))>=10^(-5)plot(x(i),0,'*'), x(i+1)=x(i)-f(x(i))/(df(x(i))+eps); p=[p;[i, x(i)]]; i=i+1; pause(0.1) endformat short , p,y=x(i), i, function u=df(x) u=3*x^2-3; endfunction u=f(x) u=x^3+1-3*x; end end 结果:结果为: 1.5321※进一步思考:用迭代法求3的平方根. 迭代公式为1(3/)/2n n n x x x +=+. 编写M 函数文件My_sqrt.m, 求3正的平方根x . 要求误差小于510-.仅要求写出源程序.试使用以上介绍的迭代法来相互比较 参考程序:function y=my_sqrt(a) % 求方根的迭代程序if nargin~=1|~isa(a,'double') , error('输入数字为一个正数!'),end if a<0, error('输入数字为正数!'), endif a>0format long e , x(1)=0; x(2)=1; i=1; while abs(x(i+1)-x(i))>=10^(-5)i=i+1;x(i+1)=1/2*(x(i)+a/(x(i)+eps));endy=x(i+1);i,format end现在我们简单介绍图解法如何来求解一元方程和二元方程的根: 例:exp(-3*t)*sin(4*t+2)+4*exp(-0.5*t)*cos(2*t)=0.5>>ezplot('exp(-3*t)*sin(4*t+2)+4*exp(-0.5*t)*cos(2*t)-0.5',[0 5]) >>hold on, line([0,5],[0,0])验证:t=3.5203 >>syms x; t=3.5203;vpa(exp(-3*t)*sin(4*t+2)+4*exp(-0.5*t)*cos(2*t)-0.5) ans =-.43167073997540938989914138801396e-4例::x^2*exp(-x*y^2/2)+exp(-x/2)*sin(x*y)=0y^2 *cos(y+x^2) +x^2*exp(x+y)=0>> ezplot('x^2*exp(-x*y^2/2)+exp(-x/2)*sin(x*y)')>> hold onezplot('y^2 *cos(y+x^2) +x^2*exp(x+y)')具体的结果请大家自己下来运行二、关于直接利用函数(命令)求解方程及简介(1) solve('f(x)'),f(x)为一个具体的表达式.(2) roots(A),A为某个多项式按x降幂排列的系数矩阵(3) fzero('f(x)', x0),f(x)为一个具体的表达式,x0为一个具体的数值(4) linsolve(A,b),A为一方程组的系数矩阵,b为方程组右端的常数矩阵.1.单变量的多项式方程求根:命令格式:roots(A)例:x^3-6*(x^2)-72*x-27=0;>>p=[1 -6 -72 -27]>>r=roots(p)r=12.1229-5.7345-0.38842. 多项式型方程的准解析解法命令格式:[x,…]=solve(eqn1,eqn2,…)例:x^2+y^2-1=00.75*x^3-y+0.9=0>>syms x y;>> [x,y]=solve('x^2+y^2-1=0', '75*x^3/100-y+9/10=0')检验:>>[eval('x.^2+y.^2-1'), eval('75*x.^3/100-y+9/10')]具体结果就请大家下来自己运行3. 线性方程组的求解例:求线性方程组b⋅的解,已知m=[1 2 3 4 5;2 3 4 5 6;3 4 5 6 7 8;4 5 6 7 8 ;5 6 7 8 0],m=xb=[1;2;3;4;5]for i=1:5for j=1:5m(i, j)=i+j-1;endendm(5, 5)=0;b=[1:5]'; linsolve(m, b)4. 非线性方程数值求解(1)单变量非线性方程求解在MATLAB中提供了一个fzero函数,可以用来求单变量非线性方程的根.该函数的调用格式为:z=fzero('fname',x0,tol,trace)其中fname是待求根的函数文件名,x0为搜索的起点.一个函数可能有多个根,但fzero 函数只给出离x0最近的那个根.tol控制结果的相对精度,缺省时取tol=eps,trace•指定迭代信息是否在运算中显示,为1时显示,为0时不显示,缺省时取trace=0.例:求f(x)=x-10x+2=0在x0=0.5附近的根.步骤如下:(a) 建立函数文件funx.m.function fx=funx(x)fx=x-10.^x+2;(b)调用fzero函数求根.z=fzero('funx',0.5)z = 0.3758(2)非线性方程组的求解对于非线性方程组F(X)=0,用fsolve函数求其数值解.fsolve函数的调用格式为: X=fsolve('fun',X0,option)其中X为返回的解,fun是用于定义需求解的非线性方程组的函数文件名,X0是求根过程的初值,option为最优化工具箱的选项设定.最优化工具箱提供了20多个选项,用户可以使用optimset命令将它们显示出来.如果想改变其中某个选项,则可以调用optimset()函数来完成.例如,Display 选项决定函数调用时中间结果的显示方式,其中‘off’为不显示,‘iter’表示每步都显示,‘final’只显示最终结果.optim set(‘Display’,‘off’)将设定Display 选项为‘off’. 例: 求下列非线性方程组在(0.5,0.5) 附近的数值解.(a) 建立函数文件myfun.m . function q=myfun(p) x=p(1);y=p(2);q(1)=x-0.6*sin(x)-0.3*cos(y);q(2)=y-0.6*cos(x)+0.3*sin(y); (b) 在给定的初值x0=0.5,y0=0.5下,调用fsolve 函数求方程的根. x=fsolve('myfun',[0.5,0.5]',optimset('Display','off')) x = 0.6354 0.3734将求得的解代回原方程,可以检验结果是否正确,命令如下: q=myfun(x) q = 1.0e-009 * 0.2375 0.2957 可见得到了较高精度的结果.精品案例:螺旋线与平面的交点问题:螺旋线与平面相交的情况多种多样, 根据螺旋线与平面方程的不同可以相交, 也可以不相交. 在相交的情况下, 可以交于一点, 也可以交于好多点. 对于各种相交的情况, 要求其交点的坐标并不是一件容易的事. 本次实验就以此为背景讨论下面的具体问题:已知螺旋线的参数方程为4cos ,4sin ,,08x y z θθθθπ===≤≤.平面的方程为:0.520x y z ++-=. 求该螺旋线与平面的交点. 要求:1)求出所有交点的坐标;2)在同一图形窗口画出螺旋线、平面和交点. 实验过程: 1.1 问题分析可以采用多种方法求螺旋线与平面的交点坐标, 包括fsolve 等. 先对方程化简,减少变量个数,使用图解方法求方程的根.再分别画出螺旋线,平面,及其交点. 1.2 算法描述与分析先对方程化简,减少变量个数,再利用fsolve, 选择适当的初值, 求其数值解;再分别会出图形;最后对图形作出必要的修饰. 1.3 源程序及注释将螺旋线的参数方程代入平面方程后可得: 等价变形得 : 建立下面M 文件intersect_point.m %使用图解法求交点,并且三维图 %画图确定解的个数和大概位置 theta=0:0.01:8*pi;y1=4*(cos(theta)+sin(theta)); y2=2-0.5*theta;plot(theta,y1,theta,y2) %画出两个函数的图形%画螺旋线%theta=0:pi/100:8*pi; x=4*cos(theta); y=4*sin(theta); z=theta;figure %新建图形窗口plot3(x,y,z) %画含有参数的空间曲线 hold on %透明的画平面%x1=-5:0.1:5; %取值和螺旋线的范围[-4,4]有关. y1=x1;[X1 Y1]=meshgrid(x1,y1);%网格化,画曲面 Z1=4-2*X1-2*Y1;surf(X1,Y1,Z1) %或者使用mesh(X1,Y1,Z1)25.0sin 4cos 4=-++θθθθθθ5.02sin 4cos 4-=+shading flatalpha(0.5) %设置透明度alpha('z') %设置透明度方向%求交点坐标,为避免变量混淆和覆盖,这里用t 代替theta%i=1for n=[2,5,9,11] %根据画图确定解的大概位置作为初值t(i)=fsolve(inline('4*cos(t)+4*sin(t)+0.5 *t-2'),n)%选择不同初值求交点 x0(i)=4*cos(t(i));y0(i)=4*sin(t(i));z0(i)=t(i);i=i+1;endplot3(x0,y0,z0,'ro')1.4 测试结果(写清输入输出情况)从图形可见在 内与三角曲线有4个交点.交点坐标为:theta 的数值解为:t=[2.1961 5.3759 9.1078 11.1023]四个交点的近似坐标为:x0 =[-2.3413 2.4635 -3.8007 0.4261]y0 =[3.2432 -3.1514 1.2468 -3.9772]z0 =[2.1961 5.3759 9.1078 11.1023]1.5 调试和运行程序过程中产生的问题及采取的措施求交点的时候会出现重根和漏根的情形,通过选择适当的初值避免了上述情况.1.6 对算法和程序的讨论、分析, 改进设想及其它经验教训solve 函数只能求解一个数值解,不能全部求出;用fsolve 函数好; 为了满足更好的视觉πθ80≤≤效果,可以对图形进行进一步的修饰.习题1.已知多项式323)(2345+++-=x x x x x f2.解方程组:sin()0x x y ye +-=(1)22x y -= (2)3.求解方程: ex x x =)cos( 4.求解多项式方程 0189=++x x5.求下列代数方程(组)的解:(1) 510x x -+=(2) 230x y += ①2431x y += ②6.选择适当的迭代过程,分别使用:(1)普通迭代法;(2)与之相应的松弛迭代法和 Altken 迭代法.求解方程0133=+-x x 在 1.4 附近的根,精确到4位小数,请注意迭代次数的变化.7.分别用对分法、普通迭代法、松弛迭代法、Altken 迭代法、牛顿切法线等5种方法,求方程 sin()t x x ⋅= 的正的近似根,10≤<t .(建议取 5.0=t .时间许可的话,可进一步考虑 25.0=t 的情况.)五、附录为供近似求根的算法附录1:对分法程序(fulu1.m )syms x fx; a=0;b=1;fx=x^3-3*x+1;x=(a+b)/2;k=0;ffx=subs(fx, 'x', x);if ffx==0;disp(['the root is:', num2str(x)])else disp('k ak bk f(xk)')while abs(ffx)>0.0001 & a<b;disp([num2str(k), ' ', num2str(a), ' ', num2str(b), ' ', num2str(ffx)]) fa=subs(fx, 'x', a);ffx=subs(fx, 'x', x);if fa*ffx<0b=x;elsea=x;endk=k+1;x=(a+b)/2;enddisp([num2str(k), ' ', num2str(a), ' ', num2str(b), ' ', num2str(ffx)])end注:实验时,可将第 2 行的 a、b 改为其它区间端点进行其它实验.附录2:普通迭代法(fulu2.m)syms x fx gx; gx=(x^3+1)/3;fx=x^3-3*x+1; disp('k x f(x)')x=0.5;k=0; ffx=subs(fx, 'x', x);while abs(ffx)>0.0001;disp([num2str(k), ' ', num2str(x), ' ', num2str(ffx)]);x=subs(gx, 'x', x);ffx=subs(fx, 'x', x);k=k+1;enddisp([num2str(k), ' ', num2str(x), ' ', num2str(ffx)])附录3:收敛/发散判断(fulu3.m)syms x g1 g2 g3 dg1 dg2 dg3;x1=0.347;x2=1.53;x3=-1.88;g1=(x^3+1)/3;dg1=diff(g1, 'x');g2=1/(3-x^2);dg2=diff(g2, 'x');g3=(3*x-1)^(1/3);dg3=diff(g3, 'x');disp(['1 ', num2str(abs(subs(dg1, 'x', x1))), ' ', ...num2str(abs(subs(dg1, 'x', x2))), ' ', num2str(abs(subs(dg1, 'x', x3)))]) disp(['2 ', num2str(abs(subs(dg2, 'x', x1))), ' ', ...num2str(abs(subs(dg2, 'x', x2))), ' ', num2str(abs(subs(dg2, 'x', x3)))]) disp(['3 ', num2str(abs(subs(dg3, 'x', x1))), ' ', ...num2str(abs(subs(dg3, 'x', x2))), ' ', num2str(abs(subs(dg3, 'x', x3)))])附录4:松弛迭代法(fulu4.m)syms fx gx x dgx;gx=(x^3+1)/3;fx=x^3-3*x+1;dgx=diff(gx, 'x');x=0.5;k=0;ggx=subs(gx, 'x', x);ffx=subs(fx, 'x', x);dgxx=subs(dgx, 'x', x);disp('k x w')while abs(ffx)>0.0001;w=1/(1-dgxx); disp([num2str(k), ' ', num2str(x), ' ', num2str(w)]) x=(1-w)*x+w*ggx;k=k+1;ggx=subs(gx, 'x', x);ffx=subs(fx, 'x', x);dgxx=subs(dgx, 'x', x);enddisp([num2str(k), ' ', num2str(x), ' ', num2str(w)])附录5: Altken 迭代法(fulu5.m)syms x fx gx; gx=(x^3+1)/3;fx=x^3-3*x+1;disp('k x x1 x2') x=0.5;k=0;ffx=subs(fx, 'x', x);while abs(ffx)>0.0001;u=subs(gx, 'x', x);v=subs(gx, 'x', u);disp([num2str(k), ' ', num2str(x), ' ', num2str(u), ' ', num2str(v)]) x=v-(v-u)^2/(v-2*u+x);k=k+1;ffx=subs(fx, 'x', x);enddisp([num2str(k), ' ', num2str(x), ' ', num2str(u), ' ', num2str(v)])附录6:牛顿法(fulu6.m)syms x fx gx;fx=x^3-3*x+1;gx=diff(fx, 'x');x1=-2;x2=0.5;x3=1.4;k=0;disp('k x1 x2 x3')fx1=subs(fx, 'x', x1);fx2=subs(fx, 'x', x2);fx3=subs(fx, 'x', x3);gx1=subs(gx, 'x', x1);gx2=subs(gx, 'x', x2);gx3=subs(gx, 'x', x3);while abs(fx1)>0.0001|abs(fx2)>0.0001|abs(fx3)>0.0001;disp([num2str(k), ' ', num2str(x1), ' ', num2str(x2), ' ', num2str(x3)])x1=x1-fx1/gx1;x2=x2-fx2/gx2;x3=x3-fx3/gx3;k=k+1;fx1=subs(fx, 'x', x1);fx2=subs(fx, 'x', x2);fx3=subs(fx, 'x', x3);gx1=subs(gx, 'x', x1);gx2=subs(gx, 'x', x2);gx3=subs(gx, 'x', x3);enddisp([num2str(k), ' ', num2str(x1), ' ', num2str(x2), ' ', num2str(x3)])。

Matlab 求代数方程的近似解

Matlab 求代数方程的近似解
k k k


x*
即 x* ( x*)
( x*)
f ( x*) 0
注:若得到的点列发散,则迭代法失效!
迭代法收敛性判断
如果存在 x* 的某个 邻域 =(x*- , x* + ), 使 定义: 得对 x0 开始的迭代 xk+1 = (xk) 都收敛, 则称该迭代法在 x* 附近局部收敛。 设 x* =(x*),的某个邻域 内连续,且对 定理 1: x 都有 |’(x)|q< 1, 则对 x0 ,由迭 代 xk+1 = (xk) 得到的点列都收敛。
f 是符号表达式,也可以是字符串 默认变量由 findsym(f,1) 确定
>> syms x >> f=sin(x)+3*x^2; >> g=diff(f,x) >> g=diff('sin(x)+3*x^2','x')
Matlab 解方程函数
roots(p):多项式的所有零点,p 是多项式系数向量。 fzero(f,x0):求 f=0 在 x0 附近的根,f 可以使用
inline、字符串、或 @,但不能是方程或符号表达式!
linsolve(A,b):解线性方程组。 solve(f,v):求方程关于指定自变量的解,f 可以是用
得到一个迭代序列
k = 0, 1, 2, ... ...
xk k 0

f (x) = 0 f (x) 的零点
等价变换
x = (x)
(x) 的不动点
迭代法的收敛性
收敛性分析
若 ,假设 (x) 连续,则 xk x * xk 收敛,即lim k

牛顿割线法

牛顿割线法

牛顿割线法牛顿割线法是一种数值计算方法,用于求解方程的根。

它是由英国科学家牛顿提出的,被广泛应用于科学计算和工程实践中。

本文将为您详细介绍牛顿割线法的原理、步骤和应用。

一、原理:牛顿割线法的原理基于函数的局部线性逼近。

假设我们要求解方程f(x)=0的根,我们可以通过在方程图像上的某一点(x0,f(x0))处做一条切线,将这条切线与x轴的交点的横坐标记为x1。

然后,我们重复这个过程,在(x1, f(x1))处做一条切线并将其与x轴的交点的横坐标记为x2,直到我们找到一个近似根。

这个近似根的精度取决于我们选择的初始点x0和迭代的次数。

二、步骤:1. 选择一个初始点x0,计算出对应的函数值f(x0)和导数值f'(x0)。

2. 使用初始点和导数值来构建一条切线,求出切线与x轴的交点的横坐标,将其记为x1。

3. 计算出对应的函数值f(x1)和导数值f'(x1)。

4. 使用(x1, f(x1))和(x0, f(x0))这两个点来构建一条新的切线,求出切线与x轴的交点的横坐标,将其记为x2。

5. 重复步骤3和步骤4,直到找到满足误差要求的近似根。

三、应用:牛顿割线法在科学计算和工程实践中有广泛的应用。

它可以用于求解非线性方程的根,例如求解三角函数的根、求解代数方程的根等。

牛顿割线法除了可以用于求解方程的根,还可以用于优化问题,例如求解函数的最大值、最小值等。

牛顿割线法的优点是收敛速度快,通常比二分法和追赶法更快。

但是,它也有一些局限性。

首先,初始点的选择会影响近似根的精度和计算效率。

如果初始点选得不好,可能会导致方法无法收敛或者收敛到错误的根。

其次,牛顿割线法只能找到一个根,如果方程有多个根,需要多次运行该方法。

此外,注意到牛顿割线法需要计算导数值,如果方程的导数难以计算或者计算量很大,该方法可能不适用。

在实际应用中,我们通常会将牛顿割线法与其他数值计算方法结合使用,以便更快地找到方程的根。

例如,我们可以使用牛顿割线法来寻找方程的一个近似根,然后将该近似根作为初始点使用其他方法进行细化。

牛顿迭代法论文

牛顿迭代法论文

南昌工程学院课程设计姓名:专业:年级:学号:年月日牛顿迭代算法摘要: 牛顿迭代法(Newton's method)又称为牛顿-拉夫逊方法(Newton-Raphsonmethod),它是牛顿在17世纪提出的一种在实数域和复数域上近似求解方程的方法。

多数方程不存在求根公式,因此求精确根非常困难,甚至不可能,从而寻找方程的近似根就显得特别重要。

牛顿迭代法是求方程根的重要方法之一,其最大优点是在方程f(x) = 0的单根附近具有平方收敛,而且该法还可以用来求方程的重根、复根,此时线性收敛,但是可通过一些方法变成超线性收敛。

另外该方法广泛用于计算机编程中。

牛顿迭代法是一个重要的计算方法和思想。

牛顿迭代法的主要功能:计算方程时可以比较快速方便的计算出来结果但并不影响计算出来结果的精确度,运用于多种工业设计和数学设计方面.关键字: 牛顿迭代方程根算法一 .牛顿迭代法简介1.1 牛顿迭代法的概述牛顿迭代法(Newton's method)又称为牛顿-拉夫逊方法(Newton-Raphson method),它是牛顿在17世纪提出的一种在实数域和复数域上近似求解方程的方法。

多数方程不存在求根公式,因此求精确根非常困难,甚至不可能,从而寻找方程的近似根就显得特别重要。

方法使用函数f(x)的泰勒级数的前面几项来寻找方程f(x) = 0的根。

设r是f(x) = 0的根,选取x0作为r初始近似值,过点(x0,f(x0))做曲线y = f(x)的切线L,L的方程为y = f(x0) f'(x0)(x-x0),求出L与x轴交点的横坐标 x1 = x0-f(x0)/f'(x0),称x1为r的一次近似值。

过点(x1,f(x1))做曲线y = f(x)的切线,并求该切线与x轴的横坐标 x2 = x1-f(x1)/f'(x1),称x2为r的二次近似值。

重复以上过程,得r的近似值序列,其中x(n+1)=x(n)-f(x(n))/f'(x(n)),称为r的n+1次近似值,上式称为牛顿迭代公式。

4. 实根的近似计算

4. 实根的近似计算

§4 实根的近似计算设f (x )为已知连续函数,ξ是方程f (x )=0的根,这里方程可以是一般方程(代数方程或超越方程).在实际问题中都给出了根的范围,例如代数方程f (x )=a 0x n +a 1x n -1+ +a n -1x +a n =0的根ξ的范围是|ξ|≤1+01a max{|a 1|,|a 2|, ,|a n |}因此可以假定方程在区间(a ,b )内只有一个根(若有两个根,则将区间的一个端点换为使f '(x )=0的点).并由函数的连续性可知,一般来说,在根的附近f (x )是异号的(当f '(ξ)=0或∞除外),所以在下面介绍的各种近似计算中,都假定f (a )和f (b )异号.一、秦九韶法*秦九韶法基本上是通过逐次试验求根的近似值的方法,试验次数愈多,所得近似值愈接近根的真值.系统地继续这一过程,直至达到预定的有效数字的位数.现举例具体说明这个方法.例 求方程f (x )=030183=-+x x (1) 的根到五位有效数字.应用笛卡尔符号法则可知这个方程有一个正根.由于f (1)=-11,f (2)=14,这个正根在(1,2)之间.现在应用秦九韶法求这个方程的近似根.先设1-=x p ,这里p 表示1到所求根的距离.应用多项式的泰勒公式(秦九韶法,见§2,一),得到关于p 的方程01121323=-++p p p (2) 其算式为1⎥⎥⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎢⎢⎣⎡d 1121313019211811011-- 现在求纯小数p 的近似值,由于纯小数的三次方或二次方的值更小,可暂舍去方程(2)的头两项而来计算21p -11=0,即p =0.5238….但舍去的两项是正的,这个值显得太大.当p =0.500时,方程(2)的左边各项的和是仍是正数(0.375),而当p =0.400时,方程(2) 的左边各项的和是负数(-2.056).因此,设)0(4.0>+=h h p ,即4.0-=p h ,再应用多项式的泰勒公式,得到关于h 的方程0056.288.232.423=-++h h h (3) 其算式为* 我国古代数学家秦九韶在他所著的<<数书九章>>(1247),给出一个求代数方程的根近似值 的方法,这个方法一般书上都称为和纳法.实际上和纳在1819年才提出这个方法,比秦九 韶晚五百多年.4.0⎥⎥⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎢⎢⎣⎡d 056.288.232.411136.228.31214.31311-- 现在求小数h 的近似值,舍去头两项,求得h =0.08609….因舍去两个正量,所得的h 太大,所以设h =0.08)0(>+q q ,即08.0-=h q .应用上述方法得到关于q 的方程 0118208.05712.2444.423=-++q q q (4)同上面一样,从方程(4)的后两项求得,00481.0 =q 设)0(004.0>+=r r q ,即,004.0-=q r 得到关于r 的方程0019852096.0606768.24452.423=-++r r r (5) 从后两项求出r 的近似值r =0.0008…,因舍去的都是正量,所以方程(5)的根在0.0008和0.00081之间.现在把(2),(3),(4),(5),的各个近似值0.4,0.08,0.004,0.0008相加得总和0.4848,然后加到第一次近似值1上,所以方程(1)的根在1.4848与1.48481之间,取五位有效数字为1.4848.用秦九韶法还能求负的近似值.想求f (x )=0的一切负实根,可先求 f (-x )的正实根,然后改变符号,即得负实根.二、二分法假定f (x )在[a,b ]上连续,且f (a )f (b )<0(这里假定f (a )<0,f (b )>0),取区间[a,b ]的中点2ba +,若⎪⎭⎫⎝⎛+2b a f =0,则f (x )=0的根是ξ=2b a +.不然,若⎪⎭⎫ ⎝⎛+2b a f >0,则令a 1=a ,b 1=2b a +;若⎪⎭⎫⎝⎛+2b a f <0,则令a 1=2ba +,b 1=b .于是形成新区间[a 1,b 1],它包含f (x )=0的根ξ(图3.2).再取[a 1,b 1]的中点211b a +,若⎪⎭⎫⎝⎛+211b a f =0,则ξ=211b a +.若⎪⎭⎫ ⎝⎛+211b a f >0,则令a 2=a 1,b 2=211b a +;若⎪⎭⎫⎝⎛+211b a f <0,则令a 2=211b a +,b 2=b 1.于是又形成新区间[a 2,b 2],其长度等于22ab -,它包含方程f (x )=0的根ξ.…若允许误差ε=k -10,则按这个过程作出区间[a 1,b 1], [a 2,b 2], [a 3,b 3], , [a n ,b n ],n =⎥⎦⎤⎢⎣⎡-+2lg )lg(a b k ([x ]表示x 的整数部分),于是ξ*=2n n b a +是方程f (x )=0的近似根,误差不超过|ξ-ξ*|≤12+-n ab ≤k -10二分法是求实根的近似计算中行之有效的最简单的方法,它只要求函数是连续的,因此它的使用范围很广,并便于在电子计算机上实现.但是它不能求重根,也不能求虚根.三、迭代法把方程f (x )=0表成它的等价形式x =ϕ(x )或一般地f 1(x )=f 2(x )式中f 1(x )是这样一个函数:对任意实数c ,能容易算出方程f 1(x )=c 的精确度很高的实根.如果对任意a ≤x 1≤b ,a ≤x 2≤b ,下式成立:1)()(1122<≤''q x f x f 则下面迭代过程是收敛的. 首先从一个近似根x 0出发(x 0可由图解法粗略估计出),代入方程右边,解方程f 1(x )=f 2(x 0)得到第一个近似根x =x 1,再解方程f 1(x )=f 2(x 1)得到第二个近似根x =x 2, ,类似地由第n 个近似根x n ,解方程f 1(x )=f 2(x n )得到第n +1个近似根x =x n +1,于是得到一系列不同精确度的近似根x 0, x 1, x 2, , x n ,它收敛于方程的根ξ(图3.3). 收敛速度(即误差消失速度)与a n 相当,而a 0112x x x x --≈用()022122x x x x ∆∆-=*代替x 2可加速收敛.式中∆x 1=x 2-x 1为x 1的一阶差分,∆2x 0=∆x 1-∆x 0为x 0的二阶差分. 对于方程x =ϕ(x ),只要ϕ(x )在[a ,b ]上连续,且≤')(x ϕq <1,那末,它的根可由x 1=ϕ(x 0) x 2=ϕ(x 1) x n +1=ϕ(x n )来接近(图3.4).四、牛顿法1.一般牛顿法设f (x )在[a ,b ]上连续,)(x f '也连续,且)(x f '≠0,)(x f ''≠0,f (a )f (b )<0(设f (a )<0,f (b )>0),过点(a ,f (a ))(或点(b ,f (b )))作曲线的切线:)()(a f a x a f y '=--(或)()(b f b x b f y '=--)它和x 轴的交点为x =a -)()(a f a f '(或x =b -)()(b f b f ')用迭代公式x n +1=x n -)()(n n x f x f ' 并取初始值x 0=⎩⎨⎧>''<''0)(,0)(,x f b x f a 当当可计算出方程f (x )=0的根的近似值(图3.5).误差⎪ξ-x n ⎪不超过)(min )(x f x f bx a n '≤≤一般选取的初始值x 0,要满足不等式2)()()(0020x f x f x f ''>'2.近似牛顿法如果)(x f '不易算出,可改用差商代替,得出近似牛顿法迭代程序:x n +1=x n )()()(2h x f h x f hx f n n n --+-3.逐次压缩牛顿法 求实系数代数方程f (x )=a 0x n +a 1x n -1+ +a n =0的单实根时,用牛顿法求出一个实根x 0后,可把多项式的次数降低一次,降低次数后的多项式系数b k 为b 0=a 0b k =a k +x 0b k -1 (k =1,2, ,n -1)然后,再把求出的实根作为初始近似值,用同法求出再次降低次数的多项式的实根,依此求出全部单实根.4.牛顿法解非线性方程组 假设非线性方程组()()⎩⎨⎧==0,0,y x y x u υ 存在一组近似解P 0=(x 0,y 0),且≠∂∂∂∂∂∂∂∂p yxy u x u υυ可用迭代公式:x n +1=x n +np n yuyuJ υυ∂∂∂∂1y n +1=y n +np n xx u uJ ∂∂∂∂υυ1式中P n 为点(x n ,y n ),J n 为雅可比式J 在P n 的值:np n yx y u x u J ∂∂∂∂∂∂∂∂=υυ五、弦截法(线性插值法) 假设f (x )在[a ,b ]上连续,)(x f ',)(x f ''都不变号,且f (a )f (b )<0(这里假定f (a )<0,f (b )>0).过点(a ,f (a ))和(b ,f (b ))的直线是:ab a x a f b f a f y --=--)()()( (或a b xb a f b f y b f --=--)()()()它和x 轴的交点是x =a -)()()()(a f b f a f a b --(或x =b -)()()()(a f b f b f a b --).(a )当)(x f ')(x f ''>0时,用迭代公式⎪⎩⎪⎨⎧=---=+a x a f b f b f x b b x n n 01)()()()( 可求出方程的近似根(图3.6(a )). (b )当)(x f ')(x f ''<0时,用迭代公式⎪⎩⎪⎨⎧=---=+b x a f x f a f a x a x n n n 01)()()()( 可求出方程f (x )=0的近似根(图3.6(b )). 六、联合法(牛顿法与弦截法联合使用)假设f (x )在[a ,b ]上连续,)(x f ',)(x f ''都不变号,且f (a )f (b )<0(这里假定f (a )<0,f (b )>0). (a )当f (a )与)(x f ''同号时(图3.7(a )),用迭代公式x 1=a )()(a f a f '-1x '=b )()()()(b f a f b f b a ---x 2=x 1)()(11x f x f '-2x '=1x ')()()()(11111x f x f x f x x '-''--x n =x n -1)()(11--'-n n x f x fn x '=1-'n x )()()()(11111-----'-''--nn n nn x f x f x f x x 可求出方程f (x )=0的近似根.(b )当f (a )与)(x f ''异号时(图3.7(b )),用迭代公式x 1=a )()()()(a f b f a f a b ---1x '=b )()(b f b f '- x 2=x 1)()()()(11111x f x f x f x x -'-'-2x '=1x ')()(11x f x f '''-x n =x n -1)()()()(11111------'-'-n nn n nx f x f x f x xnx '=1-'n x )()(11--'''-nnx f x f 可求出方程f (x )=0的近似根.误差n n nx x x -'≤-'ξ或n n n x x x -'≤-'ξ. 七、抛物线法(穆勒法) 求实系数n 次方程f (x )=x n +a 1x n -1+ +a n =0 (1)的近似根. 可先求出f (x )=0的一个根x =r ,则 f (x )=(x -r )g (x )=(x -r )(x n -1+b 1x n -2+ +b n -1)式中g (x )是n -1次多项式,然后再求出g (x )的根,依此类推,可以求出f (x )=0的全部实根来. 首先选取x 轴上三点:x 0,x 1,x 2,通过曲线y =f (x )上的三点:(x 0,f (x 0)), (x 1,f (x 1)),(x 2,f (x 2))作一抛物线y =P (x )(即拉格朗日插值多项式,见第十七章,§2,三),抛物线与x 轴有两个交点,取离x 2较近的一点作为x 3;再过三点(x 1,f (x 1)), (x 2,f (x 2)), (x 3,f (x 3))作一抛物线(图3.8中的虚线),它与x 轴有两个交点,取离x 3较近的一点作为x 4 ,依此法作出点x i -2, x i -1, x i ,再过三点(x i -2,f (x i -2)), (x i -1,f (x i -1)), (x i ,f (x i ))作一抛物线与x 轴有两个交点,取离x i 较近的一点作为x i +1,等等. 对于预先给定的允许误差ε,当迭代过程进行到⎪x i +1-x i ⎪<ε时,就取x i +1作为f (x )=0的一个近似根. 由此得到的序列是收敛的.极限值∞→=n n x lim ξ,就是方程f (x )=0的根. 迭代步骤如下:(1)根据经验对上式(1)可取x 0=-1, x 1=1, x 2=0作为初始值,于是f (x 0)=(-1)n +(-1)n -1a 1+ -a n -1+a n f (x 1)=1+a 1+ +a n f (x 2)=a n或用x =0附近的近似值f (x 0)≈a n -2-a n -1+a n f (x 1) ≈a n -2+a n -1+a n f (x 2)=a n(2)设λi =211-----i i i i x x x x , δi =1+λi =212-----i i i i x x x xg i =f (x i -2)λi 2 -f (x i -1)λi δi +f (x i )λi h i =f (x i -2)λi 2 -f (x i -1)δi 2 +f (x i )(λi +δi )由此根据x i -2, x i -1, x i 计算出λi , δi , g i , h i ,并根据下列公式计算出λi +1λi +1=ii i i i ii g x f h h x f δδ)(4)(22-±-(h i >0,根式取正号;h i <0,根式取负号)当f (x i -2)=f (x i -1)=f (x i )时,取λi +1=1. (3)根据公式x i +1=λi +1(x i -x i -1)+x i计算出x i +1八、林士谔—赵访熊法(劈因子法)由于解二次方程是容易的,因此在求实系数代数方程f (x )=x n +a 1x n -1+ +a n -1x +a n =0的复根时,如果找出f (x )的一个二次因子,就等于找到方程的一对复根. 设f (x )的一个近似二次因子(任意选取)为ω (x )=x 2+px +q可用下述方法使它精确化:(1)用ω (x )去除f (x ),得到商式Q (x )和余式R (x ),即 f (x )= ω (x )Q (x )+R (x )=(x 2+px +q )(x n -2+b 1x n -3+ +b n -3x +b n -2)+(r 1τ+r 2)式中商式与余式的系数可用下面的递推公式算出:b k =a k -pb k -1-qb k -2, k =1,2, ,n b -1=0, b 0=1r 1=b n -1=a n -1-pb n -2-qb n -3 r 2=b n +pb n -1=a n -qb n -2(2)用ω (x )去除xQ (x )得到余式R [1](x )=R 11x +R 21`式中R 11,R 21,由下面的递推公式算出:c k =b n -pc k -1-qc k -2, k =1,2, ,n -3 c -1=0, c 0=1R 11=b n -2-pc n -3-qc n -4 R 21=-qc n -3(3)用ω (x )去除Q (x )得到余式R [2](x )=R 12x +R 22`式中R 12,R 22,由下面的公式算出:R 12=b n -3-pc n -4-qc n -5 R 21=b n -2-qc n -4(4)解二元一次线性方程组⎩⎨⎧=+=+2222111211r R u R r R u R υυ 得到u ,υ.(5)修正后的二次式为ω [1](x )=x 2+(p +u )x +(q +υ)如果它还不够精确,再重复(1)至(5)的步骤进行修正,直到足够精确为止. 林士谔—赵访熊法求实系数代数方程的复根,其优点是避免了复数运算,缺点是程序比较复杂. 九、下降法对任意实系数超越方程组⎪⎪⎩⎪⎪⎨⎧===0),,,(0),,,(0),,,(21212211n n n n x x x f x x x f x x x f (1) 定义目标函数F (x 1,x 2, ,x n )=∑=ni i f 12如果F (ξ1,ξ2, ,ξn )<ε(ε为在一定精确度下给定的适当小的正数),则认为ξ1,ξ2, ,ξn 为方程组(1)的解. 具体计算步骤如下:(1)任取一组初始值x 1(0),x 2(0), ,x n (0)(全不为零),设已按照下述过程计算到第m 步得到一组值:x 1(m ),x 2(m ), ,x n (m )(2)计算F m =F (x 1(m ),x 2(m ), ,x n (m ))(3)若F m <ε,则x 1(m ),x 2(m ), ,x n (m )是所求的解,否则计算n 个偏导数:im i m H x F 1)(=∂∂[F (x 1(m ),x 2(m ), ,x i (m )+H i , , x n (m ))-F (x 1(m ),x 2(m ), ,x n (m ))] H i =ωx i (m )i =1,2, ,n(4)计算x i (m +1)= x i (m ))(m immx F ∂∂-λ, i =1,2, ,n式中∑=⎪⎪⎭⎫⎝⎛∂∂=ni m i m m n m m m x F x x x F 12)()()(2)(1),,,( λ得到一组{x i (m +1)},再重复(2),(3),(4)的计算.。

牛顿求根法计算

牛顿求根法计算

这三个根周围构成三个“吸引盆”,初始点迅速被吸引到盆内,最后停止在三点之一。用计算机迭代, 以当前点到三个终点的距离远近为标准,标上不同的颜色,就能得到美丽的分形图,特别是在 120 线、240 线附近有复杂的“项链”结构。
五、实验结论 实验图形说明了牛顿法“以直代曲”,逐次逼近的本质。 六、注记 本实验用牛顿求根法绘出了一元方程的分形图,1027 李生寿 一、问题叙述 求代数方程 f(x)=0 的精确解是很难的事情,特别地当 f(x)是 高于 5 次的多项式时, 不能通过多项式系数的有限次运算得到根的表达式。 在这种情况下求方程的近似解却是可以 的,牛顿法就是一种比较好的逐次逼近法。以 f(x)=x3-1 为例,用牛顿法生成分形图形。 二、问题分析 首先猜测一个值 x1,用它近似方程的根 c,用过(x1,f(x1))点的切线 y=f(x1)+f’(x1)(x-x1)近似代替曲线 f(x),然后用切线方程 y=f(x1)+f’(x1)(x-x1)=0 的 根 x=x2=x1-f(x1)/f’(x1)近似代替曲线方程的根 c,这样就得到 c 的第二个近似值。 依此类 推可得到迭代公式。 在复平面上选定一个区域,对于任意初始点(除去(0,0)点),讨论它在牛顿法迭代过程 中的行为。一般选 f(x)=xp-1,其中 p 是大于 2 的正整数。这样,迭代公式还可以 改写为对 于 x3-1=0,有三个根:x1=1,x2=[-1+SQR(3)i]/2,x3=[-1-SQR(3)i]/2,三个根均匀地分布 在单位圆上。迭代过程要先将复数分解为实部和虚部:
x→2x/3+(x2-y2)/[3(x2+y2)2], y→2y/3-2xy/[3(x2+y2)2]
三、实验程序 N=160; warning off [X,Y]=meshgrid((-N:N)/N*2); [m,n]=find(X==0&Y==0); X(m,n)=1; Y(m,n)=1; R=zeros(321); G=R; B=R; for k=1:30; Xn=2*X/3+(X.^2-Y.^2)./(3*(X.^2+Y.^2)); Yn=2*Y/3-2*X.*Y./(3*(X.^2+Y.^2)); X=Xn; Y=Yn; end R(X>0.8)=1; G(Y<-0.5)=1; B(Y>0.5)=1; imshow(cat(3,R,G,B)) 四、实验数据结果及分析 程序运行后,图形如下:
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

实验三求代数方程的近似根(解)一、问题背景和实验目的二、相关函数(命令)及简介三、实验容四、自己动手一、问题背景和实验目的求代数方程的根是最常见的数学问题之一(这里称为代数方程,主要是想和后面的微分方程区别开.为简明起见,在本实验的以下叙述中,把代数方程简称为方程),当是一次多项式时,称为线性方程,否则称之为非线性方程.当是非线性方程时,由于的多样性,尚无一般的解析解法可使用,但如果对任意的精度要求,能求出方程的近似根,则可以认为求根的计算问题已经解决,至少能满足实际要求.本实验介绍一些求方程实根的近似值的有效方法,要求在使用这些方法前先确定求根区间,或给出某根的近似值.在实际问题抽象出的数学模型中,可以根据物理背景确定;也可根据的草图等方法确定,还可用对分法、迭代法以及牛顿切线法大致确定根的分布情况.通过本实验希望你能:1. 了解对分法、迭代法、牛顿切线法求方程近似根的基本过程;2. 求代数方程(组)的解.二、相关函数(命令)及简介1.abs( ):求绝对值函数.2.diff(f):对独立变量求微分,f 为符号表达式.diff(f, 'a'):对变量a求微分,f 为符号表达式.diff(f, 'a', n):对变量 a 求 n 次微分,f 为符号表达式.例如:syms x tdiff(sin(x^2)*t^6, 't', 6)ans=720*sin(x^2)3.roots([c(1), c(2), …, c(n+1)]):求解多项式的所有根.例如:求解:.p = [1 -6 -72 -27];r = roots(p)r =12.1229-5.7345-0.38844.solve('表达式'):求表达式的解.solve('2*sin(x)=1')ans =1/6*pi5.linsolve(A, b):求线性方程组 A*x=b 的解.例如:A= [9 0; -1 8]; b=[1; 2];linsolve(A, b)ans=[ 1/9][19/72]6.fzero(fun, x0):在x0附近求fun 的解.其中fun为一个定义的函数,用“函数名”方式进行调用.例如:fzero(sin, 3)ans=3.14167.subs(f, 'x ', a):将 a 的值赋给符号表达式 f 中的 x,并计算出值.例如:subs('x^2 ', 'x ', 2)ans = 4三、实验容首先,我们介绍几种与求根有关的方法:1.对分法对分法思想:将区域不断对分,判断根在某个分段,再对该段对分,依此类推,直到满足精度为止.对分法适用于求有根区间的单实根或奇重实根.设在上连续,,即,或,.则根据连续函数的介值定理,在至少存在一点,使.下面的方法可以求出该根:(1)令,计算;(2)若,则是的根,停止计算,输出结果.若,则令,,若,则令,;.……,有、以及相应的.(3) 若 (为预先给定的精度要求),退出计算,输出结果;反之,返回(1),重复(1),(2),(3).以上方法可得到每次缩小一半的区间序列,在中含有方程的根.当区间长很小时,取其中点为根的近似值,显然有以上公式可用于估计对分次数.分析以上过程不难知道,对分法的收敛速度与公比为的等比级数相同.由于,可知大约对分10次,近似根的精度可提高三位小数.对分法的收敛速度较慢,它常用来试探实根的分布区间,或求根的近似值.2. 迭代法1)迭代法的基本思想:由方程构造一个等价方程从某个近似根出发,令,可得序列,这种方法称为迭代法.若收敛,即,只要连续,有即可知,的极限是的根,也就是的根.当然,若发散,迭代法就失败.以下给出迭代过程收敛的一些判别方法:定义:如果根的某个邻域中,使对任意的,迭代过程,收敛,则称迭代过程在附近局部收敛.定理1:设,在的某个邻域连续,并且,,则对任何,由迭代决定的序列收敛于.定理2:条件同定理 1,则定理3:已知方程,且(1) 对任意的,有.(2) 对任意的,有,则对任意的,迭代生成的序列收敛于的根,且.以上给出的收敛定理中的条件要严格验证都较困难,实用时常用以下不严格的标准:当根区间较小,且对某一,明显小于1时,则迭代收敛(参见附录3).2) 迭代法的加速:a) 松弛法:若与同是的近似值,则是两个近似值的加权平均,其中称为权重,现通过确定看能否得到加速.迭代方程是:其中,令,试确定:当时,有,即当,时,可望获得较好的加速效果,于是有松弛法:,松弛法的加速效果是明显的 (见附录4),甚至不收敛的迭代函数经加速后也能获得收敛.b) Altken方法:松弛法要先计算,在使用中有时不方便,为此发展出以下的 Altken 公式:,是它的根,是其近似根.设,,因为,用差商近似代替,有,解出,得由此得出公式;;,这就是Altken 公式,它的加速效果也是十分明显的,它同样可使不收敛的迭代格式获得收敛(见附录5).3. 牛顿(Newton)法(牛顿切线法)1) 牛顿法的基本思想:是非线性方程,一般较难解决,多采用线性化方法.记:是一次多项式,用作为的近似方程.的解为记为,一般地,记即为牛顿法公式.2) 牛顿法的收敛速度:对牛顿法,迭代形式为:注意分子上的,所以当时,,牛顿法至少是二阶收敛的,而在重根附近,牛顿法是线性收敛的.牛顿法的缺点是:(1)对重根收敛很慢;(2)对初值要求较严,要求相当接近真值.因此,常用其他方法确定初值,再用牛顿法提高精度.4. 求方程根(解)的其它方法(1) solve('x^3-3*x+1=0')(2) roots([1 0 -3 1])(3) fzero('x^3-3*x+1', -2)(4) fzero('x^3-3*x+1', 0.5)(5) fzero('x^3-3*x+1', 1.4)(6) linsolve([1, 2, 3; 4, 5, 6; 7, 8, 0], [1, 2, 3]')体会一下,(2)(5) 用了上述 1 3 中的哪一种方法?以下是本实验中的几个具体的实验,详细的程序清单参见附录.具体实验1:对分法先作图观察方程:的实根的分布区间,再利用对分法在这些区间上分别求出根的近似值.输入以下命令,可得的图象:f='x^3-3*x+1';g='0';ezplot(f, [-4, 4]);hold on;ezplot(g, [-4, 4]); %目的是画出直线 y=0,即 x 轴grid on;axis([-4 4 -5 5]);hold off具体实验2:普通迭代法采用迭代过程:求方程在 0.5 附近的根,精确到第 4 位小数.构造等价方程:用迭代公式:,用 Matlab 编写的程序参见附录2.请利用上述程序填写下表:分析:将附录2第4行中的分别改为以及,问运行的结果是什么?你能分析得到其中的原因吗?看看下面的“具体实验3”是想向你表达一个什么意思.用 Matlab 编写的程序参见附录3.具体实验3:收敛/发散判断设方程的三个根近似地取,和,这些近似值可以用上面的对分法求得.迭代形式一:收敛 (很可能收敛,下同)不收敛 (很可能不收敛,下同)不收敛迭代形式二:收敛不收敛不收敛迭代形式三:不收敛收敛收敛具体实验4:迭代法的加速1——松弛迭代法,,迭代公式为程序参见附录4.具体实验5:迭代法的加速2——Altken迭代法迭代公式为:,,程序参见附录5.具体实验6:牛顿法用牛顿法计算方程在-2到2之间的三个根.提示:,迭代公式:程序参见附录6 (牛顿法程序).具体实验7:其他方法求下列代数方程(组)的解:(1)命令:solve('x^5-x+1=0')(2)命令:[x, y]=solve('2*x+3*y=0', '4*x^2+3*y=1')(3) 求线性方程组的解,已知,命令:for i=1:5for j=1:5m(i, j)=i+j-1;endendm(5, 5)=0;b=[1:5]'linsolve(m, b)思考:若,或是类似的但阶数更大的稀疏方阵,则应如何得到?四、自己动手1.对分法可以用来求偶重根附近的近似解吗? 为什么?2.对照具体实验2、4、5,你可以得出什么结论?3.选择适当的迭代过程,分别使用:(1)普通迭代法;(2)与之相应的松弛迭代法和 Altken 迭代法.求解方程在 1.4 附近的根,精确到4位小数,请注意迭代次数的变化.4.分别用对分法、普通迭代法、松弛迭代法、Altken 迭代法、牛顿切法线等5种方法,求方程的正的近似根,.(建议取.时间许可的话,可进一步考虑的情况.)上一页回目录下一页。

相关文档
最新文档