文档库 最新最全的文档下载
当前位置:文档库 › Ch7 非线性方程求根

Ch7 非线性方程求根

Ch7 非线性方程求根
Ch7 非线性方程求根

非线性方程求根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( b a f + 取2 1b a x += 3.判断: 若0)(1=x f ,则方程的根为1x x =* ; 若 0)(1>x f ,则有根区间为[]1,x a x ∈* ;令[]],[,111b a x a = 若 0)(1

12 ln 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.512 ln 001 .0ln 1.0ln 12ln ln )ln(=--=---≥ εa b n 取n=6, 计算结果列表如下: 则方程在区间[1.8,1.9]内所求近似值为x * ≈ x = 1.8328125 区间二分法的优点是计算程序简单,只要f (x )在区间[a,b]上连续,区间二分法就可使用,但区间二分法不能用来求偶次重根,由于区间二分法收敛比较慢,在实际计算中,区间二分法常用来求比较好的含根区间和初始近似值,以便进一步使用收敛更快的迭代法求出更精确的近似值。 迭代序列收敛阶的概念

非线性方程求根问题

计算机学院上机实践报告 一、目的 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)b)) { printf("re_select a proper initial value x0!\n"); exit(0); } if(fabs(x1-x0)

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

实验报告 学院:电子信息工程 实验课程:计算方法 学生姓名: 学号: 专业班级:通信工程 实验二非线性方程求根 1 目的与要求 (1)进一步熟练掌握求解非线性方程的二分法与Newton迭代法。 (2)掌握二分法与Newton迭代法的算法,能运用程序设计语言和此方法编制软件求出任意指定一元三次方程在给定点附近的根。 2 实验内容 用二分法和Newton迭代法求方程 310 x x --=在 1.5 附近的根,精确到 3 10-,输出每次的迭代结果

并统计所用的迭代次数。 3 实验原理 (1)二分法实验原理 取[a,b]区间二等分的中点x1 =(a+b)/2 (1)若f(x1)=0,则x1是f(x)=0的实根。 (2)若f(a)f(x1)<0 成立,则x* 必在区间(a, x1)内,取a1=a,b1= x1;否则x*必在区间(x1,b)内,则取a1= x1,b1=b,这样,得到新区间[a1,b1],其长度为[a,b]的一半。 (3)如此继续下去,进行n次等分 (2)Newton迭代法实验原理 4 程序设计 (1)流程图 二分法程序流程图

Newton迭代法程序流程图

(2)程序代码 ①二分法求非线性方程根#include #include double fun1(double x) {

return x*x*x-x-1; } double fun2(double x1,double x2) { return (x1+x2)/2; } main() { int n=1; float a,b,c; printf("二分法求非线性方程的根\n"); scanf("a=%f,b=%f",&a,&b); if (fun1(a)*fun1(b)<0) { while(fabs(b-a)>1e-3) { c=fun2(a,b); if (fun1(a)*fun1(c)<0) { b=c;

非线性方程求根

第二章非线性方程求根 线性方程是方程式中仅包含未知量的一次方项和常数项的方程,除此之外的方程都是非线性方程(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值附近的扰动造成的问题敏感性. 此时,求根问题变成了函数求值

实验一 非线性方程求根

石家庄经济学院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 do 1)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:10 xk=x; x=x/2+5/(2*x); if (abs(xk - x)<=Error) break; end end

实验3非线性方程求根问题

西华数学与计算机学院上机实践报告 课程名称:计算方法A年级:上机实践成绩: 指导教师:严常龙姓名: 上机实践名称:非线性方程求根问题学号:上机实践日期: 上机实践编号:1上机实践时间: 一、目的 1.通过本实验的编程练习,加深对非线性方程求根方法之二分法、简单迭代法、、牛顿迭代法等的构造过程的理解; 2.能将各种方法的算法描述正确地改编为程序并上机实现; 3.比较各种方法在求解同一非线性方程根时,在收敛情况上的差异。 二、内容与设计思想 自选求根问题,分别用二分法、简单迭代法、埃特金加速收敛法和牛顿迭代法求解其根,然后完成编程作业(注意把同一求根问题的几种不同方法放在一个程序之内)。以下求根问题供参考和选择,也可自行选择其他求根问题: 1.用二分法求方程f(x)=x3-2x-5=0在区间[2 , 3]内的根。 2.方程f(x)=2x3-5x2-19x+42=0在x=3.0附近有根,试写出其三种不同的等价形式以构成三种不同的迭代格式,再用简单迭代法求根,观察这三种迭代是否收敛及收敛的快慢。 3.用牛顿迭代法求方程f(x)=x3+2x2+10x-20=0在区间[1 , 1.5]上的根。 4.Cosx=x在区间[0 , /2]上的根。 三、使用环境 操作系统:Windows XP 软件环境:Microsoft Visual C++ 四、核心代码及调试过程 第一题:用二分法求方程f(x)=x3-2x-5=0在区间[2 , 3]内的根。 方程的近似解是:x=2.094552。 #include #include #define N 25 void main() { int k; float a[N],b[N],c[N],fa[N],fb[N],fc[N]; float x,y; printf("请输入a[0]的数值:"); scanf("%f",&x); printf("\n请输入b[0]的数值:"); scanf("%f",&y);

非线性方程求根

实验七 非线性方程求根 实验7.1(迭代法、初始值与收敛性) 实验目的:初步认识非线性问题的迭代法与线性问题迭代法的差别,探讨迭代法及初始值与迭代收敛性的关系。 问题提出:迭代法是求解非线性方程的基本思想方法,与线性方程的情况一样,其构造方法可以有多种多样,但关键是怎样才能使迭代收敛且有较快的收敛速度。 实验内容:考虑一个简单的代数方程 012=--x x 针对上述方程,可以构造多种迭代法,如 )1.7(1 2 1-=+n n x x )2.7(111n n x x + =+ )3.7(1 1+=+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:30 x(i)=x(i-1)^2-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时,每次迭代的波动情况如下:

计算方法非线性方程求根

计算方法第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( b a f + 取2 1b a x += 3.判断: 若0)(1=x f ,则方程的根为1x x =*; 若 0)(1>x f ,则有根区间为[]1,x a x ∈* ;令[]],[,111b a x a = 若 0)(1

12 ln 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.512 ln 001 .0ln 1.0ln 12ln ln )ln(=--=---≥ εa b n 取n=6, 计算结果列表如下: 则方程在区间[1.8,1.9]内所求近似值为x * ≈ x = 1.8328125 区间二分法的优点是计算程序简单,只要f (x )在区间[a,b]上连续,区间二分法就可使用,但区间二分法不能用来求偶次重根,由于区间二分法收敛比较慢,在实际计算中,区间二分法常用来求比较好的含根区间和初始近似值,以便进一步使用收敛更快的迭代法求出更精确的近似值。 迭代序列收敛阶的概念 设迭代序列{}n x 收敛于* x ,如果存在实数1≥p 与正常数c ,使得

非线性方程求根方法

第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]

相关文档