实验四非线性方程求根

合集下载

第4章 非线性方程求根

第4章 非线性方程求根

f ( xk ) f ' ( xk )
函数在a处作Taylor展开
收敛速度
( xn a) 2 xn 1 a ( xn ) (a) ( xn a) ' (a) ' ' ( n ) 2 ( xn a) 2 ( xn a) 2 ' ' ( n ) ' ' (a) 2 2
1、存在唯一的点
则有:
2、 x0
a, b
x*, x* ( x*)
迭代收敛,且有误差估计
Lk x * xk x1 x0 1 L
数 学 系 University of Science and Technology of China
DEPARTMENT OF MATHEMATICS
证毕
数 学 系 University of Science and Technology of China
DEPARTMENT OF MATHEMATICS
构造满足定理条件的等价形式一般难于做到。要构造收敛迭代格式有两个要素: 1、等价形式 2、初值选取 下面我们开始介绍若干种迭代法的构造方法
数 学 系 University of Science and Technology of China
2
x* x
数 学 系 University of Science and Technology of China
DEPARTMENT OF MATHEMATICS
4.2 迭代法
f (x) = 0
等价变换
x = g (x)
f (x) 的根
g (x) 的不动点
从一个初值 x0 出发,计算 x1 = g(x0), x2 = g(x1), …, 思 xk+1 = g(xk), … 若 x k k 0 收敛,即存在 x* 使得 路 lim x k x *,且 g 连续,则由 lim x k 1 lim g x k 可 k k k 知 x* = g(x* ),即x* 是 g 的不动点,也就是f 的根。

非线性方程求根—牛顿迭代法(新)

非线性方程求根—牛顿迭代法(新)

非线性方程求根——牛顿迭代法一、牛顿迭代法的基本思想基本思想:将非线性方程逐步归结为某种线性方程求解。

设方程f (x )=0有近似根x k (f `(x k )≠0),将f (x )在x k 展开:(ξ在x 和x k 之间)2()()()()()()2!k k k k f f x f x f x x x x x ξ'''=+-+-()()()()k k k f x f x f x x x '≈+-可设记该线性方程的根为x k +1,则()()()0k k k f x f x x x '+-=1()()k k k k f x x x f x +=-'故f (x )=0可近似表示为即为Newton 法迭代格式。

(k =0,1,……)例:用Newton 迭代法求方程310x x --=在x 0=1.5附近的近似实根。

解:32()1,()31f x x x f x x '=--=-迭代公式为312131kk k k k x x x x x +--=--计算步骤如下:(1)取初值x 0=1.5;(2)按照迭代公式计算x 1;(3)若|x 1-x 0|<=0.00001,终止迭代;否则,x 0=x 1;转(2);(4)输出迭代次数和近似根.二、牛顿迭代法的实现MATLAB求解程序设计:方程及一阶导数函数:function[fun,dfun]=fun0(x)fun=x^3-x-1;%求原函数的值dfun=3*x^2-1;%求一阶导数的值计算主程序:clearx0=1.5;[fun,dfun]=fun0(x0);x1=x0-fun/dfun;i=1;while abs(x1-x0)>1e-5x0=x1;[fun,dfun]=fun0(x0);x1=x0-fun/dfun;i=i+1;enddisp('the solution is x1=')x1disp('the iter time is ')i计算结果为:the solution is x1=x1 =1.3247the iter time isi =4可见经过4次迭代即到达要求的精度,原方程的一个近似实数根为1.3247.三、牛顿迭代法的收敛性牛顿迭代法的迭代函数:)()()(x f x f x x '-=ϕ222)]([)()()]([)()()]([1)(x f x f x f x f x f x f x f x '''='''-'-='ϕ设f (x *)=0,f `(x *)≠0,则ϕ`(x *)=0,故Newton 迭代法在x *附近至少平方收敛。

非线性方程求根的方法简介与例题

非线性方程求根的方法简介与例题

非线性方程求根的方法简介与例题第一篇:非线性方程求根的方法简介与例题非线性方程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 插值摘要数值计算方法,是一种研究解决数学问题的数值近似解方法,它的计算对象是那些。

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

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

数学实验报告实验五学院:数学与统计学院班级:数学与统计学院(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总结。

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

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

数值分析实验报告——非线性方程求根二分法一、题目用二分法求方程=的所有根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数学软件平台,通过实例比较了二分法、牛顿迭代法、弦截法三种基本方法的优缺点。

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

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

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

第四章 非线性方程求根

第四章   非线性方程求根
f ( x* ) f ( x* ) f ( m1) ( x* ) 0, f ( m) ( x* ) 0
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)

计算方法非线性方程求根实验

计算方法非线性方程求根实验
1.用迭代法解方程: f ( x) − ln( x + 2) = 0。 #include "iostream.h" #include "math.h" inline double fun1(double x) { return log(x+2); } inline double fun2(double x) { return exp(x)-2; } double ER(double x,double y,double e,double (*p) (double)) { double xy=p(x),dis=fabs(xy-x); while(dis>e && xy>x && xy<y) { x=xy; xy=p(x); } return xy; } void main() { double a1=1,b1=2,a2=-1.9,b2=-1; double (*p)(double); double m=0.5*pow(10,-6); p=fun1; double f1=ER(a1,b1,m,p); p=fun2; double f2=ER(a2,b2,m,p); cout<<"f1="<<f1<<endl; cout<<"f2="<<f2<<endl; } 2.用牛顿迭代公式计算 26 的近似值。 #include "iostream.h" #include "math.h" void main() {
f (a ) ⋅ f (b) < 0 ;又设 f ( x) 的一个零点 x* ∈ (a, b) 的近似值 (设f ′( x0 ) ≠ 0) 。用过曲

计算方法非线性方程求根

计算方法非线性方程求根

计算方法非线性方程求根第十章非线性方程求根知识点:求根的基本概念,对分法,迭代法,误差,编程停机判断,算法说明1.概念(1)根的概念方程f(x)=0的解叫做方程的根或f(x)的零点。

例如x-cosx=0,x-e x=0求方程的根是数值计算的任务之一,当不易求得f(x)=0的解析解时,可以考虑求其近似根。

求实根问题包括:根的存在性;根的分布;根的精确化.(2)根的存在性如果f(x)是[a,b]上的连续函数,且f(a) f(b)<0,则f(x)=0在(a,b)至少有一个根;若单调,则f(x)=0在(a,b)有惟一根。

(3)根的分布若有根区间的根多于一个,为了得到根的数值解,可以将该有根区间分割若干个子区间,使每个子区间只包含f(x)=0的一个根,这个过程称根的隔离,每个子区间称为隔根区间。

一般情形下,隔根区间内任一点都可作为相应根的近似值,隔根区间越小,近似程度越好。

(4)根的精确化在隔根区间内得到方程f(x)=0相应根的初步近似值后,为使近似值程度更好、符合预先期望,通常应继续逐步精确化根的近似值,直到满足规定的精度要求为止。

精确化方法有很多,常见的有二分法,迭代法等。

2.二分法二分法是利用隔根区间的两个端点来逐步求得满足预先给定精度的近似根。

(1)基本思想对分有根区间,判断f(x)的符号,逐步将有根区间缩小,使得在足够小的区间内取得满足预先给定精度要求的近似值。

(2)具体做法设区间[a,b]为有根区间,记α是f(x)=0在(a,b)的惟一根,二等分区间[a,b]。

令x0=(a+b)/2,如果f(x0)=0,则求得实根α=(a+b)/2。

否则,若f(a)f(x0)<0,则α∈[a,x0],取a1=a,b1=x0;若f(b)f(x0)<0,则α∈[x0,b],取a1=x0,b1=b。

在新的有根区间上重复二等分过程,得有根区间套序列[a,b]? [a1,b1]? [a2,b2] ?…? [a k,b k] ?…b-a>b1-a1>b2-a2>…>b k-a k…,a k≤α≤b k其中每个区间为前一个区间的一半,经过k次二分后,有根区间的长度为如此无限二等分区间[a,b](k→∞)有b k- a k→0(k→∞)或lim a k=lim b k=α(k→∞)。

第4章_非线性方程求根 计算方法

第4章_非线性方程求根   计算方法

解: 从[-4,4]区间以步长为1计算f(x)=x3-3x+1的函数值, 列如下表
4 结束
表2-1
x
计 算 方 法 课 件
-4
-3
-2
-1 3
0 1
1 -1
2 3
3 19
4 53
f(x) -51 -17 -1
可见,在[-2,-1]区间、[0,1]区间、[1,2]区间各有一实根,
下面求[0,1]区间上的实根,列表略: 可见x∊[0.347167968,0.347412109] 若取=0.005,由表可知,当k=13时, bk-ak=0.000244141<0.005,此时过程结束,取 xk=(0.347167968+0.347412109)/2=0.3472900380.347 5 结束
y x y g ( x)
它的解(x*,y *)中的x *就是x=g(x)的根.如图: 图2-3 图2-4 图2-5 10 图2-6 结束
计 算 方 法 课 件
不动点迭代算法: %input:初始解x0;最大迭代次数N;精度tol. %output:近似根x,迭代次数k. 1. k=1; 2. While k<N 2.1 x= g(x0) ; %函数g需要事先定义; 2.2 if abs(x-x0)<tol break end 2.3 k=k+1; x0=x; end 3. disp(x); disp(k)
此方程还可以有另外的迭代形式:
xk 1
计 算 方 法 课 件
1 , 2 3 xk
k 0,1,2,3,
xk 1 3 3xk 1,
4.2.2 迭代法的几何解释
k 0,1,2,3,

非线性方程求根方法

非线性方程求根方法

第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”的一定要是算出的数值,否则会出现错误。

计算方法非线性方程求根实验报告

计算方法非线性方程求根实验报告

实验报告一.MATLAB程序代码(1)function x=agui_bisect(fname,a,b,e)fa=feval(fname,a);fb=feval(fname,b);if fa*fb>0 error('两端函数值为同号');endk=0x=(a+b)/2while(b-a)>(2*e)fx=feval(fname,x);if fa*fx<0b=x;fb=fx;elsea=x;fa=fx;endk=k+1x=(a+b)/2end(2)function x=agui_diedai(fname,x0,e)N=100;x=x0;x0=x+2*e;k=0;while abs(x0-x)>e&k<Nk=k+1x0=x;x=feval(fname,x0);disp(x)endif k==N warning('已达到最大迭代次数');end(3)function x=agui_newton(fname,dfname,x0,e)N=100;x=x0;x0=x+2*e;k=0;while abs(x0-x)>e&k<Nk=k+1x0=x;x=x0-feval(fname,x0)/feval(dfname,x0);disp(x)endif k==N warning('已达最大迭代次数');end二. 实验结果及分析实验结果(1)x11=0.0903 (2)x5=0.0903 (3)x2=0.0903实验分析由三个结果对比可知,牛顿迭代法的迭代次数较少,且比较简单可靠。

可见牛顿迭代法要比二分法和迭代法的收敛速度快的多。

但是对函数有一定的要求。

牛顿迭代要求函数能求导。

非线性方程求根

非线性方程求根

实验七 非线性方程求根实验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 +=-所得到的解是发散的,并且随着初始值选取的不同,发散的程度将会呈现指数型的增长,表明这种迭代法是没有意义的。

实验四:非线性方程的求解

实验四:非线性方程的求解

实验四:解非线性方程的算法设计
实验学时:2学时
一.实验目的
1、理解并掌握用牛顿法求解非线性方程的解的过程。

2、进一步熟悉迭代算法设计的过程和思想。

二.实验内容:
1.用牛顿迭代法求解非线性方程
20=x x
的实根。

精度要求为610-。

三.实验重点
对迭代程序运行过程的理解。

四.实验要求
1.用C 语言编写程序源代码;
2.用牛顿迭代法求解该非线性方程的根;
3.源程序必须编译调试成功,独立完成。

五、选做
利用二分法求解该方程的根。

六. 实验器材
一个装有C 语言编译环境的计算机。

七. 原始程序。

实验四非线性方程求根

实验四非线性方程求根

《数值分析》课程设计实验报告实验四 非线性方程求根一、问题提出设方程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.比较各种方法在求解同一非线性方程根时,在收敛情况上的差异。

2、内容与设计思想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);}前两种迭代结果:第三种:输入数据时应注意数据的类型,否则程序会报错。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

《数值分析》课程设计实验报告
实验四 非线性方程求根
一、问题提出
设方程3()310f x x x =--=有三个实根**1
21.8793,0.34727,x x ==- *3 1.53209x =-现采用下面六种不同计算格式,求 f(x)=0的根*1x 或*2x 1、 231x x x
+= 2、 313
x x -=
3、 x =
4、 213
x x =-
5、 x =
6、 32131()31
x 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 +=时,实验结果为
由相邻两次迭代值差值结果可知,迭代过程处于发散状态。

当迭代格式为313
x x -=,实验结果为
由相邻两次迭代值差值结果可知,迭代过程前8次处于发散状态,第8次之后处于收敛状态,并且经过16次迭代,得到非线性方程的一个根。

当迭代格式为331x x =+,实验结果为
由相邻两次迭代值差值结果可知,迭代过程为收敛的,经过5次迭代后,得到非线性方程的一个根。

当迭代格式为213
x x =-,实验结果为
由相邻两次迭代值差值结果可知,迭代过程前4次处于发散状态,第4次之后处于收敛状态,并且经过11次迭代,得到非线性方程的一个根。

当迭代格式为13x x
=+,实验结果为
由相邻两次迭代值差值结果可知,迭代过程为收敛的,经过3次迭代后,得
到非线性方程的一个根。

当迭代格式为
3
2
131
()
31
x x
x x
x
--
=-
-
,实验结果为
由相邻两次迭代值差值结果可知,迭代过程为收敛的,经过2次迭代后,得到非线性方程的一个根。

三、实验结论
本实验通过不动点迭代法,完成非线性方程根值求解。

对于f(x),如果其迭代式满足不动点存在的两个条件,则在其要求的区间内存在不动点,那么对于其所要求的区间上的所有点此迭代式都收敛。

即此时初值的选取对于迭代收敛没有影响。

初值的不同对于迭代式的敛散性和收敛阶没有影响,只是对于达到所要求误差的达到次数有一定的影响。

分析迭代收敛和发散的原因如图所示:
收敛情况发散情况。

相关文档
最新文档