实验报告二 一元非线性方程的解法..
- 格式:doc
- 大小:113.50 KB
- 文档页数:8
第二章 一元非线性方程的数值解法在科学和工程计算中,如电路和电力系统计算、非线性微分和积分方程、非线性规划、非线性力学等众多领域中,经常会遇到求解非线性方程的问题.非线性科学是当今科学发展的一个重要的研究方向,而非线性方程的数值解法又是其中不可缺少的内容.本章主要讨论一元非线性方程0)(=x f 的数值解法,其中R x ∈,)(x f 为x 的非线性函数. 在方程中,若函数)(x f 是x 的n 次多项式,则称方程为多项式方程或代数方程:023368=-+-x x x;若函数)(x f 是超越函数(自变量之间的关系不能用有限次加、减、乘、除、乘方、开方 运算表示的函数。
如指数函数、对数函数、三角函数和反三角函数等都是超越函数),则称方程为超越方程:例06tan3=--xe x π使()0f x =的*x 称为方程0)(=x f 的根,又称为函数)(x f 的零点.若)(x f 可分解为)(x f =)()(*x g x x m -,其中m 为正整数,且0)(*≠xg .当m =1时,称*x 为方程0)(=x f 的单根,而当1>m 时,则称*x 为方程0)(=x f 的m 重根,或称*x 为)(x f 的m 重零点.设*x 为)(x f 的m 重零点,且)(x g 充分光滑,则0)()()(*)1(**==='=-x f x f x f m ,0)(*)(≠x f m .根的求解:对于n 次多项式方程,当次数4≤n 时,多项式方程的根可用求根公式表示:2,1=n 时方程的根是我们已经熟知的,4,3=n 时虽然有求根公式,但已不适合用于数值计算;而次数5≥n 时,就不能用公式表示多项式方程的根了.因此,对于次数3≥n 的多项式方程和一般连续函数方程,在实际应用时,通常并不需要得到方程根的解析表达式,只要得到满足一定精度的数值近似根就可以了.对于非线性方程0)(=x f ,求其近似数值根一般分为四步:(1) 判断根的存在性:判断方程0)(=x f 是否有根若有,有几个(2) 确定根的分布范围:分析并估计方程根的分布情况,并将每一个根用相应区间分隔开,即确定方程根的有根区间;(3) 根的初始化:确定根的初始近似值(称之为初始近似根);(4) 根的精确化:对根的某个初始近似值设法逐步精确化,使其满足一定的精度要求.由以上步骤可以看出,求非线性方程数值近似根的方法一般为迭代法.第一节 初始近似根的确定一、有根区间的确定设)(x f 为区间],[b a 上的连续函数,若0)()(<b f a f ,由闭区间上连续函数的性质(根的存在定理)可知,方程0)(=x f 在),(b a 内至少存在一个实根,此时则称],[b a 为方程0)(=x f 的有根区间(Rooted Inter-val).此外我们也可以借助某些数学软件(如MathCAD, Mathematics, Matlab 等)描绘出)(x f 的图像,直观地了解方程0)(=x f 根的分布情况.因此,我们可用试探的办法或根据函数的图象,确定出根的分布范围,即将函数)(x f 的定义域分成若干个只含一个实根的区间. 例 试确定方程01)(6=--=x x x f 的有根区间.解 由于16)(5-='xx f ,当561>x 时0)(>'x f ,则)(x f 为严格单调增函数;而当561<x 时0)(<'x f ,则)(x f 为严格单调减函数.又由于0615<⎪⎪⎭⎫ ⎝⎛f ,)(>±∞f ,所以方程01)(6=--=x x x f 只有两个实根.经进一步分析可知,0)2()1(<f f ,则方程在[1,2]内有一个实根;0)0()1(<-f f ,则方程的另一个实根在[-1,0]内.下面介绍的几种求方程的根的常用数值解法,即二分法,牛顿迭代法,都是将方程的初始近似根逐步精确化的方法.第二节 二分法二分法也称为区间对分法,是解非线性方程最直观、最简单的方法.为讨论方便,不妨设函数)(x f 在],[b a 上连续,严格单调,且0)()(<b f a f ,则方程0)(=x f 在区间],[b a 内有且仅有一个实根*x .二分法的基本思想:将方程的有根区间平分为两个小区间,然后判断根在哪个小区间,舍去无根小区间,而后再把有根的小区间一分为二,判断根属于哪个更小的区间,如此反复,直到求出满足精度要求的近似根.二分法的具体计算过程如下: 1. 取区间],[b a 的中点)(21b a x +=,计算区间中点函数值)(0x f ,并判断:若0)()(0<x f a f ,则根],[0x a x∈*,令011,x b a a ==,则新的有根区间为],[11b a ;若0()0f x =,则0x 即为所求根*x ;若0)()(0>xf a f ,则根],[0b x x ∈*,令b b x a ==101,,则新的有根区间为],[11b a .2. 对有根区间11[,]a b 施行同样的操作,即取中点)(21111b a x +=,再将11[,]a b 分为两个子区间11[,]a x 和11[,]x b ,计算)(1a f 和)(1x f ,若)()(11<x f a f则11[,]xa x *∈,令1212,x b a a == ;否则11[,]x x b *∈,令1212,b b x a ==.这样又确定了一个有根区间22[,]a b ,其长度是区间11[,]a b 长度的一半.如此反复,便得到一系列有根区间⊃⊃⊃⊃⊃],[],[],[],[2211n n b a b a b a b a显然,区间],[n nb a 的长度为n n n n n ab a b a b 2211-==-=---当∞→n 时,上式的极限为0,区间[,]kka b 最终必收敛于一图 二分法示意图点, 该点就是所求方程的根*x .我们取二分后的最后的有根区间],[n nb a 的中点n x 作为方程的根*x 的近似根2nn n b a x +=,],[n n nb a x∈,其误差估计式为≤-||*n x x2n n a b -12+-=n ab 当∞→n 时,取≤-||*n x x02→-nn a b ,即*x x n →. 对预先给定的精度0>ε(即指定的绝对误差限ε),可以用以下方式结束二分法: 当ε<-++||11n n a b 时,必有ε<-*||n x x ,结束二分法计算,取n x x≈*;二分法的计算步骤如下:(1) 输入有根区间的端点b a ,及预先给定的精度ε; (2) 2/)(:b a x +=; (3) 若0)()(<x f a f ,则x b =:,转向(4);否则x a =:,转向(4);(4) 若ε<-a b ,则输出方程满足精度的根x ,结束;否则转向(2). 二分法的优点: 1、是算法简单;2、对函数的性质要求较低(只要连续即可);3、收敛性可保证. 二分法的缺点: 1、收敛速度很慢;2、不能求偶数重根,原因在于当方程有偶数重根时所分区间端点处函数值同号,而将该区间舍去造成失根现象.因此.在实际应用时,可用它求方程根的初始近似值.例 用二分法求方程01)(23=-+=x xx f 在]1,0[上的根(取310-=ε).解(1) 这里1,0==b a ,01)1(,01)0(>=<-=f f ,得有根区间]1,0[;(2) 计算0125.0)5.0(,5.02100<-==+=f x ,得有根区间]1,5.0[;(3) 计算01563.0)75.0(,75.0215.02<-==+=f x 得有根区间]1,75.0[;如此继续,直到3110--<-k kx x时停止,计算结果见表:表由表知3980.0009810x x --=<所以原方程在]1,0[内的根*90.75489xx ≈≈.第三节 牛顿迭代法及其收敛性迭代法在数学的各个分支都有着重要的应用.本节主要讨论迭代法在非线性方程求根的应用. 一、迭代法的基本思想迭代法的基本思想是:将方程中()0f x =化为下列等价形式)(x g x = 若要求*x 满足0)(*=xf ,则只需求出)(**xg x =即可;反之也是如此,则称*x 为函数)(x g 的一个不动点,求函数)(x f 的零点就等价于求函数)(x g 的不动点.在有根区间内选一个初始近似值0x ,然后按构造公式,2,1,0),(1==+k x g x k k可得到一个数列,,,,,210k x x x x称{}kx 为迭代序列,而称式中的)(x g 为迭代函数.如果迭代序列{}kx 是收敛的,且收敛于*x ,则当)(x g 连续时,在式两边取极限即得)(**x g x=,即 0)(*=x f从而*x 便是方程的根.但实际计算当然不可能做无穷多步,实用上,当k 充分大时,若ε<--1k k x x就取kx 作为原方程的近似根.这种求根法称为不动点迭代法,或称逐次逼近法(Picard 迭代法).就是一个不动点迭代公式.当迭代公式产生的迭代序列{}kx 收敛时,就称迭代法或迭代公式是收敛的,否则就称为是发散的.二、不动点迭代法的构造我们使用迭代法求解非线性方程时需要解决如下四个问题:(1) 迭代函数的构造;(2) 初始近似根的选取;(3) 迭代序列收敛性分析;(4) 收敛速度和误差分析.三、牛顿迭代法及其收敛性设*x 是一元非线性方程0)(=x f 的根,函数)(x f 在*x 的某邻域内连续可微,kx 是某个迭代近似根,且0)(≠'k x f .把)(x f 在点k x 处进行一阶泰勒展开,可得))(()()(k k k x x x f x f x f -'+≈则方程0)(=x f 可近似表示为 0))(()(=-'+kkkx x x f x f 这是一个线性方程,求解得)()(k k k x f x f x x '-= 将其右端项作为新的迭代值1+k x ,则可得迭代公式)()(1k k k k x f x f x x '-=+ ,2,1,0=k这就是牛顿迭代法(Newton ’s Method),称为牛顿迭代公式.如图所示,曲线)(x f y =与x 轴的交点*x就是方程0)(=x f 的根.设x k是方程0)(=x f 的一个近似根,过曲线y f x =()上的点))(,(k k k x f x P 作切线,切线与x 轴的交点为x k +1,切线的方程为y f x f x x x k k k =+'-()()()设切线点与x 轴的交点为(,)x k +10,若0)(≠'kx f ,则可得牛顿迭代公式)()(1k k k k x f x f x x'-=+ ,2,1,0=k 因此,牛顿迭代法又称为切线法(Tangent Method).牛顿迭代法的几何意义:用曲线)(x f y =在点))(,(kkx f x 处的切线与x 轴的交点的横坐标1+k x 来代替曲线)(x f y =与x轴交点的横坐标*x .牛顿迭代法的计算步骤为: ()1 给出初始近似根0x 及精度ε;()2 计算)()(:0001x f x f xx '-=;()3 对于给定的允许误差ε,若ε<-01x x, 转向()4;否则10:x x=,转向()2;()4 输出满足精度的根1x ,结束.图 切线法示意图例 用牛顿迭代法求方程01=-xxe 在5.0=x 附近的根,精度为810-=ε.解 这里1)(-=xxe x f ,x x xe e x f +=')(,相应的牛顿迭代公式为k xk k xk x x k k k x e x x e x e e x x x kkkk+--=+--=-+111, ,2,1,0=k取5.00=x ,迭代结果见表,易见8341000001000.0||-<=-x x故 567143290.04≈≈*x x迭代了4次就得到了较满意的结果. 例 用牛顿法计算3. 解 令3=x ,则032=-x ,即求3等价于求方程3)(2=-=x x f的正实根.因为x x f 2)(=',由牛顿迭代公式得)3(212321kk k k k k x x x x x x +=--=+, ,2,1,0=k取初值5.10=x,得75.1)3(21001=+=x x x , 732142857.0)3(21112=+=x x x 732050815.1)3(21223=+=x x x ,表732050808.1)3(21334=+=x x x 732050808.1)3(21445=+=x x x732050808.13≈∴这个迭代公式的意义在于通过加法和乘除法实现开方运算,这是在计算机上作开方运算的一个方法.。
第七章非线性方程解法⒈二分法考察有根区间[a, b],取中点x0=(b+a)/2 将它分为两半,假设中点x0不是f(x)的零点,然后进行根的搜索,即查找f(x0)与f(a)是否同号,如果确系同号,说明所求的根x*在x0的右侧,这是令a1= x0,b1=b;否则x*必在x0的左侧,这是令a1=a,b1=x0,不管出现哪一种情况,新的有根区间[a1, b1]的长度仅为[a, b]的一半。
.重复以上做法得新近似根x1,…这样不断将区间分半,得到一系列区间[an , bn],和近似根(区间中点)nx,n=0,1,2,3…,nx误差为(b-a)/2n+1.这样的方法称为二分法。
下面是一个关于二分法的例子。
例1求f(x)=x3- x-1=0在区间[1,1.5]内的一个实根,要求准确到小数点后的第二位.这里a=1,b=1.5,而f(a)<0,f(b)>0。
取[a,b]的中点x0=1.25,将区间二等分,由于f(x0 )<0, 既f(x0 )与f(a)同号,故所求的根x*必在x0 右侧,这是应令a1=x0 =1.25, b1=b=1.5,而得到新的有根区间[a1,b1],这样继续结果如下表:x6.实际上x5就有三位有效数字了.二分法实验(1)上机题目:二分法的应用实验目的:熟悉二分法并在计算机上实现实验要求:①上机前充分准备,复习有关内容,写出计算步骤,查对程序;②完成实验后写出完整的实验报告,内容应该包括:所用的算法语言,算法步骤陈述,变量说明,程序清单,输出计算结果,结果分析等等;③用编好的程序在Matlab环境中执行。
算法说明:①找出计算f(x)在有限根区间[a, b]端点的值,f(a),f(b)②计算计算f(x)在区间中点(2ba+)处的值f(2ba+) .③判断若f(2ba+)=0,则2ba+即是根,计算过程结束,否则检验若f(2ba+)f(a)<0,则以2ba+代替b,否则以2ba+代替a.反复执行步骤②和步骤③,直到区间[a, b]长度小于允许误差ξ,此时中点2ba+即为所求近似根。
数值分析实验报告——非线性方程求根一、实验目的: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.通过比较,发现割线法和牛顿法的收敛速度较快,精确程度较高,因此选择割线法进行求解。
六、实验总结:通过本次实验,我掌握了求解非线性方程的常用方法,并使用数值分析软件实现了二分法、割线法和牛顿法。
计算方法实验报告专业班级:姓名:学号:实验成绩:1.【实验题目】非线性方程组求解2.【实验目的】(1).掌握二分法、迭代法、牛顿迭代法求方程近似根的基本思想与原理。
(2).掌握常用迭代算法的程序实现。
3.【实验内容】迭代法是求解非线性方程的基本方法,其构造方法可以有多种多样,但关键是怎样才能使迭代收敛且有较快的收敛速度。
考虑一个简单的代数方程,针对该方程,可以构造多种迭代法,如:取初始值,取,分别用以上迭代格式作实验,记录各算法的迭代过程4. 【实验要求】(1)取定某个初始值,按方案1~3对非线性方程求根,它们的收敛性如何?重复选取不同的初始值,反复实验。
请读者自行设计一种比较形象的记录方式(如利用Matlab的图形功能),分析三种迭代法的收敛性与初值选取的关系。
(2)对三个迭代格式的某一种,分别取不同的初始值进行迭代,结果如何?试分析迭代法对不同的初值是否有差异?(3)对代数方程,分别用方案1 用二分法求解;方案2 用牛顿法求解;5. 【算法描述】二分法算法步骤1)计算有根区间的端点a,b及预先给定的精度e。
2)计算中点(a+b)/2。
3)若f(x)f(a)<0,则x b,转向4);否则,x a,转向4).⇒⇒4)若b-a<e,则输出满足精度的根x,结束;否则转向2)。
牛顿法迭代法的计算步骤x01)给出初始近根及精度e。
2)计算。
x x x x f f 1000)(')(⇒-3)若|-|<e ,则转向4);否则转向2)。
x 1x 0x x 01⇒4)输出满足精度的根,结束。
x 16. 【源程序(带注释)】二分法#include<stdio.h>#include<math.h>#include<conio.h>#include<windows.h>float f(float x){float a;a=x*x*x-x-1;return a;} /*求函数值,如果求其它函数,只需改成其它函数即可*/ main(){float a,b,e,x; /* a,b 分别表示有根区间的左、右端点, e 是精度要求,x 区间中点值*/system("CLS");//清屏printf("对代数方程x^3-x-1=0,分别用\n 方案1 用二分法求解\n");printf(" \n please input data a =");scanf("%f",&a);printf(" \n please input data b=");scanf("%f",&b);if(f(a)*f(b)<0){while(f(x)!=0){x=(a+b)/2;if(f(x)*f(a)<0){b=x;if(fabs(b-a)<0.000001)break;elsecontinue;}else{a=x;if(fabs(b-a)<0.000001)break;else continue;}}printf("\n");x=(b+a)/2;printf("the root of f(x)=0 is x=%f\n",x);}elseprintf("\ not root! afresh input\n"); /*表示[a,b] 区间无根,重新选择有根区间*/getch();return(x);}牛顿法#include<stdio.h>#include<math.h>#include<conio.h>#include<windows.h>#define maxrept 1000 /*最大迭代次数*/float f(float x) {float a;a=x*x*x-x-1;return a; /*函数f(x) */}float df(float x) {return(1+exp(-x)); /* 函数f(x)的导数) (x f ′*/ }float iterate(float x) {float x1;x1=x-f(x)/df(x); /* 牛顿迭代函数iterate(x)=x-f(x) / ) (x f ′*/return(x1);}main() {float x0,x1,d;int k=0;//clrscr();system("CLS");printf("对代数方程x^3-x-1=0,分别用\n方案2 用牛顿法求解\n");printf("\n please input x0="); /* 输入迭代初值x0 */scanf("%f",&x0);printf("\n k xk\n");printf("\ %d %f\n",k,x0);do {k++;x1=iterate(x0);printf(" %d %f\n",k,x1);d=fabs(x1-x0);x0=x1;}while((d>=0.000001)&(k<maxrept));if(k<maxrept)printf("the root of f(x)=0 is x=%f, k=%d\n",x1,k);elseprintf("\n the iteration is failed!\n");getch();}7.【实验结果与分析总结(含运行结果截图)】。
2009年——2010年第一学期合肥学院数理系实验报告课程名称:数值分析实验项目:数值积分实验类别:验证性专业班级:08数学与应用数学(2)姓名:卢王菲学号:0807022048 实验地点:7#604实验时间:2009—11-26指导教师:孙梅兰成绩:一.实验目的:理解并掌握二分法、不动点迭代、牛顿切线法及弦截法解非线性方程求根的原理,掌握相应的算法原理,通过计算机解决实验问题二.实验内容:1.求方程01)(3=--=x x x f 在5.1=x 附近的根(精度81021-⨯=),取01x =2. 求方程x x e -=在0.5x =附近的根(精度81021-⨯=),取01x =三 实验方案:利用二分法、不动点迭代、牛顿切线法及弦截法解非线性方程的根,通过计算机解决实验问题。
四. 实验步骤或程序:1. >> f=inline('x^3-x-1');a=1;b=2;dlt=0.5e-5;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;endk=1,x=1.50000k=2,x=1.25000k=3,x=1.37500k=4,x=1.31250k=5,x=1.34375k=7,x=1.32031k=8,x=1.32422k=9,x=1.32617k=10,x=1.32520k=11,x=1.32471k=12,x=1.32495k=13,x=1.32483k=14,x=1.32477k=15,x=1.32474k=16,x=1.32472k=17,x=1.32471k=18,x=1.324722.>> eps=0.5*10^(-8);dx=1;x0=1;k=0; >> while(dx>eps)k=k+1;x=exp(-x0);dx=abs(x-x0)/(1+abs(x));x0=x;end>> kxk =33x =0.5671五.程序运行结果:1.k=1,x=1.50000k=2,x=1.25000k=3,x=1.37500k=4,x=1.31250k=5,x=1.34375k=6,x=1.32813k=7,x=1.32031k=8,x=1.32422k=9,x=1.32617k=11,x=1.32471k=12,x=1.32495k=13,x=1.32483k=14,x=1.32477k=15,x=1.32474k=16,x=1.32472k=17,x=1.32471k=18,x=1.324722. k =33x =0.5671六.实验总结:通过本次实验本人收获很多。
数学实验报告非线性方程求解一、实验目的1.掌握用 MATLAB 软件求解非线性方程和方程组的基本用法,并对结果作初步分析;2.练习用非线性方程和方程组建立实际问题的模型并进行求解。
二、实验内容题目1【问题描述】(Q1)小张夫妇以按揭方式贷款买了1套价值20万元的房子,首付了5万元,每月还款1000元,15年还清。
问贷款利率是多少?(Q2)某人欲贷款50 万元购房,他咨询了两家银行,第一家银行开出的条件是每月还4500元,15 年还清;第二家银行开出的条件是每年还45000 元,20 年还清。
从利率方面看,哪家银行较优惠(简单假设:年利率=月利率×12)?【分析与解】假设初始贷款金额为x0,贷款利率为p,每月还款金额为x,第i个月还完当月贷款后所欠银行的金额为x i,(i=1,2,3,......,n)。
由题意可知:x1=x0(1+p)−xx2=x0(1+p)2−x(1+p)−xx3=x0(1+p)3−x(1+p)2−x(1+p)−x……x n=x0(1+p)n−x(1+p)n−1−⋯−x(1+p)−x=x0(1+p)n−x (1+p)n−1p=0因而有:x0(1+p)n=x (1+p)n−1p (1)则可以根据上述方程描述的函数关系求解相应的变量。
(Q1)根据公式(1),可以得到以下方程:150p(1+p)180−(1+p)180+1=0设 f(p)=150p(1+p)180−(1+p)180+1,通过计算机程序绘制f(p)的图像以判断解p的大致区间,在Matlab中编程如下:for i = 1:25t = 0.0001*i;p(i) = t;f(i) = 150*t*(1+t).^180-(1+t).^180+1;end;plot(p,f),hold on,grid on;运行以上代码得到如下图像:f(p)~p关系曲线图通过观察上图可知p∈[0.002,0.0022]。
Solution1:对于p∈[0.002,0.0022],采用二分法求解,在Matlab 中编程如下:clear;clc;x0=150000;n=180;x=1000;p0=0.002;p1=0.0022;while (abs(p1-p0)>1e-8)f0=x0*(1+p0).^n+x*(1-(1+p0).^n)/p0;f1=x0*(1+p1).^n+x*(1-(1+p1).^n)/p1;p2=(p0+p1)/2;f2=x0*(1+p2).^n+x*(1-(1+p2).^n)/p2;if (f0*f2>0 && f1*f2<0)p0=p2;elsep1=p2;end;end;p0结果得到p0=0.00208116455078125=0.2081%.所以贷款利率是0.2081%。
实验报告一题目:非线性方程求解摘要:非线性方程的解析解通常很难给出,因此线性方程的数值解法就尤为重要。
本实验采用两种常见的求解方法二分法和Newton法及改进的Newton法。
前言:(目的和意义)掌握二分法与Newton法的基本原理和应用。
数学原理:对于一个非线性方程的数值解法很多。
在此介绍两种最常见的方法:二分法和Newton 法。
对于二分法,其数学实质就是说对于给定的待求解的方程f(x),其在[a,b]上连续,f(a)f(b)<0,且f(x)在[a,b]内仅有一个实根x*,取区间中点c,若,则c恰为其根,否则根据f(a)f(c)<0是否成立判断根在区间[a,c]和[c,b]中的哪一个,从而得出新区间,仍称为[a,b]。
重复运行计算,直至满足精度为止。
这就是二分法的计算思想。
Newton法通常预先要给出一个猜测初值x0,然后根据其迭代公式产生逼近解x*的迭代数列{x k},这就是Newton法的思想。
当x0接近x*时收敛很快,但是当x0选择不好时,可能会发散,因此初值的选取很重要。
另外,若将该迭代公式改进为其中r为要求的方程的根的重数,这就是改进的Newton法,当求解已知重数的方程的根时,在同种条件下其收敛速度要比Newton法快的多。
程序设计:本实验采用Matlab的M文件编写。
其中待求解的方程写成function的方式,如下function y=f(x);y=-x*x-sin(x);写成如上形式即可,下面给出主程序。
二分法源程序:clear%%%给定求解区间b=1.5;a=0;%%%误差R=1;k=0;%迭代次数初值while (R>5e-6) ;c=(a+b)/2;if f12(a)*f12(c)>0;a=c;elseb=c;endR=b-a;%求出误差k=k+1;endx=c%给出解Newton法及改进的Newton法源程序:clear%%%% 输入函数f=input('请输入需要求解函数>>','s')%%%求解f(x)的导数df=diff(f);%%%改进常数或重根数miu=2;%%%初始值x0x0=input('input initial value x0>>');k=0;%迭代次数max=100;%最大迭代次数R=eval(subs(f,'x0','x'));%求解f(x0),以确定初值x0时否就是解while (abs(R)>1e-8)x1=x0-miu*eval(subs(f,'x0','x'))/eval(subs(df,'x0','x'));R=x1-x0;x0=x1;k=k+1;if (eval(subs(f,'x0','x'))<1e-10);breakendif k>max;%如果迭代次数大于给定值,认为迭代不收敛,重新输入初值ss=input('maybe result is error,choose a new x0,y/n?>>','s');if strcmp(ss,'y')x0=input('input initial value x0>>');k=0;elsebreakendendendk;%给出迭代次数x=x0;%给出解结果分析和讨论:1.用二分法计算方程在[1,2]内的根。
非线性方程的数值计算方法实验《数值方法》实验报告1【摘要】在利用数学工具研究社会现象和自然现象,或解决工程技术等问题?0的求解问题,时,很多问题都可以归结为非线性方程f(x)无论在理论研究方面还是在实际应用中,求解非线性方程都占了非常重要的地位。
综合当前各类非线性方程的数值解法,通过比较分析,二分法,迭代法,牛顿―拉夫森方法,迭代法的收敛阶和加速收敛方法,以上的算法应用对某个具体实际问题选择相应的数值解法。
关键词非线性方程;二分法;迭代法;牛顿-拉夫森法;割线法等。
一、实验目的通过本实验的学习,应掌握非线性方程的数值解法的基本思想和原理,深刻认识现实中非线性方程数值的意义;明确代数精度的概念;掌握二分法、不动点迭代法、牛顿迭代法、割线法等常用的解非线性方程的方法;培养编程与上机调试能力。
二、实验原理二分法:单变量函数方程: f(x)=0其中,f(x)在闭区间[a,b]上连续、单调,且f(a)*f(b)<0,则有函数的介值定理可知,方程f(x)=0在(a,b)区间内有且只有一个解x*,二分法是通过函数在区间端点的符号来确定x*所在区域,将有根区间缩小到充分小,从而可以求出满足给定精度的根x*的近似值。
下面研究二分法的几何意义:设a1=1, b1=b, 区间?a1,b1?,中点x1=a1?b1及f?x1?,若f?x1?=0,则x*=x1,2若 f(a1)*f(x1)<0,令a2=a1,b2=x1,则根x*? [a2,b2]中,这样就得到长度缩小一半的有根区间[a2,b2],若 f(b1)*f(x1)<0,令a2=x1,b2=b1,则根x*? [a2,b2]中,这样就得到长度缩小一半的有根区间[a2,b2],即f(a2)f(b2)<0,此时b2-a2=b1?a1,对有根区间[a2,b2]重复上述步骤,即分半求中点,判断中2电处符号,则可得长度有缩小一半的有根区间[a2,b2],《数值方法》实验报告2如图所示:重复上述过程,第n步就得到根x*的近似序列?xn?及包含x*的区间套,如下:(1)[a1,b1]?[a2,b2]?....[an,bn]?... (2)f(an)f(bn)?0,x*?[an,bn] (3)an-bn=1=…=2(an?1?bn?1)(4) xn?b?a 2n?1an?bnb?a,且|x*-xn|?n?1 (n=1,2,3…..) 22显然limxn,且xn以等比数列的收敛速度收敛于x*,因此用二分法求f(x)=0的实根x*可以达到任意指定精度。
浙江大学城市学院实验报告课程名称 科学计算实验项目名称 一元非线性方程的解法实验成绩 指导老师(签名 ) 日期 2013/10/10一. 实验目的和要求1. 用Matlab 软件掌握求解非线性方程的二分法、迭代法和牛顿法,并对结果作初步分析;2. 通过实例练习用非线性方程求解实际问题。
二. 实验内容和原理分析应用题2-1,2-2,2-3,2-4,2-5要求将问题的分析过程、Matlab 源程序和运行结果和结果的解释、算法的分析写在实验报告上。
2-1 程序注释对用二分法、迭代法和牛顿法求一元非线性方程数值解的Matlab 程序的每一句添上注释。
二分法: [x,n]=BisectionMethod(a,b,epsi,Nmax)迭代法: [x,n]=IterationMethod(x0,epsi,Nmax)Newton 法: [x,n]=NewtonMethod(x0,epsi,Nmax)2-2 分析应用题 用二分法求方程2()sin 04x f x x =-=和()sin 0x g x e x =-=根的近似值,使误差不超过210-,输出每次二分之后解的近似结果以及二分的次数,其中()0g x =的根只需求最接近原点的那个根。
2-3 分析应用题已知方程230xx e -=有以下三种迭代格式,分析三种迭代格式的收敛性,求出迭代精度为610-的数值结果,并比较迭代序列的收敛速度。
1)1n x += 2)12ln ln 3n n x x +=+ 3)136n n x n n n x n x e x x x e +-=--2-4 分析应用题用下列方法求方程1020x e x +-=的近似根,要求误差不超过31102-⨯,并比较计算量。
1)在区间[0, 1]上用二分法;2)取初值0x =,并用迭代过程12(0,1,2,.......)10k x k e x k +-==;3)取初值00x =用牛顿法求解。
2-5 分析应用题以定期存储为基础的储蓄帐户的累积值可由定期年金方程确定[(1)1]n P A i i=+- 在这个方程中,A 是帐户中的数额,P 是定期存储的数额,i 是n 个存储期间的每期利率。
一个工程师想在20年后退休时储蓄帐户上的数额达到750000美元,而为了达到这个目标,他每个月能存1500美元。
为实现他的储值目标,最小利率应是多少?假定利息是月复利的。
三. 操作方法与实验步骤(包括实验数据记录和处理)2-1 分析应用题对用二分法、迭代法和牛顿法求一元非线性方程数值解的Matlab 程序的每一句添上注释。
二分法: [x,n]=BisectionMethod(a,b,epsi,Nmax)Function[c,err,yc]=erfen(f,a,b,delta)Ya=feval(f,a);Yb=feval(f,b);If ya*yb>0,break,endMaxl=1+round((log(b-a)-log(delta))/log(2));For k=1:max1C=(a+b)/2;Yc=feval(f,c);If yc = 0a=c;b=c;elseif yb*yc>0b=c;yb=yc;elsea= c;ya=yb;endif b-a<detal,break,endendc=(a+b)/2;err= abs(b-a);yc = feval(f,c);(1)输入:a,b值及精确控制量ε;(2)If f(a)*f(b)>0 then 返回第一步,重新输入a,b值else转第三步;(3)While|a-b|>ε时做1.x=1/2(a+b),计算f(x);if f(x)=0 then 输出x,停机。
2.if f(a)*f(x)<0 then [a,b]替换为[a,x] else [a,b]替换为[x,b]endwhile;(4)输出x=1/2(a+b).迭代法: [x,n]=IterationMethod(x0,epsi,Nmax)设f(x)=0,改写为X=ψ(x)取方程初始近似值x0,作迭代过程Xn+1=ψ(xn)(n=1,2,3……)若产生的序列{xn}收敛于x*,即x*即为方程的根。
Newton法: [x,n]=NewtonMethod(x0,epsi,Nmax)Function[p0,err,k,y]=Newton(f,df,p0,delta,epsilon,max1)For k=1:mak1P1=p0-feval(f,p0)/feval(df,p0);Err=abs(p1-p0);Relerr =2*err/(abs(p1)+delta);Pp(k)=p1;P0=p1;Y=feval(f,p0);If(err<delta)|(relerr<delta)|(abs(y)<epsilon),break,endEndPp(1)输入:x0,ε;(2) f0=f(x0),f(1)=f’(x0);(3) while|f0|>ε做1.x1=x0-f0/f1;2.x0=x1;3.转(2)Endwhile(4)输出:x1.2-2fun = @(x)sin(x)-x^2/4;a=0;b=4;fa=fun(a);fb=fun(b);c=(a+b)/2;fc=fun(c);if fa*fb>0return ;endwhile abs(fc)>0.01c=(a+b)/2;fc=fun(c);if fb*fc>0b=c;fb=fc;elsea=c;fa=fc;endendfx=fcx=c-0.0050x =1.93752-3 分析应用题第一种1n x +=X(1)=3-exp(1);X(2)=sqrt(exp(X(1))/3);i=1;while abs(X(i+1)-X(i))>0.000001X(i+2)=sqrt(exp(X(i+1))/3);i=i+1;endXf=X(i+1)Xf =0.9100>>第二种12ln ln 3n n x x +=+clc;X(1)=3-exp(1);X(2)=2*log(X(1))+log(3);i=1;while abs(X(i+1)-X(i))>0.000001X(i+2)=2*log(X(i+1))+log(3);i=i+1;endXf=X(i+1)Xf =3.7331 + 0.0000i>> 第三种136n n x n n n x n x e x x x e+-=-- X(1)=3-exp(1);X(2)=X(1)-(3*X(1)-exp(X(1)))/(6*X(1)-exp(X(1))); i=1;while abs(X(i+1)-X(i))>0.000001X(i+2)=X(i)-(3*X(i)-exp(X(i)))/(6*X(i)-exp(X(i))); i=i+1;endXf=X(i+1)Xf =1.5978>>2-4 分析应用题1)在区间[0, 1]上用二分法;fun = @(x)exp(x)-2+10*x;a=0;b=1;fa=fun(a);fb=fun(b);c=(a+b)/2;fc=fun(c);if fa*fb>0return ;endwhile abs(fc)>1/2*10e-3c=(a+b)/2;fc=fun(c);if fb*fc>0b=c;fb=fc;elsea=c;fa=fc;endendx=cx =0.0908>>2)取初值0x =,并用迭代过程12(0,1,2, (10)x k e x k +-==;x(1)=1/10;x(2)=(2-exp(x(1)))/10;i=1;while x(i+1)-x(i)>1/2*10e-3x(i+2)=(2-exp(x(i+1)))/10;i=i+1;endx=x(i+1)x =0.08953)取初值00x 用牛顿法求解。
f=@(x)exp(x)+10*x-2;df=@(x)exp(x)+10;x0=0;f0=-1;f1=11;while abs(f0)>0.005x1=x0- f0/f1;x0=x1;f0=f(x0);f1=df(x0);endx1x1 =0.09092-5分析应用题[p0,err,k,y]=newton('f','df',1,0.0005,5*10^-6,100000) p0 =0.005555938110707err =1.374794598648418e-004k =168y =0.002070961751574 最小利率p0 =0.005555938110707四. 实验结果与分析。