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

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

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 continue;

}

else

{

a=x;

if(fabs(b-a)

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

用区间二分法求方程的根

用区间二分法求方程的根 一、前言 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、熟悉二分法及迭代法求解非线性方程根的数值算法; 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

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

例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,则根一定在

全国一等奖用二分法求方程的近似解教学设计

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

二分法和牛顿法求解非线性方程(C语言)

(1)二分法求解非线性方程: #include #include #define f(x)((x*x-1)*x-1) void main() {float a,b,x,eps; int k=0; printf("intput eps\n");/*容许误差*/ scanf("%f",&eps); printf("a,b=\n"); for(;;) {scanf("%f,%f",&a,&b); if(f(a)*f(b)>=0)/*判断是否符合二分法使用的条件*/ printf("二分法不可使用,请重新输入:\n"); else break; } do {x=(a+b)/2; k++; if(f(a)*f(x)<0)/*如果f(a)*f(x)<0,则根在区间的左半部分*/ b=x; else if(f(a)*f(x)>0)/*否则根在区间的右半部分*/ a=x; else break; }while(fabs(b-a)>eps);/*判断是否达到精度要求,若没有达到,继续循环*/ x=(a+b)/2;/*取最后的小区间中点作为根的近似值*/ printf("\n The root is x=%f,k=%d\n",x,k); } 运行结果: intput eps 0.00001 a,b= 2,-5 The root is x=1.324721,k=20 Press any key to continue 总结:本题关键在于两个端点的取值和误差的判断,此程序较容易。二分法收敛速度较快,但缺点是只能求解单根。 (2)牛顿法求解非线性方程: #include #include float f(float x)/*定义函数f(x)*/ {return((-3*x+4)*x-5)*x+6;} float f1(float x)/*定义函数f(x)的导数*/

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

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

例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

二分法非线性方程求解

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 流程图:

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

专业代码: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.

九、解非线性方程组的逐步搜索方法和二分法

一、编写函数作图的程序,通过图形求出方程的近似解。 1、>> clear >> syms x y >> x=-10:0.1:10; >> y=2.*x.*sin(x)-3; >> plot(x,y); >> grid >> gtext('y=2.*x.*sin(x)-3') 2、>> clear >> syms x y1 y2 >> x=0:0.1:10; >> y1=2.*sin(x); >> y2=3./x; >> plot(x,y1,x,y2); >> grid >> gtext('y1=2sin(x),y2=3/x')

3、>> clear >> syms x y >> x=-2:0.1:4; >> y=4.*x.^5-8.*x.^4-26.*x.^3+30; >> plot(x,y); >> grid >> gtext('y=4*x^5-8*x^4-26*x^3+30')

>> x=solve('4*x^5-8*x^4-26*x^3+30=0','x'); >> x1=double(x) x1 = 1.0000 3.7117 -1.9244 -0.3936 + 0.9461i -0.3936 - 0.9461i 二、用逐步搜索的方法求解。 function [k,r]=zhubuss(a,b,h,tol) X=a:h:b;Y=funs(X); n=(b-a)/h+1;m=0; X(n+1)=X(n);Y(n+1)=Y(n); for k=2:n X(k)=a+k*h; Y(k)=funs(X(k)); sk=Y(k)*Y(k-1); if sk<=0 m=m+1; r(m)=X(k); end xielv=(Y(k+1)-Y(k))*(Y(k)-Y(k-1)); if (abs(Y(k))

用二分法求方程的近似解

用二分法求方程的近似解(1) 【教学目标】1.使学生理解利用二分法求方程的近似解的思想方法,会用二分法求某些方程的近似解 2.通过本节内容的学习,让学生体会到在现实世界中,等是相对的,而不等是绝对的,这样可以加深对数学的理解. 【学习指导】我们已经学过一元一次方程、一元二次方程等方程的解法,并掌握了一些方程的求根公式.实际上,大部分方程没有求根公式,那么,这些方程怎么解?学完这一课,你就会知道利用方程的根与函数的零点的关系求方程的实数解(近似解)了. 本节的重点就是利用二分法求方程的近似解,所谓二分法就是:对于在区间[a,b]上连续不断、且f(a)·f(b)<0的函数y=f(x),通过不断地把函数f(x)的零点所在的区间一分为二,使区间的两个端点逐步逼近零点,进而和到零点近似值的方法. 【例题精析】 例1.借助计算机或计算器,用二分法求函数f(x)= x3-5x2-4x+2的一个零点,精确到0.05. 【分析】先用大范围法寻找零点所在的区间,然后不断使用二分法,逐步缩小区间,直至达到精度的要求. 【解法】先作出x与f(x)的对应值表,并试图找出一个根所在的区间: 通过举值,发现函数在(0,1)与(5,6)内都至少有一个零点,现不妨求(0,1)内的一个零点.

令x1=0.5,f(0.5)= -1.125.因为f(0)·f(0.5)<0,所以零点x0∈(0,0.5).令x2=0.25,f(0.25)≈0.7.因为f(0.25)·f(0.5)<0,所以零点x0∈(0.25,0.5). 令x3=0.375,f(0.375)≈-0.15.因为f(0.375)·f(0.25)<0,所以零点x0∈(0.25,0.375). 令x4=0.3125,f(0.3125)≈0.29.因为f(0.375)·f(0. 3125)<0,所以零点x0∈(0.3125,0.375). 令x5=0.359375,f(0.359375)≈-0.04.因为f(0.359375)·f(0.3125)<0,所以零点x0∈(0.3125,0.359375). 由于|0.359375-0.3125|=0.047<0.05, 此时区间(0.3125,0.359375)的两个端点精确到0.05的近似值都是0.336,所以函数的一个零点为0.336. 【评注】①选好初定区间是使用二分法求近似解的关键.选取初定区间的方法有多种,常用方法有试验估计法,数形结合法,函数单调性法,函数增长速度差异法等等.②本题还有两个零点,你能把它独立求解出来吗?(答案为-1,5.646.) 例2.(师生共同探究)概括用二分法求方程的近似解的基本程序. 【分析】通过对例1的研究,希望能够对解决问题的方法进行提炼,而这一点切不可以由老师包办代替,要通过师生的合作探究解决问题.【解法】(1)在同一坐标系中分别作出两个简单函数的图象,注意两个图象与x轴的交点坐标; (2)估算出第一个解的区间(x1,x2),(x1<x2);

二分法求解单变量非线性方程及其应用与实现(精)

二分法求解单变量非线性方程及其应用与实现 论文作者:任珊https://www.360docs.net/doc/1d13722845.html, 2010-10-27 20: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,aa,从①开始继续使用中点函数值判断。 如果f[(a+b)/2]>0,则在区间(a,(a+b)/2)内有零点,(a+b)/2=>b,从①开始 继续使用中点函数值判断。 这样就可以不断接近零点。

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:利用计算器,求方程 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斗

二分法方程求解

问题 二分法解决方程求解问题 利用二分法,求方程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); } 测试 该程序没有输入,输出结果为方程的根,此处略。

二分法求非线性方程的数值解

二分法求非线性方程的数值解 function [x,k] = bisec( f,a,b,ep ) %f:f(x)=0的函数,a,b:[a,b]端点,ep:精度 %x:方程的数值解,k迭代次数 if f(a)*f(b)>=0 if f(a)* f(b)>0 warning('端点值同号,不符合二分法的条件'); return; else if f(a)==0 disp(' a就是方程的解'); return; else disp(' b就是方程的解'); return; end end end k=0; N=(log10(b-a)-log10(ep))/log10(2); %最大迭代次数 x=(a+b)/2; if f(x)==0 disp(' x就是方程的解'); return; else while abs(a-b)>ep & k> f=@(x)x-exp(-x);a=0;b=1;ep=0.5e-10; >> [x,k]=bisec(f,a,b,ep) x =0.5671432904 k =35

二分法求非线性方程的数值解(多元函数情形,以二元函数为例) function [x,k] = bisec( f,a,b,ep ) %f:f(x)=0的函数,a,b:[a,b]端点,ep:精度 %x:方程的数值解,k:迭代次数 if f(a(1),a(2))*f(b(1),b(2))>=0 if f(a(1),a(2))* f(b(1,b(2)))>0 warning('端点值同号,不符合二分法的条件'); return; else if f(a(1),a(2))==0 disp(' a就是方程的解'); return; else disp(' b就是方程的解'); return; end end end k=0; x=(a+b)/2; if f(x(1),x(2))==0 disp(' x就是方程的解'); return; else while norm(a-b)>ep if f(x(1),x(2))*f(a(1),a(2))<0 b=x; else a=x; end k=k+1; x=(a+b)/2; end t=round(-log10(ep)); x=vpa(x,t); end >> g=@(x,y)1-x^2-y^2;a=[0;0];b=[1;1];ep=0.5e-15; >> [x,k]=bisec1(g,a,b,ep) x = 0.707106781186548 0.707106781186548 k = 52

实验7 二分法求方程的根

实验7 二分法求方程的根 一、问题:求324100x x +-=于区间[1,2]内的一个实根,且要求精确到0.001 二、算法: 第一步:计算 );(),(21b f y a f y ←← 第二步:计算)(),(5.0000x f y b a x ←+←,若00ε-a b 则转第二步;否则,输出0x 结束. 三、练习 编写程序或函数实现上以上区间的近似解,要求记录迭代次数。 函数或程序为: 结果为: 迭代次数为:

四、逐步搜索法求方程根的存在区间 在给定的区间[,] a b上判定根的大致分布,从区间左端点a出发,按某个预定的步长h一步一步地向右跨,每跨一步进行一次根的搜索,并记录所有的根的存在区间。 用你编写的程序搜索问题中[0,5]的根的存在区间,步长要求为0.1 h 函数为: 根的存在区间为: 五、综合练习(选做) 用逐步搜索法找到根的存在区间,并用二分法求出在该区间上方程根的近似解。

附:分组名单 星期二下午5-6节 第1组组长:陈絮莹缪妃何贵堂刘钰马倩 第2组组长:李杰玉黎筱惠雷霞肖娴林碧珍朱元正第3组组长:陈静苏小丽李郑何淑楠田冬秀曾敬军第4组组长:杨欣王雪梅徐莉萍石小芳雷敏唐嘉第5组组长:杨佳悦郭滢李媛媛何可陈思露 第6组组长:王钰琪寇玠杨丹熊晨曦周丹 第7组组长:姚瑶高倩倩金杨周海宁杨琴 第8组组长:雷芳陈艳王玉娇余非张雪王海燕 星期三下午5-6节 第9组组长:刘超慧王玉利秦佳丽张青梅廖婷程思远第10组组长:杨琴冯康欣黄宜纯田晓东郑美艳 第11组组长:黄倩肖雪梅舒玉秀杨阳黄倩宋亚超第12组组长:乔欢曹人月万袁源刘学勤师小诚沈金勇第13组组长:张全兴程德超冯啸魏丹李茜罗凤菊第14组组长:张洋何婷婷刘云丹彭英萍马静 第15组组长:杨丽王书琪袁杰宋慧玲杨璐萍李琳玲 星期三下午7-8节 第16组组长:李欢蒋书丽康斯梦王菊花李芝琴 第17组组长:杨梅郑雨来李维刘玉兰羊玲 第18组组长:左艳君古月黄文凤杨娟胡洲黄川第19组组长:吴星谭婷张欢向巧钱强陈虹弟第20组组长:曾大超胡敏马树述罗玉婷 第21组组长:石章波拉吉石明岳榆川金小刚张泽松 第22组组长:贾孙鹏袁鹏颜冬芹陈诚张博 第23组组长:李自强黄金辉彭琦岳琪李宾李闯第24组组长:王文媛林小渝刘燕严英何思敏穆芦芸

相关文档
最新文档