实验四 非线性方程的求根
非线性方程求根
0 A a1 b1a2 b2
Bx
例 方程f(x)=x3-x-1=0 确定其有根区间 解:用试凑的方法,不难发现
f(0)<0 f(2)>0 在区间(0,2)内至少有一个实根 设从x=0出发,取h=0.5为步长向右进行根的 搜索,列表如下
x
0 0.5 1.0
1.5
2
f(x) – –
–
+
+
可以看出,在[1.0,1.5]内必有一根
仍取 x0 1.5 ,则有 x1 2.375 ,x2 12.39 显然结果越来越大,{xk } 是发散序列
迭代法的几何意义
通常将方程f(x)=0化为与它同解的方程 x (x) 的方法不止一种,有的收敛,有的不收敛,这取决于(x) 的性态,方程 x (x) 的求根问题在几何上就是确定曲
误差限为 x* xk
1 2 k 1
(b a)
只要取k满足
1 2 k 1 (b a)
1 103 2
即可,亦即
2k 103
k 3 lg 10 9.97 1g 2
所以需二分10次便可达到要求。
二分法的优点是不管有根区间 a, b 多大,总能求出
满足精度要求的根,且对函数f(x)的要求不高,只要连续即可,
线y= (x) 与直线y=x的交点P*的横坐标(如图所示)
y
Q1
Q2
P*
P1
P2
x*
x2
x1
0 (x* ) 1
(a)
y=x
y= ( x)
P0
x0
x
y
y= (x)
(x)P*
y=x
x1 x3 x*
第4章 非线性方程求根的迭代法
精选版课件ppt
18
若{ x k }收敛,即lkimxk x 称迭代法收敛,否则称迭代法发散
精选版课件ppt
19
迭代法的几何意义
x (x)yy(xx)交点的横坐标
y=x
x* x2
x1
x0
精选版课件ppt
20
例题
例 试用迭代法求方程
f(x)x3x10
在区间(1,2)内的实根。 解:由x3 x1 建立迭代关系
精选版课件ppt
30
例题
若取迭代函数 (x)x3 1 , 因为|'(x)||3x2|3 x[1,2] 不满足压缩映像原理,故不能肯定 xn1 (xn) n0,1,....收敛到方程的根。
精选版课件ppt
31
简单迭代收敛情况的几何解释
精选版课件ppt
32
是否取到合适的初值,是否构造合适的 迭代格式,对于是否收敛是关键的。
x2 0.739085178
x3 0.739085133 x4 0.739085133
故取 x* x4 0.739085133
精选版课件ppt
48
例题
例 用Newton法计算 。 2
解: f(x)x2a0 其 中 a2
由 f (x) 2x及Newton迭代公式得
xn 1xnx2 n 2x n21 2(xnx 2 n) n0,1 ,......
迭代法及收敛性
考察方程 x(x)。不能直接求出它的
根,但如果给出根的某个猜测值 x 0, 代
入 x(x)中的右端得到x1 (x0) ,再以 x 1
为一个猜测值,代入x(x) 的右端
得 x2 (x1)
非线性方程的求根方法
取 x0=0,
3 xk xk 3 xk 1 xk 2 3 xk 1
(k = 0, 1, · · · · · )
y x1 x2 x3 x0 x
y=x3 – x – 3
Newton迭代法陷入死循环的另一个例子
f’<0, f”>0
f’>0, f”>0
f’>0, f”<0
f’<0, f”<0
牛顿迭代法的收敛域问题:
用牛顿迭代法求解复数方程 z3 – 1 = 0,该方程在复 平面上三个根分别是 z1 = 1
1 3 z2 i 2 2
1 3 z3 i 2 2
选择中心位于坐标原点,边长 为2的正方形内的任意点作初始 值,进行迭代,把收敛到三个 根的初值分为三类,并分别标 上不同颜色(例如红、黄、 蓝)。对充分多的初始点进行 实验,绘出牛顿迭代法对该方 程的收敛域彩色图。
牛顿法的计算步骤: 1)给出初始近似值x0,及精度 2)计算:按迭代公式
f ( x0 ) x0 x1 f ( x 0 )
计算出x1 3)若 x1 x0 ,则转向4);否则 x1 x0 转向2) 4)输出满足精度的根x1,结束
例2.5 用牛顿法解方程 x=e–x
在 x0=0.5 附近的根。
由定理2.5知牛顿迭代公式具有局部收敛性。
由定理2.6知 Newton迭代法至少平方收敛。因此用 Newton法求单根的收敛速度是较快的。
[ f ( x )]2 f ( x ) f ( x ) f ( x ) f ( x ) 2[ f ( x )]2 f ( x ) ( x ) [ f ( x )]3
x1 x*
f ( x1 ) x2 x1 ( x1 x0 ) f ( x1 ) f ( x0 ) xk 1 f ( xk ) xk ( x k x k 1 ) f ( x k ) f ( x k 1 ) ( k =1,2,· · · · · · ·)
非线性方程求根的方法简介与例题
非线性方程求根的方法简介与例题第一篇:非线性方程求根的方法简介与例题非线性方程f(x)=0求根主要可以采用下面三种方法,下面简单介绍下,并附例题,让解法更一目了然。
1)二分法简介:计算步骤如下:例题:2)不动点迭代,也叫简单迭代。
隐式化为显式,迭代法是一种逐次逼近法;其中f(x)'<1才能满足上述迭代格式。
继续迭代。
3)牛顿迭代法,实际上也叫切线法,是通过下面的方式推导出来的。
上述题目很简单,用牛顿法迭代就可以达到目的。
我们先设f(x)=x-cosx=0由公式得x=x0-x-cosx1+sinx0我们用二分法的原理,我们取x得x1=π,=x0-x0-cosx01+sinx0x1-cosx11+sinx1x2-cosx21+sinx2=π-π+11=1 x2=x1-=1-1-cos11+sin1=0.9998x3=x2-=1-1-cos0.99981+sin0.9998=0.9998x3=x2,并具有四位有效数字,所以只需迭代两次就可以达到题目所需的精度要求第二篇:非线性方程迭代上机作业总体要求:1. 2.开发语言可用任一种高级语言作业包括1)一份实验报告2)电子版作业的全套(压缩后提交在Webcc上),包括:⌝程序源代码;⌝可执行程序;⌝电子版实验报告(内容包括:一、实验目的二、模型建立三、模型求解 3.1 开发环境3.2 程序设计说明(要求设计为通用的)3.3 源代码 3.4 程序使用说明 3.5 模型的解四、小结(可含个人心得体会))第六章逐次逼近法§ 3 非线性方程的迭代解法上机实验题求 x5-3x3+x-1= 0 在区间[-8,8〕上的全部实根.试分别用:(1)二分法;(2)Newton法;(3)弦截法(割线法);(4)Newton下山法;求方程的根.准确到6位有效数字.要求:讨论求解的全过程,对所用算法的局部收敛性,优缺点等作分析及比较.以实验报告的形式提交.完成时间:5月18日第三篇:非线性方程的数值解法《计算方法》期末论文论文题目非线性方程的数值解法学院专业班级姓名学号指导教师日期目录摘要第1 章绪论1.1 问题的提出和研究目的和意义 1.2 国内外相关研究综述 1.3 论文的结构与研究方法第2 章非线性方程的数值解法2.1 二分法 2.2 迭代法2.3 迭代法的局部收敛性及收敛的阶 2.4 牛顿迭代法 2.5 牛顿法的改进 2.6 插值摘要数值计算方法,是一种研究解决数学问题的数值近似解方法,它的计算对象是那些。
第4章非线性方程求根资料
第4章 非线性方程求根问题的引入我们知道,在多项式方程中,求根公式有一、二、三、四次方程,当n 大于等于已经证明不能用公式计算,因此需要寻找另一种计算方法;同时在工程和科学技术中许多问题常常归结为求解非线性方程式的问题,非线性方程的解法也需要给出一种方法,本章来讨论这个问题。
例1 关于真实气体的状态方程为是气体常数)是绝对温度,是气体体积,是气体压力,(其中,R T V p RT b V Vap =-+))((2如果p 与T 都已知,则求体积V 的方程为b Va p RTV ++=)(2 这是一个非线性方程,如何求解呢? 通常,非线性方程的根不止一个,对于非线性方程一般用对分法与迭代法求解。
在用迭代法时,要给定初始值或求解范围。
4.1 实根的对分法设有非线性方程0)(=x f 为[a,b]上的连续函数,且0)()(<⋅b f a f (不妨设方程只有一个实根),二分法叙述如下:第1步:)(2/)(],[],[111111x f b a x b a b a 的函数值,计算区间中点记+==,如果 即为所求的根;如果,则110)(x x f = 0)()(11<⋅x f a f则根一定在区间内内,否则一定在区间],[],[],[],[22112211b a b x b a x a ≡≡。
于是我们得到长度缩小一半的含根区间],[22b a ,即 )(21)(21,0)()(112222a b a b a b b f a f -=-=-<⋅ 设已经完成了第1,第2,……,第k-1步,得到分半计算的含根区间],,[],[],[2211k k b a b a b a ⊃⊃⊃ 且满足: (1)],[,0)()(*k k k k b a x b f a f ∈<⋅(2))(21)(211111a b a b a b k k k k -=-=---,现我们看第k 步:。
如果即计算)(,2/)(k k k k x f b a x += 即为所求。
数值分析实验报告——非线性方程求根
数值分析实验报告——非线性方程求根一、实验目的:1.掌握求解非线性方程的常用方法;2.了解非线性方程求根问题的数值解法;3.熟悉使用数值分析软件进行非线性方程求根的实现。
二、实验原理:非线性方程指的是形如f(x)=0的方程,其中f(x)是一个非线性函数。
非线性方程求根的常用方法包括二分法、割线法和牛顿法等。
其中,二分法是通过不断缩小区间范围来逼近方程的解;割线法是通过使用割线来逼近方程的解;牛顿法则是通过使用切线来逼近方程的解。
对于给定的非线性方程,可以根据实际情况选择合适的方法进行求根。
三、实验内容:1.编写求解非线性方程的函数,包括二分法、割线法和牛顿法;2.使用编写的函数求解给定的非线性方程,比较各个方法的收敛速度和精确程度;3.根据实际情况分析和选择合适的方法进行求根。
四、实验步骤:1.针对给定的非线性方程,编写二分法的函数实现:(1)首先确定方程的解存在的区间;(2)根据方程的解存在的区间,使用二分法逐步缩小区间范围;(3)根据设定的精度要求,不断循环迭代,直至满足要求或达到迭代次数限制;2.针对给定的非线性方程,编写割线法的函数实现:(1)首先需要确定方程的解存在的初始点;(2)根据方程的解存在的初始点,根据割线的定义进行迭代;(3)设定迭代的精度要求和限制次数,结束迭代;3.针对给定的非线性方程,编写牛顿法的函数实现:(1)首先需要确定方程的解存在的初始点;(2)根据方程的解存在的初始点,根据牛顿法的定义进行迭代;(3)设定迭代的精度要求和限制次数,结束迭代;4.根据给定的非线性方程,分别使用二分法、割线法和牛顿法进行求解,并比较各个方法的收敛速度和精确程度;5.分析实际情况,选择合适的方法进行求解。
五、实验结果:4.通过比较,发现割线法和牛顿法的收敛速度较快,精确程度较高,因此选择割线法进行求解。
六、实验总结:通过本次实验,我掌握了求解非线性方程的常用方法,并使用数值分析软件实现了二分法、割线法和牛顿法。
数值分析实验报告——非线性方程求根
数值分析实验报告——非线性方程求根二分法一、题目用二分法求方程=的所有根x.13要求每个根的误差小于-x+0.001..21二、方法二分法三、程序1、Jiangerfen.M的程序function[c,yc]=jiangerfen(f,a,b,tol1,tol2)if nargin<4 tol1=1e-3;tol2=1e-3;end%nargin<4表示若赋的值个数小于4,则tol1和tol2取默认值。
ya=feval('f',a);%令x=a代入到方程f中,ya即f(a)。
yb=feval('f',b);if ya*yb>0,disp('(a,b)不是有根区间');return,endmax=1+round((log(b -a)-log(tol2))/log(2));%round函数是将数据取整,使数据等于其最接近的整数。
for k=1:maxc=(a+b)/2;yc=feval('f',c);if((b-a)/2<tol2)|(abs(yc)<tol1),break,endif yb*yc<0a=c;ya=yc;elseb=c;yb=yc;endendk,c=(a+b)/2,yc=feval('f',c)2、f.M的程序function y=f(x);y=x^3-2*x-1;四、结果>> format compact>> fplot('[x^3-2*x-1,0]',[-1.5,2]);>> jiangerfen('f',-1.5,-0.8);k =8c =-0.9996yc =3.9017e-004>> jiangerfen('f',-0.8,-0.3);k =8c =-0.6184yc =2.7772e-004>> jiangerfen('f',1.3,2);k =10c =1.6179yc =-9.5348e-004>> jiangerfen('f',2,3);(a,b)不是有根区间方程f(x)=x^3-2*x-1的所有根为-0.9996,-0.6184 ,1.6179 。
数值分析非线性方程求根实验
实验报告一、实验目的1.迭代函数对收敛性的影响。
2.初值的选择对收敛性的影响。
二、实验题目1.用简单迭代法求方程01)(3=--=x x x f 的根。
分别化方程为如下等价方程: 31+=x x ;13-=x x ;x x 11+=;213-+=x x x 取初值5.10=x ,精度为410-,最大迭代次数为500,观察其计算结果并加以分析。
2.①用牛顿法求方程01)(3=-+=x x x f 在0.5附近的根,分别取初值1000,100,2,1,5.0,5.0,1,2,100,10000-----=x观察并比较计算结果,并加以分析。
②用牛顿法求方程0)(3=-=x x x f 所有根。
三、实验原理简单迭代法程序,牛顿迭代法程序。
四、实验内容及结果fun=inline('x^3-x-1');dfun=inline('3*x^2-1');-1000,x1=manewton(fun,dfun,-1000,1e-4) -100,x2=manewton(fun,dfun,-100,1e-4)-2,x3=manewton(fun,dfun,-2,1e-4)-1,x4=manewton(fun,dfun,-1,1e-4)-0.5,x5=manewton(fun,dfun,-0.5,1e-4) 0.5,x6=manewton(fun,dfun,0.5,1e-4)1,x7=manewton(fun,dfun,1,1e-4)2,x8=manewton(fun,dfun,2,1e-4)100,x9=manewton(fun,dfun,100,1e-4) 1000,x10=manewton(fun,dfun,1000,1e-4)3)在MA TLAB的主程序窗口输出以下结果:ans =-1000k=21x1 =0.682327804075895ans =-100k=16x2 =0.682327803903413ans =-2k=6x3 =0.682327803828020ans =-1k=5x4 =0.682327803828020ans =-0.500000000000000k=4x5 =0.682327803903932ans =0.500000000000000k=3x6 =0.682327803828347五、实验结果分析(1)实验1中用简单迭代法求方程01)(3=--=x x x f 的根:取初始值5.10=x 的时候,等价方程2和4是不收敛的。
第四章 非线性方程求根
4.1 方程求根与二分法
当 f ( x) 为代数多项式时,根据代数基本定理可知, n 次方程在复数域有且只有 n 个根,因此可利用迭代 法求代数方程的根。 二分法 若 f ( x) C[a, b] ,且 f (a) f (b) 0 ,根据连续函数性质 可知 f ( x) 在 [a, b]内至少有一个实根,此时称[a, b]为方程 若 f ( x) 可表示为 f ( x) ( x x* )m g ( x),其中 m 为正整数,且 g ( x* ) 0 。当 m 1 时,称 x* 为单根,若m 1 称 x* 为 m 重 根,或 f ( x) 的 m 重零点。若 x* 是 f ( x) 的 m 重零点,且 g ( x) 充分光滑,则
4.1 方程求根与二分法
这样,我们得到了一个序列 xn ,为确定 xn 的收敛性 我们有如下的定理: 定理:设 f ( x) C[a, b], f (a) f (b) 0, 则二分算法产生的 序列 xn 满足 xn x* (b a) / 2n ,其中 x* [a, b]为方程的根。 证明:因为 [an , bn ] 由[an1 , bn1 ] 对分得到,所以对 n 1 bn1 bn , 否则取 an1 an , bn1 xn , 这样必有 f (an1 ) f (bn1 ) 0 所以 [an1 , bn1 ] 就是新的有根区间,继续此过程,即可得 到结果。 算法:(1)令 x (a b) / 2 (2) 若 f ( x) 或 b x ,则输出 x ,结束 (3) 若 f (a) f ( x) 0 ,则令 a x ,否则令 b x (4) 转向1)
非线性方程求根
第二章非线性方程求根线性方程是方程式中仅包含未知量的一次方项和常数项的方程,除此之外的方程都是非线性方程(nonlinear equation). 例如,大家熟知的“一元二次方程”就是一个非线性方程. 多元线性方程组的求解是数值计算领域的一个重要问题,在后续几章将专门讨论. 本章介绍求解非线性方程的数值方法,主要针对实数域,重点是单个非线性方程的求根问题.2.1引言2.1.1非线性方程的解记要求解的单变量非线性方程为f(x)=0(2.1)其中函数f: ℝ→ℝ. 一般而言,非线性方程的解的存在性和个数是很难确定的,它可能无解,也可能有一个或多个解.例2.1 (非线性方程的解):分析下列非线性方程的解是否存在和解的个数.(1) e x+1=0. 此方程无解.(2) e−x−x=0. 此方程有一个解.(3) x2−4sinx=0. 此方程有两个解.(4) x3−6x2+5x=0. 此方程有三个解.(5) cosx=0. 此方程有无穷多个解.在实际问题中,往往要求的是自变量在一定范围内的解,比如限定x∈[a,b]. 函数f一般为连续函数,则可记为f(x)∈C[a,b],C[a,b]表示区间[a,b]上所有连续实函数的集合. 假设在区间[a, b]上方程(2.1)的根为x∗,也称x∗为函数f(x)的零点. 方程的根可能不唯一,而且同一个根x∗也可能是方程(2.1)的多重根.定义2.1:对光滑函数f,若f(x∗)=f′(x∗)=⋯=f(m−1)(x∗)=0,但f(m)(x∗)≠0,则称x∗为方程(2.1)的m重根. 当m=1时,即f(x∗)=0,f′(x∗)≠0时,称x∗为单根.对于多项式函数f(x),若x∗为m重根,则f(x)可因式分解为f(x)=(x−x∗)m g(x)其中g(x)也是多项式函数,且g(x∗)≠0. 很容易验证,f(x∗)=f′(x∗)=⋯=f(m−1)(x∗)=0,但f(m)(x∗)≠0,即多项式方程重根的概念与定义2.1是一致的. 对一般的函数f,x∗是方程(2.1)的重根的几何含义是,函数曲线在x∗处的斜率为0,且在该点处与x轴相交.非线性方程的一个特例是n次多项式方程(n≥2),根据代数基本定理可知,n次方程在复数域上有n个根(m重根计为m个根). 当n=1, 2时,方程的求解方法是大家熟知的. 当n=3, 4时,虽然也有求根公式,但已经很复杂,在实际计算时并不一定适用. 当n≥5时,不存在一般的求根公式,只能借助数值求解方法来求根.2.1.2问题的敏感性根据问题敏感性的定义,这里需要考虑输入数据的扰动对方程的根有多大影响. 要分析敏感性首先应假设问题中的数据如何扰动,一种易于分析的情况是将非线性方程写成:f(x)=y的形式,然后讨论y在0值附近的扰动造成的问题敏感性. 此时,求根问题变成了函数求值问题:y =f (x )的反问题. 若函数值f (x )对输入参数x 不敏感(x 在解x ∗附近变化),则求根问题将很敏感;反之,若函数值对参数值敏感的话,求根则不敏感. 这两种情况如图2-1所示.下面分析y 发生扰动Δy 引起的方程的根的扰动Δx . 由于当x =x ∗时,y =0,我们使用绝对(而不是相对)条件数:cond =|Δx |≈1|| 条件数的大小反映方程求根问题(2.1)的敏感程度,若|f ′(x ∗)|很小,则问题很敏感,是一个病态问题;反之,若|f ′(x ∗)|很大,则问题不敏感.一种特殊情况是f ′(x ∗)=0,即x ∗为重根,此时求根问题很敏感,原问题的微小扰动将造成很大的解误差,甚至改变解的存在性和唯一性(如图2-2,问题的扰动可能使解不存在).对于敏感的非线性方程求根问题,f (x )≈0并不意味着x 很接近x ∗,在后面讨论迭代解法的判停准则时应注意这一点.2.2二分法数值求解非线性方程通常是一个迭代的过程,迭代开始之前要先有个初始的近似解,然后随着迭代步数的增多,近似解越来越接近准确解,当达到一定要求时即停止计算过程. 本节先介绍一种最基本的方法——二分法(interval bisection method).2.2.1 方法原理先介绍有根区间的概念,有根区间就是包含至少一个根的区间,它限定了根存在的范围. 如果能计算出一个非常小的有根区间,那么区间的中点就是一个很好的近似解. 下面的定理给出了有根区间的充分条件.定理2.1:若f (x )∈C[a,b],且f (a )f (b )<0,则区间(a,b )内至少有一实根.这里省略定理证明过程,只给出图2-3作为一个解释.定理2.1给出了一种获得有根区间的方法,即通过看f (a )、f (b )两个值是否符号相反来判断(a, b)是否为有根区图2-1 方程求根问题的敏感性:(a)不敏感;(b)敏感.(a) (b)图2-2 f . 图2-3 若f (a )f (b )<0,则在区间(a,b )内至少有一实根.间. 在实际操作时,可在一个较大的范围内取多个点计算f(x)函数值,从而得到一个或多个有根区间. 另外应注意,根据定理2.1得到的有根区间内不一定只有一个根,这从图2-3也可以看出.二分法的思想很简单,就是每次将有根区间一分为二,得到长度逐次减半的区间序列{(a k,b k)},则区间中点x k=(a k+b k)2⁄就是第k步迭代的近似解. 具体算法如下:算法2.1:二分法输入:a, b, 函数f(x) ; 输出:x.While(b−a)> εdox:= a+(b−a)/2;If sign(f(x))=sign(f(a))thena:= x;Elseb:= x;EndEndx:= a+(b−a)/2.在算法2.1中,sign()表示取符号的函数,而二分迭代结束的条件为有根区间(a, b)的长度小于某个阈值ε. 应注意,浮点运算中几乎不可能出现等于0的情况,所以sign()函数的结果只是正号、或负号.假设二分法得到的有根区间序列为{(a k,b k),k=0,1,⋯},若取解x k=(a k+b k)2⁄,则误差|x k−x∗|<(b k−a k)2⁄=(b0−a0)2k+1⁄,k=0,1,2,⋯.(2.2) 根据公式(2.2)和对解的准确度的要求,也可以事先估算出二分迭代执行的次数,以及相应的计算量. 这里每步迭代的计算量主要是计算一次函数f(x k).例2.2(二分法):求方程f(x)=x4−x−2=0在区间[1.0, 1.5]上的一个实根,要求准确到小数点后第2位(四舍五入后).[解] 首先验证(1.0, 1.5)是否是一个有根区间,易知f(1.0)<0,f(1.5)>0. 所以将(1.0, 1.5)作为二分法的初始区间. 利用(2.2)式我们可以估计,若(b−a)2k+1⁄≤0.5×10−2(2.3) 则|x k−x∗|<0.5×10−2,即结果准确到了小数点后第2位. 代入a=1.0, b=1.5,求解(2.3)得,k≥log20.50.5×10−2−1=5.6取最小的整数值k=6. 只需二分6次,可得到满足精度要求的解. 计算过程中的数据和结果列于表2-1. 从中看出,准确到小数点后两位的解为x=1.356(准确解为1.353210).表2-1 采用二分法求解例2.2的过程和结果2.2.2 算法稳定性和结果准确度算法的稳定性考察的是计算过程中的误差对结果的影响. 对于二分法来说,主要的计算步骤是计算函数值,一般采用双精度浮点数计算函数值的误差很小,而其他计算是少量的加减法,因此不至于对有根区间,以及最终结果的准确度造成多大影响. 另外,在计算过程中解的误差限逐次减半,这也说明二分法是稳定的.在实际的浮点算术体系中,二分法运行结果的准确度不可能随迭代过程一直提高. 首先看一个例子.例 2.3(二分法准确度的极限):编写程序用二分法来求解方程f(x)=x2−2=0,初始区间为[1, 2].下面是用MATLAB语言编写的程序:M =2; a = 1; b= 2; k = 0;while b-a > eps //Matlab中的eps为2倍的机器精度,即2− 2 x = a + (b-a)/2;if x^2 > Mb = x //输出belsea = x //输出aendk = k+1;end这个程序执行了52步就结束了,输出结果如下:b = 1.50000000000000a = 1.25000000000000a = 1.37500000000000b = 1.43750000000000………………a = 1.41421356237309a = 1.41421356237309b = 1.41421356237310b = 1.41421356237310为了看得更清楚,输入MATLAB命令”format hex”,使输出按16进制格式显示,再运行一遍上述程序,最后的四个输出结果为:a = 3ff6a09e667f3bc8a = 3ff6a09e667f3bccb = 3ff6a09e667f3bceb = 3ff6a09e667f3bcd可以看出,最终区间(a, b)的两个端点已经是两个相邻的浮点数,即使让二分过程继续执行下去,区间仍然不会改变(由于a和b平均值的计算结果就是其中的某一个). 也就是说迭代再多的次数,结果的准确度也无法提高了.上述例子说明了二分法结果准确度的极限情况. 一般地,二分法迭代过程中,有根区间缩小的极限情况是使它的端点a k, b k为两个相邻的机器浮点数. 此时,b k−a k=2⌊log2|x∗|⌋∙2εmacℎ其中εmacℎ为机器精度,⌊∙⌋为下取整符号,而2⌊log2|x∗|⌋为x∗的二进制表示中指数的那部分. 在这种极端情况下,解的误差限就是区间长度,即|e(x k)|=|x k−x∗|≤2⌊log2|x∗|⌋∙2εmacℎ .(2.4) 在IEEE双精度浮点数系统下,εmacℎ=2− 3,则|e(x k)|≤2⌊log2|x∗|⌋∙2εmacℎ≤|x∗|∙2− 2≈|x∗|∙2.22×10−16 .根据(2.4)式,也可得到相对误差的上限:|e r(x k)|=|x k−x∗||x∗|≤2εmacℎ .(2.5)这个相对误差限正好是计算机中用浮点数表示实数的误差限(定理1.5)的两倍.公式(2.4)给出了用二分法求解时绝对误差限可能达到的最小值,它说明在准确解较大的情况下,在执行二分法时无论迭代多少次都无法保证解的误差非常小. 综合上述讨论以及公式(2.2),得到如下定理.定理2.2:在实际的浮点算术体系下采用二分法解方程f(x)=0,设初始有根区间为(a, b),则:(1) 结果的误差限最小可达到2⌊log2|x∗|⌋∙2εmacℎ,其中x∗为准确解,相对误差限最小可达2εmacℎ.(2) 若误差阈值ε大于或等于2⌊log2|x∗|⌋∙2εmacℎ,需执行的迭代步数为k=⌈log2(b−a)−1⌉ .(2.6)定理2.2的结论(2)的证明留给读者思考.最后,对二分法说明几点:●二分法是求单变量方程f(x)=0的实根的一种可靠算法,一定能收敛.●二分法解的误差不一定随迭代次数增加一直减小,在实际的有限精度算术体系中,误差限存在最小值.●二分法的缺点是有时不易确定合适的初始有根区间(含两个初始值)、收敛较慢、且无法求解偶数重的根. 因此,实际应用中常将二分法与其他方法结合起来.2.3不动点迭代法二分法的计算效率不够高,在本章后续部分将介绍几种应用广泛、收敛较快的迭代法. 本节介绍不动点迭代法及其收敛性理论,为后续其他方法的讨论建立基础.2.3.1基本原理通过某种等价变换,可将非线性方程(2.1)改写为:x=φ(x)(2.7)其中φ(x)为连续函数. 给定初始值x0后,可构造迭代计算公式:x k+1=φ(x k),(k=0,1,⋯)(2.8) 从而得到近似解序列{x k}. 由于方程(2.1)和(2.7)的等价关系,很容易证明若序列{x k}收敛,其极限必为原方程(2.1)的解x∗. 由于解x∗满足x∗=φ(x∗),称它为函数φ(x)的不动点(fixed point),此方法为求解非线性方程(2.1)的不动点迭代法(fixed-point iterative method).不动点迭代法的求解过程如图2-4所示,而算法描述图2-4 采用不动点迭代法,近似∗在下面给出.算法2.2:基于函数φ(x)的不动点迭代法输入:x 0, 函数f (x ), φ(x) ; 输出:x .k:= 0 ;While |f (x k )|> ε1 或|x k −x k−1|> ε2 dox k+1:=φ(x k ) ;k:= k +1 ;Endx:= x k .其中ε1和ε2为用于判断迭代是否应停止的两个阈值. 关于迭代的判停准则,我们在2.4.3节详细讨论.例 2.4(不动点迭代法):求f (x )=x 4−x −2=0在x 0=1.5附近的根. 以不同的方式得到方程的等价形式,研究相应的不动点迭代法的收敛情况.[解] 将原方程改为等价的(A), (B)两种形式,得到下述两种不动点迭代法.方法(A):将方程改写为x =x 4−2. 得到的迭代法计算公式为:x 0=1.5, x k+1=x k 4−2,(k =0,1,⋯). 计算出结果如下:x 1=1.54−2=3.0625,x 2=2.3753−1=85.9639,… …从上述计算结果看,序列{x k }有趋于无穷大的趋势,迭代法不收敛,无法求出近似解. 方法(B):将方程改写为x =√x +24. 得到的迭代法计算公式为:x 0=1.5, x k+1=√x k +24,(k =0,1,⋯). 计算出结果如下:x 1=√1.5+24=1.3678,x 2=√1.3678+24=1.3547,x 3=√1.3547+24=1.3534,x 4=√1.3534+24=1.3532,x =√1.3532+24=1.3532,从上述计算结果看,x 4和x 前5位有效数字均为1.3532,可认为迭代过程是收敛的,要求的根为1.3532.通过例2.4可以看出,用不同的方式改造原方程,可得到多种不动点迭代法计算过程,其收敛性质也是不同的. 因此,判断一个不动点迭代法是否收敛至关重要.2.3.2全局收敛的充分条件下面的定理给出一个函数存在唯一不动点的充分条件.定理2.3:设φ(x)∈C[a,b],若满足如下两个条件:(1)对任意x ∈[a,b],有a ≤φ(x)≤b ,(2)存在正常数L ∈(0,1),使对任意x 1,x 2∈[a,b],|φ(x 1)−φ(x 2)|≤L |x 1−x 2|则φ(x)在[a,b]上存在不动点,且不动点是唯一的.在证明定理之前,先理解一下定理中两个条件的含义. 首先,采用不动点迭代法的计算公式为x k+1=φ(x k ), k =0, 1, 2, …,因此要使后续迭代步的计算合法,必须要求φ(x k )的值在函数的定义域内,(1)的条件保证了这一点. 其次,(2)中新加的条件表明,φ(x)曲线上任两点连线斜率的绝对值不超过L ,当两点非常靠近时它就是导数,因此φ(x)曲线上任意点的切线斜率的绝对值都小于1,这说明φ(x)曲线变化很平缓,在曲线上任意点处的斜率都比y =x 和y=−x两条直线小. 这个条件也称为L<1的李普希兹(Lipschitz)条件,L为李普希兹系数. [证明] 先证明不动点的存在性,分两种情况:1). 若φ(a)=a,或φ(b)=b,则a或b为不动点;2). 若φ(a)≠a且φ(b)≠b,则φ(a)>a,φ(b)<b. 令f(x)=φ(x)−x,则f(x)为连续函数,且f(a)>0,f(b)<0.根据连续函数性质,必有x∗∈(a,b),使f(x∗)=0,即φ(x∗)=x∗,x∗为不动点.再证明唯一性,采用反证法. 假设有两个不同的不动点x1∗,x2∗∈[a,b],它们满足φ(x1∗)=x1∗,φ(x2∗)=x2∗,x1∗≠x2∗ .根据(2)中的条件推出,|x1∗−x2∗|=|φ(x1∗)−φ(x2∗)|≤L|x1∗−x2∗|<|x1∗−x2∗| .产生矛盾!所以假设x1∗≠x2∗不成立,不动点是唯一的.应说明的是,上述证明不动点的存在性只使用了条件(1). 事实上,通过画函数曲线图的方式也可以形象地说明不动点的存在性,这一点留给感兴趣的读者思考.下面的定理给出不动点迭代法收敛的充分条件.定理2.4:设φ(x)∈C[a,b]满足定理2.3的两个条件,则对于任意初值x0∈[a,b],由不动点迭代法得到的序列{x k}收敛到φ(x)的不动点x∗,并有误差估计:|x k−x∗|≤L k1−L|x1−x0| .[证明] 首先注意到定理条件保证了不动点唯一存在,而且条件(1)保证了不动点迭代法可执行下去,从而得到序列{x k}. 下面证明序列{x k}收敛,其思路是考虑误差序列,证明其极限为0.|x k−x∗|=|φ(x k−1)−φ(x∗)|≤L|x k−1−x∗|≤⋯≤L k|x0−x∗|由于L为小于1的正常数,则lim k→∞L k|x0−x∗|=0,⟹limk→∞|x k−x∗|=0, ⟹limk→∞x k=x∗.这证明了不动点迭代法是收敛的. 剩下|x k−x∗|≤L k1−L|x1−x0|的证明,留给读者思考.定理2.4为判断不动点迭代法的收敛性提供了依据,这种收敛不依赖于初值x0的选取,因此称为全局收敛性. 为了方便应用,也可以将定理2.3, 2.4中的第2个条件替换为:对任意x∈[a,b],有|φ′(x)|≤L<1,其中L为常数,得到便于使用的定理2.5.定理2.5:设φ(x)∈C[a,b],且满足如下两个条件:(1)对任意x∈[a,b],有a≤φ(x)≤b;(2)存在正常数L<1,使对任意x∈[a,b],有|φ′(x)|≤L<1.则对于任意初值x0∈[a,b],由不动点迭代法得到的序列{x k}收敛到φ(x)的不动点x∗,并有误差估计:|x k−x∗|≤L k1−L|x1−x0| .此定理可看成定理2.4的推论,其证明留给读者思考.例2.5(不动点迭代法的收敛性):对于求f(x)=x4−x−2=0在x0=1.5附近的根的问题,使用定理2.5考察例2.4中两种方法的全局收敛性.[解]在区间[1, 2]上考察如下两种不动点迭代法的收敛性:方法(A):x k+1=x k4−2, (k=0,1,⋯).方法(B):x k+1=√x k+24, (k=0,1,⋯)很容易看出,方法(B)符合定理中的条件(1),而φ′(x)=14(x+2)−3/4,也符合条件(2),因此方法(B)具有全局收敛性. 而对于方法(A),它不符合定理中的条件(1),因此无法根据定理2.5说明其具有全局收敛性.关于全局收敛性再说明两点:●定理2.4, 2.5给出的都是不动点迭代法全局收敛的“充分条件”,也就是说,对一些满足条件的方法可以证明其具有全局收敛性,但根据它们并不说明某个方法不具有全局收敛性.●全局收敛性要求初始值x0为定义域内任意值时不动点迭代法都收敛,这常常是很难达到的要求.2.3.3局部收敛性不同于全局收敛性,下面给出重要的局部收敛性的概念.定义2.2:设函数φ(x)存在不动点x∗,若存在x∗的某个邻域D: [x∗−δ,x∗+δ],对于任意初值x0∈D,迭代法x k+1=φ(x k)产生的解序列{x k}收敛到x∗,则称迭代法局部收敛.这个定义中的邻域是以x∗为中心点的一个对称区间,局部收敛性的定义要求的是存在这样一个邻域,而不关心它的大小. 下面的定理给出迭代法局部收敛的充分条件.定理2.6:设x∗为函数φ(x)的不动点,若φ′(x)在x∗的某个邻域上连续,且|φ′(x∗)|<1,则不动点迭代法x k+1=φ(x k)局部收敛.[证明] 因为φ′(x)在x=x∗附近连续且|φ′(x∗)|<1,则存在x∗的某个邻域D,使得对于任意. 显然L<1, 的xϵD, |φ′(x)|≤L, 其中L是某个介于|φ′(x∗)|和1之间的数, 例如L=|φ′(x∗)|+12即满足定理2.5的条件(2). 另外,对∀x∈D,φ(x)−x∗=φ(x)−φ(x∗)=φ′(ξ)(x−x∗), ξ∈D, ⟹|φ(x)−x∗|≤L|x−x∗|<|x−x∗|, 即φ(x)∈D,满足定理2.5的条件(1).因此,根据定理2.5,此迭代法对区间D内的任意初值都收敛,根据定义2.2知,此迭代法局部收敛.对比定理2.6和定理2.4、2.5可以看出,定理2.6的条件较为宽松,它只需要考察函数φ(x)在x∗这一点上是否满足要求. 因此,不动点迭代法较容易具有局部收敛性,对局部收敛的判断也相对简单.最后说明一点,定理2.5说明李普希兹系数L越小迭代收敛的速度越快,而定理2.6的证明过程说明了L与|φ′(x∗)|的关系. 因此,若|φ′(x∗)|越小,迭代收敛的速度就越快.2.3.4稳定性与收敛阶与二分法类似,不动点迭代法的每步计算都可以通过判停准则(包括考察f(x k)是否接近0)来评估解的准确度,因此解的误差容易被及时发现和纠正. 只要迭代过程是收敛的,误差将随迭代步的增加逐渐趋于零,而不会像某些算法的舍入误差会随迭代过程逐渐累积. 因此收敛的不动点迭代法总是稳定的. 在本章后续算法的讨论中,我们将不再关心稳定性,而将重点放在收敛性的讨论上.对于收敛的迭代法,其收敛速度的快慢也很重要,它关系到达到特定的准确度需要多少步迭代,也就是需要多少计算量. 下面先看一个例子,然后给出收敛阶的概念用于衡量迭代收敛的速度.例2.6(迭代收敛速度):假设有(1)~(3)三个迭代求解过程,其迭代解的误差|e(x k)|=|x k−x∗|随迭代步变化情况分别为:(1) 10-2, 10-3, 10-4, 10-5, ……。
非线性方程求根问题
计算机学院上机实践报告一、目的1.通过本实验,帮助加深对非线性方程求根方法的构造过程的理解;2.能将各种方法编写为程序并上机实现;3.比较各种方法在求解同一非线性方程根时,在收敛情况上的差异。
二、内容与设计思想1.用二分法求方程f(x)=x3-2x-5=0在区间[2 , 3]内的根。
2.方程f(x)=2x3-5x2-19x+42=0在x=3.0附近有根,试写出其三种不同的等价形式以构成三种不同的迭代格式,再用简单迭代法求根,观察这三种迭代是否收敛。
三、使用环境1. 硬件环境微型计算机(Intel x86系列CPU)一台2. 软件环境Windows2000/XP操作系统VC++6.0或其它的开发工具。
四、核心代码及调试过程1.用二分法求方程f(x)=x3-2x-5=0在区间[2 , 3]内的根主要代码:void bisect(double a,double b,int max_B){ double root, ya,yb,yroot;int i,actual_B;ya=f(a);yb=f(b);if(ya*yb>0){ printf("method failed!\n");exit(0); }for(i=1;i<=max_B;i++){ root=(a+b)/2;yroot=f(root); //取当前含根区间的中点if(yroot==0){ a=root;b=root;}else if(yb*yroot>0) //取含根区间为[a,(a+b)/2]{ b=root;yb=yroot;}Else //取含根区间为[(a+b)/2,b]{ a=root;ya=yroot;}if(fabs(b-a)<EPS) break;}root=(a+b)/2; yroot=f(root); actual_B=i;printf("root=%10.6lf\tf(root)=%10.6e\tatual_B=%d\n",root,yroot,actual_B); }结果:2.迭代格式分别为:x=2/19*x*x*x-5/19*x*x+42/19x=sqrt(2/5*x*x*x-19/5*x+42/5);x=(5/2*x*x+19/2*x-21)^(1/3)主要代码:double g(double x){return(pow((2.0/19.0*x*x*x-5/19*x*x+42/19),1.0)); /*定义迭代函数*/}void iterate(double a,double b,double x0,int max_D){int k=1;double x1;while(k<=max_D){x1=g(x0); /*迭代计算*/if((x1<a)||(x1>b)){printf("re_select a proper initial value x0!\n");exit(0);}if(fabs(x1-x0)<EPS) /*迭代成功并达到精度要求*/{printf("method succeed!\n");printf("root=%10.6lf\n",x1);break;}x0=x1;k++; /*x0的值被更新,累加迭代次数*/}printf("iteration times=%d\n",k); /*输出实际迭代次数*/if(k>max_D)printf("method failed!\n");}int main(){ double a=2.0,b=3.0,x0=(a+b)/2.0;int max_D=50;iterate(a,b,x0,max_D);}前两种迭代结果:第三种:输入数据时应注意数据的类型,否则程序会报错。
计算方法非线性方程求根实验
f (a ) ⋅ f (b) < 0 ;又设 f ( x) 的一个零点 x* ∈ (a, b) 的近似值 (设f ′( x0 ) ≠ 0) 。用过曲
求解非线性方程实验报告
求解非线性方程实验报告一.实验目的:通过本节实验课的学习,要求我们理解并掌握二分法、不动点迭代、牛顿切线法及弦截法解非线性方程求根的原理,掌握相应的算法原理,通过计算机解决实验问题二.实验内容:1、用对分区间法方程1-x-sinx=0在区间[0,1]上的误差小于10^(-4)的一个根,并记录对方区间的次数。
2、用不动点迭代法求解方程下x-log(x)=2(x>1)要求相对误差容限e=10^(-8)。
3、用Newton法求方程x^3-x-1=0在区间[-3,3]上的误差不大于10^(-5)的根,分别取初值x0=1.5, x0=0, x0=-1进行计算,比较他们的迭代次数。
三. 实验方案(程序设计说明)[包括算法设计思路,必要的流程图,界面设计说明、使用模块及变量的说明等。
]1、二分法是对区间收索法的一种改进,具体做法为:先求一区间的中点,并计算其函数值,若恰好有函数值为0,就是方程的根,若不为0,在判断此点的函数值与两端的函数值乘积的情况,取小于0的那个端点在进行上述对分,直到满足要求为止。
2、迭代法分为两种,一种是从任何可取的初值出发都能保证收敛,称之为大范围收敛的方法。
另一类称之为局部收敛法,即为了保证收敛必须选取初值充分接近于所要求的解。
迭代法的基本思想是一种逐渐逼近的方法,首先给定一个粗造的初值,然后用一个迭代公式,反复矫正这个初值,直到满足预先给出的精确要求为止。
3、双点弦接法与Newton法不同,两者有本质的区别,它分为两步,不属于不动点迭代法。
四. 实验步骤或程序(经调试后正确的源程序)(填写主要步骤与程序代码等,不够可附页)1、f=inline('x+sin(x)-1');a=0;b=1;dlt=1.0e-4;k=1;while abs(b-a)>dltc=(a+b)/2;if f(c)==0break;elseif f(c)*f(b)<0a=c;else b=c;endfprintf('k=%d,x=%.5f\n',k,c); k=k+1;end2、eps=10^(-8);dx=1;x0=3.5;k=0;while(dx>eps)k=k+1;x=log(x0)+2;dx=abs(x-x0)/(1+abs(x));x0=x;endkx3、f=inline('x^3-x-1');df=inline('3*x^2-1');d2f=inline('6*x');a=-3;b=3;dlt=1.0e-5;if f(a)*d2f(a)>0x0=a;elsex0=b;endm=min(abs(df(a)),abs(df(b)));k=0;while abs(f(x0))>m*dltk=k+1;x1=x0-f(x0)/df(x0);x0=x1;fprintf('k=%d x=%.5f\n',k,x0); end for x0=1.5fprintf('k=%d x=%.5f\n',k,x0); end for x0=0fprintf('k=%d x=%.5f\n',k,x0); end for x0=-1fprintf('k=%d x=%.5f\n',k,x0); end 五.程序运行结果:1、k=1,x=0.50000k=2,x=0.75000k=3,x=0.62500k=4,x=0.56250k=5,x=0.53125k=6,x=0.51563k=7,x=0.50781k=8,x=0.51172k=9,x=0.50977k=10,x=0.51074k=11,x=0.51123k=12,x=0.51099k=13,x=0.51086k=14,x=0.51093 2、k =15x =3.14623、k=1 x=-2.03846 k=2 x=-1.39028k=3 x=-0.91161k=4 x=-0.34503k=5 x=-1.42775k=6 x=-0.94242k=7 x=-0.40495k=8 x=-1.70690k=9 x=-1.15576k=10 x=-0.69419 k=11 x=0.74249k=12 x=2.78130k=13 x=1.98273k=14 x=1.53693k=15 x=1.35726k=16 x=1.32566k=17 x=1.32472当x0=1.5时:k=17 x=1.50000当x0=0时:k=17 x=0.00000当x0=-1时:k=17 x=-1.000002、六.实验总结:通过实验学会理解并掌握二分法、不动点迭代、牛顿切线法及弦截法解非线性方程求根的原理,掌握相应的算法原理,通过计算机解决实验问题并通过反复的上机实验操作,解决了在实验过程中遇到的实验问题,并了解了一些函数的特殊用法,学会了用这三种基本方法解决实际遇到的问题,并了解了二分法、不动点迭代、牛顿切线法及弦截法的各种变形算法。
非线性方程求根方法
第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”的一定要是算出的数值,否则会出现错误。
非线性方程求根
实际中,用解方程组的形式
J ( X k )( X k 1 X k ) F ( X k )
迭代法的基本步骤如下:
f ( x) 0 x ( x ) 2、取合适的初值,产生迭代序列 x0 , xi 1 ( xi )
1、给出方程的局部等价形式 3、求极限
x* lim xn 易知,该值为方程的根 n
一定收敛吗?
y p1 p0
y=x y=g(x)
y y=g(x) p0
什么时候停止?
a
x a1 x* x2 b b
xk 1 xk ε1
或
f ( x ) ε2
算法
While(|a-b|>eps) x=(a+b)/2 f(x) 若(|f(x)|<eps) x为解 若f(x)*f(b)<0 修正区间为[x,b] 若f(a)*f(x)<0 修正区间为[a,x] End while
若 f ' ( x0 ) 0 ,则有
y
记为
f ( x0 ) x x0 f ' ( x0 )
类似,我们可以得到
x1
x* x
x0
f ( x1 ) x2 x1 f ' ( x1 )
这样一直下去,我们可以得到迭代序列
xk 1 xk
f ( xk ) f ' ( xk )
Newton迭代的等价方程为:
非线性方程求根
非线性科学是当今科学发展的一个重要研究方向,而非线性方程的求根也成了一个 不可缺的内容。但是,非线性方程的求根非常复杂。 通常非线性方程的根的情况非常复杂:
sin( 2 x) y 1 y 2
无穷组解
非线性方程求根的常见方法及其应用
非线性方程求根的常见方法及其应用对于一个非线性方程,其解不一定是唯一的,而且很多情况下解根难以直接求得。
因此,寻找一种可靠、有效的方法来求解非线性方程根是非常重要的。
本文将介绍几种常见的非线性方程求根方法,并且介绍它们的应用场景及求解精度。
一、二分法二分法是一种最基本且易于实现的方法,它能够求解任何单峰函数(函数图像中仅有一个极大值或极小值的函数)的根。
该方法的主要思想是不断缩小根的区间,直到找到根。
具体而言,对于一个单峰函数f(x),在区间[a,b]上寻找其根。
首先,取中点c=(a+b)/2,计算f(c)。
如果f(c)≈0,则找到了根;否则,根位于[a,c]或[c,b]中的一个区间上,重复上述步骤,直到找到根。
该方法的主要优点是简单易用,适用于大部分单峰函数,并且收敛速度相对较快。
但是,该方法需要区间起点和终点具有异号,否则无法找到根。
二、牛顿迭代法牛顿迭代法是一种高效的方法,可用于求解任何无奇点的连续可微函数的根。
该方法的主要思想是将一个复杂的函数不断逼近于一条直线,然后通过直线和x轴的交点来不断逼近函数的根。
具体而言,对于一个连续可微函数f(x),在初始点x0处进行求解。
首先,通过f(x)在x=x0处的导数f'(x0)来确定函数的切线。
然后,找到x轴上离该点最近的交点x1处,并将其作为新的起点,迭代上述过程,直到找到根。
该方法的主要优点在于速度快、精度高,并且可适用于大多数函数。
但是,该方法可能会出现迭代过程不稳定的问题,因此需要谨慎选择初值。
三、割线法割线法是一种类似于牛顿迭代法的方法,其主要思想是通过一条割线来逼近函数的根。
相比于牛顿迭代法,割线法更加适用于函数的导数难以求得的情况。
具体而言,对于一个函数f(x),在初始点x0和x1处进行求解。
首先,通过f(x)在x=x0处和x=x1处的取值来确定割线,找到x轴上与割线交点x2处,并将其作为新的起点,重复上述步骤,直到找到根。
该方法的主要优点在于速度快、精度高,并且可适用于大多数函数。
数值分析实验报告之迭代法求非线性方程的根
数值分析实验报告之迭代法求非线性方程的根1.实验目的掌握迭代法求非线性方程根的基本原理和使用方法,加深对数值计算方法的理解与应用。
2.实验原理迭代法是一种通过不断逼近的方法求解非线性方程的根。
根据不同的函数特点和问题需求,可以选择不同的迭代公式进行计算,如牛顿迭代法、二分法、弦截法等。
3.实验内容本次实验使用牛顿迭代法求解非线性方程的根。
牛顿迭代法基于函数的局部线性逼近,通过不断迭代逼近零点,直至满足收敛条件。
具体步骤如下:Step 1:选择初始点X0。
Step 2:计算函数f(x)在X0处的导数f'(x0)。
Step 3:计算迭代公式Xn+1 = Xn - f(Xn) / f'(Xn)。
Step 4:判断收敛准则,若满足则迭代结束,输出解Xn;否则返回Step 2,继续迭代。
Step 5:根据实际情况判断迭代过程是否收敛,并输出结果。
4.实验步骤步骤一:选择初始点。
根据非线性方程的特点,选择恰当的初始点,以便迭代公式收敛。
步骤二:计算导数。
根据选择的非线性方程,计算函数f(x)的导数f'(x0),作为迭代公式的计算基础。
步骤三:迭代计算。
根据迭代公式Xn+1=Xn-f(Xn)/f'(Xn),计算下一个迭代点Xn+1步骤四:判断收敛。
判断迭代过程是否满足收敛条件,通常可以通过设置迭代次数上限、判断前后两次迭代结果的差值是否足够小等方式进行判断。
步骤五:输出结果。
根据实际情况,输出最终的迭代结果。
5.实验结果与分析以求解非线性方程f(x)=x^3-x-1为例,选择初始点X0=1进行迭代计算。
根据函数f(x)的导数计算公式,得到导数f'(x0)=3x0^2-1,即f'(1)=2根据迭代公式Xn+1=Xn-f(Xn)/f'(Xn),带入计算可得:X1=X0-(X0^3-X0-1)/(3X0^2-1)=1-(1-1-1)/(3-1)=1-0/2=1根据收敛准则,判断迭代结果是否满足收敛条件。
非线性方程求根
实验七 非线性方程求根实验7.1(迭代法、初始值与收敛性)实验目的:初步认识非线性问题的迭代法与线性问题迭代法的差别,探讨迭代法及初始值与迭代收敛性的关系。
问题提出:迭代法是求解非线性方程的基本思想方法,与线性方程的情况一样,其构造方法可以有多种多样,但关键是怎样才能使迭代收敛且有较快的收敛速度。
实验内容:考虑一个简单的代数方程012=--x x针对上述方程,可以构造多种迭代法,如)1.7(121-=+n n x x)2.7(111nn x x +=+)3.7(11+=+n n x x在实轴上取初始值x 0,请分别用迭代(7.1)-(7.3)作实验,记录各算法的迭代过程。
实验要求:(1)取定某个初始值,分别计算(7.1)-(7.3)迭代结果,它们的收敛性如何?重复选取不同的初始值,反复实验。
请自选设计一种比较形象的记录方式(如利用MATLAB 的图形功能),分析三种迭代法的收敛性与初值选取的关系。
(2)对三个迭代法中的某个,取不同的初始值进行迭代,结果如何?试分析迭代法对不同的初值是否有差异?(3)线性方程组迭代法的收敛性是不依赖初始值选取的。
比较线性与非线性问题迭代的差异,有何结论和问题。
实验过程: 第一问: 针对迭代函数11n n x x +=-程序disp(' 请输入初始迭代值为') x=[]; a=[];b=[];x(1)=input('');for i=2:30x(i)=x(i-1)^2-1;endfor i=2:30a(i-1)=x(i-1);b(i)=x(i);endabi=1:30;plot(i,x)title('x(n+1)=x(n)^2-1')数值实验结果及分析:选择初始值为1时,每次迭代的波动情况如下:针对迭代函数111n nx x +=+disp('请输入迭代的初始值') float x=[]; a=[]; b=[];x(1)=input(''); for i=2:30x(i)=1+1/x(i-1); end for i=2:30 a(i-1)=x(i-1); b(i)=x(i); end a b i=1:30; plot(i,x)title('x(n+1)=x(n)^2-1')数值实验结果及分析:选择初始值为1时,每次迭代的波动情况如下:每次的迭代函数值为:针对迭代函数1n x +=disp('请输入迭代的初始值') double x=[]; a=[]; b=[];x(1)=input(''); for i=2:30x(i)=sqrt(x(i-1)+1); end for i=2:30 a(i-1)=x(i-1); b(i)=x(i); end a b i=1:30; plot(i,x)title('x(n+1)=sqrt(x(n)+1)')数值实验结果及分析:选择初始值为1时,每次迭代的波动情况如下:讨论由上面的比较结果可以看到,无论取什么初始值,迭代法211n n x x +=-所得到的解是发散的,并且随着初始值选取的不同,发散的程度将会呈现指数型的增长,表明这种迭代法是没有意义的。
实验四非线性方程求根
《数值分析》课程设计实验报告实验四 非线性方程求根一、问题提出设方程3()310f x x x =--=有三个实根**121.8793,0.34727,x x ==- *3 1.53209x =-现采用下面六种不同计算格式,求 f(x)=0的根*1x 或*2x 1、 231x x x+= 2、 313x x -=3、 x =4、 213x x =-5、 x =6、 32131()31x x x x x --=-- 二、实验步骤#include "stdio.h"#include<math.h>main(){float x0=1.8793;printf("初值是%f\n",x0);/*输出x0*/float x1,x2,x3;x1=x0;int i;for(i=1;i<21;i++){x2=(3*x1+1)/(x1*x1);//第一种迭代方式 //x2=(x1*x1*x1-1)/3;//第二种迭代方式//x2=pow(3*x1+1,1.0/3);//第三种迭代方式//x2=1/(x1*x1-3);//第四种迭代方式//x2=sqrt(3+1/x1);//第五种迭代方式//x2=x1-(1/3.0)*((x1*x1*x1-3*x1-1)/(x1*x1-1));//第六种迭代方式x3=x2-x1;printf("第%d 次迭代值为%f,相邻两次迭代值差值为%f\n",i,x2,x3);/*输出x2*/x1=x2;if(x3<0)x3=-x3;if(x3<0.000001)//误差精度break;} } 当迭代格式为231x x x +=时,实验结果为由相邻两次迭代值差值结果可知,迭代过程处于发散状态。
当迭代格式为313x x -=,实验结果为由相邻两次迭代值差值结果可知,迭代过程前8次处于发散状态,第8次之后处于收敛状态,并且经过16次迭代,得到非线性方程的一个根。
实验四 非线性方程的求根
ek 1 ek
p
e xk 3xk 2 x* xk x
1 * 2
1 ,故该迭代函数是线性收敛的。 2
6
利用 Matlab 编程计算: (取初值为 0.2;精度为 10 )
程序功能:线性迭代函数求根 clear,clc x0=0.2%定义初值 e=10^-6;%定义精度为 10 的-6 次方 N=500;%最大迭代次数 k=0;%迭代次数 while k<N
end k x1
得到结果为:
初值 迭代次数 k=65 迭代结果
x0 =0.200
结果检验:
x1 =2.0844 + 2.7330i
将迭代结果 x1 代入原方程 x 2 3 x 2 e x 0 ,在 Matlab 命令窗口输入: abs(x1^2-3*x1+2-exp(x1)),得到 5.1676e-006,结果非常接近 0,比较可靠。
6
。
(1)请自行设计一种线性收敛的迭代法求方程的根,输出迭代初值、各次迭代值及迭 代次数。 (2)用牛顿迭代法求方程的根,输出迭代初值、各次迭代值及迭代次数,并与(1)的 结果比较。 (3)用 MATLAB 内部函数 solve 直接求出方程的所有根,并与(1) 、 (2)的结果进行 比较。 B题 求方程 x 3 x 1 0 在 x =1.5 附近的根。
3 xk xk 1 ,编写程序进行实验,分别取 x0 0 , 2 3xk 1
(1)对牛顿迭代公式: x k 1 x k
x0 1.5 迭代 10 次,观察比较其计算值,并分析原因。
(2)用 MATLAB 内部函数 solve 直接求出方程的所有根,并与(1)的结果进行比较。 C题 公元 1225 年,Lenardo 宣布他求得方程
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
end k x1
得到结果为:
初值 迭代次数 k=65 迭代结果
x0 =0.200
结果检验:
x1 =2.0844 + 2.7330i
将迭代结果 x1 代入原方程 x 2 3 x 2 e x 0 ,在 Matlab 命令窗口输入: abs(x1^2-3*x1+2-exp(x1)),得到 5.1676e-006,结果非常接近 0,比较可靠。
实验名称: 实验时数: 2
实验四 方程求根
指导教师:
++
数值分析实验组
实验设备:安装了 Matlab、C 、VF 软件的计算机 第五教学楼北 802 或 902
实验日期:2015 年 11 月 10 日 实验地点: 实验目的:
1. 掌握非线性方程数值解法的基本思想和基本步骤。 2. 理解各类数值方法的优缺点,并能自行编程求解。
*
ek 1 ek
p
e xk 3xk 2 x* xk x
1 * 2
1 ,故该迭代函数是线性收敛的。 2
6
利用 Matlab 编程计算: (取初值为 0.2;精度为 10 )
程序功能:线性迭代函数求根 clear,clc x0=0.2%定义初值 e=10^-6;%定义精度为 10 的-6 次方 N=500;%最大迭代次数 k=0;%迭代次数 while k<N
实验过程:
实验选题:A 题 问题一:
对方程变形处理
x 2 3x 2 e x 0 x 2 e x 3x 2
Hale Waihona Puke x e x 3x 2
即迭代函数为:
( x) e x 3x 2
xk 1 e xk 3xk 2 xk x ,由于 lim 设 lim k k
3. 初步了解非线性方程的简单迭代法及其收敛性,体会迭代函数对收敛性的影响,体 会不同初值对同一迭代函数的影响。
实验准备:
1. 在开始本实验之前,请回顾教科书的相关内容; 2. 需要一台准备安装 Windows XP Professional 操作系统和装有数学软件的计算机。
实验内容及要求
A题 求非线性方程 x 2 3 x 2 e x 0 的根,准确到 10
% % % %
x1=sqrt(3*x0+exp(x0)-2); x1=log(x0^2-3*x0+2); x1=exp(x0)/(x0-2)+1; x1=x0+(4+sqrt(16-4*(x0^2+2)))/2; x1=x0^2-2*x0+2-exp(x0); if abs(x1-x0)<e break end x0=x1; k=k+1;
x 3 2 x 2 10 x 20 0
的一个根 x 1.368808107 , 当时颇为轰动,但无人知道他是用什么方法得到的。现在, 请你试试用二分法和 Newton 迭代法求解上述方程能否得到这个结果。
D 题 用简单迭代法求方程 f ( x) 2 x x 1 0 的根。 方案一: 化 f ( x) 2 x x 1 0 为等价方程 x 3
实验总结(由学生填写) :通过这次实验,我学会了非线性方程数值解法的基本 思想和步骤,能自行编写迭代程序进行计算,了解了迭代方法的优缺点。
3 xk xk 1 ,编写程序进行实验,分别取 x0 0 , 2 3xk 1
(1)对牛顿迭代公式: x k 1 x k
x0 1.5 迭代 10 次,观察比较其计算值,并分析原因。
(2)用 MATLAB 内部函数 solve 直接求出方程的所有根,并与(1)的结果进行比较。 C题 公元 1225 年,Lenardo 宣布他求得方程
6
k=k+1; end k x1
得到结果
初值 迭代次数 k=2 迭代结果
x0 =0.200
与 1 问结果进行比较:
x1 =0.2575
x0 =0.200
k=65
x1 =2.0844 + 2.7330i
相比之下,牛顿法初值不变,迭代次数大大减少,结果更为精确。
问题三:
用 MATLAB 内部函数 solve 直接求出方程的所有根,在命令窗口输入 solve('x^2-3*x+2-exp(x)','x') 得到结果 0.25753028543986076045536730493724 结果比较: 求出的结果与牛顿法求出的结果基本一致。
6
。
(1)请自行设计一种线性收敛的迭代法求方程的根,输出迭代初值、各次迭代值及迭 代次数。 (2)用牛顿迭代法求方程的根,输出迭代初值、各次迭代值及迭代次数,并与(1)的 结果比较。 (3)用 MATLAB 内部函数 solve 直接求出方程的所有根,并与(1) 、 (2)的结果进行 比较。 B题 求方程 x 3 x 1 0 在 x =1.5 附近的根。
问题二:
f ( x) , k 0,1, f '( x) x 2 3xk 2 e xk 带入得到迭代格式为 xk 1 xk k 2 xk 3 e xk
牛顿法公式: xk 1 xk 利用 Matlab 编程计算: (取初值为 0.2;精度为 10 )
程序功能:牛顿法迭代 clear,clc x0=0.2%定义初值 e=10^-6;%定义精度为 10 的-6 次方 N=500;%最大迭代次数 k=0;%迭代次数 f=inline('x^2-3*x+2-exp(x)')%取 a=27 为例 df=inline('2*x-3-exp(x)') while k<N x1=x0-feval(f,x0)/feval(df,x0); if abs(x1-x0)<e break end x0=x1;
3 3
3
x 1 ( x) 2
方案二: 化 f ( x) 2 x x 1 0 为等价方程 x 2 x 3 1 ( x ) (1)分别对方案一、方案二取初值 x0 0 ,迭代 10 次,观察其计算值,并加以分析。 (2)用 MATLAB 内部函数 solve 直接求出方程的所有根,并与(1)的结果进行比较。 说明:实验过程应包括对问题的简要分析、求解方法、求解步骤、程序及其必要的图表 等内容。