有关二分法计算线性方程根的问题
数值分析课程实验报告-二分法和牛顿迭代法

用二分法和牛顿迭代法求方程的根
算法名称用二分法和牛顿迭代法求方程的根
学科专业机械工程
作者姓名xxxxxx
作者学号xxxBiblioteka xx作者班级xxxxxxxx
xx大学
二〇一五年十二月
《数值分析》课程实验报告
实验名称
用二分法和牛顿迭代法求方程的根
成绩
一、问题背景
在科学研究与工程计算中,常遇到方程(组)求根问题。若干个世纪以来,工程师和数学家花了大量时用于探索求解方程(组),研究各种各样的方程求解方法。对于方程f(x)=0,当f(x)为线性函数时,称f(x)=0为线性方程;当f(x)为非线性函数时,称式f(x)=0为非线性方程。对于线性方程(组)的求解,理论与数值求法的成果丰富;对于非线性方程的求解,由于f(x)的多样性,尚无一般的解析解法。当f(x)为非线性函数时,若f(x)=0无解析解,但如果对任意的精度要求,设计迭代方程,数值计算出方程的近似解,则可以认为求根的计算问题已经解决,至少能够满足实际要求。
fx=subs(ff,x,xk);
fa=subs(ff,x,a);
k=k+1;
iffx==0
y(k)=xk;
break;
elseiffa*fx<0
b=xk;
else
a=xk;
end
y(k)=xk;
end
plot(y,'.-');
gridon
(2)牛顿迭代法程序:
functionx=newton(xx,n)
对二分法和牛顿迭代法的观察和分析我们可以知道,二分法的优点是方法比较简单,编程比较容易,只是二分法只能用于求方程的近似根,不能用于求方程的复根,且收敛速度慢。而牛顿迭代法的收敛速度明显大于二分法的速度。
数值分析实验报告——方程求根

《数值分析》实验报告实验一方程求根一、实验目的:掌握二分法、Newton法、不动点迭代法、弦截法求方程的根的各种计算方法、并实施程序调试和运行,学习应用这些算法于实际问题。
二、实验内容:二分法、Newton法、不动点迭代法、弦截法求方程的根、程序的调试和运行,给出实例的计算结果。
观察初值对收敛性的影响。
三、实验步骤:①、二分法:定义:对于区间[a,b]上连续不断且f(a)·f(b)<0的函数y=f(x),通过不断地把函数f(x)的零点所在的区间一分为二,使区间的两个端点逐步逼近零点,进而得到零点近似值的方法叫二分法。
实现方法:首先我们设一方程400*(x^4)-300*(x^3)+200*(x^2)-10*x-1=0,并求其在区间[0.1,1]上的根,误差限为e=10^-4。
PS:本方法应用的软件为matlab。
disp('二分法')a=0.1;b=1;tol=0.0001;n0=100;fa=400*(a.^4)-300*(a.^3)+200*(a.^2)-10*a-1;for i=1:n0 p=(a+b)/2;fp=400*(p.^4)-300*(p.^3)+200*(p.^2)-10*p-1;if fp==0||(abs((b-a)/2)<tol)disp('用二分法求得方程的根p=')disp(p)disp('二分迭代次数为:')disp(i)break;end;if fa*fp>0 a=p;else b=p;end;end;if i==n0&&~(fp==0||(abs((b-a)/2)<tol)) disp(n0) disp('次二分迭代后没有求出方程的根')end;程序调试:运行结果:用二分法求得方程的根p=0.1108二分迭代次数为:14②Newton法定义:取定初值x0,找到函数对应的点,然后通过该点作函数切线,交x轴,得到新的横坐标值,然后找函数对应的点,做切线,得到新的横坐标值,重复上述步骤,多次迭代,直到收敛到需要的精度。
求方程近似根的方法

函数方程的近似根一.实验课题用二分法和牛顿迭代法(包括弦截法)编程求方程sinx-x*x/2=0的实根,要求误差不超过0。
0001。
输出迭代次数,初始值和根的近似值。
二.解决方法(a).二分法求方程的根,首先应该知道根的大概位置或大致范围,就是要确定一个区间(a,b),使f(x)=0在这个区间内只有一个根,区间(a,b)称为有根区间。
有根区间(a,b)内的任何一个值都可以作为方程根的初始近似值。
确定有根区间的方法,主要根据连续函数的一个性质:设f(x)在[a,b]上连续,f(a)*f(b)<0,则方程杂(a,b)内至少有一个根。
用二分法求实根x的思路,就是反复将含有x的区间一分为二,通过判断函数杂各个小区间端点处的符号,逐步对折缩小有根区间,直到区间缩小到容许误差范围之内,然后取最终小区间的中点作为实根x的近似值。
(b).牛顿法牛顿法是求解方程的一种重要的迭代法,其实质是将原方程线性化后获得一个迭代函数的方法。
记[a,b]为方程f(x)=0的根的存在区间,取区间[a,b]内的一点,对f(x)用微分中值定理,近似的有f(x)=f(x(0))+f’(x(0))*(x-x(0))令f(x(0)+f’(x(0))*(x-x(0))=0,显然这是一个线性方程。
解此方程,并设f’(x)不等于零,得到f(x)=0的近似根x(0)-f(x(0))/f’(x(0))记为x(1),即x(1)为方程的一个近似根x(1)=x(0)-f(x(0))/f’(x(0))为改善根近似程度,反复实施这一过程,得到牛顿迭代公式x(k+1)=x(k)-f(x(k))/f’(x(k))这相当于选择迭代函数F(x)=x-f(x)/f’(x)为避免复杂函数计算导f’(x)的困难,常用差分形式f(x(k))-f(x(k-1))/(x(k)-x(k-1)) 代替导数f’(x(k)),这样迭代公式的形式成为x(k+1)=x(k)-(x(k)-x(k-1))*f(x(k))/(f(x(k))-f(x(k-1))) 三.编程a)画图程序plot(x,zeros(size(x)))>> hold off>> grid>> x=0:0.001:2;>> plot(x,fun1(x),'r')>> hold on>> plot(x,zeros(size(x)))>> hold off>> gridfunction y1=fun1(x)y1=sin(x)-x.^2.*0.5;b)二分法程序function c=dicho(a,b)n=50;detra=0.0001;k=0;c=(a+b)*0.5;while abs(a-b)>detraif fun1(c)==0,break,endif fun1(a)*fun1(c)<0,b=c;else a=c;endk=k+1;if k>n,k,error('fail')else c=(a+b)*0.5;endend['Iterative time =',int2str(k)]c)牛顿法程序function [y,k]=newton(x0,n)y(1)=x0;detra=0.0001;k=1;t=x0-(sin(x0)-x0.^2*0.5)/(cos(x0)-x0);while abs(t-x0)>detrax0=t;k=k+1;y(k)=t;t=x0-(sin(x0)-x0.^2./2)./(cos(x0)-x0);if (k-1)>n error('n is full'), endendk=k-1;四.结果与结论1.二分法程序>> c=dicho(1,2)ans =Iterative time =14c =1.40442.牛顿法程序>> [y,k]=newton(1,50)y =1.0000 1.7428 1.4641 1.4070 1.4044k =4由此可见二分法案求根比较慢,牛顿法较快。
用二分法求方程的近似解知识点

用二分法求方程的近似解知识点二分法是一种常用的求方程近似解的数值计算方法,运用这种方法可以找到函数方程f(x)=0在给定区间[a,b]上的一个根。
本文将对二分法的原理、步骤及其应用进行详细介绍。
一、原理二分法的原理基于数学中的零点定理,也叫做中间值定理。
该定理表明:如果一个连续函数f(x)在区间[a,b]上有f(a)和f(b)异号,即f(a)·f(b)<0,则在该区间内至少存在一个根。
基于这一定理,我们可以通过不断将给定区间一分为二,并判断中点函数值与零的位置关系,从而确定新的区间,直到满足精度要求或者迭代次数达到指定值。
这样可以在给定的精度范围内逐步缩小根的位置。
二、步骤下面是使用二分法求解方程根的一般步骤:1.选择一个区间[a,b],确保f(a)·f(b)<0。
这样可以保证函数在区间[a,b]内至少有一个根。
2.计算区间中点m=(a+b)/23.计算函数在中点处的值f(m)。
4.判断f(m)和0的关系:a.如果f(m)等于0,那么m就是方程的一个根;b.如果f(m)与f(a)异号,那么存在根的区间变为[a,m],重复步骤2-4;c.如果f(m)与f(b)异号,那么存在根的区间变为[m,b],重复步骤2-45.重复步骤2-4,直到达到所需的精度要求或者迭代次数达到指定值。
三、应用二分法在解决方程问题中有广泛的应用,特别是对于无法用解析法求解的非线性方程、高次多项式等复杂函数,二分法可以提供一个近似解。
此外,二分法还可以用于其他数值计算问题。
例如,在一些求极值的问题中,我们可以通过求解函数导数方程的根来找到极值点。
这时,同样可以使用二分法来近似求解。
四、注意事项在使用二分法求解方程时,需要注意以下几点:1.确保函数在给定区间上是连续且有定义的。
2.选择合适的初始区间[a,b]。
如果起始区间过大,则可能导致求解时间过长;如果起始区间过小,则可能无法找到根。
通常情况下,可以通过分析函数图像或者利用已知的条件进行初步估计。
高中数学如何求解二分法和牛顿迭代法方程

高中数学如何求解二分法和牛顿迭代法方程在高中数学中,求解方程是一个重要的内容,而二分法和牛顿迭代法是两种常用的求解方程的方法。
本文将介绍这两种方法的原理、应用以及解题技巧,并通过具体的例题来说明其考点和解题思路。
一、二分法的原理和应用二分法是一种通过不断缩小搜索范围来逼近方程根的方法。
其基本原理是将待求解的区间不断二分,判断根是否在左半区间还是右半区间,并将搜索范围缩小至根的附近。
具体步骤如下:1. 确定初始区间[a, b],使得f(a)与f(b)异号;2. 计算区间中点c=(a+b)/2;3. 判断f(c)与0的关系,若f(c)=0,则c为方程的根;若f(c)与f(a)异号,则根在区间[a, c]内,否则根在区间[c, b]内;4. 重复步骤2和步骤3,直到满足精度要求或找到根。
二分法的应用非常广泛,例如在求解函数的零点、解方程、求解最优化问题等方面都有应用。
下面通过一个具体的例题来说明二分法的应用和解题技巧。
例题1:求方程x^3-2x-5=0的根。
解题思路:1. 首先我们需要确定初始区间[a, b],使得f(a)与f(b)异号。
根据题目中的方程,可以取a=1,b=2,计算f(1)=-6和f(2)=1,满足条件;2. 计算区间中点c=(a+b)/2=1.5;3. 计算f(c)=f(1.5)=-1.375,与0的关系异号,说明根在区间[1, 1.5]内;4. 重复步骤2和步骤3,不断缩小搜索范围,直到满足精度要求或找到根。
通过不断迭代,我们可以得到方程的根为x=1.709。
这个例题展示了二分法的基本思路和解题技巧,通过不断缩小搜索范围,我们可以逼近方程的根。
二、牛顿迭代法的原理和应用牛顿迭代法是一种通过不断迭代逼近方程根的方法,其基本原理是利用函数的切线来逼近根的位置。
具体步骤如下:1. 确定初始点x0;2. 计算函数f(x)在x0处的导数f'(x0);3. 计算切线的方程y=f(x0)+f'(x0)(x-x0);4. 求切线与x轴的交点x1,即x1=x0-f(x0)/f'(x0);5. 重复步骤2到步骤4,直到满足精度要求或找到根。
用现代数学方法解释二分法悖论

一、概述二分法是一种常见的数值计算方法,在许多数学问题中都有广泛的应用。
然而,二分法却有一个令人困惑的现象,即当使用二分法寻找函数的根时,有时算法会收敛到一个错误的解。
这种现象被称为二分法悖论,在数值计算领域引起了广泛的讨论和研究。
在本文中,我们将使用现代数学方法解释二分法悖论,并探讨其背后的数学原理。
二、二分法的基本原理在介绍二分法悖论之前,首先需要了解二分法的基本原理。
二分法是一种求解方程根的经典算法,其基本思想是将定义域分割成两部分,然后确定目标值所在的那一部分,再对该部分继续进行分割,直到找到目标值或者满足一定的精度要求为止。
在数值计算中,二分法通常被用来求解函数的零点,即找到函数的根所对应的横坐标。
三、二分法的应用三、一、在实际工程问题中,二分法被广泛应用于求解非线性方程、求解最优化问题和求解微分方程等。
在计算机图形学中,我们常常需要对曲线和曲面进行求交,而二分法可以高效地求解曲线和曲面的交点。
在金融学中,二分法也常被用来计算期权的定价和风险价值。
在生物医学工程领域,二分法则可以用来估计人体组织的材料特性和生物学参数。
四、二分法悖论的实例四、一、尽管二分法在许多应用中表现出色,但在一些情况下却会出现令人困惑的现象。
考虑函数f(x)=x^3-2x-5,在区间[1,2]上使用二分法寻找根时,算法会不断迭代,最终发现无法找到根。
这种情况违反了二分法应该能够找到函数根的基本原则,称为二分法悖论。
五、现代数学方法解释二分法悖论现代数学方法能够对二分法悖论进行深入的解释和分析。
在实际应用中,二分法常常需要与计算机浮点数进行交互,而浮点数的表示精度有限,在对浮点数进行运算时会引入误差。
这些误差可能导致二分法在收敛过程中出现偏离期望的结果。
函数本身的性质,如导数的变化率和函数的凹凸性,也会影响二分法的收敛行为。
六、避免二分法悖论的方法六、一、尽管二分法悖论令人困扰,但通过一些方法和技巧,我们可以在实际应用中避免或减少这种现象的发生。
数值计算课后规范标准答案2

习 题 二 解 答1.用二分法求方程x 3-2x 2-4x-7=0在区间[3,4]内的根,精确到10-3,即误差不超过31102-⨯。
分析:精确到10-3与误差不超过10-3不同。
解:因为f(3)=-10<0,f(4)=9>0,所以,方程在区间[3,4]上有根。
由34311*1022222n n n n n n b a b a x x -----≤===<⨯ 有2n-1>1000,又为210=1024>1000, 所以n =11,即只需要二分11次即可。
x *≈x 11=3.632。
指出:(1)注意精确度的不同表述。
精确到10-3和误差不超过10-3是不同的。
(2)在计算过程中按规定精度保留小数,最后两次计算结果相同。
如果计算过程中取4位小数,结果取3位,则如下表:(3)用秦九韶算法计算f(x n )比较简单。
1*.求方程x 3-2x 2-4x-7=0的隔根区间。
解:令32247y x x x =---, 则2344322()()y x x x x '=--=+-当23443220()()y x x x x '=--=+-=时,有12223,x x =-=。
函数单调区间列表分析如下:因为214902150327(),()y y -=-<=-<,所以方程在区间223(,)-上无根; 因为21490327()y -=-<,而函数在23(,)-∞-上单调增,函数值不可能变号,所以方程在该区间上无根;因为2150()y =-<,函数在(2,+∞)上单调增,所以方程在该区间上最多有一个根,而(3)=-10<0,y(4)=9>0,所以方程在区间(3,4)有一个根。
所以,该方程有一个根,隔根区间是(3.4)。
2.证明1sin 0x x --=在[0,1]内有一个根,使用二分法求误差不大于41102-⨯的根,需要迭代多少次?分析:证明方程在指定区间内有一个根,就是证明相应的函数在指定区间有至少一个零点。
二分法、试位法,牛顿法求方程的根

二分法、试位法,牛顿法求方程的根二分法、试位法和牛顿法是求解方程根的常用数值方法。
一、二分法二分法是一种简单而有效的数值方法,它通过不断将区间一分为二来逼近方程的根。
它的基本思想是,如果在一个闭区间[a, b]内,函数f(x)在a和b两点的函数值f(a)和f(b)异号,那么函数在[a, b]内至少存在一个根。
算法步骤如下:1.初始化区间[a, b]和误差容限ε。
2.计算区间中点c=(a+b)/2。
3.如果f(c)=0或者(b-a)/2<ε,则停止迭代,c即为近似的根。
4.如果f(c)与f(a)异号,则根在[a, c]内,将b=c,否则根在[c,b]内,将a=c。
5.回到步骤2。
二、试位法试位法也是一种通过逼近来求解方程根的方法。
与二分法不同,试位法通过计算函数在两个点之间的插值点来逼近根。
它的基本思想是,如果在一个闭区间[a, b]内,函数f(x)在两个点a和b之间有一个变号点c,则函数在[a, b]内至少存在一个根。
算法步骤如下:1.初始化区间[a, b]和误差容限ε。
2.计算函数在区间[a, b]上的插值点c。
3.如果f(c)=0或者(b-a)/2<ε,则停止迭代,c即为近似的根。
4.如果f(c)与f(a)异号,则根在[a, c]内,将b=c,否则根在[c,b]内,将a=c。
5.回到步骤2。
三、牛顿法牛顿法又称为牛顿-拉弗森方法,它是一种通过不断迭代逼近根的方法。
牛顿法基于函数的局部线性近似,通过求导数来计算函数在当前近似根附近的切线与x轴的交点作为新的近似根。
算法步骤如下:1.初始化初始近似根x0和误差容限ε。
2.计算函数在当前近似根x的导数f'(x)。
3.如果f'(x)为0,则停止迭代,x即为近似的根。
4.计算函数在当前近似根x的函数值f(x)。
5.如果|f(x)|<ε,则停止迭代,x即为近似的根。
6.计算新的近似根x=x-f(x)/f'(x)。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
吉林化工学院
专业:
班级:
学号:
姓名:
有关二分法计算线性方程根的问题
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,则根一定在
[a k+1,b k+1]= [a k,b k]内,否则根一定在区间[a k+1,b k+1]=[ x k,, b k],且有b k+1-a k+1=1/2k(b-a).
由上述二分法得到一序列{x k},即可得x*=lim k→∞X k,这个值即为f(x)=0的实根,根据题目要求的精度ε可以求出它的近似解。
4、二分法示意图如下:
5、程序设计:
#include<stdio.h>
#include<math.h>
double funx( double x)
{
return(x*x*x*x*x*x-x-1);} //给出要求的方程。
double fun(float m,float n) // 定义功能函数,通过循环找出在所给精度的
{ 范围内根所在的区间。
double r;
r=(m+n)/2;
while(fabs(m-n)>0.000001) //确定精度不超过0.000001
{ if(funx(r)==0) return r;
if(funx(r)*funx(n)<0)
m=r;
else
n=r;
r=(m+n)/2;}
return r;
}
main()
{
double root ;
float m,n;
printf("plese input two number m n:\n");
scanf("%f%f",&m,&n);
root =fun(m,n); // 调用功能函数。
printf("%f\n",root);// 输出方程的根。
}
所测试的题目是fx=x6-x-1于[1,2]内的一个实根,且要求精确到小数点后第三位。
得到的结果如下:
6、论文分析
二分法的优点是方法简单,易于理解,且对f(x)只要求连续即可。
可用二分法求出f(x)=0于[a,b]内的全部的实根。
但二分法不能求复根及偶数重根。
对于用C语言编程解决二分法求解的问题,显然它没有用Excle那么方便,
而且用C语言编程得到的结果不能看到求解过程中的每一个结果,而用Excle求解可以看到全部的借。
对于此论文中所用到的程序,它只适用于给出一个题目,如果要用来求其他题目的解,则必须对程序中的部分代码进行修改,有点不太方便,需要进行修改优化。
关键字:二分法求解方程的根,C语言编程。