用二分法求非线性方程实根
数值分析实验五 非线性方程的求根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 ϕ=称为迭代公式。
第6章 非线性方程求根(1、二分法、迭代法)

(2) 如果将原方程化为等价方程 x = 仍取初值
x0 = 0
3
3
x+1 2
x1 =
x0 + 1 = 2
3
3
1 ≈ 0 .7937 2
1 .7937 ≈ 0 .9644 2
x2 =
依此类推,得 依此类推, x3 = 0.9940 同样的方程 x4 = 0.9990 不同的迭代格式 x5 = 0.9998 x6 = 1.0000 有不同的结果 x7 = 1.0000 已经收敛, 已经收敛,故原方程的解为 x = 1.0000
用一般迭代法求方程x lnx= 在区间( 例:用一般迭代法求方程x-lnx=2在区间(2,∞) 内的根,要求|x 内的根,要求|xk-xk-1|/|xk|<=10-8 f(x)=x-lnx解:令f(x)=x-lnx-2 f(2)<0,f(4)>0,故方程在 2,4) 故方程在( f(2)<0,f(4)>0,故方程在(2,4)内至少有一个根
y p1 p0
y=x y=g(x)
y p0
y=x
p1 x x0 y y=g(x) x1 x* y=x y y=g(x) p0 x0 x* x1
y=g(x)
x
y=x
p0 p1 x x1 x0 x* x0 x* x1 p1 x
f(x)=0化为等价方程x=g(x)的方式是不唯 f(x)=0化为等价方程x=g(x)的方式是不唯 化为等价方程x=g(x) 一的,有的收敛,有的发散. 一的,有的收敛,有的发散. example: For example:2x3-x-1=0
1 3 ( x + 1 ) = g ( x ) 进行迭代,则在 进行迭代,则在(1, 3
非线性方程解法二分法实验报告

第七章非线性方程解法⒈二分法考察有根区间[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、用matlab软件实现二分法及迭代法,掌握迭代法的收敛性和收敛速度问题及其加速方法;二、基本理论及背景1、牛顿迭代法具有平方收敛的速度,所以在迭代过程中只要迭代几次就会得到很精确的解。
这是牛顿迭代法比简单迭代法优越的地方,但是选定的初值要接近方程的解,否则有可能得不到收敛的结果,再者,牛顿迭代法计算量比较大。
因每次迭代除计算函数值外还要计算微商值。
2、牛顿迭代理论推导:设r是f(x) = 0的根,选取x0作为r初始近似值,过点(x0,f(x0))做曲线y = f(x)的切线L,L的方程为y =f(x0)+f'(x0)(x-x0),求出L与x轴交点的横坐标 x1 = x0-f(x0)/f'(x0),称x1为r的一次近似值。
过点(x1,f(x1))做曲线y = f(x)的切线,并求该切线与x轴交点的横坐标 x2 = x1-f(x1)/f'(x1),称x2为r的二次近似值。
重复以上过程,得r的近似值序列,其中x(n+1)=x(n)-f(x(n))/f'(x(n)),称为r的n+1次近似值;3、参考《二分法求非线性方程根》,实现二分算法,完成下面的题目:求方程○1的根,精度至少达到10-6;比较迭代下列迭代法求解○1中方程根的收敛性:○2,;用牛顿法设计迭代函数求解○1中方程的根(精度至少达到10-6),并与○2中收敛的迭代法比较收敛的速度。
三、算法设计及实现1、设计:方程○1function f=fun1(x)f=exp(x)-x-3;;○2function y=Exp2(x)y=exp(x)-3;function y=Exp3(x)y=log(x+3);牛顿迭代:function df=Exp4(x)df=exp(x)-1。
四、实验步骤1、○1打开matlab软件,新建ErFen_Root.m文件,在窗口中编辑二分法数值积分函数程序代码,并保存在指定的文件夹下,在Current Directory窗口右边点击《Browse For Folder》按钮指向ErFen_Root.m文件;○2在Command Window中编辑相应要计算的题目的数值函数及相应的题目的表达式。
非线性方程求根的方法简介与例题

非线性方程求根的方法简介与例题第一篇:非线性方程求根的方法简介与例题非线性方程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 插值摘要数值计算方法,是一种研究解决数学问题的数值近似解方法,它的计算对象是那些。
数值分析实验之非线性方程求根(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()运⾏结果:。
非线性方程的数值解法中的二分法

非线性方程的数值解法中的二分法
二分法,又称秦九韶算法,是一种用来求解非线性方程的有效的数值解法。
它可以有效地将一个不确定的区间划分为两个不相交的子区间,其中一个至少包含方程的一个根,而另一个不包含根,这样重复地使用子区间,就可以缩小包含根的子区间从而求出根。
它具有准确性好、计算量小、理论考虑简单等优点。
因此,二分法逐渐得到了在互联网科技领域的广泛应用,受到了更多关注。
作为一种基础性的数学算法,二分法的基本原理是将一个不确定的区间分成两个相等的小区间,其中一个必定包含方程的一个根,而另一个肯定不包含根,然后针对这两个相邻区间,不断求解,直到最后已经求出根为止。
具体地说,在给定一个区间[a,b],要求函数f (x)在[a,b]内存在唯一根r,根据贴合定理,只需要计算函数在两个端点的值,并判断它们是否异号,如果异号,则区间[a,b]一定包含根r。
接着,利用c =(a+ b) / 2将区间[a,b]分成两个小区间[a,c]和[c,b],逐渐缩小根所在的区间范围,直到最后确定根的准确值。
由于数值计算的准确性高、计算量小、计算过程简单,因此二分法在许多互联网科技应用中大量采用,如自动搜索引擎服务,精准推荐等。
此外,在建模和科学研究中,二分法也被广泛运用,例如求解非线性方程组、解析一元函数最优解等。
综上所述,二分法是一种有效的数值解法,在互联网科技的应用非常广泛,如搜索引擎服务、精准推荐以及科学研究等,它具有计算准确度高、计算量小、理论需要考虑较少的优势,有效地解决非线性方程的求解问题,同时也为科技进步和科学发展作出了贡献。
二分法求解单变量非线性方程及其应用与实现(精)

二分法求解单变量非线性方程及其应用与实现论文作者:任珊 2010-10-2720:32:00论文关键词:二分法单变量非线性方程收敛性误差论文摘要:本文主要通过一个实例来研究单变量非线性方程f(x)=0的二分法求解及此方法的收敛性,根据误差估计确定二分次数并进行求解。
同时实现matlab和C语言程序编写。
从而掌握过程的基本形式和二分法的基本思想,在以后的学习过程中得以应用。
1. 引言在科学研究与工程技术中常会遇到求解非线性方程f(x)=0的问题。
而方程f(x)是多项式或超越函数又分为代数方程或超越方程。
对于不高于四次的代数方程已有求根公式,而高于四次的代数方程则无精确的求根公式,至于超越方程就更无法求其精确解了。
因此,如何求得满足一定精度要求的方程的近似根也就成为了我们迫切需要解决的问题。
近年来,随着数学科学研究的不断进展,又更新了许多方程求解的方法。
我们知道,对于单变量非线性方程f(x)=0,一般都可采用迭代法求根,由此产生了二分法。
2. 二分法一般地,对于函数f(x),如果存在实数c,当x=c时f(c)=0,那么把x=c叫做函数f(x)的零点。
解方程即要求f(x)的所有零点。
先找到a、b,使f(a),f(b)异号,说明在区间(a,b)内一定有零点,然后求f[(a+b)/2], 现在假设f(a)<0,f(b)>0,a<b①如果f[(a+b)/2]=0,该点就是零点,如果f[(a+b)/2]<0,则在区间((a+b)/2,b)内有零点,(a+b)/2=>a,从①开始继续使用中点函数值判断。
如果f[(a+b)/2]>0,则在区间(a,(a+b)/2)内有零点,(a+b)/2=>b,从①开始继续使用中点函数值判断。
这样就可以不断接近零点。
通过每次把f(x)的零点所在小区间收缩一半的方法,使区间的两个端点逐步迫近函数的零点,以求得零点的近似值,这种方法叫做二分法。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
A-1 用二分法求非线性方程实根
本实验用二分法求方程f (x) = x3 −2x −5 =0 在区间[2,3]内的根。
源程序:
#include<stdio.h>
#include<math.h>
#include<conio.h>
float f(float x)
{
float a;
a=x*x*x-2*x-5;
return a;
} /*求函数值,如果求其它函数,只需改成其它函数即可*/
main()
{
float a,b,,e,x; /* a,b 分别表示有根区间的左、右端点, e 是精度要求,x 区间中点值*/ clrscr();
printf(" \n please input data a =");
scanf("%f",&a);
printf(" \n please input data b=");
scanf("%f",&b);
printf("\n please input data eps=");
scanf("%f",&e);
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)<e)break;
else continue;
}
else
{
a=x;
if(fabs(b-a)<e)break;
else continue;
}
}
printf("\n");
x=(b+a)/2;
printf("the root of f(x)=0 is x=%f\n",x);
}
else
printf("\ not root! afresh input\n"); /*表示[a,b] 区间无根,重新选择有根区间*/ getch();
teturn(x);
}
计算结果:
please input data a = 2
please input data b = 3
please input data eps= 0.00001
the root of f(x)=0 is x= 2.094555。