VBA程序:二分法求方程的根

VBA程序:二分法求方程的根
VBA程序:二分法求方程的根

VBA程序:二分法求方程的根

对于一般超越方程与高次代数方程求根的问题,可选用方法简单实用有效的不求导数的二分法,即在给定的寻根区间内,利用步步查找,二分缩小区间的方法,求出全部实根。

二分法求根程序框图见后附件。

主要标识符含义:

A,B—方程求根区间的左、右端点[a,b]

H—查根间距、跨步长度h

EPS—计算精度值,ε=

-

x A,y A—变化过程中的左端点点值及函数值

x B,Y B—变化过程中的右端点点值及函数值

x C,y C—变化过程中的中点点值及函数值

算例

已知方程式f(x)=x3-6x2+11x-6=0,求方程的根。

给定条件x∈[,],ε=,h=。

迭代求解后,可得到方程的三个实根:

x1=1

?

x2=2

x3=3

VBA程序代码

'声明方程求解给定的条件

Dim a As Double, b As Double, h As Double, eps As Double

'声明数组,用来放置根

Dim dblRoot() As Double

'统计根的个数

,

Dim lCount As Long

Sub Main()

Dim Xa As Double, Ya As Double, Xb As Double, Yb As Double

'赋初值

a =

b =

h =

eps =

Xa = a

Xb = a

Ya = dblFx(Xa)

Xb = Xb + h

If Xb > b Then Exit Sub

[

Yb = dblFx(Xb)

Call Root(Xa, Ya, Xb, Yb)

End Sub

Sub Root(Xa1 As Double, Ya1 As Double, Xb1 As Double, Yb1 As Double)

If qqqRoot(Ya1, Yb1) Then

%

Call qRoot(Xa1, Ya1, Xb1, Yb1)

Else

Xa1 = Xb1

Ya1 = Yb1

Xb1 = Xb1 + h

If Xb1 > b Then Exit Sub

Yb1 = dblFx(Xb1)

'符合求根条件则求根计算,否则继续调整求根区间

"

If qqqRoot(Ya1, Yb1) Then

Call qRoot(Xa1, Ya1, Xb1, Yb1)

Else

Call Root(Xa1, Ya1, Xb1, Yb1)

End If

End If

End Sub

'判断是否符合求根条件

Function qqqRoot(dblYa2 As Double, dblYb2 As Double) As Boolean

If dblYa2 * dblYb2 <= 0 Then

qqqRoot = True

Else

qqqRoot = False

End If

End Function

Sub qRoot(dblXa As Double, dblYa As Double, dblXb As Double, dblYb As Double) Dim dblXc As Double, dblYc As Double, dblXd As Double

'是否满足条件,不满足继续缩小求根区间

If Abs(dblYa - dblYb) > eps And Abs(dblXa - dblXb) > eps Then

dblXc = (dblXa + dblXb) / 2

dblYc = dblFx(dblXc)

Call qqRoot(dblXa, dblYa, dblXb, dblYb, dblXc, dblYc)

:

Else

'求得一个根

lCount = lCount + 1

dblXd = (dblXa + dblXb) / 2

'将所求根保存在数组中

ReDim Preserve dblRoot(1 To lCount)

dblRoot(lCount) = dblXd

'改变求根区间,以便获取下一个根

"

dblXa = dblXb

dblYa = dblYb

dblXb = dblXb + h

If dblXb > b Then Exit Sub

dblYb = dblFx(dblXb)

Call Root(dblXa, dblYa, dblXb, dblYb)

End If

End Sub

'判断并缩小求根区间

Sub qqRoot(dblXa1 As Double, dblYa1 As Double, dblXb1 As Double, dblYb1 As Double, dblXc1 As Double, dblYc1 As Double)

If dblYa1 * dblYc1 > 0 Then

dblXa1 = dblXc1

dblYa1 = dblYc1

Else

dblXb1 = dblXc1

@

dblYb1 = dblYc1

End If

Call qRoot(dblXa1, dblYa1, dblXb1, dblYb1)

End Sub

'要求根的方程式

Function dblFx(dblX As Double) As Double

dblFx = dblX * dblX * dblX - 6 * dblX * dblX + 11 * dblX - 6

?

End Function

'显示根

Sub DisplayRoot()

Dim i As Long

Dim str As String

lCount = 0

~

'调用求根程序

Main

'遍历并显示所求得的根

For i = LBound(dblRoot) To UBound(dblRoot)

str = str & "方程的第" & i & "根是:" & dblRoot(i) & Chr(10) Next i

MsgBox str

{

End Sub

参考资料:实用数值计算方法与程序

附:二分法求方程的根框图

用区间二分法求方程的根

用区间二分法求方程的根 一、前言 1.了解区间二分法求解方程基本方法。 2.学习掌握区间二分法求解方程根的过程。 3.学习掌握MATLAB软件有关的命令。 二、参数说明 function root=HalfInterval(f,a,b,eps) 方程表达式:f 区间左端点:a 区间右端点:b 根的精度:eps 求得的根:root 三、算法设计和运行结果 1.算法设计 ①计算函数f(x)在区间[a,b]中点的函数值f((a+b)/2),并做下面的判断:如果f(a)f((a+b)/2)<0,转到②; 如果f(a)f((a+b)/2)>0,令a=(a+b)/2,转到①; 如果f(a)f((a+b)/2)=0,则x=(a+b)/2为一个根。 ②如果|a-(a+b)/2|

if (f1==0) root=a; end if (f2==0) root=b; end if (f1*f2>0) disp('两端点函数值乘积大于0!'); return; else root=FindRoots(f,a,b,eps); %调用求解子程序end function r=FindRoots(f,a,b,eps) f_1=subs(sym(f),findsym(sym(f)),a); f_2=subs(sym(f),findsym(sym(f)),b); mf=subs(sym(f),findsym(sym(f)),(a+b)/2); %中点函数值 if (f_1*mf>0) t=(a+b)/2; r=FindRoots(f,t,b,eps); %右递归 else if (f_1*mf==0) r=(a+b)/2; else if (abs(b-a)<=eps) r=(b+3*a)/4; %输出根 else s=(a+b)/2; r=FindRoots(f,a,s,eps); %左递归 end end end

高中数学教材必修一《用二分法求方程的近似解》教学设计

用二分法求方程的近似解 一、教学内容分析 本节课选自《普通高中课程标准实验教科书数学1必修本》的第三章3.1.2用二分法求方程的近似解.本节课要求学生根据具体的函数图象能够借助计算机或信息技术工具计算器用二分法求相应方程的近似解,了解这种方法是求方程近似解的常用方法,从中体会函数与方程之间的联系;它既是本册书中的重点内容,又是对函数知识的拓展,既体现了函数在解方程中的重要应用,同时又为高中数学中函数与方程思想、数形结合思想、二分法的算法思想打下了基础,因此决定了它的重要地位. 二、学生学习情况分析 学生已经学习了函数,理解函数零点和方程根的关系, 初步掌握函数与方程的转化思想.但是对于求函数零点所在区间,只是比较熟悉求二次函数的零点,对于高次方程和超越方程对应函数零点的寻求会有困难.另外算法程序的模式化和求近似解对他们是一个全新的问题. 三、设计思想 倡导积极主动、勇于探索的学习精神和合作探究式的学习方式;注重提高学生的数学思维能力,发展学生的数学应用意识;与时俱进地认识“双基”,强调数学的内在本质,注意适度形式化;在教与学的和谐统一中体现数学的文化价值;注重信息技术与数学课程的合理整合. 四、教学目标 通过具体实例理解二分法的概念,掌握运用二分法求简单方程近似解的方法,从中体会函数的零点与方程根之间的联系及其在实际问题中的应用;能借助计算器用二分法求方程的近似解,让学生能够初步了解逼近思想;体会数学逼近过程,感受精确与近似的相对统一;通过具体实例的探究,归纳概括所发现的结论或规律,体会从具体到一般的认知过程. 五、教学重点和难点 1.教学重点:用“二分法”求方程的近似解,使学生体会函数零点与方程根之间的联系,初步形成用函数观点处理问题的意识.2.教学难点:方程近似解所在初始区间的确定,恰当地使用信息技术工具,利用二分法求给定精确度的方程的近似解. 六、教学过程设计 (一)创设情境,提出问题 问题1:在一个风雨交加的夜里,从某水库闸房到防洪指挥部的电话线路发

“二分法”求二元方程的解

分法”求二元方程的解 前面说到了用“精确迭代法”求两个数的最大公约数,这里的“二分法”也属于迭代法——近似迭代。另外还有“牛顿迭代”也属于近似迭代。思想:二分法属于数学问题,但为了说清楚问题就再说一下原理。先取二元方程f(x) 的两个初略解x1 和x2 ,若f(x1) 与f(x2) 的符号相反,则方程f(x)=0 在[x1 , x2]区间至少有一个根;若f(x)在[x1 , x2]区间单调,则至少有一个实根;所以取 x3=(x1+x2)/2 ,并在x1 和x2 中舍去和f(x3) 同号者,那么解就在x3和另外那个没有舍去的初略解组成的区间里;如此反复取舍,直到xn 与xn-1 之差满足要求时,那么xn 便是方程f(x) 的近似根。 所以有算法: while( 误差>给定误差) if(f(x)==0) x 就是根,不在迭代; else if(f(x)*f(x1)<0) /* 这里的x 相当于上面所说的x3*/ x2=x; else x1=x; 例:用二分法求方程x2-2-x=0 在[0 ,3]区间的 根。 float f(float x) {return (x*x-x-2);} #include #include main() { float x1=0,x2=3,x,root; //给定 const float err=.5e-5 精度 //求 while(fabs(x1-x2)>err) 根 { if(f(x1)==0) {root=x1;break;} if(f(x2)==0) {root=x2;break;} x=(x1+x2)/2;

二分法及迭代法求解非线性方程根

二分法及迭代法求解非线性方程根 班级:姓名:方学号:日期: 一、实验目的 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); 牛顿迭代:

用二分法求非线性方程实根

A-1 用二分法求非线性方程实根 本实验用二分法求方程f (x) = x3 ?2x ?5 =0 在区间[2,3]内的根。 源程序: #include #include #include 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)

} 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

2.4.2求函数零点近似解的一种计算方法----二分法教案学生版

2.4.2求函数零点近似解的一种计算方法——二分法 【学习要求】 1.理解变号零点的概念,掌握二分法求函数零点的步骤及原理; 2.了解二分法的产生过程,会用二分法求方程近似解. 【学法指导】 通过借助计算器用二分法求方程的近似解,了解数学中逼近的思想和程序化地处理问题的思想;通过具体问题体会逼近过程,感受精确与近似的相对统一,体会“近似是普遍的,精确则是特殊的”辩证唯物主义观点. 填一填:知识要点、记下疑难点 如果函数y=f(x)在一个区间[a,b]上的图象不间断,并且在它的两个端点处的函数值,即,则这个函数在这个区间上,至少有,即存在一点x0∈(a,b),使f(x0)=0.如果函数图象通过零点时穿过x 轴,则称这样的零点为零点,如果没有穿过x轴,则称这样的零点为零点. 研一研:问题探究、课堂更高效 [问题情境]一元二次方程可用判别式判定根的存在性,可用求根公式求方程的根.但对于一般的方程,虽然可用零点存在性定理判定根的存在性,但是没有公式求根,如何求得方程的根呢? 探究点一变号零点与不变号零点 问题函数y=3x+2,y=x2,y=x2-2x-3的图象,如下图所示,在图象上零点左右的函数值怎样变化? 小结:如果函数f(x)在一个区间[a,b]上的图象不间断,并且在它的两个端点处的函数值异号,即f(a)f(b)<0,则这个函数在这个区间上至少有一个零点,即存在一点x0∈(a,b),使f(x0)=0.如果函数图象通过零点时穿过x轴,则称这样的零点为变号零点,如果没有穿过x轴,则称这样的零点为不变号零点. 探究点二二分法的概念 问题1由变号零点的概念我们知道,函数y=f(x)在一个区间[a,b]上的图象不间断,并且在它的两个端点处的函数值异号,即f(a)f(b)<0,则这个函数在这个区间上至少有一个零点,那么如何求出这个零点的近似值? 例1利用计算器,求方程x2-2x-1=0的一个正实数零点的近似解(精确到0.1). 问题2例1中求方程近似解的方法就是二分法,根据解题过程,你能归纳出什么是二分法吗? 问题3给定精确度,用二分法求函数f(x)的零点近似值的步骤是怎样的? 跟踪训练1借助计算器或计算机,用二分法求函数f(x)=x3+1.1x2+0.9x-1.4在区间(0,1)内的零点(精确到0.1).

用二分法求方程的近似解-经典例题及答案

例1:利用计算器,求方程0122=--x x 的一个近似解(精确到0.1). 【解】设2()21f x x x =--, 先画出函数图象的简图. (如右图所示) 因为 (2)10,(3)20f f =-<=>, 所以在区间(2,3)内,方程2210x x --=有一解,记为1x .取2与3的平均数2.5,因为 (2.5)0.250f =>, 所以 12 2.5x <<. 再取2与2.5的平均数2.25,因为(2.25)0.43750f =-<, 所以 12.25 2.5x <<. 如此继续下去,得 1(2)0,(3)0(2,3) f f x <>?∈1(2)0,(2.5)0(2,2.5) f f x <>?∈1(2.25)0,(2.5)0(2.25,2.5) f f x <>?∈1(2.375)0,(2.5)0(2.375,2.5) f f x <>?∈1(2.375)0,(2.4375)0(2.375,f f x <>?∈ 2.4375),因为2.375与2.4375精确到0.1的 近似值都为2.4,所以此方程的近似解为 1 2.4x ≈. 利用同样的方法,还可以求出方程的另一个近似解. 点评:①第一步确定零点所在的大致区间),(b a ,可利用函数性质,也可借助计算机或计算器,但尽量取端点为整数的区间,尽量缩短区间长度,通常可确定一个长度为1的区间; 如此列表的优势:计算步数明确,区间长度小于精度时,即为计算的最后一步. 例2:利用计算器,求方程x x -=3lg 的近似解(精确到0.1). 分析:分别画函数lg y x =和3y x =- 的图象,在两个函数图象的交点处,函数值相等.因此,这个程x x -=3lg 的解.由函数lg y x =与 点的横坐标就是方

二分法求方程的根

【例5.21】二分法求方程的根。求方程x3+4x2+x+1=0在[-5,5]之间的近似根,误差为10-4。 若函数有实根,则函数的曲线应和x轴有交点,在根附近的左右区间内,函数的值的符号应当相反。利用这一原理,逐步缩小区间的范围,保持在区间的两个端点处函数值的符号相反,就可以逐步逼近函数的根。 设f (x)在[a, b]上连续,且f (a) f (b)<0, 找使f (x)=0的点。如图5-7-2所示。 图5-7-2 二分法示意图 二分法的步骤如下: ①取区间[a, b]中点x=(a+b)/2。 ②若f (x)=0, 即(a+b)/2为方程的根。 ③否则,若f (x)与f (a)同号,则变区间为[x,b];异号,则变区间为[a,x]。 ④重复①~③各步,直到取到近似根为止。 #include "stdio.h" #include "math.h" main() { float a,b,x; float fa,fb,fx; a=-5; b=5; fa=a*a*a+4*a*a+a+1; fb=b*b*b+4*b*b+b+1; do { x=(a+b)/2; fx=x*x*x+4*x*x+x+1; if(fa*fx<0) { b=x; fb=b*b*b+4*b*b+b+1; } else { a=x; fa=a*a*a+4*a*a+a+1;

} }while(fabs(fa-fb)>1e-4); printf("x=%f\n",(a+b)/2); printf("f(%f)=%f",(a+b)/2,fa); } 运行结果: x=-3.806303 f(-3.806303)=-0.000059 经过多次迭代,当x= -3.806 303时,f(x)的结果为-0.000 059已经接近0,误差小于10- 4数量级。读者可进行简单的改写,输出每一次的迭代结果。

有关二分法计算线性方程根的问题

吉林化工学院 专业: 班级: 学号: 姓名:

有关二分法计算线性方程根的问题 1、二分法求解的提出及其背景 由于实际问题的需要,我们经常需要寻求函数的零点(即的根),对于为一次或二次函数,我们有熟知的公式解法(二次时,称为求根公式).我国古代数学家已比较系统地解决了部分方程求解的问题,在《九章算术》,北宋数学家贾宪的《黄帝九章算法细草》,南宋数学家秦九韶的《数书九章》中均有记载.在十六世纪,已找到了三次和四次函数的求根公式,人们曾经希望得到一般的五次以上代数方程的根式解,但经过长期的努力仍无结果.1824年,挪威年轻数学家阿贝尔(N. H. Abel,1802-1829)成功地证明了五次以上一般方程没有根式解.1828年,法国天才数学家伽罗瓦(E.Galois,1811-1832)巧妙而简洁地证明了存在不能用开方运算求解的具体方程.人们认识到高于4次的代数方程不存在求根公式,因此对于高次多项式函数及其它的一些函数,有必要寻求其零点的近似解的方法,这是一个在计算数学中十分重要的课题。 求解非线性方程的数值解有二分法、迭代法、牛顿—雷扶生方法、正割法和抛物线法。下面我们就来讨论二分法求解非线性方程数值解的问题。 2、在求解过程中需要用到的定理: 1、(1)设f(x)于[a,b]上连续; (2)且f(a)?f(b)<0;

则存在有x*∈(a,b),使f(x*)于(a,b)内存在实的零点。 2、给定方程f(x)=0,设f(x)于[a,b]上连续,且f(a)?f(b)<0,则由二分法产生的序列{x k }收敛于方程f(x)=0的根x*,且具有性质 |x k-x*|≦(b-a)/2k(k=1,2,3,…) 3、二分法的描述: 设有非线性方程f(x=0),其中,f(x)为[a,b]上的连续函数且设f(a)?f(b)<0(不妨设该方程在[a,b]内仅有一个实根)。二分法具体方法如下: 运用上述定理2,设ε>0为给定精度要求,则由|xk-x*|≦(b-a)/2k<ε得半分次数k>[㏑(b-a)-㏑ε]/㏑2. 记a1=a,b1=b; 第一步:k=1,计算x1=(a1+b1)/2及f(x1),如果f(a1)·f(x1)<0则根一定在[ a1,x1]≡[a2,b2]内,否则根一定在区间[x1,b1] ≡[a2,b2]内(若f(x)=0,则x1=x*)。于是到长度缩小一半的含根区间[a2,b2],即f(a2)·f(b2)<0,且b2-a2=1/2(b1-a1) 第k步分半计算:重复上述计算过程,设已完成第1步,…,第k-1步分半计算得到含根区间[a1, b1] ?[a2,b2] ?…?[a k,b k]且满足: (1) f(a k )·f(a k)<0,即x*∈[a k,b k]; (2) b k-a k=1/(2k-1); 现进行第k步分部计算: (3) 计算x k=( a k+ b k)/且有|x k-x*|≦(b-a)/2=1/2k(b-a) (4) 确定新的含根区间[a k+1,b k+1],即如果f(a k)·f(b k)<0,则根一定在

高一数学《用二分法求方程的近似解》教案

高一数学《用二分法求方程的近似解》教案 教学目标 知识与技能通过具体实例理解二分法的概念及其适用条件,了解二分法是求方程近似解的常用方法,从中体会函数与方程之间的联系及其在实际问题中的应用. 过程与方法能借助计算器用二分法求方程的近似解,并了解这一数学思想,为学习算法做准备. 情感、态度、价值观体会数学逼近过程,感受精确与近似的相对统一. 教学重点 通过用二分法求方程的近似解,体会函数的零点与方程根之间的联系,初步形成用函数观点处理问题的意识. 教学难点 恰当地使用信息技术工具,利用二分法求给定精确度的方程的近似解. 教材分析 本节课注重从学生已有的基础(一元二次方程及其根的求法,一元二次函数及其图象与性质)出发,从具体(一元二次方程的根与对应的一元二次函数的图象与轴的交点的横坐标之间的关系)到一般,揭示方程的根与对应函数零点之间的关系.在此基础上,再介绍求函数零点的近似值的二分法,并在总结用二分法求函数零点的步骤中渗透算法的思想,为学生后续学习算法内容埋下伏笔.教科书不仅希望学生在数学知识与运用信息技术的能力上有所收获,而且希望学生感受到数学文化方面的熏陶,所以在阅读与思考中,介绍古今中外数学家在方程求解中所取得的成就,特别是我国古代数学家对数学发展与人类文明的贡献. 学情分析 通过本节课的学习,使学生在知识上学会用二分法求方程的近似解,从中体会函数与方程之间的联系;在求解的过程中,由于数值计算较为复杂,因此对获得给定精确度的近似解增加了困难,所以希望学生具备恰当地使用信息技术工具解决这一问题的能力.这就要求学生除了能熟练地运用计算器演算以外,还要能借助几何画板4.06中文版中的绘制新函数功能画出基本初等函数的图象,掌握Microsoft Excel软件一些基本的操作. 教学媒体分析 多媒体微机室、Authorware7.02中文版、几何画板4.06中文版、Microsoft Excel、QBASIC 语言应用程序 教学方法

用二分法求方程的近似解-经典例题及答案上课讲义

用二分法求方程的近似解-经典例题及答案

例1:利用计算器,求方程X 2 2x 1 0的一个近似解(精确到0.1) 【解】设f (x) x 2 2x 1, 先画出函数图象的简图.'i (如右 图所示) 丨 因为 ; f(2) 1 0, f (3) 2 0, 所以在区间(2,3)内,方程x 2.5,因为 f (2.5) 0.25 0, 所以 2人 2.5. 再取2与2.5的平均数2.25,因为f(2.25) 0.4375 0, 所以2.25 治 2.5. 如此继续下去,得 f(2) 0, f(3) 人(2,3) f(2) 0, f(2.5) 0 捲(2,2.5) f(2.25) 0, f (2.5) 0 x 1 (2.25, 2.5) f (2.375) 0, f (2.5) 0 x 1 (2.375,2.5) f (2.375) 0, f (2.4375) 0 为(2.375, 2.4375),因为 2.375与 2.4375精确到 0.1的近似值都为2.4,所以此方程的近似解为 洛 2.4 . 利用同样的方法,还可以求出方程的另一个近似解 . 点评:①第一步确定零点所在的大致区间(a,b),可利用函数性质,也可借助计算 机或计算器,但尽量取端点为整数的区间,尽量缩短区间长度,通常可确定一 个长度为1的区间; ②建议列表样式如下: 零点所在 区 间 区间中点函数 值 区间长 度 [2,3] f(2.5) 0 1 [2,2.5] f (2.25) 0 0.5 [2.25,2.5] f (2.375) 0 0.25 [2.375,2.5] f (2.4375) 0.125 如此列表的优势:计算步数明确,区间长度小于精度时,即为计算的最后一 步. 1 0有一解,记为x 1.取2与3的平均数 例 2:利用计算器,求方程lgx 3 x 的近似解(精确到0.1) 1-- 3 4 I I 斗- 3-' 分析:分别画函数y lg x 和y 3 x

二分法求解单变量方程matlab

二分法求解单变量方程matlab 1、问题:用二分法求解单变量连续函数f(x)在连续区间[a, b]间的零点。 2、Matlab程序2.1、Matlab脚本文件% 调用二分法函数求解[x, iteration] = Erfen(@myfun, -1, 3)2.2、Matlab函数文件function y = myfun(x)%目标求解函数y = x^2-5; %测试二分法2.3、Matlab函数文件function [x, iteration] = Erfen(f, a, b, tol)% 二分法求解单变量连续函数f(x)在连续区间[a, b]间的零点% 要求f(a)f(b)% iteration = [n x fx a fa b fb]if nargin tol = 1e-4; %设置精度要求endfa = feval_r(f, a); %f(a)的值fb = feval_r(f, b); %f(b)的值iteration = []; %迭代过程记录n = 0; %迭代步数if abs(fa) x = a;return;elseif abs(fb) x = b;return;elseif sign(fa) == sign(fb)error('fa has the same sign with fb'); %a,b同号endwhile abs(b-a) > toln = n + 1; %迭代步数x = a/2 + b/2; %二等分fx = feval_r(f, x);iteration = [iteration; n x fx a fa b fb];if abs(fx) return;elseif sign(fx) == sign(fa)a = x;elseif sign(fx) == sign(fb)b = x;endendend3、运行结果x =2.2361iteration =1.0000 1.0000 -4.0000 -1.0000 -4.0000 3.0000 4.00002.0000 2.0000 -1.0000 1.0000 -4.0000 3.0000 4.00003.0000 2.5000 1.2500 2.0000 -4.0000 3.0000 4.00004.0000 2.2500 0.0625 2.0000 -4.0000 2.5000 4.0000 5.0000 2.1250 -0.4844 2.0000 -4.0000 2.2500

浅谈二分法求方程的近似解的思路与技巧

专业代码:080101 楚雄师范学院 (Chxiong Normal University) 数学系2008级数学与应用数学专业教育实习 教育教学研究论文 实习生姓名茶本卫 学号20081021112 专业数学与应用数学 年级08级 实习单位紫系中学 实习时间2011年10月---11月 楚雄师范学院数学系编制 二0一一年九月二十八日

目录

浅谈二分法求方程的近似解的思路与技巧 摘要:在二分法中,由于不断取中点,区间不断缩小,区间的中点逐渐逼近方程根(或函数零点)的精确值,所以二分法体现了无限逼近的极限思想;二分法本质上又是一种区间迭代的数值算法,渗透了算法思想;二分法还体现了非此即彼的哲学思想,它综合了函数、方程、不等式、数列、极限等多种知识,主要有以下四方面的应用。 关键词:二分法;零点存在定理;精确度

Talking about the dichotomy of ideas and techniques for finding approximate solutions to equations Abstract:Dichotomy, given the access point , shrinking intervals , gradually approaching the midpoint of the interval root of equation ( or function zeros) The exact values , approximation of dichotomy reflects the infinite limit thought ; Dichotomy is essentially an interval iterative numerical algorithms , infiltrated algorithm,Dichotomy is reflected either/or philosophy , which combines functions, equations,inequalities , series, limits, and other knowledge , there are four main areas of application. Keywords:Dchotomy,zero point existence theorem, accuracy.

《用二分法求方程的近似解-》导学案.doc

《§3.1.2用二分法求方程的近似解》导学案 高一数学组编写人:刘慧影审核人:房淑萍使用日期: 【学习目标】: 1.根据具体函数图象,能够借助计算器用二分法求相应方程的近似解; 2.通过用二分法求方程的近似解,使学生体会函数零点与方程根之间的联系,初步形成用函数观点处理问题的意识. 【学习重、难点】 学习重点::用二分法求解函数f(x)的零点近似值的步骤。 学习难点:为何由I a — b丨<£便可判断零点的近似值为3(或b)? 【学法指导及要求】: 1、认真研读教材P89-P9I页,认真思考、独立规范作答,认真完成每一个问题,每一道 习题,不会的先绕过,做好记号; 2、把学案中自己易忘、易出错的知识点和疑难问题以及解题方法规律,及时整理到解错 题本上,多复习记忆。 【知识链接】 1:什么叫零点?零点的等价性?零点存在性定理? (1)对于函数y = /(x),我们把使__________ 的实数兀叫做函数y = /(x)的零点. (2)方程/(x) = 0有实数根o函数y = /(x)的图象与x轴________________________ o函数 y = /⑴ ___________ ? (3)如果函数)u /(x)在区间[a,b]上的图彖是连续不断的一条曲线,并且 有______________ ,那么,函数y = /O)在区间(“)内有零点. 【学习过程】 %1.自主学习 探究任务:二分法的思想及步骤 问题:有12个小球,质量均匀,只有一个是比别的球重的,你用天平称几次可以找出这个球的,要求次数越少越好. 解法: 第一次,两端各放______ 个球,低的那一端一定有重球; 第二次,两端各放________个球,低的那一端一定有重球; 第三次,两端各放______ 个球,如果平衡,剩下的就是重球,否则,低的就是重球. %1.合作探讨 思考:以上的方法其实这就是一种二分法的思想,采用类似的方法,如何求)=lnx + 2x-6的零点所在区间?如何找出这个零点? 一个直观的想法是:如果能够将零点所在的范围尽量的缩小,那么在一定的精确度的要求下,我们可以得到零点的近似值;为了方便,我们通过“取中点”的方法逐步缩小零点所在的范围。

VBA程序:二分法求方程的根

VBA程序:二分法求方程的根 对于一般超越方程与高次代数方程求根的问题,可选用方法简单实用有效的不求导数的二分法,即在给定的寻根区间内,利用步步查找,二分缩小区间的方法,求出全部实根。 二分法求根程序框图见后附件。 主要标识符含义: A,B—方程求根区间的左、右端点[a,b] H—查根间距、跨步长度h EPS—计算精度值,ε= - x A,y A—变化过程中的左端点点值及函数值 x B,Y B—变化过程中的右端点点值及函数值 x C,y C—变化过程中的中点点值及函数值 算例 已知方程式f(x)=x3-6x2+11x-6=0,求方程的根。 给定条件x∈[,],ε=,h=。 迭代求解后,可得到方程的三个实根: x1=1 ? x2=2 x3=3 VBA程序代码 '声明方程求解给定的条件 Dim a As Double, b As Double, h As Double, eps As Double '声明数组,用来放置根 Dim dblRoot() As Double '统计根的个数 , Dim lCount As Long Sub Main() Dim Xa As Double, Ya As Double, Xb As Double, Yb As Double '赋初值 a = b = ( h = eps = Xa = a Xb = a Ya = dblFx(Xa)

Xb = Xb + h If Xb > b Then Exit Sub [ Yb = dblFx(Xb) Call Root(Xa, Ya, Xb, Yb) End Sub Sub Root(Xa1 As Double, Ya1 As Double, Xb1 As Double, Yb1 As Double) If qqqRoot(Ya1, Yb1) Then % Call qRoot(Xa1, Ya1, Xb1, Yb1) Else Xa1 = Xb1 Ya1 = Yb1 Xb1 = Xb1 + h If Xb1 > b Then Exit Sub Yb1 = dblFx(Xb1) '符合求根条件则求根计算,否则继续调整求根区间 " If qqqRoot(Ya1, Yb1) Then Call qRoot(Xa1, Ya1, Xb1, Yb1) Else Call Root(Xa1, Ya1, Xb1, Yb1) End If End If End Sub , '判断是否符合求根条件 Function qqqRoot(dblYa2 As Double, dblYb2 As Double) As Boolean If dblYa2 * dblYb2 <= 0 Then qqqRoot = True Else qqqRoot = False End If End Function : Sub qRoot(dblXa As Double, dblYa As Double, dblXb As Double, dblYb As Double) Dim dblXc As Double, dblYc As Double, dblXd As Double '是否满足条件,不满足继续缩小求根区间 If Abs(dblYa - dblYb) > eps And Abs(dblXa - dblXb) > eps Then

二分法非线性方程求解

1、编程实现以下科学计算算法,并举一例应用之(参考书籍《精通MATLAB 科学计算》,王正林等编著,电子工业出版社,2009年) “二分法非线性方程求解” 二分法的具体求解步骤如下。 (1)计算函数f(x)在区间[a,b]中点的函数值f((a+b)/2),并作下面的判断: 如果0)2 () (<+b a f a f ,转到(2); 如果0)2( )(>+b a f a f ,令 2b a a +=,转到(1); 如果 0)2()(=+ b a f a f ,则 2b a x +=为一个跟。 (2)如果 ε<+-|2| b a a (ε为预先给定的精度),则4 3a b x +=为一个根,否则令2 b a b +=,转到(1)。 在MATLAB 中编程实现的二分法函数为:HalfInterval 。 功能:用二分法求函数在某个区间上的一个零点。 调用格式:root=HalfInterval(f,a,b,eps). 其中,f 函数名; a 为区间左端点; b 为区间右端点; eps 为根的精度; root 为求出的函数零点。 二分法的MATLAB 程序代码如下: function root=HalfInterval(f,a,b,eps) %二分法求函数f 在区间[a,b]上的一个零点 %函数名:f %区间左端点:a %区间右端点:b %根的精度:eps %求出的函数零点:root if (nargin==3) eps=1.0e-4;

end f1=subs(sym(f),findsym(sym(f)),a); %两端点的函数值f2=subs(sym(f),findsym(sym(f)),b); if(f1==0) root=a; end if(f2==0) root=b; end if(f1*f2>0) disp('两端点函数值乘积大于0!'); return; else root=FindRoots(f,a,b,eps); %调用求解子程序end function r=FindRoots(f,a,b,eps) f_1=subs(sym(f),findsym(sym(f)),a); f_2=subs(sym(f),findsym(sym(f)),b); mf=subs(sym(f),findsym(sym(f)),(a+b)/2); %中点函数值if(f-1*mf>0) t=(a+b)/2; r=FindRoots(f,t,b,eps); %右递归 else if(f_1*mf==o) r=(a+b)/2; else if(abs(b-a)<=eps) r=(b+3*a)/4; %输出根 else s=(a+b)/2; r=FindRooots(f,a,b,eps); %左递归 end end end 流程图:

二分法方程求解

问题 二分法解决方程求解问题 利用二分法,求方程063422 3=-+-x x x 的实根,精确到两位小数。 分析 二分法是一种典型的迭代问题,前面已经介绍了二分法定义,这里为了便于计算 函数值)(x f 编制函数float function(float x)。在主函数中首先给出了有根区间 ],[b a ,在程序中用[x1,x2]表示。由于不确定函数需要执行的次数,因此使用do-while 循环,循环条件为区间中点的函数值小于6100.1-?,当函数值小于6100.1-?时,近似认为当前的值为方程根。 数据要求 问题中的常量: 1e – 6; 问题的输入: 无 问题的输出: 输出方程的根 设计 初始算法 1 初始化数据 2 使用二分法解方程。 算法细化 步骤2可以进一步细化, 将区间],[b a 分半,取中点2b a +,求)2(b a f +,若δ<+)2 (b a f ,则取2 b a +≈ α,否则作下一步。 计算)2()(b a f b f +?,若0)2()(>+?b a f b f ,取2 ,11b a b a a +==;否则取b b b a a =+=11,2,形成新的含根区间],[11b a ,且211a b a b -=-。 对于新的含根区间重复上述步骤,直到ε<-n n a b ,取 2 ~n n b a +=α 作为α的近似值。此时的计算误差为 12 2~+-=-<-n n n a b a b αα

流程图

实现 #include "stdio.h" #include "math.h" float function(float x) { float f; f= x*((2*x-4)*x+3)-6; return f; } void main() { float x1,x2,x0,fx1,fx2,fx0; x1=10;x2=-10; fx1=function(x1); fx2=function(x2); do { x0=(x1+x2)/2.0;/*计算中点*/ fx0=function(x0);/*计算中点处的函数值*/ if(fx0*fx1<0)/*计算新的区间*/ {/*区间中点的函数值与x1的函数值正负号相反*/ /*区间中点的y坐标与x1点的y坐标在不同y半轴上*/ x2=x0;/*新区间为[x1,x0]*/ fx2=fx0; } else {/*区间中点的y坐标与x1点的y坐标在相同y半轴上*/ x1=x0;/*新区间为[x0,x2]*/ fx1=fx0; } }while(fabs(fx0)>=1e-6); printf("The root is %f",x0); } 测试 该程序没有输入,输出结果为方程的根,此处略。

用二分法求方程的近似解经典例题及答案

例1:利用计算器,求方程 x 2 2x 1 0的一个近似解(精确到 0.1). 2 与 2.5 的平均数 2.25,因为 f(2.25) 0.4375 2.5. x-i 2.4. 利用同样的方法,还可以求出方程的另一个近似解 点评:①第一步确定零点所在的大致区间 (a, b),可利用函数性质,也可借助计算机或计算器, 但尽量取端点为整数的区间,尽量缩短区间长度,通常可确定一个长度为 1的区间; ②建议列表样式如下: 零点所在 区 间 区间中点函数值 区间长度 1 0.5 0.25 0.125 如此列表的优势:计算步数明确,区间长度小于精度时,即为计算的最后一步. 例2:利用计算器,求方程Igx 3 x 的近似解(精确到0.1). 数图象的交点处,函数值相等?因此,这个 程lg x 3 x 的解.由函数y lg x 与 以发现,方程Igx 3 x 有惟一解,记为为, 【解】设f (x) x 2 2x 1,卜 I 先画出函数图象的简图 V (如右图所示) 因为 f(2) 1 0, f (3) 2 ° 入 所以在区间(2,3)内, 方程 X 2叫 f(2.5) 0.25 所以 2 x 1 2.5. 0 , x ,.取2与3的平均数 2.5,因为 再取 所以 如此继续下去,得 f(2) 0, f(3) f(2.25) f (2.375) 近似值都为 0, f (2.5) 0 0, f (2.4375) 2.4,所以此方程的近似解为 (2,3) f(2) 0, f(2.5) x 1 (2.25, 2.5) f (2.375) 0, f (2.5) 0 0 x . (2,2.5) (2.375, 2.5) 人(2.375, 2.4375),因为 2.375与 2.4375精确到 0.1 的 X i 2.25 x , 分析:分别画函数y 的图象,在两个函 点的横坐标就是方 y 3 x 的图象可 lg x 和 y 3 x 丁 1 0有一解,记为 3斗

二分法求方程的近似解学案

3.1.3 二分法求方程的近似解 【学习目标】 1.通过实例了解二分法求方程近似解的原理;能借助计算器用二分法求方程的近似解; 2.体会数学逼近过程,感受精确与近似的相对统一,感受数学中辩证唯物主义思想. 【学习重点】用“二分法”求方程的近似解. 【难点提示】“二分法”的理解与运用. 【学法提示】1.请同学们课前将学案与教材8994P -结合进行自主学习(对教材中的文字、图象、表格、符号、观察、思考、说明与注释、例题及解答、阅读与思考、小结等都要仔细阅读)、小组讨论,积极思考提出更多、更好、更深刻的问题,为课堂学习做好充分的准备; 2.在学习过程中用好“十二字学习法”即:“读”、“挖”、“举”、“联”、“用”、“悟”、“听”、“问”、“通”、“总”、“研”、“会”,请在课堂上敢于提问、敢于质疑、敢于讲解与表达. 【学习过程】 一、学习准备 1.请回顾我们前面学习了的函数零点的概念、零点存在性定理等,并完成下列填空: 对于函数()y f x =,我们把使 的实数x 叫做函数()y f x =的零点. 方程()0f x =有实数根?函数()y f x =的图象与x 轴 ?函数()y f x = ;如果函数()y f x =在区间[,]a b 上的图象是连续不断的一条曲线,并且有 , 那么,函数()y f x =在区间(,)a b 内有零点. 2.如何求一元二次函数的零点呢? 3.一元二次方程可以用公式求根,但方程062ln =-+x x 的根怎么求解呢?通过本节内容的学习便可知道了. 二、探究新知 二分法的定义及使用二分法求零点的步骤 ●观察思考 (1)中央电视台由李咏主持的节目《幸运52》中有一项猜测商品价格的游戏,首先给出了商品价格的范围,如果是你,你将用什么方法快速猜中商品的真实价格呢?现实中还有这种方法的实例吗? (2)有12个小球,质量均匀,只有一个是比别的球重的,你用天平称几次可以找出这个球的(要求次数越少越好)?具体做法如下(链接1): 第一次,两端各放 个球,低的那一端一定有重球. 第二次,两端各放 个球,低的那一端一定有重球. 第三次,两端各放 个球,如果平衡,剩下的就是重球,否则,低的就是重球. 上述(2)的做法是怎样找出重的那个球的,深刻理解该方法,你能否用该方法求函数 ln 26y x x =+-的零点所在区间?又如何找出这个零点的近似值? 请阅仔细读教材P89-P90,回答以下问题: (1)我们是怎么找出函数ln 26y x x =+-的零点所在区间的? (2)如何使用二分法?具体步骤是什么? ●归纳概括 (1)对于在区间[,]a b 上连续不断,且满足()()0f a f b ?<的函数)(x f y =, 通过不断地把函数)(x f 的零点所在的区间一分为二,使区间的两个端点逐步逼近零点,

相关文档
最新文档