非线性方程的二分法
非线性方程解法二分法实验报告

第七章非线性方程解法⒈二分法考察有根区间[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、编写二分法、并使用这两个程序计算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附近。
非线性方程求解方法的研究与比较分析

非线性方程求解方法的研究与比较分析非线性方程是数学中一类重要的方程,它们的求解对很多实际问题具有重要的意义。
然而,非线性方程由于其非线性特性,使得其求解更加困难和复杂。
本文旨在研究和比较非线性方程的求解方法,通过对不同求解方法的分析和比较,来评估它们的优缺点和适用范围。
首先,我们介绍一些常用的非线性方程求解方法。
目前常用的求解方法主要包括迭代法、牛顿法、二分法等。
迭代法是一种比较简单的求解非线性方程的方法。
其基本思想是通过不断迭代逼近方程的解。
具体的迭代公式可以选择不同的形式,如固定点迭代法、牛顿迭代法等。
迭代法的优点是简单易懂,但是其收敛速度较慢,而且在某些情况下可能无法收敛到解。
牛顿法是一种较为常用的非线性方程求解方法。
它利用函数的一阶导数和二阶导数信息,通过不断的迭代逼近方程的解。
牛顿法的优点是收敛速度快,但是在某些情况下可能会出现迭代发散的情况。
二分法是一种比较简单但是有效的非线性方程求解方法。
其基本思想是通过不断地缩小解的搜索范围,直到找到满足方程的解。
二分法的优点是简单易懂,而且收敛性和精度较好,但是其收敛速度相对较慢。
在对以上几种方法进行比较分析之前,我们需要明确一些评价指标。
首先是收敛性,即方法是否能够收敛到解。
其次是收敛速度,即方法迭代到解所需的时间。
还有精度,即方法得到的解与真实解之间的误差。
最后是稳定性,即方法对初始值的选择是否敏感。
通过对以上几种方法的比较分析,我们可以得出以下结论:首先,迭代法是一种简单但是不稳定的求解方法。
其收敛性和精度较差,而且对初始值的选择较为敏感。
因此,在实际应用中,迭代法通常只适用于简单的非线性方程求解。
其次,牛顿法是一种较为常用的求解方法。
它具有收敛速度快、精度高的优点,但是在某些情况下可能会出现迭代发散的情况。
此外,牛顿法对函数的一阶导数和二阶导数的计算要求较高,所以在某些情况下可能不适用。
最后,二分法是一种简单而有效的求解方法。
它具有收敛性好、精度高的优点,但是其收敛速度相对较慢。
非线性方程的二分法

(1) [ai ,bi ] [ai1,bi1], i 1,2,, k,
对
区((间12))[找 a计k ,中算bk点](:,(23f):)kbif令(xafaki ()ixkf12( )(2(bhiai即)1k,中 i0b,k点 i0);,的 10,,1函,,数 k,,k值. ); (3) 生成含根区间:
bk
生成含根区间[ak 1,bk 1] ,满足(2.2)式,即
(1) [ak 1 , bk 1 ] [ak h
(2) bk1 ak1 2k
,
bk
]
ak1 ak bk1 xk
x
(3) f (ak 1 ) f (bk 1 ) 0
含根区间 [ak 1,bk 1] 满足(2.2)式,即
有根区间 中点 x n
-(1,2)+ (1,1.5)
x1 1.5 x2 1.25
(1.25,1.5)
x3 1.375
(1.25,1.375) x4 1.313
(1.313,1.375) x5 1.344
(1.344,1.375) x6 1.360
(1.360,1.375) x7 1.368
考虑非线性方程 f ( x) 0
(2.1)
1 条件 f ( x) C[a,b],且f (a) f (b) 0
2 主要依据 由连续函数介值定理,则至少存在某个 x* (a,b),
使得f ( x* ) 0,即[a,b]内至少有方程(2.1)的一个根,称[a,b]为f(x)
的一个含根区间。并且有
非线性方程的二分法bisectionmethod21二分法对分法或分半法主要依据由连续函数介值定理则至少存在某个即ab内至少有方程21的一个根称ab为fx主要思想基本思想把含根区间不断缩短使含根区间之间含有一个满足误差要求的近似解
计算方法—非线性方程求解

计算方法—非线性方程求解计算方法是数学中的一个重要分支,它研究如何利用计算机和数值方法解决各种数学问题。
在实际应用中,非线性方程是一个常见的问题。
非线性方程是指其表达式中包含一个或多个非线性项的方程。
与线性方程相比,非线性方程更加复杂,通常不能通过代数方法直接求解。
因此,我们需要借助计算方法来求解非线性方程。
常见的非线性方程求解方法包括迭代法、牛顿法和二分法等。
首先,迭代法是一种基本的非线性方程求解方法。
它的基本思想是通过不断迭代逼近方程的根。
迭代法的一般步骤如下:1.选取一个初始值x0;2.利用迭代公式x_{n+1}=g(x_n),计算下一个值x_{n+1};3.不断重复步骤2,直到计算出满足精度要求的解为止。
其中,g(x)是一个逼近函数,通常是通过原方程进行变形得到的。
在实际应用中,迭代法的关键是选择适当的初始值x0和逼近函数g(x)。
如果选取的初始值离方程的根较远,可能会导致迭代结果不收敛;如果逼近函数不恰当,迭代结果也可能不收敛。
因此,在使用迭代法时需要注意这些问题。
其次,牛顿法是一种较为高效的非线性方程求解方法。
它的基本思想是通过线性近似来逼近方程的根。
牛顿法的一般步骤如下:1.选取一个初始值x0;2.利用泰勒展开将原方程线性化,得到一个线性方程;3.解线性方程,计算下一个值x_{n+1};4.不断重复步骤2和步骤3,直到计算出满足精度要求的解为止。
在实际应用中,牛顿法的关键是计算线性方程的解。
通常可以通过直接求解或迭代方法求解线性方程。
此外,牛顿法还需要注意选择适当的初始值x0,特别是对于多根方程需要选择不同的初始值。
最后,二分法是一种简单但较为稳定的非线性方程求解方法。
它的基本思想是通过区间缩减来逼近方程的根。
二分法的一般步骤如下:1.选取一个包含根的初始区间[a,b];2.计算区间的中点c=(a+b)/2;3.判断中点c的函数值与0的关系,从而确定下一个区间;4.不断重复步骤2和步骤3,直到计算出满足精度要求的解为止。
非线性方程的二分法-迭代法-松弛迭代法-Aitken迭代法-Steffensen迭代法

err=input('请输入最大极限err=\n');
k=0;
y=fun(x0)
z=fun(y)
x1=x0-(y-x0)^2/(z-2*y+x0)
cha=abs(y2-y1);
y1=y2;
x2=x3;
ifk>N
disp('超过迭代次数!');
break;
end
end
x=x2;
k;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
function[x,k]=Steffensen()
x0=input('输入初值x0=\n');
b=c;
elseifyb*yc>0
b=c;
yb=yc;
else
a3;b)/2;
k;
end
%%%%%%%%%%%%%%%%%%%%%%%%%%%
function[x,k]=diedai1()
x0=input('输入初值x0=\n');
N=input('请输入最大迭代次数N=\n');
【实验内容】
1、二分法
假定方程 在区间 内有唯一的实根 。此时, 即为有根区间。
1.1基本思想:
首先确定有根区间,然后平分有根区间,通过判断区间端点处的函数值符号,逐步将有根区间缩小,直至有根区间足够地小,便可求出满足给定精度要求的根 的近似值。
1.2算法过程:
取 ,将 代入方程 ,判断它的正负号,并用 替换与它同方向的区间端点,依次循环得到:
2、迭代法
2.1基本思想:
非线性方程求解算法比较

非线性方程求解算法比较在数学和计算机科学领域中,非线性方程是一种无法简单地通过代数方法求解的方程。
因此,研究和开发高效的非线性方程求解算法是至关重要的。
本文将比较几种常见的非线性方程求解算法,包括牛顿迭代法、割线法和二分法。
通过对比它们的优缺点和适用范围,可以帮助人们选择最适合的算法来解决特定的非线性方程问题。
一、牛顿迭代法牛顿迭代法是一种常用的非线性方程求解算法。
它基于泰勒级数展开,使用函数的导数信息来逼近方程的根。
具体步骤如下:1. 选择初始近似值$x_0$。
2. 计算函数$f(x_0)$和导数$f'(x_0)$。
3. 根据牛顿迭代公式$x_{n+1}=x_n-\frac{f(x_n)}{f'(x_n)}$,计算下一个近似解$x_{n+1}$。
4. 重复步骤2和步骤3,直到达到预设的收敛条件。
牛顿迭代法的收敛速度很快,通常二次收敛。
然而,它对于初始值的选择非常敏感,可能会陷入局部极值点,导致找到错误的根。
因此,在使用牛顿迭代法时,需要根据具体问题选择合适的初始近似值。
二、割线法割线法是另一种常见的非线性方程求解算法。
它是对牛顿迭代法的改进,使用两个近似解来逼近方程的根。
具体步骤如下:1. 选择初始近似值$x_0$和$x_1$。
2. 计算函数$f(x_0)$和$f(x_1)$。
3. 根据割线公式$x_{n+1}=x_n-\frac{f(x_n)(x_n-x_{n-1})}{f(x_n)-f(x_{n-1})}$,计算下一个近似解$x_{n+1}$。
4. 重复步骤2和步骤3,直到达到预设的收敛条件。
与牛顿迭代法相比,割线法不需要计算导数,因此更加灵活。
然而,割线法的收敛速度比牛顿迭代法慢,通常是超线性收敛。
与牛顿迭代法一样,割线法也对初始近似值的选择敏感。
三、二分法二分法是一种简单直观的非线性方程求解算法。
它利用函数在根附近的特性,通过不断缩小区间范围来逼近方程的根。
具体步骤如下:1. 选择初始区间$[a,b]$,其中$f(a)$和$f(b)$异号。
非线性方程的二分法-迭代法

数学软件实验任务书实验一 非线性方程的二分法 1 实验原理对于实函数方程()0f x =设函数()f x 在区间[,]a b 上连续,而且()()0f a f b <,则()f x 在区间[,]a b 上至少有一个根。
记11[,][,]a b a b =,设1p 为11[,]a b 中点,1112a b p +=,事先给定一个误差容限Tol (足够小),如果()f x Tol <,则1p 是原方程()0f x =一个很不错的近似根。
如果()f x Tol >,那么我们并不满足于1p 作为近似的方程的根。
二分法的思想是:我们在11[,]a p 与11[,]p b 中更细一步的寻找根,具体在哪个区间是很容易实现的。
如果11()()0f p f b <则表明则两点异号,则根必然在11[,]p b 这个区间里。
如果11()()0f p f b >则根必然在11[,]a p 这个区间里。
这样我们就把原来的我们对根的寻找由11[,]a b 区间缩小了一半,如此反复,不断缩小区间,当区间缩小到我们可以接受的范围内,我们就用区间里的近似值代替真值。
2 实验数据来源使用二分法计算方程3()(1)32f x x x =--+在区间[2,4]上的根,并把通过数值方法绘制函数比较计算结果是否正确。
3 实验步骤步骤一:编写二分法计算的函数文件。
打开 Editor 编辑器,输入以下语句:%二分法计算非线形方程function gen=Erfen(f,a,b,tol)%f为方程f(x)=0中的f(x)%如果输入变量缺省则默认误差为1E-3if(nargin==3)tol=1.0e-3;endgen=compute_gen(f,a,b,tol);function r=compute_gen(f,a,b,tol)%计算左端点函数值fa=subs(f,a);%右端函数值fb=subs(f,b);%区间中点函数值fzd=subs(f,(a+b)/2);%sub 函数R = subs(S,old,new)%其中S为符号表达式,old为老变量,new为新变量%sub 把老变量替换为新变量if(fa*fzd>0)t=(a+b)/2;%采用递归方法r=compute_gen(f,t,b,tol);elseif(fa*fzd==0)r=(a+b)/2;elseif(abs(b-a)<=tol)r=(b+3*a)/4;elses=(a+b)/2;%结果r=compute_gen(f,a,s,tol);endendend以文件名字Erfen.m保存。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
使得 f ( x * ) ? 0,即[a,b]内至少有方程(2.1)的一个根,称[a,b]为f(x)
的一个含根区间。并且有
? x* ? a ? b 2
b? a 2
a? b
a x* 2
b
3 主要思想(基本思想) 把含根区间不断缩短,使含根区间之间含有一个满足误差
要求的近似解。
4 具体过程(方法)
首先,令a1 ? a,b1 ? b, h ? b ? a,
) 即序列 {x k
且 f ( x* ) ? 0.
? , 就有 x* ?
}?k ? xn
0
?
?.
此时可计算或估计二分法执行的次数 k .
?
事实上,由 b ?
2n
1
N ?n?
[ln(
ln 2
a
b
?
?
?,
a)?
两边取对数得 ln(b ?
ln b ? a
ln ?] ? ? , 可取
ln 2
a) ? N
n ?[
ln 2 ? ln ?
ln b ? a
? ]?
ln 2
1.ቤተ መጻሕፍቲ ባይዱ
优点: 1.对函数要求低 (只要连续,在两个端点异号)。
2.二分法是收敛的。
缺点:1.收敛速度不快,仅与公比为 1 的等比级数的收敛速度
2
相同。即是线性收敛的。 2.不能用于求偶重根、复根;不能推广到多元方程组求解;
例 x 2 ? 0 在 [? 1 ,1] x2 ? 1 ? 0 a
(a+b)/2
b
x ? a ? f (a ) ??b ? a ?
f (b) ? f (a)
注:试位法每次迭代比二分法多算一次乘法,而且不保证 收敛。
例2.1 用二分法求 x 3 ? 4 x 2 ? 10 ? 0在(1,2)内的根,要 求绝对误差不超过 1 ? 10? 2
2
解: f(1)=-5<0 f(2)=14>0 f (1.5)>0 f (1.25)<0 f(1.375)>0 f(1.313)<0 f(1.344)<0 f(1.360)<0 f(1.368)>0
b
不能求出所有根,(即有可能漏根)。
例 如图
x
注1 :改进的方法,
该点可求出,但漏掉了四个点
试位法(比例求根法)。
? 试位法 /* Regula Falsi Method */
Is it really better than Bisection Method?
(b, f (b))
a x*
(a, f (a))
x6 ? 1.360 x7 ? 1.368 x8 ? 1.364
若 取 近 似 根x * ? x 8 ? 1 .364 ,则
|
x
?
x*
|?
1 (1.368 ?
0,1,? , k , ? 0,1,? , k
.
(2.2)
对区间 [ak , bk ], (1) 找中点:令
xk
?
1 2
(
a
k
? bk );
ak
(2) 计算 : f k ? f ( x k () 即中点的函数值) ;
(3) 生成含根区间:
ak
x* ? xk xk
bk x
bk
若 f ( x k ) ? 0,则 x * ? x k , 如图
? ? ?
(1) [ ak ? 1 , bk ? 1 ] ? (2) bk ?1 ? ak ?1 ?
[ak ,bk ] h 2k
ak?1 ? ak bk?1 ? xk
x
? ?
(3)
f (ak?1) ? f
(bk ? 1 ) ?
0
? 含根区间 [ ak ? 1,bk ? 1] 满足(2.2)式,即
? (1) [ ak ? 1 , bk ? 1 ] ? [ ak , bk ]
有根区间 -(1,2)+ (1,1.5) (1.25,1.5) (1.25,1.375) (1.313,1.375) (1.344,1.375) (1.360,1.375) (1.360,1.368)
中点 x n
x 1 ? 1.5 x2 ? 1.25 x3 ? 1.375
x4 ? 1.313 x5 ? 1.344
一般的, 设已得含根区间 [ ai ,bi ],i ? 0,1,? , k ,满足:
? (1) [ai , bi ] ? [ai ? 1 , bi ? 1 ], i ? 1,2,? , k ,
? ? ? ?
(2) bi (3) f
? ai (ai )
? ?f
h
2i?1 (bi )
, ?
i? 0, i
ak ?1 ? xk bk?1 ? bk x
若f ( xk ) ? f (ak ) ? 0, 取ak ?1 ? xk ,bk ? 1 ? bk ,如图
若f ( xk ) ? f (ak ) ? 0,取ak ? 1 ? ak ,bk ? 1 ? xk ,如图 ak
bk
生成含根区间[ ak ?1 ,bk ? 1] ,满足(2.2)式,即
§2 非线性方程的二分法(Bisection Method)
2.1 二分法 (对分法或分半法 )
考虑非线性方程 f ( x ) ? 0
(2.1)
1 条件 f ( x ) ? C[a, b], 且f (a) ? f (b) ? 0
2 主要依据 由连续函数介值定理,则至少存在某个 x * ? (a, b),
生成含根区间[a2 , b2 ]. [a2 , b2 ]满足下式:
? (1) [a2 , b2 ] ? [a1 , b1 ]
?
h
? ?
(2) b2 ? a2 ? 2
? (3) f (a2 ) ? f (b2 ) ? 0
以[a 2 , b2 ]取代 [a1 , b1 ], 继续以上过程
, 得 [a 3 , b3 ]?? .
(1)
找中点:令
x1 ?
1 2 (a1 ? b1 );
( 2) 计算: f 1 ? f ( x 1 )(即中点的函数值 );
(3) 生成含根区间:
若 f ( x 1 ) ? 0,则 x * ? x 1 ,
若f ( x1 ) ? f (a1 ) ? 0, 取a2 ? x1, b2 ? b1 ,
若f ( x1 ) ? f (a1 ) ? 0, 取a2 ? a1 , b2 ? x1,
ak ? xk,bk ? xk
?
h
? ?
(2) bk ? 1 ? ak ? 1 ? 2k
? (3 ) f (a k ? 1 ) ? f (bk ? 1 ) ? 0
而{ak }单调上升,有上界 x *, {bk }单调下降,有下界 x * 。
? 收敛于说f明(近x:)似对? 解0于的序给一列定个{的x根误k }?k差x?*0界., 其即? 极? x0限k,?只为x*要x?*2,h(bkk2??n?a0??,