计算方法大作业非线性方程求根的新方法
第6章 非线性方程求根(1、二分法、迭代法)

(2) 如果将原方程化为等价方程 x = 仍取初值
x0 = 0
3
3
x+1 2
x1 =
x0 + 1 = 2
3
3
1 ≈ 0 .7937 2
1 .7937 ≈ 0 .9644 2
x2 =
依此类推,得 依此类推, x3 = 0.9940 同样的方程 x4 = 0.9990 不同的迭代格式 x5 = 0.9998 x6 = 1.0000 有不同的结果 x7 = 1.0000 已经收敛, 已经收敛,故原方程的解为 x = 1.0000
用一般迭代法求方程x lnx= 在区间( 例:用一般迭代法求方程x-lnx=2在区间(2,∞) 内的根,要求|x 内的根,要求|xk-xk-1|/|xk|<=10-8 f(x)=x-lnx解:令f(x)=x-lnx-2 f(2)<0,f(4)>0,故方程在 2,4) 故方程在( f(2)<0,f(4)>0,故方程在(2,4)内至少有一个根
y p1 p0
y=x y=g(x)
y p0
y=x
p1 x x0 y y=g(x) x1 x* y=x y y=g(x) p0 x0 x* x1
y=g(x)
x
y=x
p0 p1 x x1 x0 x* x0 x* x1 p1 x
f(x)=0化为等价方程x=g(x)的方式是不唯 f(x)=0化为等价方程x=g(x)的方式是不唯 化为等价方程x=g(x) 一的,有的收敛,有的发散. 一的,有的收敛,有的发散. example: For example:2x3-x-1=0
1 3 ( x + 1 ) = g ( x ) 进行迭代,则在 进行迭代,则在(1, 3
求解非线性方程的三种新的迭代法

求解非线性方程的三种新的迭代法非线性方程是指未知数的高次幂或三角函数、指数函数等构成的方程。
非线性方程的求解是数值计算中的一个重要问题,常用的方法有迭代法、试位法、牛顿法等。
下面介绍三种新的迭代法。
1. 牛顿法的改进牛顿法是一种求解非线性方程的常用方法,通过选择合适的初始值,可以得到方程的一个根。
在某些情况下,牛顿法的收敛速度较慢,甚至可能发散。
为了克服这个问题,有人提出了牛顿法的改进方法。
改进的思想是在每一步的迭代中引入一个修正因子,使得每一步的迭代都能够加速收敛。
这个修正因子可以选择为方程导数的逆矩阵,或者通过数值计算方法来估计。
通过引入修正因子,可以使得牛顿法的收敛速度更快,提高求解非线性方程的效率。
2. 弦截法弦截法是一种求解非线性方程的迭代法,它可以看作是牛顿法的一种变形。
在牛顿法中,通过选择切线与x轴的交点作为新的逼近解,而在弦截法中,通过选择切线与两个初始逼近解的连线的交点作为新的逼近解。
弦截法的迭代公式为:Xn+1 = Xn - f(Xn) * (Xn - Xn-1) / (f(Xn) - f(Xn-1))在每一步迭代中,选择两个初始逼近解Xn和Xn-1,代入上述迭代公式即可求得新的逼近解Xn+1。
通过不断迭代,可以逐渐接近方程的根。
3. 牛顿-拉夫逊法牛顿-拉夫逊法是一种变步长的牛顿法,它的主要思想是通过动态调整迭代步长的大小来提高求解非线性方程的效率。
在牛顿-拉夫逊法中,首先根据初始解得到牛顿法的逼近解,然后根据逼近解和方程的误差,动态调整迭代步长。
如果逼近解接近方程的根,将步长增加,以加快收敛速度;如果逼近解偏离方程的根,将步长减小,以避免迭代发散。
λ为步长调整因子,可以根据迭代过程中的收敛情况进行动态调整。
牛顿法的改进、弦截法和牛顿-拉夫逊法是三种求解非线性方程的新的迭代法。
这些方法通过引入修正因子、变化逼近解和动态调整步长等方法,可以提高求解非线性方程的效率和收敛速度。
计算方法第三章非线性方程求根2

今讨论 Newton 迭代格式的收敛速度。先看定义
定义 3.4 设序列{ pk } 收敛于 p ,且 pk ≠ p , 如果存
在常数α ≥ 1及常数 λ > 0 ,使迭代误差 ek = pk − p 满足极限
=
f ′′( x* ) 2 f ′( x* )
这说明,当 f ′( x* ) ≠ 0 ,Newton 迭代格式具有二次
的收敛速度。
计算方法
例 3:用 Newton 迭代法解方程 xe x − 1 = 0 , 精
度要求 ε = 10−5 。
解: f (x) = xex −1, f '(x) = ex (1+ x)
是求解非线性方程的有效方法之一。但它每次迭代均需 计算函数值与导数值,故计算量较大。而且当导数值提 供有困难时, Newton 法无法进行。
计算方法
例 3:用 Newton 迭代法解方程 xex − 1 = 0 , 精度要求ε = 10−5 。
解:Newton 迭代函数为
ϕ(x) =
x−
f (x) f ′( x)
x1
=
−1 +
−5 5+5
=
− 0.05 ,
x2
=
−0 .5
+
f (− 0.5) = − 0.26 f ′(−0.5)
x3 = −0.26 +
f (−0.26) f ′(−0.26)
xk
−
f ( xk ) ,故有迭代格式 f ′( xk )
xk+1 =
非线性方程求根word版

第7章 非线性方程求根本章主要内容:1.区间二分法. 2切线法. 3.弦位法. 4.一般迭代法.重点、难点一、区间二分法区间二分法是求方程f(x)=0根的近似值的常用方法。
基本思想:利用有根区间的判别方法确定方程根的区间[a,b] ,将有根区间平分为二;再利用有根区间的判别方法判断那一个区间是有根区间;重复上述步骤,直到小区间端点差的绝对值小于等于精度要求的数值,则用将上一区间的分半值作为方程的根的近似值。
区间二分法的计算步骤如下: 1.计算区间端点的函数值f(a) , f(b)(不妨设f(a)<0,f(b)>0);确定初始有根区间[a,b]. 2.二分有根区间[a,b],并计算)2(ba f + 取21b a x +=3.判断: 若0)(1=x f ,则方程的根为1x x =*;若 0)(1>x f ,则有根区间为[]1,x a x ∈*;令[]],[,111b a x a =若 0)(1<x f ,则有根区间为[]b x x ,1∈*;令 []],[,111b a b x =4. 如果│b-a │<ε(ε为误差限),则方程的根为2ba x +=*;否则转向步骤2,继续二分有根区间[a 1,b 1],并计算中点值,继续有根区间的判断,直到满足精度要求为止,即│b n -a n │<ε二分次数的确定:如果给定误差限ε,则需要二分的次数可由公式12ln ln )ln(---≥εa b n 确定应二分的次数。
例1 用区间二分法求方程0353=+-x x 在某区间内实根的近似值(精确到0.001)【思路】参见上述区间二分法的计算步骤解 ∵f(1.8)=-0.168<0, f(1.9)=0.359>0 ∴f(x)在区间[1.8 ,1.9]内有一个根。
由公式 644.512ln 001.0ln 1.0ln 12ln ln )ln(=--=---≥εa b n取n=6, 计算结果列表如下:则方程在区间[1.8,1.9]内所求近似值为x *≈ x = 1.8328125区间二分法的优点是计算程序简单,只要f (x )在区间[a,b]上连续,区间二分法就可使用,但区间二分法不能用来求偶次重根,由于区间二分法收敛比较慢,在实际计算中,区间二分法常用来求比较好的含根区间和初始近似值,以便进一步使用收敛更快的迭代法求出更精确的近似值。
求解非线性方程和方程组的一些新方法

求解非线性方程和方程组的一些新方法求解线性方程分为两种方法–二分法和迭代法常见的方法一共有5种二分法迭代法牛顿法割线法拟牛顿法Halley法使用条件二分法需要知道两个自变量,分别是一个根的两侧牛顿法迭代法是最常用的方法,收敛性信赖于初值,取不同的初值可以的方程不同的根,函数用的是一阶导数,输入的是一个猜想的可能的值割线法给定两个初值再带入计算,比如要在2附近求一个根,那就可以假设这个范围是(1.9,2)拟牛顿法这个比较方便,用时最好可以找到一个好的初始值Halley法需要知道函数值以及它的一阶求导、二阶求导这里我从计算代码的角度来解释一下,代码按以下顺序给出。
把方程组直接带入已知条件,就可以得到答案。
二分法基本函数是这样子的:y = dichotomy(fun,a,b,tol);二分法的算法要输入四个变量,fun,a,b,tol:函数,一个根的左右点,tol=1.0e-6function y =fun(x)y = x^3-5* x +4.272;上面这个就是定义的fun,每次的输入的方程不同,第一条不动,直接改第二行就可以的。
比如这里我们要计算的方程y = x^3 - 5 * x + 4.272;我们是可以通过简单计算得到一个根的两侧分别是1和1.3那在窗口指令指令中输入x=dichotomy(’fun‘,1,1.3,1.0e-6)就可以得到结果function y =dichotomy(fun,a,b,tol)if nargin <4tol =1.0e-5;endn =1;iffeval(fun,a)*feval(fun,b)<0c =(a+b)/2;while(abs(b-c)>tol)&&(abs(feval(fun,c))>tol)if(feval(fun,c)*feval( fun,a)>0)a = c;c=(a+b)/2;elseif(feval(fun,c)*feval(fun,a)<0)b = c;c =(a+b)/2;elsey = c;tol =100;endn = n +1;endy = c;elseif feval(fun,a)==0y = a;elseif feval(fun,b)==0y = b;elsedisp('there may not be a root in the interval');endnfunction y =fun(x)y = x^3-5* x +4.272;牛顿法还是用刚才那道题,y = x^3 - 5 * x + 4.272,一阶导是y = 3 * x^2 - 5;function y =dfun(x)y =3* x^2-5;下面的是具体的算法,根据x = newton(x0,tol),我们只需要输入一个我们猜想的值就可以。
数值计算大作业

数值计算大作业题目一、非线性方程求根1.题目假设人口随时间和当时人口数目成比例连续增长,在此假设下人口在短期内的增长建立数学模型。
(1)如果令()N t 表示在t 时刻的人口数目,β表示固定的人口出生率,则人口数目满足微分方程()()dN t N t dt β=,此方程的解为0()=tN t N e β; (2)如果允许移民移入且速率为恒定的v ,则微分方程变成()()dN t N t vdt β=+, 此方程的解为0()=+(1)t t vN t N e e βββ-;假设某地区初始有1000000人,在第一年有435000人移入,又假设在第一年年底该地区人口数量1564000人,试通过下面的方程确定人口出生率β,精确到410-;且通过这个数值来预测第二年年末的人口数,假设移民速度v 保持不变。
4350001564000=1000000(1)e e βββ+-2.数学原理采用牛顿迭代法,牛顿迭代法的数学原理是,对于方程0)(=x f ,如果)(x f 是线性函数,则它的求根是很容易的,牛顿迭代法实质上是一种线性化方法,其基本思想是将非线性方程0)(=x f 逐步归结为某种线性方程来求解。
设已知方程0)(=x f 有近似根k x (假定0)(≠'x f ),将函数)(x f 在点k x进行泰勒展开,有.))(()()(⋅⋅⋅+-'+≈k k k x x x f x f x f于是方程0)(=x f 可近似地表示为))(()(=-'+k k x x x f x f这是个线性方程,记其根为1k x +,则1k x +的计算公式为)()(1k k k k x f x f x x '-==+,,,2,1,0⋅⋅⋅=k这就是牛顿迭代法,简称牛顿法。
3.程序设计作出函数的图像,大概估计出根的位置fplot('1000*exp(x)+(435*x)*(exp(x)-1)-1564',[0 3]);grid大概估计出初始值x=0.5function [p1,err,k,y]=newton(f,df,p0,delta,max1) % f 是非线性系数 % df 是f 的微商 % p0是初始值% dalta 是给定允许误差 % max1是迭代的最大次数 % p1是牛顿法求得的方程近似解 % err 是p0误差估计 % k 是迭代次数 p0,feval('f',p0) for k=1:max1p1=p0-feval('f',p0)/feval('df',p0); err=abs(p1-p0); p0=p1;p1,err,k,y=feval('f',p1) if(err<delta)|(y==0), break,endp1,err,k,y=feval('f',p1) endfunction y=f(x)y=1000000*exp(x)+435000*(exp(x)-1)/x-1564000; function y=df(x)y=1000000*exp(x)+435000*(exp(x)/x-(exp(x)-1)/x^2);4.结果分析与讨论newton('f','df',1.2,10^(-4),10) 运行后得出结果 p0 =0.5000p1 =0.1679 err =0.3321 k =1 y =9.2415e+004 p1 =0.1031 err =0.0648 k =2 y =2.7701e+003 p1 =0.1010 err =0.0021 k =3 y =2.6953p1 =0.1010 err =2.0129e-006 k =4 y = 2.5576e-006 ans =0.1010运算后的结果为1010.0=β,通过这个数值来预测第二年年末的人口数,0.10100.1010435000f(t)=1000000(1)0.1010t te e +-t=2时候对于f ()2187945.865x =实践表明,当初始值难以确定时,迭代法就不一定收敛了,因此要根据问题实际背景或者二分法先得一个较好的初始值,然后再进行迭代;再者迭代函数选择不合适的话,采用不动点迭代法也有可能出现不收敛的情况;因此我采用的是牛顿法。
第七章 非线性方程求根

§7.1 二分法 §7.2 迭代法及其收敛性 §7.3 迭代法的加速方法 §7.4 Newton迭代法 §7.5 弦截法与抛物线法 §7.6 解非线性方程组的Newton迭代法
§7.1 二分法(图示)(返回)
§7.2 迭代法及其收敛性(返回)
不动点迭代 压缩映像原理 局部收敛性 收敛阶
y (x)
x
x* x2
x1
x0 x
x* x0 x1
x2
Aitken加速法图示
y y (x)
yx
x x1 x* x1 x0 x2
二分法图示
y
y f (x)
a0 O x* b2 b1
b0
Hale Waihona Puke xNewton迭代法的几何解释
y y f (x)
x* x2
x x1 x0
Newton迭代法算例
不动点迭代(图示)(返回)
压缩映像原理(返回)(例题)
局部收敛性(返回)(例题)
收敛阶(返回)
§7.3 迭代法的加速方法(返回)
Aitken加速法 Steffensen加速法
Aitken加速法(图示)
Steffensen加速法
§7.4 Newton迭代法(返回)
Newton迭代法及其收敛性 简化Newton法 Newton下山法 重根情形的Newton迭代法
Newton迭代法及其收敛性(算例)
简化Newton法
Newton下山法
重根情形的Newton迭代法
§7.5 弦截法与抛物线法(返回)
§7.6 解非线性方程组的 Newton迭代法(返回)
压缩映像原理例题
局部收敛性例题
不动点迭代图示
数值计算大作业

课程设计课程名称:设计题目:学号:姓名:完成时间:题目一:非线性方程求根 一 摘要非线性方程的解析解通常很难给出,因此非线性方程的数值解就尤为重要。
本实验通过使用常用的求解方法二分法和Newton 法及改进的Newton 法处理几个题目,分析并总结不同方法处理问题的优缺点。
观察迭代次数,收敛速度及初值选取对迭代的影响。
用Newton 法计算下列方程(1) 310x x --= , 初值分别为01x =,00.45x =,00.65x =; (2) 32943892940x x x +-+= 其三个根分别为1,3,98-。
当选择初值02x =时给出结果并分析现象,当6510ε-=⨯,迭代停止。
解:1)采用MATLAB 进行计算;首先定义了Newton 法:function kk=newton(f,df,x0,tol,N)% Newton Method (牛顿法)% The first parameter f is a external function with respect to viable x.(第一个参数也就是本题所用的函数f )% The second parameter df is the first order diffential function of fx.(第二个参数也就是本体所用函数f 的导数方程df ) % x0 is initial iteration point(初值). % tol is the tolerance of the loop (精度).% N is the maximum number of iterations (循环上限). x=x0;f0=eval(f);df0=eval(df); n=0;disp(' [ n xn xn+1 fn+1 ]'); while n<=N x1=x0-f0/df0; x=x1; f1=eval(f); X=[n,x0,x1,f1]; disp(X);if abs(x0-x1)<tolfprintf('The procedure was successful.') kk=X; return else n=n+1; x0=x1;f0=f1;endendif n==N+1fprintf('the method failed after N iterations. '),kk=0;End我们把Newton法存为.m格式的文件;之后我们运行程序:clear;clc;syms xf=x^3-x-1;df=diff(f,x);x=newton(f,df,1,0.0001,50);x会得到一下结果[ n xn xn+1 fn+1 ]0 1.0000 1.5000 0.87501.0000 1.5000 1.0625 -0.86302.0000 1.0625 1.4940 0.8408到第50次迭代时候会出现该问题:47.0000 1.4898 1.0814 -0.816748.0000 1.0814 1.4898 0.816749.0000 1.4898 1.0814 -0.816750.0000 1.0814 1.4898 0.8167the method failed after N iterations.x =0;同样测试x0=0.45、0.65得不出结果,判断出初值离真值太远,所以我们采用牛顿下山法进行计算迭代:我们定义了其中的f函数和df函数,并且分别存为.m格式的文件,其代码如下:f:function y=f(x)y=x^3-x-1;df:function y=df(x)y=3*x^2-1;之后我们定义newton下山法同时也存为.m的程序:function [x,i]=downnewton(f,df,x0,tol)k=0;i=1;disp(' [ n xn xn+1 fn+1 ]'); while(k==0)fx=feval('f',x0);dfx=feval('df',x0);t=0;u=1;while(t==0)dx=-fx/dfx;x1=x0+u*dx;fx1=feval('f',x1);fx0=feval('f',x0);if(abs(fx1)>abs(fx0));u=u/2;elset=1;endendX=[i,x0,x1,fx1];disp(X);if(abs(fx1)<tol)k=1;elsex0=x1;i=i+1;endendx=x1;i=i;end之后带入x0=0.45;downnewton('f','df',0.45,10^(-6))[ n xn xn+1 fn+1 ]1.0000 0.4500 -0.4155 -0.65622.0000 -0.4155 -0.5857 -0.61523.0000 -0.5857 -0.5754 -0.61514.0000 -0.5754 -0.5782 -0.61515.0000 -0.5782 -0.5773 -0.61516.0000 -0.5773 -0.5774 -0.61517.0000 -0.5774 -0.5773 -0.61518.0000 -0.5773 -0.5774 -0.61519.0000 -0.5774 -0.5774 -0.615110.0000 -0.5774 -0.5774 -0.615111.0000 -0.5774 1.3131 -0.049012.0000 1.3131 1.3248 0.000513.0000 1.3248 1.3247 0.0000ans =1.3247带入x0=0.6;downnewton('f','df',0.6,10^(-6))[ n xn xn+1 fn+1 ]1.0000 0.6000 1.1406 -0.65662.0000 1.1406 1.3668 0.18663.0000 1.3668 1.3263 0.00674.0000 1.3263 1.3247 0.00005.0000 1.3247 1.3247 0.0000ans =1.3247带入x0=1;downnewton('f','df',1,10^(-6))[ n xn xn+1 fn+1 ]1.0000 1.0000 1.5000 0.87502.0000 1.5000 1.3478 0.10073.0000 1.3478 1.3252 0.00214.0000 1.3252 1.3247 0.0000ans =1.32472)同样采用Newton下山法:重新定义f、df:f:function y=f(x)y=x^3+94*x^2-389*x+294;df:function y=df(x)y=3*x^2+188*x-389;再带入初值x0=2;downnewton('f','df',2,5*10^(-6))[ n xn xn+1 fn+1 ]1 2 -98 0ans =-98得出x=-98;分析:先画出该函数的图像;x=(-100:.1:100);ezplot('x^3+94*x^2-389*x+294',[-100 100]) 得出该图像如图:-100-80-60-40-20020406080024681012141618x 105xx 3+94 x 2-389 x+294根据牛顿法的几何解释,在x0=2的点做切线,与y 相交,交点的横坐标值为x=-98则结束了该现象。
第7章非线性方程求根

第7章 非线性方程求根本章主要内容:1.区间二分法. 2切线法. 3.弦位法. 4.一般迭代法.重点、难点一、区间二分法区间二分法是求方程f(x)=0根的近似值的常用方法。
基本思想:利用有根区间的判别方法确定方程根的区间[a,b] ,将有根区间平分为二;再利用有根区间的判别方法判断那一个区间是有根区间;重复上述步骤,直到小区间端点差的绝对值小于等于精度要求的数值,则用将上一区间的分半值作为方程的根的近似值。
区间二分法的计算步骤如下: 1.计算区间端点的函数值f(a) , f(b)(不妨设f(a)<0,f(b)>0);确定初始有根区间[a,b]. 2.二分有根区间[a,b],并计算)2(ba f + 取21b a x +=3.判断: 若0)(1=x f ,则方程的根为1x x =*;若 0)(1>x f ,则有根区间为[]1,x a x ∈*;令[]],[,111b a x a =若 0)(1<x f ,则有根区间为[]b x x ,1∈*;令 []],[,111b a b x =4. 如果│b-a │<ε(ε为误差限),则方程的根为2ba x +=*;否则转向步骤2,继续二分有根区间[a 1,b 1],并计算中点值,继续有根区间的判断,直到满足精度要求为止,即│b n -a n │<ε二分次数的确定:如果给定误差限ε,则需要二分的次数可由公式12ln ln )ln(---≥εa b n 确定应二分的次数。
例1 用区间二分法求方程0353=+-x x 在某区间内实根的近似值(精确到0.001)【思路】参见上述区间二分法的计算步骤解 ∵f(1.8)=-0.168<0, f(1.9)=0.359>0 ∴f(x)在区间[1.8 ,1.9]内有一个根。
由公式 644.512ln 001.0ln 1.0ln 12ln ln )ln(=--=---≥εa b n取n=6, 计算结果列表如下:则方程在区间[1.8,1.9]内所求近似值为x *≈ x = 1.8328125区间二分法的优点是计算程序简单,只要f (x )在区间[a,b]上连续,区间二分法就可使用,但区间二分法不能用来求偶次重根,由于区间二分法收敛比较慢,在实际计算中,区间二分法常用来求比较好的含根区间和初始近似值,以便进一步使用收敛更快的迭代法求出更精确的近似值。
求解非线性方程的三种新的迭代法

求解非线性方程的三种新的迭代法非线性方程在数学和工程中都有广泛的应用,对非线性方程进行求解是数学分析中的一项重要任务。
在数值分析中,求解非线性方程的方法可以分为直接法和迭代法两种,而迭代法又是非常常用的方法之一。
本文将介绍三种新的非线性方程迭代法,分别是Newton 法、Secant法和Broyden法。
Newton法是最经典的非线性方程迭代法之一,它是通过不断迭代来逼近方程的根。
Newton法的基本思想是在给定初始值的情况下,通过计算方程的导数来获得更接近根的逼近值,然后不断迭代直到满足精度要求为止。
具体的迭代公式为:\[ x_{n+1} = x_n - \frac{f(x_n)}{f'(x_n)} \]\(x_n\)是第n次迭代的逼近值,\(f(x)\)是要求解的非线性方程,\(f'(x)\)是\(f(x)\)的导数。
在实际应用中,Newton法通常要求方程的一阶导数存在且连续,同时初始值的选取也对迭代的收敛性有很大的影响。
Secant法是Newton法的一种改进方法,它是通过直线的斜率来近似代替导数的方法来进行迭代。
Secant法的迭代公式为:Secant法相比于Newton法来说更加灵活,因为它不需要求解方程的导数,而直接利用两个相邻点的函数值来进行迭代。
然而Secant法的收敛速度相对较慢,而且在一些特殊情况下可能会出现迭代发散的情况。
Broyden法是一种迭代算法,它是通过不断更新雅各比矩阵的逆来逼近方程的根。
Broyden法的迭代公式为:\(x_n\)是第n次迭代的逼近值,\(J_n\)是第n次迭代的雅各比矩阵。
Broyden法适用于一些特殊情况下,比如方程的雅各比矩阵难以求解的情况,或者求解方程的雅各比矩阵耗时较长的情况。
Newton法、Secant法和Broyden法都是针对非线性方程迭代求解的常用方法,它们各自有着不同的特点和适用范围。
在实际应用中,我们需要根据具体的情况来选择合适的迭代方法,并且在迭代过程中需要考虑其收敛性、稳定性和计算效率等因素。
非线性函数方程根的求解法

非线性函数方程根的求解法
一、问题提出
设方程f(x)=x 3
- 3x –1=0 有三个实根 x *1=1.8793 , x *2=-0.34727 ,x *3=-1.53209
现采用下面六种不同迭代格式,求 f(x)=0的根 x *1 或x *2 1、 x = 2
13x x + 2、 x = 3
13-x 3、 x = 313+x
4、 x = 3
12-x 5、 x = x
13+ 6、 x = x - ()1133123---x x x
二、要求
1、编制一个程序进行运算,最后分析每种迭代格式的敛散情况;
2、用事后误差估计k k x x -+1〈ε来控制迭代次数,并且打印出迭代的次数;
3、初始值的选取对迭代收敛有何影响;
4、分析迭代收敛和发散的原因。
三、目的和意义
1、通过实验进一步了解方程求根的算法;
2、认识选择迭代格式的重要性;
3、掌握迭代算法和精度控制;
4、明确迭代收敛性与初值选取的关系。
四、附加实验内容(可选做)
1、用二分法求方程013
=--x x 在[1,2]的近似根,准确到10-2;
2、分别用牛顿法和弦截法解方程01=-x xe ,准确到10-5;。
第七章非线性方程求根2014-10

3
xk 1
(k 0,1, 2,
)
不妨取x0 =1.5 迭代序列 xk k 0 。
实际计算时如果保留6 位有效数字,则由计算结果得
x7 x8 于是可以认为近似解 x7 x *
计算结果见下表:
Hale Waihona Puke k 0时x0 1.5迭代次数 k 1 2 3 4 5 6 7 8 迭代解 xk 1.35721 1.33086 1.32588 1.32494 1.32476 1.32473 1.32472 1.32472
设x1* x2*都是方程x ( x)在区间 [a, b]上的根, 由条件(2)
| x1 * x2 *|| ( x1*) ( x2 *) |
L | x1 * x2 *|
0 L 1
| x1 * x2 *|
引出矛盾 x1* x2* , 即区间 [ a, b] 内只能有唯一的实根。
对上述同一问题改写为另一种等价形式: x x3 1 从而可建立迭代格式如下: 迭代初值仍取 x0 1.5 迭代次数 k 迭代解 xk
xk 1 ( xk )
1 2 3 4
2.375 12.39 152.52 3547972.6
继续迭代下去计算结果会越来越大,不可能趋于某个 极限,这种不收敛的迭代过程称为发散。
ab , b) 则 x1 ( 2
即为所求根否则,
反复执行步骤(2)及步骤(3),直到区间 [ a, b] 长度小于容许误差,此时的区间中点 a b x 2 x 即为所求的近似根。
这样不断将区间分半,得到一系列区间
[a, b] [a1, b1 ]
[an , bn ]
第二节 非线性方程求根

8
2015/5/17
二分法——误差估计
每次根的估计值为
xr =
xl + xu 2
old x new − x r r
真实根落在长度为 的区间中, new old xu − xl
xr − xr = 2
xu − xl L = 2 2
x
old r
前一次迭代
x* xrnew
xl
x rnew − x* xrnew ×100%
v = 40.059
图解法不精确,但可以提供初始猜测值, 理解函数性质和预测数值方法缺陷。
2015/5/17
数值计算方法
4
非线性方程求根
二分法 试位法 不动点迭代 Newton-Raphson方法 割线法
划界法 Bracketing Methods
开方法 Open Methods
非线性方程求根
浙江大学控制系
非线性方程求根
方程
f ( x)= ax + bx + c= 0
2
− b ± b 2 − 4ac x= 2a
代数方程求根问题是一古老的数学问题,十六世纪人们找到了 求三次、四次方程根的公式,十九世纪证明了大于等于五次的 代数方程没有一般的求根公式。
ax 5 + bx 4 + cx 3 + dx 2 + ex + f = 0 ⇒ x = ? sin x + x = 0 ⇒ x = ?
2015/5/17
数值计算方法
20
试位法
使用试位法求解例2中方程的根,并与二分法进行对比。 解: xl=12, xu=16
非线性方程求根方法

第12章非线性方程求根方法二分法二分法算法1.计算[a, b]区间的中点存放在变量x0中,x0 ⇐(a+b)/2;2.如果函数值f(x0)=0, 则x0是f(x)=0的实根x* ,输出根x0, 终止;3.如果函数值f(a)f(x0)<0,则b ⇐ x0 ,否则a ⇐ x0;4.如果b-a≤ε(ε为给定的精度),则输出根的近似值(a+b)/2,终止,否则转1。
二分法程序Clear[x]f[x_]=Input[“键入函数f(x)=”];a= Input[“键入左端点a=”];b=Input[“键入右端点b=”];Print[“a=”,a, “b=”,b, “ f(x)=”,f[x]]e1=10^(-10);eps=Input[“键入根的误差限eps=”];n=0;While[b-a>eps,x=(a+b)/2;n=n+1;w=f[x];If[Abs[w]<e1,Print[“n=”,n, “x=”,x, “ f[x]=”,w];Break[]];p=f[a]*w//N;If[p<0,b=x,a=x];Print[“n=”,n, “x=”,x//N, “eps=”,b-a//N]]说明:本程序用于求非线性方程f(x)=0在区间[a, b]内的根,这里要求f(x)在区间[a, b]连续,且f(a)f(b)<0。
程序执行后,先通过键盘输入函数f(x)和区间左端点a和右端点b及根的精度要求e,程序即可给出每次二分的次数和对应的点列{x k},其中最后输出的结果即为所求的根。
程序中变量说明x:存放初值x0和二分法中的x k;a:存放含根区间的左端点a k;b:存放含根区间的右端点b k;e1: 描述f(x k)=0的微小值, 这里用|f(x k)|<e1表示f(x k)=0;n: 存放二分次数。
注:语句“If[p<0,b=x,a=x]”中“p”的一定要是算出的数值,否则会出现错误。
计算方法2非线性方程求根

收敛性
牛顿-拉夫逊方法具有局部收敛性,当初始值选取合适时,可以迅 速收敛到方程的根。同时,该方法对单根和重根均有效。
05
数值稳定性与误差分析
数值稳定性概念
数值稳定性
指算法在计算过程中,对于输入数据的微小变化,输出结果的变化也是微小的,即算法对输入误差的 敏感性较低。
算法设计与实现过程
算法设计
针对所选择的非线性方程,设计一种有效的 求根算法。常见的求根算法包括二分法、牛 顿法、割线法等。在选择算法时,需要考虑 算法的收敛性、稳定性和计算效率等因素。
算法实现
根据所设计的算法,编写相应的计算机程序。 程序应包括输入、计算和输出三个主要部分。 输入部分用于接收用户输入的非线性方程和 初始值等信息;计算部分用于执行求根算法 的计算过程;输出部分用于显示计算结果和 相关信息。
研究不足与展望
对于某些特殊类型的非线性方程,如高 次方程、多元方程等,本文算法可能存 在一定的局限性和不足,需要进一步研 究和改进。
在实际应用中,非线性方程的求解往往受到 各种因素的影响,如噪声、误差等,本文算 法在处理这些问题时可能需要进一步完善和 优化。
未来可以进一步探索非线性方程求 根的新方法和新技术,如基于深度 学习的求解方法、基于高性能计算 的并行化技术等,以提高求解效率 和精度。
高斯-赛德尔迭代法
在雅可比迭代法的基础上,采 用逐次超松弛技术加速收敛。
牛顿-拉夫逊迭代法
将非线性方程组转化为等价的 线性方程组,然后利用牛顿拉夫逊方法进行迭代求解。
牛顿-拉夫逊方法
基本思想
将非线性方程在根的附近用泰勒级数展开,忽略高阶项,得到近似 线性方程,然后求解该线性方程得到根的近似值。
非线性方程求根

若 (x)C1[a,b] 且对任意 x[a,b] 有
|’(x)|L<1
则上述定理中的结论成立。
收敛性结论表明:收敛性与初始值的选取无关
全局收敛
Numerical Analys求 f(x) = x3 – x – 1=0 在区间 [1, 2] 中的根
( x) ( y) L x y
则对任意初始值 x0[a,b],不动点迭代 xk+1=(xk) 收敛,且
k L L xk x xk xk 1 x1 x0 1 L 1 L
证明:P217
14
05:29:38
Numerical Analysis
收敛性分析
| e k 1 | lim C p k | e | k
其中常数 C>0,则称该迭代为 p 阶收敛。
(1) 当 p =1 时称为线性收敛,此时 C < 1
(2) 当 p =2 时称为二次收敛,或平方收敛 (3) 当 p >1 时称为超线性收敛
二分法是线性收敛的
05:29:38
若 ’(x*) 0,则不动点迭代 xk+1 = (xk) 线性收敛 Numerical Analysis
则(x) 在 [a,b] 上存在唯一的不动点 x* 证明:P216
05:29:38
Numerical Analysis
13
收敛性分析
不动点迭代的收敛性 定理:设 (x) C[a,b] 且满足
(1) 对任意的 x[a,b] 有 (x)[a,b]
(2) 存在常数 0<L<1,使得任意的 x, y[a,b] 有
y=x y= (x)
y p0
y=x
newton-raphson method

newton-raphson method
Newton-Raphson method (牛顿-拉夫逊方法) 是一种用于求解非线性方程的数值解法。
它基于牛顿迭代法,用于迭代求解非线性方程的根。
它的基本思想是:对于一个非线性方程,先猜测一个初始解,然后通过不断迭代,逼近真正的根。
在每一次迭代中,估计函数的零点附近的一次函数来求解方程。
然后用新得到的解来更新近似解。
重复这个过程直到满足精度要求或者达到最大迭代次数为止。
牛顿-拉夫逊方法的优点在于其收敛速度快,精度高,但是它对初始解的选取有较高的要求。
如果初始解选取不当,可能会导致迭代不收敛或者收敛到偏差较大的解,所以在使用牛顿-拉夫逊方法时需要注意选取合理的初始解。
在实际应用中,牛顿-拉夫逊方法需要计算函数的一阶导数和二阶导数,如果函数不容易求导或者导函数不稳定,可能导致运算缓慢或者不稳定。
总之,牛顿-拉夫逊方法是一种有效的求解非线性方程的数值解法,但需要注意初始解的选择和导函数的计算。
计算方法一元非线性方程求根2.2

2x
对应的迭代法为
xk 1
1 2
( xk
2 xk
),
k
0,1,...。
取初值x0 1,迭代结果分别收敛到x* 2,计算结
果如表62 3所示。
表62-3
k 01
2
3
4
5
xk 1 1.5 1.41666667 1.41421569 1.41421356 1.41421356 xk -1 -1.5 1.41666667 -1.41421569 -1.41421356 -1.41421356 6
输入对于执行输出并终止计算输出迭代失败信息终止计算下面给出迭代法的算法算法中下面给出迭代法的算法算法中为初值为初值为精度为精度为最大迭代次数为最大迭代次数为迭代函数
§2.2 一元方程的不动点迭代法
2.2.1 不动点迭代 一般地,为了求一元非线性方程
f (x) 0
(2.2.1)
的根,可以先将其转换为如下的等价形式
x x
(2.2.2)
式中连续函数x 称为迭代函数,并使两
个方程具有相同的解,然后构造迭代公式。
xk1 xk k 0,1,2
(2.2.3)
1
对于给定的初值 x0 ,由(2.2.3)可产生一
个迭代序列
xk
k 0
如果有 lim x x* k k
由于x 连续,
(2)对于任意的初始值x0 a,b由(2.2.3)式产
生的近似值序列xk
(3)有误差不等式
k 1
a,
b,并且
lim
k
xk
x*
xk
x*
l 1l
实验5 非线性方程求根

实验5 非线性方程求根一、实验目的:掌握二分法、牛顿法、弦截法求非线性方程的根。
二、实验内容:1、 用递推算法02x =1122n n nx x x +⎛⎫=+ ⎪⎝⎭(1)3x 的有效数字是几位?5(2)4x 的有效数字是否为3x 的2倍?若是,这是否表明该算法具有较高的计算效率?否(3)若近似值的误差精度要求为810-x(1)=2;for n=1:100x(n+1)=1/2*(x(n)+2/x(n));endx_3=x(4)x_4=x(5)x(1)=2;format longfor n=1:1000x(n+1)=1/2*(x(n)+2/x(n));if abs(x(n+1)-x(n))<10^-8break;endendx(n+1)2、 对于给定方程()310f x x x =--= (1) 用二分法计算它在(0,2)之间的近似根,要求精度到小数点后四位;(n=0,1,2-----------)(2)给出每次两分后的有根区间(3)画出每次两分的中点,直观描述两分法原理x=-1:0.0001:3;y=x.^3-x-1;a=0;b=2;plot(x,y);hold on;text(2.3,9,'\rightarrowf=x^3-x-1');plot([-1 3],[0 0],'r-');hold on;eps=1.0e-4;f1=subs(sym(f),findsym(sym(f)),a); %两端点的函数值f2=subs(sym(f),findsym(sym(f)),b);plot([0 0],[f1 0],'r-');hold on;pause(1);plot([2 2],[f2 0],'r-');hold on;pause(1);if (f1==0)root=a;endif (f2==0)root=b;endif (f1*f2>0)disp('两端点函数值乘积大于0!');return; %直接退出程序elseroot=FindRoots(f,a,b,eps) %调用求解子程序endfunction r=FindRoots(f,a,b,eps)f_1=subs(sym(f),findsym(sym(f)),a); %两端点的函数值f_2=subs(sym(f),findsym(sym(f)),b);mf=subs(sym(f),findsym(sym(f)),(a+b)/2); %中点函数值if(f_1*mf>0)t=(a+b)/2;fprintf('[%10.4f,%10.4f]\n',t,b);f_4=subs(sym(f),findsym(sym(f)),t);plot([t t],[0 f_4],'r-');hold on;pause(1);r=FindRoots(f,t,b,eps); %右递归elseif(f_1*mf==0)r=(a+b)/2;elseif(abs(b-a)<=eps)r=(b+3*a)/4;elses=(a+b)/2;fprintf('[%10.4f,%10.4f]\n',a,s);f_3=subs(sym(f),findsym(sym(f)),s);plot([s s],[0 f_3 ],'r-');hold on;pause(1);r=FindRoots(f,a,s,eps); %左递归endendendfunction f=f()syms m;f=m^3-m-1;[ 1.0000, 2.0000][ 1.0000, 1.5000][ 1.2500, 1.5000][ 1.2500, 1.3750][ 1.3125, 1.3750][ 1.3125, 1.3438][ 1.3125, 1.3281][ 1.3203, 1.3281][ 1.3242, 1.3281][ 1.3242, 1.3262][ 1.3242, 1.3252][ 1.3247, 1.3252][ 1.3247, 1.3250][ 1.3247, 1.3248][ 1.3247, 1.3248]root =1.3247-1-0.500.51 1.52 2.53-505101520253、 设方程为 ()32210200f x x x x =++-= (1) 给出用牛顿法求方程根的程序(2) 该迭代的收敛性与初值1x 选取是否有关,通过数值实验来回答这个问题;(3) 该迭代的快慢与与初值1x 选取是否有关,通过数值实验来回答这个问题;a=0;b=2;eps=1.0e-4;f1=subs(sym(f),findsym(sym(f)),a);f2=subs(sym(f),findsym(sym(f)),b);if(f1==0)root=a;endif(f2==0)root=b;endif(f1*f2>0)disp('两端点函数值乘积大于0!');return;elsetol=1;fun=diff(sym(f)); %求导数fa=subs(sym(f),findsym(sym(f)),a);fb=subs(sym(f),findsym(sym(f)),b);dfa=subs(sym(fun),findsym(sym(fun)),a);dfb=subs(sym(fun),findsym(sym(fun)),b);if(dfa>dfb) %初始值取两端点较大者root=a-fa/dfa;elseroot=b-fb/dfb;endwhile(tol>eps)r1=root;fx=subs(sym(f),findsym(sym(f)),r1);dfx=subs(sym(fun),findsym(sym(fun)),r1); %求该点的导数值root=r1-fx/dfx; %迭代的核心公式 tol=abs(root-r1);endendrootfunction f=f()syms x;f=x^3+2*x^2+10*x-20;2 是 f(x)=arctan(x) 当x=2的时候发散;当x=1的时候收敛。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
计算方法大作业
题目:非线性方程求根的新方法
班级:xxx
学号:xxx
姓名:xxx
非线性方程求根的新方法
一、问题引入
在计算和实际问题中经常遇到如下非线性问题的求解:
F(x)=0 (1)
我们经常采用的方法是经典迭代法:
经典迭代方法
不动点迭代方法是一种应用广泛的方法,其加速方法较多,如Stiffensen加速方法的局
部收敛阶(以下简称为收敛阶)为2阶;牛顿迭代方法的收敛阶亦为2阶,且与其相联系的一
些方法如简化牛顿法、牛顿下山法、弦截法的收敛阶阶数介于1和2之间;而密勒法的收敛
阶与牛顿法接近,但计算量较大且涉及零点的选择问题,同时收敛阶也不够理想。
因此本文介绍一种新的迭代方法
从代数角度看,牛顿法和密勒法分别是将f(x)在xk附近近似为一线性函数和二次抛物插
值函数,一种很自然的想法就是能否利用Taylor展开,将f(x)在xk附近近似为其他的二次函
数?答案是肯定的.其中的一种方法是将f(x)在Xk处展开3项,此时收敛阶应高于牛顿法,这
正是本文的出发点.
二、算法推导
设函数f(x)在xk附近具有二阶连续导数,则可将f(x)在xk处进行二阶Taylor展开,方程(1)
可近似为如下二次方程:
f(xk)+f’(xk)(x-xk)+2^(-1)f’’(xk)(x-xk)^2=0,(2)
即
2^(-1)f’’(xk)x^2+(f’(xk)-xkf’’(xk))x+2^(-1)f’’(xk)xk^2-xkf’(xk)+f(xk)=0(3)
利用求根公式可得
X=xk-(f’’(xk))^(-1)(f’(xk))-sqrt((f’(xk)^2±2f’’(xk)f(xk)))(4)
其中±符号的选取视具体问题而定,从而可构造迭代公式
X k+1=xk-(f’’(xk))^(-1)(f’(xk))-sqrt((f’(xk)^2±2f’’(xk)f(xk)))(5)
确定了根号前正负号的迭代公式(5),可称为基于牛顿法和Taylor展开的方法,简记为BNT
方法.
为描述方便起见,以下将f(xk),f’(xk),f’’(xk)分别记为f,f’,f’’.首先,二次方程(3)对应于一
条抛物曲线,其开口方向由f’’(xk),x∈U(xk)的符号确定,其中U(xk)为xk的某邻域,其顶点
为
P(xk-(f’’)^(-1)f’,fk-(2f’’)^(-1)(f’)^2).为使(5)式唯一确定x k+1,须讨论根式前正负号的取舍问
题.下面从该方法的几何意义分析(5)式中正负号的取舍.
1)当f(xk)=o时,z。即为所求的根.
2)当f(xk)>O时,根据y=f(x)的如下4种不同情形(见图1)确定(5)式中根号前的符号.
(a)当f’’(xk)
f’’(xk)
f’’(xk)>o,f(xk)
算法1
Step 1:取初始迭代值z。,给出最大迭代次数N和精度£,并令累计迭代次数k=0.
Step 2:k=k+1.
Step 3:若f’’(xk)=0,则此时f(x)可近似为线性函数,采用牛顿法求之;否则计算△=
(f’(xk))^2—2f’’(xk)f(xk).
Step 4:判定△的符号,若△<0,则算法停止;否则利用(5)进行计算,得到x k+1.
Step 5:判定是否停止迭代,如果k>N或|x k+1-xk|≤£,则停止迭代;否则回到Step2.
注:①当k>N时,非线性迭代不收敛,当Iz川一z。I≤£时,非线性迭代收敛;②当△<0
时,该非线性方程在该区间不存在实根;③该方法可推广到非线性方程组的情形.
2.2局部收敛阶
类似于牛顿法,可将BNT方法视为一种不动点方法,则对应的迭代函数为
φ x =x−(f′′(x))−1(𝑓′(𝑥)∓ 𝑓′ 𝑥 2−2𝑓′′(𝑥)𝑓(𝑥)_))(6)
利用迭代函数(6),通过计算与推导,可得BNT方法的局部收敛阶.
设f(x)∈𝑐3[a,b],x为φ x 的不动点,BNT方法的局部收敛阶为3阶.
3 数值实验
为验证BNT方法的有效性,下面进行数值实验.
例:求方程f(x)=𝑥
3
−𝑥−1=0在区间[1,2]上的根.
首先,可构造两种不同的不动点迭代方法,分别为x𝑘+1=(𝑥𝑘+1)1/3,x
𝑘+1=𝑥𝑘
1/3
−1,k=1,
2,3,⋯,并简记为FPl,FP2.将BNT方法与FPl,FP2,FP2的Stenffensen加速、牛顿法
和密勒法求根进行比较,数值实验中初始迭代值取x。=1.5,近似真解为x=1.324 7,结
果如表l所示.由表1可知:
BNT方法的收敛速度最快,且较牛顿法快,从而验证了本文
方法的有效性.
表1 对比实验结果
迭代方法 迭代次数
FP1 7
FP2
不收敛
FP2的Stenffensen加速
6
牛顿法
4
密勒法
5
BNP方法
3