数值分析实验五-----非线性方程的求根4.docVIP

数值分析实验五-----非线性方程的求根4.doc

  1. 1、本文档共6页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多

数值分析实验五非线性方程求根

组号班级学号姓名分数

一、实验目的

掌握用MATLAB软件求解非线性方程和方程组的根本用法,并对结果做出初步的分析。

学会用二分法、牛顿法求非线性方程的根。

二、实验内容及根本知识介绍

1、二分法

假设∈C(),由连续函数的性质知,如果区间内存在相异的两点对应的函数值异号。那么方程在内至少有一个根。在此我们假设称为有根区间。

为了找到内的根α,令,那么可以按下面的二分法计算

第一步:取中间中点并计算

第二步:如果或那么认为,算法终止;如果||比拟大,那么或大于零或小于零,因而必与异号,就是说要么区间中存在方程的根,要么区间中存在方程的根,如果中存在方程的根,即。返回第一步。如果中存在方程的根,即,也返回第一步。

按二分法求根,只会出现两种情况:一种情况是在某一步成立;一种情况是不断更新的区间的长度h逐次减半,直到趋于零,这时,因为,所以我们就可以认为,因此,二分法必有限步终止。

2、牛顿法计算公式为

k=0,1,2,…

定理设所要求解的方程为,且此方程有根。如果,而且得某个邻域上连续,那么牛顿法是局部收敛的并且至少是二阶收敛的。

设其单根附近有连续的二阶导数,将在处泰勒展开得

从而

当充分靠近时,得

这样导出

由此结果我们预期因此精度更高的近似值。这样牛顿迭代法〔*〕

L

L

从几何上理解,牛顿迭代法每次迭代是用切线代替曲线,所以又称切线法。

牛顿迭代法的映射为显见等价于,故迭代式〔*〕定义合理,由于而是单根时,

牛顿迭代法拒不收敛,且具有二阶收敛速度,计算结果条件一般用,这是由于,当与充分靠近时,L很小,一般能保证。

三、实验问题及方法、步骤

1、二分法

例题:求方程在区间[3,4]内的一个实根,要求精确到小数点后的第二位。

编程如下:

functionx=nabisect(fname,a,b,e)

%用途:二分法解非线性方程

%格式:x=nabisect(fname,a,b,e)fname为用函数句柄或内嵌函数表达的f(x),a,b为区间%端点,e为精度(默认值10-4),x返回解,程序要求函数在两端点值必须异号,中间变量fa,%fb,fx引入可以最大限度减少fname调用次数,从而提高速度

ifnargin4,e=1e-4;end;

fa=feval(fname,a);fb=feval(fname,b);

iffa*fb0,error(‘函数在两端点值必须异号’);end

x=(a+b)/2

while(b-a)(2*e),

fx=feval(fname,x);

iffa*fc0,b=x;fb=fx;elsea=x;fa=fx;end

x=(a+b)/2

end

用于解例题,在MATLAB命令窗口执行:

fun=inline(‘x^3–2*x^2–4*x–7’

05)

33.1

3

3.1

3.2

3.3

3.4

3.5

3.6

3.7

3.8

3.9

4

2

3

3.2

3.4

3.6

3.8

4

结果如下表:

n

an

bn

xn

f(xn)

0

3

4

-

1

4

+

2

-

3

+

4

+

5

41

+

6

+

7

-

所以方程的近似根

2、牛顿法

例题:取,用牛顿迭代法求解,使计算结果有4位有效数字。

编程如下:

functionx=nanewton(fname,dfname,x0,e,N)

%用途:Newton迭代法解非线性方程f(x)=0

%格式:x=nanewton(fname,dfname,x0,e,N)fname和dfname分别为表示f(x)及其导函数%的M函数句柄或内嵌函数,x0为迭代初值,e为精度要求(默认1e-4),x返回数值解,并%显示计算过程设置迭代次数上限N以防发散(默认500)

ifnargin5,N=500;end

ifnargin4,e=1e–4;end

x=x0;x0=x+2*e;k=0;

whileabs(x0-x)ekN,

k=k+1;

x0=x;x=x0–feval(fname,x0)/feval(dfname,x0);

disp(x)

end

ifk==N,warning(‘已达迭代

文档评论(0)

展翅高飞2020 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档