数值分析实验报告——非线性方程求根

合集下载

数值分析实验五 非线性方程的求根1

数值分析实验五     非线性方程的求根1

数值分析实验五 非线性方程的求根组号 班级 学号 姓名 分数一:实验目的1、掌握用二分法解非线性方程的方法。

2、掌握用迭代法解非线性方程的方法。

3、掌握用牛顿法解非线性方程的方法。

4、学会运用Matlab 语言解决提供的函数求解实际问题。

二:实验内容所需的基本知识二分法的原理:设)(x f 在],[b a 上连续,且0)()(<⋅b f a f 。

则],[b a 为方程区间(设只有唯一根)。

取中点)(210b a x +=,检查)(a f 与)(0x f 是否同号,若同号,说明根*x 与b 之间,此时b b x a ==101,;若异号,说明根*x 在a 与0x 之间,此时011,x b a a ==,得新区间],[11b a 为原区间的一半。

对],[11b a 进行上述过程,取中点)(21111b a x +=,检查)(1a f 与)(1x f 是否同号,如此反复二分下去,即可得出一系列有根区间⊃⊃⊃],[],[],[2211b a b a b a …⊃⊃],[k k b a …,其中每个区间都是前一个区间的一半,因此],[k k b a 的长度k k k a b a b 2)(-=-,当∞→k 时趋于零,就是说,如果二分过程无限地继续下去,这些区间最终必收缩于一点*x ,该点显然就是所求的根。

迭代法原理:首先给定一个粗糙的初始值,然而用一个迭代公式反复校正这个初值,将已有近似根逐步精确化,一直到满足精度要求为止。

具体地,把方程0)(=x f 改写成x 的等价表达式)(x x ϕ=,若)(**x x ϕ=,称*x 为)(x ϕ的一个不动点,求)(x f 的零点就等价于求)(x ϕ的不动点。

任取一点0x 代入)(x ϕ求得 )(01x x ϕ= 又将1x 代入)(x ϕ求得)(12x x ϕ= 如此反复迭代下去一般地 )(1k k x x ϕ=+ k=0,1,2,………)(x ϕ称为迭代函数,)(x x ϕ=称为迭代公式。

数值分析实验报告之迭代法求非线性方程的根

数值分析实验报告之迭代法求非线性方程的根

《数值分析》实验报告学院:数学与计算机学院专业:班级:姓名学号实验组实验时间指导教师成绩实验项目名称利用迭代法求方程的根实验目的1、掌握迭代法求根的数学原理。

2、掌握迭代法求根的计算机算法。

实验内容及要求内容:1、用迭代法求方程cosx5.0=x的近似根,要求误差不超过710-。

2.详细描述算法步骤并画出算法流程图形。

3.用表格列出迭代法的中间和最终结果。

要求:1、利用C语言,或Asp环境,或Matlab数学软件实现上述算法。

2、程序运行结果用表格显示出来3、保存程序运行结果,并结合算法进行分析。

4、要求实验报告最多两页,正反两面都要求打印。

实验原理将方程改写成x=)(xϕ,当方程在指定的区间上具有唯一的不动点(即迭代收敛)时,求原方程的零点就等价于求)(xϕ的不动点,选择一个初值x代入等式右端可得新的x的值,通过如此反复迭代后,求得的x的值会越来越逼近方程的根,一直迭代到误差满足要求即可。

实验仪器1、计算机一台。

2、安装IIS。

实验步骤Step1:选定满足迭代收敛的自变量的区间;Step2:选择迭代初值;Step3: 开始迭代,产生迭代后的新根,计算此时的误差;Step4: 如果误差不满足要求,返回Step3,否则输出结果,过程结束。

实验流程图开始选择迭代初值x确定收敛区间[a,b]迭代)(1kkxxϕ=+,2,1,0=k计算误差kkxx-+1结束误差是否小于7-10输出结果是否实验结果实验总结通过本次实验,我对迭代法求方程的根有了更深的认识,对其所用到的数学原理通过编程理解的更加清晰。

我是用Asp完成本次实验的,因为这样可以将结果很方便的用表格显示出来,让结果看起来比较清楚、明白和友好。

同时,我也用C语言编程实现过,结果是一样的,这也说明实验结果的正确性。

因为所给迭代方程是收敛的,不需要收敛性的验证,只要迭代达到误差的要求即可。

实验中遇到的一个问题是如何将结果中的小数点前的0补上去,让显示的更完整,通过网上查询,了解到可以根据对结果的判断将0加上去已达到完整显示,最终解决了这个问题。

数值分析实验之非线性方程求根(Python现)

数值分析实验之非线性方程求根(Python现)

数值分析实验之⾮线性⽅程求根(Python现)详细实验指导见上⼀篇,此处只写内容啦实验内容:1. ⽤⼆分法求⽅程x3-3x-1=0在的所有根.要求每个根的误差⼩于0.001.提⽰与要求: (1) 利⽤精度找到迭代次数;(2) 由f(x)=3(x2-1)可取隔根区间[-2,-1].[-1,1].[1,2]);(3) ⽤程序求各隔根区间内的根.2. ⽤不动点迭代求: (1)x3+2x2+10x-20=0的所有根.或: (2)9x2-sinx-1=0在[0,1]上的⼀个根.3. ⽤Newton迭代法求解下列之⼀,准确到10-5:(1) x3-x-1=0的所有根;(2) e x+2-x+2cosx-6=0位于[0,2]上的根.实验代码:• ⽜顿迭代法1import math2 x=0.53 n = 14while n ==1 or abs(x-x1)>1e-5:5 x1 = x6def F(x1):7return 2**-x+2*math.cos(x)+math.exp(x)-68def F1(x1):9return math.exp(x)-math.log(2)*(2**-x)-2*math.sin(x)10 x = x1 - F(x1)/F1(x1)11print ('迭代步数:',n,'X1计算值=',x1,'X计算值=',x)12 n = n+113else:14print('⽅程的根=',(x))运⾏结果:• 不动点法1import numpy as np23def f(x):4return 9*x**2 - np.sin(x) - 156def g1(x):7return ((np.sin(x)+1)/9)**0.589def g2(x):10 result = (abs(2 * x + 1))**(1 / 5)11if (2 * x - 1) < 0:12return -result13return result1415def getEpsilon(x, epsilon):16 maxY = minY = x[0]17for each in x:18 maxY = max(f(each), maxY)19 minY = min((f(each), minY))20 epsilon = (maxY - minY) * epsilon21return epsilon2223def getInitialVal(x, N, step, epsilon):24 initalVal = []25for i in range(N + 1):26 y1, y2, y3 = f(x - step), f(x), f(x + step)27if (y1 * y2 < 0) and (i != 0):28 initalVal.append((x + x - step) / 2)29if ((y2 - y1) * (y3 - y2) < 0) and (abs(y2) < epsilon):30 initalVal.append(x)31 x += step3233return initalVal3435def findFixedPoint(initalVal, delta,epsilon):36 points = []37for each in initalVal:38if (abs(g1(each)) < 1):39 points.append(iteration(each, g1, delta,epsilon)) 40else:41 points.append(iteration(each, g2, delta,epsilon)) 42return points4344def iteration(p1, g, delta,epsilon):45while True:46 p2 = g(p1)47 err =abs(p2-p1)48 relerr = err/(abs(p2)+epsilon)49if err<delta or relerr<delta:50return p251 p1 = p25253def main():54 a, b, c = input().split('')55 a = float(a)56 b = float(b)57 c = int(c)58 delta = 10 ** (-c)59 N = 860 epsilon = 0.0161 step = (b - a) / N62 x = np.arange(a, b + epsilon, epsilon)6364 epsilon2 = getEpsilon(x,epsilon)65 initalVal = getInitialVal(a, N, step, epsilon2)66 ans = findFixedPoint(initalVal, delta,epsilon)6768for each in ans:69print('⽅程的根为:%.6f' % each)7071if__name__ == '__main__':72 main()运⾏结果:。

第二次实验报告(非线性方程求根)

第二次实验报告(非线性方程求根)

数学实验报告实验五学院:数学与统计学院班级:数学与统计学院(2)班姓名:石紫雲学号:0234非线性方程的数值解法实验1实验目的1)进一步熟练掌握求解非线性方程的牛顿迭代法和弦截法。

2)根据牛顿迭代法和弦截法的原理,编写程序求解非线性方程,提高编程解决问题的能力。

2 实验内容(1)用牛顿法和割线法求下列方程的根x^2-e^x=0;x*e^x-1=0;(23实验原理(1)牛顿迭代公式:1()/'()k k k k x x f x f x +=- 双点弦法公式:111()()()()k k k k k k k f x x x x x f x f x +--=--- (2)令2()f x x A =-,再用牛顿法求根。

4实验步骤1)根据牛顿迭代法,双点弦法的算法编写相应的求根函数;2)用牛顿迭代法和双点弦法分别对方程进行求解;5 程序设计牛顿迭代法x0=;N=100;k=0;eps=5e-6;delta=1e-6;while(1)x1=x0-fc1(x0)/fc2(x0);k=k+1;if k>Ndisp('Newton method failed')breakendif(abs(x1-x0)<delta || abs(fc1(x1))<delta) break;endx0=x1;endfprintf('%f',x0)fprintf('%f',abs(fc1(x1)))双点弦法function cutline(x0,x1)N=100;k=0;delta=5e-8;while(1)(abs(x1-x0)>=delta)c=x1;x1=cutnext(x0,x1);x0=c;k=k+1;if k>Ndisp('Cutline method failed')break;endif(abs(x1-x0)<delta || abs(fc1(x1))<delta) break;endendfprintf('%10f\n',x1);function y=cutnext(a,b)y=b-fc(b)/(fc(b)-fc(a))*(b-a);1)原函数function fc1=fc1(x)fc1=x^2-exp(x);end导函数function fc2=fc2(x)fc2=2*x-exp(x);end2)原函数function fc1=fc1(x) fc1=x*exp(x)-1;end导函数function fc2=fc2(x)fc2=1*exp(x)+x*exp(x);end3)原函数function fc1=fc1(x)fc1=x^2-5;end导函数function fc2=fc2(x)fc2=2*x;end6实验结果及分析注:牛顿迭代法由于设置delta=1e-6,所以算出的误差e<*10^-6;割线法由于设置delta=5e-8,所以误差e<*10^-8.7总结。

实验一 非线性方程求根

实验一   非线性方程求根

石家庄经济学院2014/2015学年第一学期数值分析实验报告班级: 5141090301学号: 514109030105姓名:张倩指导教师: 张敬敏实验一非线性方程求根一、实验题目1. 求方程f(x)=3x2-e x=0一个正根,并使误差不大于10-5。

(p22第3题)2. 计算√5,结果具有5位有效数字。

3. 求方程f(x)=x3-x-1=0在区间[1.0,1.5]内的一个实根,误差不大于10-5。

(选做)二、程序功能1. 使用迭代法求方程f(x)=3x2-e x=0一个正根,并使误差不大于10-5。

2. 用牛顿法计算√5,结果具有5位有效数字。

3. 利用二分法求方程f(x)=x3-x-1=0在区间[1.0,1.5]内的一个实根,精度为10-5。

三、算法算法1. 使用迭代法求方程f(x)=3x2-e x=0一个正根,并使误差不大于10-5。

算法2. 用牛顿法计算√5,结果具有5位有效数字。

for k=2,3,4….N do1)compute x:x g(x)四、重要标识符说明程序1. 重要标识符说明程序2. 重要标识符说明Error确定有效位数,abs取绝对值,for 迭代次数五、程序运行实例在matlab 6.5环境中,运行程序1,结果如图1所示。

图1 程序1运行结果在matlab 6.5环境中,运行程序2,结果如图2所示。

图2 程序2运行结果六、源程序程序1源程序:程序2源程序:Error=1e-5;x=2;for k=2:10xk=x;x=x/2+5/(2*x);if (abs(xk - x)<=Error)break;endend七、实验总结(不少于100字)。

数值分析实验报告——非线性方程求根

数值分析实验报告——非线性方程求根

数值分析实验报告——非线性方程求根一、实验目的: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.通过比较,发现割线法和牛顿法的收敛速度较快,精确程度较高,因此选择割线法进行求解。

六、实验总结:通过本次实验,我掌握了求解非线性方程的常用方法,并使用数值分析软件实现了二分法、割线法和牛顿法。

数值分析实验报告模板

数值分析实验报告模板

数值分析实验报告模板篇一:数值分析实验报告(一)(完整)数值分析实验报告12345篇二:数值分析实验报告实验报告一题目:非线性方程求解摘要:非线性方程的解析解通常很难给出,因此线性方程的数值解法就尤为重要。

本实验采用两种常见的求解方法二分法和Newton法及改进的Newton法。

利用二分法求解给定非线性方程的根,在给定的范围内,假设f(x,y)在[a,b]上连续,f(a)xf(b) 直接影响迭代的次数甚至迭代的收敛与发散。

即若x0 偏离所求根较远,Newton法可能发散的结论。

并且本实验中还利用利用改进的Newton法求解同样的方程,且将结果与Newton法的结果比较分析。

前言:(目的和意义)掌握二分法与Newton法的基本原理和应用。

掌握二分法的原理,验证二分法,在选对有根区间的前提下,必是收敛,但精度不够。

熟悉Matlab语言编程,学习编程要点。

体会Newton使用时的优点,和局部收敛性,而在初值选取不当时,会发散。

数学原理:对于一个非线性方程的数值解法很多。

在此介绍两种最常见的方法:二分法和Newton法。

对于二分法,其数学实质就是说对于给定的待求解的方程f(x),其在[a,b]上连续,f(a)f(b) Newton法通常预先要给出一个猜测初值x0,然后根据其迭代公式xk?1?xk?f(xk) f'(xk)产生逼近解x*的迭代数列{xk},这就是Newton法的思想。

当x0接近x*时收敛很快,但是当x0选择不好时,可能会发散,因此初值的选取很重要。

另外,若将该迭代公式改进为xk?1?xk?rf(xk) 'f(xk)其中r为要求的方程的根的重数,这就是改进的Newton 法,当求解已知重数的方程的根时,在同种条件下其收敛速度要比Newton法快的多。

程序设计:本实验采用Matlab的M文件编写。

其中待求解的方程写成function的方式,如下function y=f(x);y=-x*x-sin(x);写成如上形式即可,下面给出主程序。

数值分析实验报告——非线性方程求根

数值分析实验报告——非线性方程求根

数值分析实验报告——非线性方程求根二分法一、题目用二分法求方程=的所有根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 。

数值计算课程设计报告-非线性方程求根(经典报告)

数值计算课程设计报告-非线性方程求根(经典报告)

数值计算方法课程设计报告课程设计名称:数值计算方法课程设计题目:非线性方程求根年级专业:组员姓名学号:指导教师:非线性方程求根一、问题提出随着科学技术,生产力经济的发展,在科学与工程计算中存在着大量方程求根问题,例如贷款购房问题,工厂的最佳订货问题等都需要求解一类非线性方程的根,首先根据实际问题列出数学模型,确定变量,给出各个条件及相关函数;然后对建立的模型进行具体分析和研究,选择合适的求解方法;编写函数的程序,用计算机求出方程的解,通过所求解分析具体情况.求解非线性方程的问题有以下几种基本方法。

二分法简单易行,但收敛较慢,仅有线性收敛速度。

而且该方法不能用于求偶数重根或复根,但可以用来确定迭代法的初始值。

牛顿法是方程求根中常用的一种迭代方法,它除了具有简单迭代法的优点外,还具有二阶收敛速度(在单根邻近处)的特点,但牛顿法对初始值选取比较苛刻(必须充分靠近方程的根),否则牛顿法可能不收敛。

弦截法是牛顿法的一种修改,虽然比牛顿法收敛慢,但因它不需计算函数的导数,故有时宁可用弦截法而不用牛顿法,弦截法也要求初始值必须选取得充分靠近方程的根,否则也可能不收敛。

二、背景分析代数方程的求根问题是一个古老的数学问题。

理论上,n次代数方程在复数域内一定有 n个根(考虑重数)。

早在16世纪就找到了三次、四次方程的求根公式,但直到19世纪才证明大于等于5次的一般代数方程式不能用代数公式求解,而对于超越方程就复杂的多,如果有解,其解可能是一个或几个,也可能是无穷多个。

一般也不存在根的解析表达式。

因此需要研究数值方法求得满足一定精度要求的根的近似解。

牛顿迭代法是牛顿在17世纪提出的一种求解方程.多数方程不存在求根公式,从而求精确根非常困难,甚至不可能,从而寻找方程的近似根就显得特别重要.而在各种科学和工程计算中往往要用到非线性方程组的求解,而牛顿法又是最基础的迭代法,在各种计算力学、控制工程等领域中发挥了不可代替的作用.而在数值计算中,非线性方程组的求解同样具有重要意义.随着计算机技术的成熟和高速发展,对于非线性方程求根问题出现了大量的数学软件(如MATLAB,SAS,SPSSD等),计算机已经成为工程师应用数学解决工程问题的主要运算工具.同时,工程专业的学生对数学教育的需求重点正在从手工演绎和运算能力的培养转变到结合计算机软件进行建模、求解和论证能力的培养.我们采用Matlab数学软件平台,通过实例比较了二分法、牛顿迭代法、弦截法三种基本方法的优缺点。

数值实验一-非线性方程求根

数值实验一-非线性方程求根

13

如果一个命令行很长,一个物理行之内写不下, 可以在第一个物理行之后加上3个小黑点并按下 回车键,然后接着下一个物理行继续写命令的其 他部分。3个小黑点称为续行符,即把下面的物 理行看作该行的逻辑继续。 在MATLAB里,控制键和方向键可用于命令行的 编辑。

14
变量和赋值语句


变量命名
9
工作空间窗口( Workspace )
工作空间是MATLAB用于存储各种变量和结果的 内存空间。在该窗口中显示工作空间中所有变量 的名称、大小、字节数和变量类型说明,可对变 量进行观察、编辑、保存和删除。
10
命令历史记录窗口( Command History ) 在默认设置下,历史记录窗口中会自动保留 自安装起所有用过的命令的历史记录,并且 还标明了使用时间,从而方便用户查询。而 且,通过双击命令可进行历史命令的再运行。 如果要清除这些历史记录,可以选择Edit菜 单中的Clear Command History命令。
在MATLAB 6.5中,变量名是以字母开头,后字 母、数字或下划线的字符序列,最多63个字符。在 MATLAB中,变量名区分字母的大小写。
在MATLAB工作空间中,还驻留几个由系统本身定义的 变量。例如,用pi表示圆周率π的近似值, 用i,j表示虚数单位。定义变量有特定的含义,在使用时, 应尽量避免对这些变量重新赋值。
15
赋值语句 MATLAB赋值语句有两种形式: (1) 变量=表达式 (2) 表达式 其中“表达式”是用运算符将有关运算量连 接起来的式子,其结果是一个矩阵。 [注] 第二种语句形式下,将表达式的值 赋给MATLAB的永久变量ans。 如果在语句的最后加分号,那么,MATLAB 仅仅执行赋值操作,加分号不再显示运算的结 果。在一条语句中,如果表达式太复杂,一行 写不下,可以加上三个小黑点(续行符)并按下回 16 车键,然后接下去再写。

数值分析非线性方程求根实验

数值分析非线性方程求根实验

实验报告一、实验目的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是不收敛的。

数值分析实验报告 实验五 非线性方程求根

数值分析实验报告 实验五 非线性方程求根

实验类别:数值分析专业:信息与计算科学班级:学号:姓名:中北大学理学院实验五 非线性方程求根【实验内容】设方程013)(3=--=x x x f 有三个实根8793.1*1=x ,*20.34729x =-, *3 1.532088x =-现采用下面四种不同计算格式,求0)(=x f 的根。

【实验方法与步骤】1、 213x x x +=用于求*3x 。

#include "math.h"#include "stdio.h"double f ( double x ){return((3*x+1) /x/x );}main(){double eps = 1e-10;double x1, x2 =-3;do{x1 = x2;x2 = f( x1 );printf( "\nx=%20.16lf \n", x2 ); }while( fabs( x2 - x1 ) >= eps ); scanf("%f",&x2);}2、 313-=x x 用于求*2x 。

#include "math.h"#include "stdio.h"double f ( double x ){return(( x*x*x-1) /3 );}main(){double eps = 1e-10;double x1, x2 =1.3;do{x1 = x2;x2 = f( x1 );printf( "\nx=%20.16lf\n", x2 );}while( fabs( x2 - x1 ) >= eps ); scanf("%f",&x2); }3、 313+=x x ,用于求*1x ,*3x 。

#include "math.h"#include "stdio.h"double f ( double x ){return(pow((3*x+1),1.0/3.0) ); }main(){double eps = 1e-10; double x1,x2 =1;do{x1 = x2;x2 = f( x1 );printf( "\nx=%20.16lf\n", x2 ); }while( fabs( x2 - x1 ) >= eps ); scanf("%f",&x2);}4、 x x 13+=用于求*1x 。

数值分析报告求解非线性方程根地二分法、简单迭代法和牛顿迭代法

数值分析报告求解非线性方程根地二分法、简单迭代法和牛顿迭代法

实验报告一:实验题目一、 实验目的掌握求解非线性方程根的二分法、简单迭代法和牛顿迭代法,并通过数值实验比较两种方法的收敛速度。

二、 实验内容1、编写二分法、牛顿迭代法程序,并使用这两个程序计算02)(=-+=x e x x f 在[0, 1]区间的解,要求误差小于 410- ,比较两种方法收敛速度。

2、在利率问题中,若贷款额为20万元,月还款额为2160元,还期为10年,则年利率为多少?请使用牛顿迭代法求解。

3、由中子迁移理论,燃料棒的临界长度为下面方程的根 ,用牛顿迭代法求这个方程的最小正根。

4、用牛顿法求方程 的根,精确至8位有效数字。

比较牛顿迭代法算单根和重根的收敛速度,并用改进的牛顿迭代法计算重根。

三、 实验程序第1题:02)(=-+=x e x x f 区间[0,1] 函数画图可得函数零点约为0.5。

画图函数:function Test1()% f(x) 示意图, f(x) = x + exp(x) - 2; f(x) = 0r = 0:0.01:1;y = r + exp(r) - 2plot(r, y);grid on二分法程序:计算调用函数:[c,num]=bisect(0,1,1e-4)function [c,num]=bisect(a,b,delta)%Input –a,b 是取值区间范围% -delta 是允许误差%Output -c 牛顿迭代法最后计算所得零点值% -num 是迭代次数ya = a + exp(a) - 2;yb = b + exp(b) - 2;if ya * yb>0return;endfor k=1:100c=(a+b)/2;yc= c + exp(c) - 2;if abs(yc)<=deltaa=c;b=c;elseif yb*yc>0b=c;yb=yc;elsea=c;ya=yc;endif abs(b-a)<deltanum=k; %num为迭代次数break;endendc=(a+b)/2;err=abs(b-a);yc = c + exp(c) - 2;牛顿迭代法程序:计算调用函数:[c,num]=newton(@func1,0.5,1e-4) 调用函数:function [y] = func1(x)y = x + exp(x) - 2;end迭代算法:function[c,num]=newton(func,p0,delta)%Input -func是运算公式% -p0是零点值% -delta是允许误差%Output -c牛顿迭代法最后计算所得零点值% -num是迭代次数num=-1;for k=1:1000y0=func(p0);dy0=diff(func([p0 p0+1e-8]))/1e-8;p1=p0-y0/dy0;err=abs(p1-p0);p0=p1;if(err<delta)num=k;%num为迭代次数break;endendc=p0;第2题:由题意得到算式:计算调用函数:[c,num]=newton(@func2,0.02,1e-8) 程序:先用画图法估计出大概零点位置在0.02附近。

数值分析实验五 非线性方程的求根6

数值分析实验五     非线性方程的求根6

数值分析实验五 非线性方程的求根组号 班级 学号 姓名 分数一:实验目的1、 掌握用MA TLAB 软件求解非线性方程的基本用法。

2、 熟练运用不动点迭代法和牛顿法求解非线性方程的根。

二:实验内容及基本知识介绍不动点迭代法基本思路:首先给定一个粗糙的初始值,然而用一个迭代公式,反复校对这个初值,将已有近似值逐步精确化,一直到满足精度为止。

具体的,把方程()0f x =改写成x 的表达式()x x ϕ= ⑴ ,若()**x x ϕ=称*x 为()*x ϕ的一个不动点,求()f x 的零点等价于求()x ϕ的不动点。

在[],a b 上任取一点0x 代入()x ϕ求得()10x x ϕ=,又将1x 代入()x ϕ求得()21x x ϕ=,如此反复下去,一般地得()10,1,2,k k x x k ϕ+== ⑵。

()x ϕ称为迭代函数,()x x ϕ=为迭代公式。

牛顿法基本思想:将非线性方程()0f x =逐步转化为某种线性方程来求解。

设()0f x =的一个近似根0x ,则函数()f x 在点0x 附近可以用一阶泰勒公式()()()()0000f x f x f x x x '≈+-=来近似。

若()00f x '≠,解得()()000f x x x f x =-',将此根为原方程的近似根1x ,然后按上式迭代计算,使形成一种新的迭代公式()()10,1,2,k k k k f x x x k f x +=-=' 称为牛顿法。

三:实验问题及方法、步骤1.用MATLAB 函数求解方程3()310f x x x =--=在02x =附近的根。

首先建立如下的函数文件,Function y=f(x)y=x*x*x-3*x-1;然后在命令窗口中键入:fzero(@f,2),ans =1.87942.用不动点迭代法求()32410f x x x =+-在[1,1.5]上的一个根。

第二次实验报告(非线性方程求根)

第二次实验报告(非线性方程求根)

班级: 学号: 姓名: 成绩:实验2 非线性方程的数值解法实验1实验目的1)进一步熟练掌握求解非线性方程的牛顿迭代法和弦截法。

2)根据牛顿迭代法和弦截法的原理,编写程序求解非线性方程,提高编程解决问题的能力。

2 实验内容(1)用牛顿法和割线法求下列方程的根x^2-e^x=0;x*e^x-1=0;(23实验原理(1)牛顿迭代公式:1()/'()k k k k x x f x f x +=- 双点弦法公式:111()()()()k k k k k k k f x x x x x f x f x +--=--- (2)令2()f x x A =-,再用牛顿法求根。

4实验步骤1)根据牛顿迭代法,双点弦法的算法编写相应的求根函数;2)用牛顿迭代法和双点弦法分别对方程进行求解;5 程序设计牛顿迭代法x0=1.0;N=100;k=0;eps=5e-6;delta=1e-6;while(1)x1=x0-fc1(x0)/fc2(x0);k=k+1;if k>Ndisp('Newton method failed')breakendif(abs(x1-x0)<delta || abs(fc1(x1))<delta) break;endx0=x1;endfprintf('%f',x0)fprintf('%f',abs(fc1(x1)))双点弦法function cutline(x0,x1)N=100;k=0;delta=5e-8;while(1)(abs(x1-x0)>=delta)c=x1;x1=cutnext(x0,x1);x0=c;k=k+1;if k>Ndisp('Cutline method failed')break;endif(abs(x1-x0)<delta || abs(fc1(x1))<delta) break;endendfprintf('%10f\n',x1);function y=cutnext(a,b)y=b-fc(b)/(fc(b)-fc(a))*(b-a);1)原函数function fc1=fc1(x)fc1=x^2-exp(x);end导函数function fc2=fc2(x)fc2=2*x-exp(x);end2)原函数导函数3)原函数导函数6实验结果及分析注:牛顿迭代法由于设置delta=1e-6,所以算出的误差e<1.0*10^-6;割线法由于设置delta=5e-8,所以误差e<5.0*10^-8.7总结。

实验六 非线性方程求根报告

实验六 非线性方程求根报告

实验六 非线性方程求根一、问题提出设方程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、 331x x =+4、 213x x =- 5、 13x x=+ 6、 32131()31x x x x x --=--二、要求1、编制一个程序进行运算,最后打印出每种迭代格式的敛散情况;2、用事后误差估计1k k x x ε+-<来控制迭代次数,并且打印出迭代的次数;3、初始值的选取对迭代收敛有何影响;4、分析迭代收敛和发散的原因。

三、目的和意义1、通过实验进一步了解方程求根的算法;2、认识选择计算格式的重要性;3、掌握迭代算法和精度控制;4、明确迭代收敛性与初值选取的关系。

四、实验学时:2学时五、实验步骤:1.进入C 或matlab 开发环境;2.根据实验内容和要求编写程序;3.调试程序;4.运行程序;5.撰写报告,讨论分析实验结果.解:程序代码:#include<iostream>#include<cmath>#include<cstdlib>using namespace std;double f(double i) //外调函数f(x),每次更新新的函数{//以第一种迭代方式为例子double k,m,sum;k=3*i+1;m=pow(i,2.0);sum=k/m;return sum;}int main(){double x,x0;int N;//最大迭代次数int k;cout<<"输入初解:";cin>>x0;cout<<"输入最大迭代次数:";cin>>N;for(k=1;k<=N;k++){x=f(x0);if(fabs(x-x0)<0.0000001){cout<<"迭代次数:"<<k<<endl;cout<<"输出得到的解:"<<x<<endl;system("pause");return 0;}else x0=x;}cout<<"已达到最大迭代次数:"<<N<<endl;cout<<"输出得到的解:"<<x<<endl;system("pause");return 0;}实验结果:程序运行结果讨论和分析:对于第一种迭代格式,收敛区间[-8.2 -0.4],在该收敛区间内迭代收敛于-1.53209,只能求得方程的一个根;对于第二种迭代格式,收敛区间[-1.5 1.8],在该收敛区间内迭代收敛于-0.34730,同样只能求得方程的一个根;对于第三种迭代格式,收敛区间[-0.3 +∞),在该收敛区间内迭代收敛于 1.87937,只能求得方程的一个根;由以上结果很容易发现,初值的选取对迭代敛散性有很大影响。

数值分析实验报告之迭代法求非线性方程的根

数值分析实验报告之迭代法求非线性方程的根

数值分析实验报告之迭代法求非线性方程的根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根据收敛准则,判断迭代结果是否满足收敛条件。

数值分析实验一非线性方程组求解

数值分析实验一非线性方程组求解
x ,f( x )) ( x , f( x )) 和( 。 重复计算(b)(c), 直至相邻两次迭代值之差在容许范围之内。 0 0 1 1
// MainFrm.cpp : implementation of the CMainFrame class // #include "stdafx.h"
实 验 源 代 码
#include "20141501069 于童实验一.h" #include "math.h" #include "MainFrm.h" #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif

算法思想: 选定初始值 x0 , x1 ,并计算 f ( x0 ) 和 f ( x1 ) ;
弦 位 法
f ( x ) x n ( x x ) n 1 n n n 1 用迭代公式 x 计算 x2 ,再求 f ( x2 ) ; f ( x ) f ( x ) n n 1
0 x ,f ( x )) x , f( x )) 判别:如果 f (x 则迭代停止;否则,用 ( 和( 分别代替 2) 2 2 1 1
ReleaseDC(pDC); } void CMainFrame::Ondd() { // TODO: Add your command handler code here CDC*pDC=GetDC(); pDC->Rectangle(0,0,10000,10000); pDC->TextOut(10,30,"迭代法:方程 X^3-3X-1=0,迭代方程为:Xn+1=(3*Xn+1)^1/3"); double a=2; double b=pow(3*a+1,1.0/3); inti=0; intss=0; int s=0; int t=0; CString date; pDC->TextOut(20+20,50,"x0 : 2.000000"); while (fabs(a-b)>=0.00001) { i+=20; t++; ss++; if (t>=10) s=-10; pDC->TextOut(40+s,50+i,"x"); date.Format("%d",ss); pDC->TextOut(50+s+10,50+i,date); pDC->TextOut(60+10,50+i,":"); date.Format("%lf",b); pDC->TextOut(70+10,50+i,date); double temp=b-(b*b*b-3*b-1)/(3*b*b-3); a=b; b=temp; } } void CMainFrame::Onxw() { // TODO: Add your command handler code here CDC*pDC=GetDC(); pDC->Rectangle(0,0,10000,10000);

基于matlab的数值分析( 非线性方程求根)上机实验报告1

基于matlab的数值分析( 非线性方程求根)上机实验报告1

数值分析试验报告非线性方程求根二分法解方程1. 题目:用二分法求方程0133=--x x 的所有根 2. 方法:二分法 3. 程序function x=erfenfa(a,b)if (a*a*a-3*a-1)*(b*b*b-3*b-1)>0 disp('区间错误,请重新调试!'); break else x=(a+b)/2.0; k=0;while (k<=100&abs(x*x*x-3*x-1)>0.0001&b-a>0.0001) if (x*x*x-3*x-1)*(a*a*a-3*a-1)<0 b=x; else a=x; end x=(a+b)/2.0; k=k+1; k,x if k==100display('计算方法错误,请重新调试!'); end end enddisp(['k=',num2str(k)])4. 结果>> format compact >> erfenfa(1,2) k = 1 x = 1.000000 k = 2x = 1.000000 k = 3 x = 1.000000 k = 4x =1.000000k =5x =1.000000k =6x =1.000000k =7x =1.000000k =8x =1.500000k =9x =1.250000k =10x =1.125000k=10ans =1.125000 >> erfenfa(-1,1) k =1x =-0.000000k =2x =-0.000000k =3x =-0.000000k =4 x =-0.000000k =5x =-0.000000k =6x =-0.000000k =7x =-0.000000k =8x =-0.000000k =9x =-0.500000k =10x =-0.750000k =11x =-0.347k =12x =-0.937500k =13x =-0.906250k=13ans =-0.906250 >> erfenfa(-2,-1) k =1x = -1.000000 k = 2 x = -1.000000 k = 3 x = -1.000000 k = 4 x = -1.000000 k = 5 x = -1.000000 k = 6 x = -1.000000 k = 7 x = -1.535k = 8 x = -1.500000 k = 9 x = -1.250000 k = 10 x = -1.125000 k = 11 x = -1.187500 k = 12 x = -1.532 k=12 ans = -1.5325,拓展:在程序编写完成调试过程中发现如果给出错误区间程序仍能给出一个错误答案,于是找同学讨教,讨论得出了正确的方法不动点解方程1. 题目: 解方程02010423=-++x x x 的根2.方法:不动点迭代法3.程序function x=budongdian(x0)p=x0;for k=1:10x0=p;p=20/(x0*x0+4*x0+10);if abs(p-x0)<0.0001break;endkpif k==10disp('计算错误')endend4.结果>> format compact>> budongdian(1)k =1p =For personal use only in study and research; not for commercial use1.3333k =2p =1.1688k =3p =1.2468k =4p =1.2091k =5p =1.2271k =6p =1.2184 k = 7 p = 1.2226 k = 8 p = 1.2206 k = 9 p = 1.2216 k = 10 p = 1.2211 k = 11 p = 1.2213 k = 12 p = 1.2212 p =1.2213Newton 迭代法求方程的根1. 题目:求方程0105233=++x x 的根 2. 方法:newton 迭代法 3. 程序:function x=newton(a) p=a;for k=1:100 a=p;p=a-(3*a*a*a+5*a*a+10)/(9*a*a+10*a); if abs(p-a)<0.00001 break; endif k==100display('计算错误'); endkpendp4.结果>> format long>> newton(-2)k =1p =-2.000000k =2p =-2.094853k =3p =-2.142995p =-2.582976>>对于不同的函数只需将文中x*x*x-3*x-1你所需求解的函数就ok 了仅供个人用于学习、研究;不得用于商业用途。

数值分析- 非线性方程求根

数值分析- 非线性方程求根
那么迭代过程在
( x *) 0,
( p)
( x *) 0 ,
x * 附近是 p 阶收敛的 .
特别地,当
0 | ( x *) | 1时 , 迭代法线性收敛
;
当 ( x *) 0 , ( x *) 0时 , 平方收敛 .
§3
迭代收敛的加速方法
由迭代公式校正一次得
x 0 [ a , b ], 迭代序列 (2.2) 均收敛于 x *, L
k
1 L 1 1 L
| x1 x 0 |, | x k 1 x k | .
在 [1,2] 内考查如下迭代法的敛 1) x k 1
3 3 k
散性:
x k 1 ; 2) x k 1 x 1 .
• • •
设函数f(x)在区间[a,b]上单调连续,且 f(a)·f(b)<0 则方程(1.1)在区间(a,b)内有且仅有 一个实根x。
二、二分法
二分法简述.
设 f ( a ) f ( b ) 0 , 取 x 0 ( a b ) / 2 . 假如 f ( x 0 ) 是 f ( x )的零点, 那么输出 x 0 , 停止 . 假若不然, 若 f ( a ) 与 f ( x 0 )同号,则 a1 x 0 , b1 b ; 否则 a1 a , b1 x 0 .
一、埃特金加速收敛方法
对于收敛的迭代过程, x1 ( x 0 ),
再校正一次得 x 2 ( x1 ).
如果 ( x ) 变化不大 , ( x ) L , 则
x1 x * ( x 0 ) ( x *) L ( x 0 - x *), x 2 x * ( x1 ) ( x *) L ( x1 - x *).
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

数值分析实验报告——非线性方程求根
二分法
一、题目
用二分法求方程=
的所有根
x
.13要求每个根的误差小于
-x
+
0.001.
.
2
1
二、方法
二分法
三、程序
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,end
max=1+round((log(b -a)-log(tol2))/log(2));%round函数是将数据取整,使数据等于其最接近的整数。

for k=1:max
c=(a+b)/2;
yc=feval('f',c);
if((b-a)/2<tol2)|(abs(yc)<tol1),break,end
if yb*yc<0
a=c;ya=yc;
else
b=c;yb=yc;
end
end
k,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 =
8
c =
-0.9996
yc =
3.9017e-004
>> jiangerfen('f',-0.8,-0.3);
k =
8
c =
-0.6184
yc =
2.7772e-004
>> jiangerfen('f',1.3,2);
k =
10
c =
1.6179
yc =
-9.5348e-004
>> jiangerfen('f',2,3);
(a,b)不是有根区间
方程f(x)=x^3-2*x-1的所有根为-0.9996,-0.6184 ,1.6179 。

迭代次数分别为8,8,10。

五、拓展
由于二分法收敛太慢,可以先通过画图,取得一个包含根的小区间,再用二分法来求解,这样就能有效减少迭代次数。

不动点迭代法
一、题目
的一个根。

的在用不动点迭代求]1,0[01sin 2 : .22=--x x
二、方法
不动点迭代法
三、程序
1、Jiangbudong.M 的程序
function p=jiangbudong(g,x0,tol,max)
P(1)=x0;
for k=1:max
P(k+1)=feval('g',P(k));
p=P(k+1);
if abs(P(k+1)-P(k))<tol break;end
if k==max disp('method failed');end
end
P,k-1
2、g.M 的程序
function y=g(x);
y=(sin(x)+1)/(2*x);
四、结果
>> format compact
>> fplot('[2*x^2-sin(x)-1,0]',[0,1]);
>> jiangbudong('g',0.5,1e-4,50)
P =
Columns 1 through 9
0.5000 1.4794 0.6745 1.2042 0.8028 1.0708 0.8767 1.0087 0.9151
Columns 10 through 18
0.9794 0.9343 0.9655 0.9437 0.9588 0.9483 0.9556 0.9505 0.9541
Columns 19 through 27
0.9516 0.9533 0.9521 0.9530 0.9524 0.9528 0.9525 0.9527 0.9526
Column 28
0.9526
ans =
26
ans =
0.9526
方程2x^2-sin(x)-1=0在[0,1]的根为0.9526。

取的初值是0.5。

五、拓展
在不动点迭代法中,迭代过程的收敛速度依赖于迭代函数g(x)的选取。

若dg(x)不等于0,则该迭代过程只可能是线性收敛。

如果改动迭代函数为g(x)=sqrt((sin(x)+1)/2),则输出结果为 >> jiangbudong('g',0.5,1e-4,50)
P =
Columns 1 through 6
0.5000 0.8601 0.9375 0.9503 0.9523 0.9526
Column 7
0.9526
ans =
5
ans =
0.9526
迭代次数为5次,相比先前的26次,收敛速度加快了很多。

因此,在选取迭代函数时,应该尽量让函数收敛的阶更高一点。

Newton 迭代法
一、题目
;013 :10,Newton .335的所有根准确到迭代法求解用=+--x x
Newton迭代法
三、程序
1、Jiangnewton.M的程序
function p=jiangnewton(h,dh,x0,tol1,max) p0=x0;
for k=1:max
p=p0-feval(h,p0)/feval(dh,p0);
if abs(p-p0)<tol1 break;end
p0=p;
disp(p0);
if k==max disp('method failed');end end
k-1
2、h.M的程序
function y=h(x);
y=x^3-3*x+1;
3、dh.M的程序
function y=dh(x);
y=3*x^2-3;
四、结果
>> format compact
>> fplot('[x^3-3*x+1,0]',[-4,4]);
>> jiangnewton('h','dh',-2.1,1e-5,100) -1.9083
-1.8800
-1.8794
ans =
3
ans =
-1.8794
>> jiangnewton('h','dh',0.2,1e-5,100)
0.3417
0.3473
0.3473
ans =
3
ans =
0.3473
>> jiangnewton('h','dh',1.1,1e-5,100)
2.6381
1.5484
1.5324
1.5321
ans =
6
ans =
1.5321
方程x^3-3x+1=0的根为-1.8794,0.3473 ,1.5321。

迭代次数分别为3,3,6。

五、拓展
由于牛顿迭代法收敛性依赖初值的选取,倘若选取的初值偏离所求根较远或者选取不恰当,牛顿法可能发散,求不出根来。

例如:jiangnewton('h','dh',-1,1e-5,100),则求不出根来。

>> jiangnewton('h','dh',-0.7,1e-5,100)
1.1020
2.6071
1.9804
1.6580
1.5467
1.5323
1.5321
ans =
7
ans =
1.5321
>> jiangnewton('h','dh',-0.6,1e-5,100)
0.7458
0.1279
0.3375
0.3473
0.3473
ans =
5
ans =
0.3473
>> jiangnewton('h','dh',-1.1,1e-5,100)
-5.8127
-4.0035
-2.8688
-2.2232
-1.9426
ans =
7
ans =
-1.8794
由上面可以看到,选取的初值相差很小,可是求出的根却不一样。

相关文档
最新文档