数值计算课程设计报告非线性方程求根.docx
- 文档编号:286772
- 上传时间:2022-10-08
- 格式:DOCX
- 页数:26
- 大小:169.53KB
数值计算课程设计报告非线性方程求根.docx
《数值计算课程设计报告非线性方程求根.docx》由会员分享,可在线阅读,更多相关《数值计算课程设计报告非线性方程求根.docx(26页珍藏版)》请在冰豆网上搜索。
数值计算课程设计报告非线性方程求根
数值计算方法
课程设计报告
课程设计名称:
数值计算方法
课程设计题目:
非线性方程求根
年级专业:
组员学号:
指导教师:
完成时间:
非线性方程求根
一、问题提出
随着科学技术,生产力经济的发展,在科学与工程计算中存在着大量方程求根问题,例如贷款购房问题,工厂的最佳订货问题等都需要求解一类非线性方程的根,首先根据实际问题列出数学模型,确定变量,给出各个条件及相关函数;然后对建立的模型进行具体分析和研究,选择合适的求解方法;编写函数的程序,用计算机求出方程的解,通过所求解分析具体情况.
求解非线性方程的问题有以下几种基本方法。
二分法简单易行,但收敛较慢,仅有线性收敛速度。
而且该方法不能用于求偶数重根或复根,但可以用来确定迭代法的初始值。
牛顿法是方程求根中常用的一种迭代方法,它除了具有简单迭代法的优点外,还具有二阶收敛速度(在单根邻近处)的特点,但牛顿法对初始值选取比较苛刻(必须充分靠近方程的根),否则牛顿法可能不收敛。
弦截法是牛顿法的一种修改,虽然比牛顿法收敛慢,但因它不需计算函数的导数,故有时宁可用弦截法而不用牛顿法,弦截法也要求初始值必须选取得充分靠近方程的根,否则也可能不收敛。
二、背景分析
代数方程的求根问题是一个古老的数学问题。
理论上,n次代数方程在复数域一定有n个根(考虑重数)。
早在16世纪就找到了三次、四次方程的求根公式,但直到19世纪才证明大于等于5次的一般代数方程式不能用代数公式求解,而对于超越方程就复杂的多,如果有解,其解可能是一个或几个,也可能是无穷多个。
一般也不存在根的解析表达式。
因此需要研究数值方法求得满足一定精度要求的根的近似解。
牛顿迭代法是牛顿在17世纪提出的一种求解方程.多数方程不存在求根公式,从而求精确根非常困难,甚至不可能,从而寻找方程的近似根就显得特别重要.
而在各种科学和工程计算中往往要用到非线性方程组的求解,而牛顿法又是最基础的迭代法,在各种计算力学、控制工程等领域中发挥了不可代替的作用.而在数值计算中,非线性方程组的求解同样具有重要意义.随着计算机技术的成熟和高速发展,对于非线性方程求根问题出现了大量的数学软件(如MATLAB,SAS,SPSSD等),计算机已经成为工程师应用数学解决工程问题的主要运算工具.同时,工程专业的学生对数学教育的需求重点正在从手工演绎和运算能力的培养转变到结合计算机软件进行建模、求解和论证能力的培养.我们采用Matlab数学软件平台,通过实例比较了二分法、牛顿迭代法、弦截法三种基本方法的优缺点。
三、基本算法思想与实现
(1)二分法
单变量函数方程:
f(x)=0
其中,f(x)在闭区间[a,b]上连续、单调,且f(a)*f(b)<0,则有函数的介值定理可知,方程f(x)=0在(a,b)区间有且只有一个解
,二分法是通过函数在区间端点的符号来确定
所在区域,将有根区间缩小到充分小,从而可以求出满足给定精度的根
的近似值。
下面研究二分法的几何意义:
设
=1,
=b,区间
,中点
=
及
,若
=0,则
=
,若f(
)*f(
)<0,令
=
,
=
,则根
[
]中,这样就得到长度缩小一半的有根区间[
],若f(
)*f(
)<0,令
=
,
=
,则根
[
]中,这样就得到长度缩小一半的有根区间[
],即f(
)f(
)<0,此时
-
=
对有根区间[
]重复上述步骤,即分半求中点,判断中电处符号,则可得长度有缩小一半的有根区间[
],
如图所示:
重复上述过程,第n步就得到根
的近似序列
及包含
的区间套,如下:
(1)
(2)
(3)
-
=
=…=
(4)
且|
-
|
(n=1,2,3…..)
显然lim
,且
以等比数列的收敛速度收敛于
,因此用二分法求f(x)=0的实根
可以达到任意指定精度。
(2)牛顿迭代法
设方程f(x)=0在其根
的某个领域U(
,
)有一阶连续导数,且f’(
)≠0。
求f(x)=0的根
,首先要将f(x)=0转化为等价形式
,并使
(x)满足不动点迭代的一般理论。
于是我们令
(x)=x+h(x)f(x),可由
‘(
)=0来确定h(x)的结构,根据
’(x)=1+h’(
)f(
)+h(
)f’(x1)=1+h(
)f’(
)=0可得
h(
)=-1/f’(
),由于f’(x)≠0,且f’(x)连续,因此当h(x)=-1/f’(x)时,h’(x1)=0,即令
(x)=x-f(x)/f‘(x),从而有迭代格式
=
(k=0,1,2,…..)
由于
…….都在U领域里,从而当B比较小时,可用f’(
)可近似代替f’(
),
=
-
,此方法称为牛顿迭代法
下面研究牛顿法的几何意义:
设r是方程f(x)=0的根,选取
作为的r初始近似值,经过(
f(
))做曲线y=f(x)的切线的方程:
y=f(
)+f’(
)(x-
),求出L与x的交点的横坐标
=
-f(
)/f’(
),称
为r的一次近似值经过点(
f(
))做切线y=f(x)的切线,并求出该切线与x轴的交点横坐标:
=
-f(
)/f’(
),
称为r的二次近似值,重复以上操作可以得到r的近似值序列。
下述三个定理分别讨论了牛顿法的收敛性质:
定理1:
对于方程f(x)=0,设f(x)在[a,b]上有二阶连续导数且满足下述条件:
(1)f(a)f(b)<0;
(2)f’(x)
0,
0,对任意的x
[a,b];
(3)存在
[a,b],使f(
)
>0,
则由牛顿法产生的迭代序列
收敛于f(x)=0的根
,且
定理2:
对于方程f(x)=0,设f(x)在[a,b]上有二阶连续导数且满足下述条件:
(1)f(a)f(b)<0;
(2)对任意的x
[a,b],f’(x)
0,
0
(3)
则对于任何 [a,b],由牛顿法产生的迭代序列 收敛于f(x)=0的根 定理3: 设 是方程f(x)=0的根,在 的某个开区间 连续且f’(x) 0,则存在 >0,当 【 -, + 】时,由牛顿迭代法 = (k=0,1,2,…..)式产生的序列 是以不低于二阶的收敛速度收敛到 . (3)弦截法 设 为方程f(x)=0的两个近似根。 用差商得: f( )-f( )/ - , 代替牛顿迭代公式中的导数f’( ),于是得到如下的迭代公式: = - 。 下面研究割弦法的几何意义: 经过点( f( ))及点( f( ))两点作割线,其点斜式方程为: Y=f( )- ,其零点为X= - 把X用 表示即得到迭代格式,它又称为双点弦割法,需要两个初值 此割线与X轴交点的横坐标就是新的近似值 ,所以弦截法又称为割线法,如图所示。 下面三个定理为弦割法收敛定理: 定理1: 设f(x)在其零点 的邻域U( , )=[ - , + ]( >0)有二阶连续导数, ,则当 U( , )时,由割弦法式产生的序列 收敛于 ,且收敛的阶为1.618。 定理2: 设 在区间[a,b]上连续,且满足下述三点 (1)f(a)f(b)<0; (2)对任意的x [a,b],有f’(x) 0, 0 (3) b-a, b-a 则对于任意初始 , [a,b],由弦割法产生的迭代序列 收敛于f(x)=0唯一的根 定理3: 设在其零点 的邻域U( )=[ - , + ]( >0)有二阶连续导数,f’(x) 0则当 U( )时,由弦割 = - 式产生的序列 收敛于 ,且收敛的阶为1.618。 四、具体应用实例分析 求解 在 附近的根。 (1)二分法 建立erfen-M文件: function[k,x,wuca,yx]=erfen(a,b,abtol) a (1)=a; b (1)=b; ya=fun(a (1)); yb=fun(b (1));%程序中调用的fun.m为函数 ifya*yb>0, disp('注意: ya*yb>0,请重新调整区间端点a和b.'), return end max1=-1+ceil((log(b-a)-log(abtol))/log (2));%ceil是向 方向取整 fork=1: max1+1 a;ya=fun(a); b;yb=fun(b); x=(a+b)/2; yx=fun(x); wuca=abs(b-a)/2; k=k-1; [k,a,b,x,wuca,ya,yb,yx] Ifyx==0 a=x; b=x; else ifyb*yx>0 b=x; yb=yx; else a=x; ya=yx; end ifb-a return, end end k=max1;x;wuca; yx=fun(x); 建立FUN函数文件: functiony=fun(x) y=x.^3+x.^2-3*x-3; 画图: >>x=[-10: 0.1: 10]; >>y=fun(x); >>plot(x,y); 由图,我们选取区间[-6,6] 输入程序: [k,x,wuca,yx]=erfen(-6,6,0.001) 运行结果: k=13; x=1.7322; wuca=7.3242e-004; yx=0.0012 (2)牛顿迭代法 建立newtonqx-M文件: function[k,xk,yk,piancha,xdpiancha]=newtonqx(x0,tol,ftol,gxmax) x (1)=x0; fori=1: gxmax x(i+1)=x(i)-fnq(x(i))/(dfnq(x(i))+eps);piancha=abs(x(i+1)-x(i)); xdpiancha=piancha/(abs(x(i+1))+eps); i=i+1; xk=x(i); yk=fnq(x(i));[(i-1)xkykpianchaxdpiancha] if(abs(yk) k=i-1; xk=x(i);[(i-1)xkykpianchaxdpiancha] return; end end ifi>gxmax disp('请注意: 迭代次数超过给定的最大值gxmax。 ') k=i-1; xk=x(i); [(i-1)xkykpianchaxdpiancha] return; end [(i-1),xk,yk,piancha,xdpiancha]'; 建立FNQ原函数文件: functiony=fnq(x) y=x.^3+x.^2-3*x-3; 建立DFNQ导函数文件: functiony=dfnq(x) y=3*x.^2+2*x-3; 输入程序: [k,xk,yk,piancha,xdpiancha]=newtonqx(1.5,0.001,0.001,20) 输出结果: k=3; xk=1.7321;
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数值 计算 课程设计 报告 非线性 方程 求根