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

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

班级: 姓名: 方 学号: 日期:

一、实验目的

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中收敛用牛顿法设计迭代函数求解○,并与○

的迭代法比较收敛的速度。。

三、算法设计及实现

1function f=fun1(x) 1、设计:方程○

f=exp(x)-x-3;;

2 function y=Exp2(x) ○

y=exp(x)-3;

function y=Exp3(x)

y=log(x+3);

牛顿迭代:

function df=Exp4(x)

df=exp(x)-1。

四、实验步骤

1打开matlab软件,1、○新建ErFen_Root.m文件,在窗口中编辑二分法数值积分函数程序代码,并保存在指定的文件夹下,在Current Directory窗口右边点击《Browse For Folder》按钮指向ErFen_Root.m文件;

2在Command ○Window中编辑相应要计算的题目的数值函数及相应的题目的表达式。

2、输出结果和初步分析说明(见附件一)。

五、使用说明实验结果分析

1、在Command Window窗口中编辑要调用的函数名与指定的函数名字不同导致出现错误,通过改正与函数名相同即可;在调用函数时要用单引号引用。

六、算法的改进和实验总结

在用二分法迭代求解的过程中,被调用的函数需要清楚的描述所要执行的问题的求解过程,在matlab函数调用时,执行函数一定要与函数同名。

七、源程序(见附件二)

附件一:

>> [val,n]=ErFen_Root('fun1',[0 3],1e-6)

0 1.5000 3.0000 -2.0000 -0.0183 14.0855

1.5000 2.2500 3.0000 -0.0183 4.2377 14.0855

1.5000 1.8750 2.2500 -0.0183 1.6458 4.2377

1.5000 1.6875 1.8750 -0.0183 0.7184 1.6458

1.5000 1.5938 1.6875 -0.0183 0.3284 0.7184

1.5000 1.5469 1.5938 -0.0183 0.1499 0.3284

1.5000 1.5234 1.5469 -0.0183 0.0645 0.1499

1.5000 1.5117 1.5234 -0.0183 0.0228 0.0645

1.5000 1.5059 1.5117 -0.0183 0.0022 0.0228

1.5000 1.5029 1.5059 -0.0183 -0.0081 0.0022

1.5029 1.5044 1.5059 -0.0081 -0.0030 0.0022

1.5044 1.5051 1.5059 -0.0030 -0.0004 0.0022

1.5051 1.5055 1.5059 -0.0004 0.0009 0.0022

1.5051 1.5053 1.5055 -0.0004 0.0002 0.0009

1.5051 1.5052 1.5053 -0.0004 -0.0001 0.0002

1.5052 1.5053 1.5053 -0.0001 0.0001 0.0002

1.5052 1.5052 1.5053 -0.0001 -0.0000 0.0001

1.5052 1.5053 1.5053 -0.0000 0.0000 0.0001

1.5052 1.5052 1.5053 -0.0000 0.0000 0.0000

1.5052 1.5052 1.5052 -0.0000 0.0000 0.0000

1.5052 1.5052 1.5052 -0.0000 0.0000 0.0000

1.5052 1.5052 1.5052 -0.0000 0.0000 0.0000

1.5052 1.5052 1.5052 -0.0000 0.0000 0.0000

1.5052 1.5052 1.5052 -0.0000 0.0000 0.0000

val =

1.5052

n =

24

>> val=DieDai('Exp2',1,1e-6)

跌代次数8

val =

-2.9475

>> val=DieDai('Exp3',1,1e-6)

跌代次数10

val =

1.5052

>> val=DieDai('Exp4',1,1e-6)

跌代次数

6

val =

Inf

>> NewtonDieDai('fun1','Exp4',1,1e-6)

x1 =

1.5377

n =

2

x1 =

1.5059

n =

3

x1 =

1.5052

n =

4

x1 =

1.5052

n =

5

跌代次数

5

ans =

1.5052

>>

function [val,n]=ErFen_Root(f,x,dalt)

% [val,n]=ErFen_root(f,x,dalt)

% f 要求根函数名

% x 初试有根区间

% dalt 精度,默认为10-5

% val 返回所得根

% n 跌代次数

if nargin

dalt=1e-5;

end

ab=x;i=0;x0=sum(ab)/2;

fa=feval(f,ab(1));

fb=feval(f,ab(2));

fx0=feval(f,x0);

while abs(fa-fb)>=dalt

i=1+i;

disp([ab(1) x0 ab(2) fa fx0 fb ]);% 显示跌代过程 if fx0*fa

ab(2)=x0;

fb=fx0;

else

ab(1)=x0;

fa=fx0;

end

x0=sum(ab)/2;

fx0=feval(f,x0);

if (ab(2)-ab(1))

disp('May not be root!');

break;

end

end

val=x0;

if nargout==2

n=i;

end

function val=DieDai(f,x0,delta) %用

if nargin

delta=1e-7;

end

n=1;

x1=feval(f,x0);

while abs(x1-x0)>delta

x0=x1;

x1=feval(f,x0);

n=n+1;

if n>100

exit('跌代出问题'); end

end

val=x1;

disp(['跌代次数']);%显示跌代次数 disp(n);

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

班级: 姓名: 方 学号: 日期:

一、实验目的

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中收敛用牛顿法设计迭代函数求解○,并与○

的迭代法比较收敛的速度。。

三、算法设计及实现

1function f=fun1(x) 1、设计:方程○

f=exp(x)-x-3;;

2 function y=Exp2(x) ○

y=exp(x)-3;

function y=Exp3(x)

y=log(x+3);

牛顿迭代:

function df=Exp4(x)

df=exp(x)-1。

四、实验步骤

1打开matlab软件,1、○新建ErFen_Root.m文件,在窗口中编辑二分法数值积分函数程序代码,并保存在指定的文件夹下,在Current Directory窗口右边点击《Browse For Folder》按钮指向ErFen_Root.m文件;

2在Command ○Window中编辑相应要计算的题目的数值函数及相应的题目的表达式。

2、输出结果和初步分析说明(见附件一)。

五、使用说明实验结果分析

1、在Command Window窗口中编辑要调用的函数名与指定的函数名字不同导致出现错误,通过改正与函数名相同即可;在调用函数时要用单引号引用。

六、算法的改进和实验总结

在用二分法迭代求解的过程中,被调用的函数需要清楚的描述所要执行的问题的求解过程,在matlab函数调用时,执行函数一定要与函数同名。

七、源程序(见附件二)

附件一:

>> [val,n]=ErFen_Root('fun1',[0 3],1e-6)

0 1.5000 3.0000 -2.0000 -0.0183 14.0855

1.5000 2.2500 3.0000 -0.0183 4.2377 14.0855

1.5000 1.8750 2.2500 -0.0183 1.6458 4.2377

1.5000 1.6875 1.8750 -0.0183 0.7184 1.6458

1.5000 1.5938 1.6875 -0.0183 0.3284 0.7184

1.5000 1.5469 1.5938 -0.0183 0.1499 0.3284

1.5000 1.5234 1.5469 -0.0183 0.0645 0.1499

1.5000 1.5117 1.5234 -0.0183 0.0228 0.0645

1.5000 1.5059 1.5117 -0.0183 0.0022 0.0228

1.5000 1.5029 1.5059 -0.0183 -0.0081 0.0022

1.5029 1.5044 1.5059 -0.0081 -0.0030 0.0022

1.5044 1.5051 1.5059 -0.0030 -0.0004 0.0022

1.5051 1.5055 1.5059 -0.0004 0.0009 0.0022

1.5051 1.5053 1.5055 -0.0004 0.0002 0.0009

1.5051 1.5052 1.5053 -0.0004 -0.0001 0.0002

1.5052 1.5053 1.5053 -0.0001 0.0001 0.0002

1.5052 1.5052 1.5053 -0.0001 -0.0000 0.0001

1.5052 1.5053 1.5053 -0.0000 0.0000 0.0001

1.5052 1.5052 1.5053 -0.0000 0.0000 0.0000

1.5052 1.5052 1.5052 -0.0000 0.0000 0.0000

1.5052 1.5052 1.5052 -0.0000 0.0000 0.0000

1.5052 1.5052 1.5052 -0.0000 0.0000 0.0000

1.5052 1.5052 1.5052 -0.0000 0.0000 0.0000

1.5052 1.5052 1.5052 -0.0000 0.0000 0.0000

val =

1.5052

n =

24

>> val=DieDai('Exp2',1,1e-6)

跌代次数8

val =

-2.9475

>> val=DieDai('Exp3',1,1e-6)

跌代次数10

val =

1.5052

>> val=DieDai('Exp4',1,1e-6)

跌代次数

6

val =

Inf

>> NewtonDieDai('fun1','Exp4',1,1e-6)

x1 =

1.5377

n =

2

x1 =

1.5059

n =

3

x1 =

1.5052

n =

4

x1 =

1.5052

n =

5

跌代次数

5

ans =

1.5052

>>

function [val,n]=ErFen_Root(f,x,dalt)

% [val,n]=ErFen_root(f,x,dalt)

% f 要求根函数名

% x 初试有根区间

% dalt 精度,默认为10-5

% val 返回所得根

% n 跌代次数

if nargin

dalt=1e-5;

end

ab=x;i=0;x0=sum(ab)/2;

fa=feval(f,ab(1));

fb=feval(f,ab(2));

fx0=feval(f,x0);

while abs(fa-fb)>=dalt

i=1+i;

disp([ab(1) x0 ab(2) fa fx0 fb ]);% 显示跌代过程 if fx0*fa

ab(2)=x0;

fb=fx0;

else

ab(1)=x0;

fa=fx0;

end

x0=sum(ab)/2;

fx0=feval(f,x0);

if (ab(2)-ab(1))

disp('May not be root!');

break;

end

end

val=x0;

if nargout==2

n=i;

end

function val=DieDai(f,x0,delta) %用

if nargin

delta=1e-7;

end

n=1;

x1=feval(f,x0);

while abs(x1-x0)>delta

x0=x1;

x1=feval(f,x0);

n=n+1;

if n>100

exit('跌代出问题'); end

end

val=x1;

disp(['跌代次数']);%显示跌代次数 disp(n);


相关内容

  • 数值分析课程设计
  • 2013/2014第一学期 数值分析课程设计 设计题目: 非线性方程的数值解法及MATLAB 解法 专业 学号 姓名 学号 姓名 学号 姓名 成绩 指导老师 摘 要 本论文分析总结了非线性方程的求解的几种方法,主要介绍非线性方程的数值解法,是直接从方程出发,逐步缩小根的存在区间,或逐步将根的近似值精 ...

  • 非线性方程的数值解法练习
  • 第三章 非线性方程(组) 的数值解法 一.取步长h =1,试用搜索法确立f (x ) =x 3−2x −5含正根的区间,然后用二分法求这个正根,使误差小于10−3. [详解] 由于是要寻找正根,因此,可选含根区间的左端点为0.f (0)=−5, f (1)=−5,f (2)=−1,f (3)=16, ...

  • 数值方法求非线性方程
  • 本章主要介绍方程根的有关概念,求方程根的步骤,确定根的初始近似值的方法(作图法,逐步搜索法等),求根的方法(二分法,迭代法,牛顿法,割线法,米勒(M üller )法和迭代法的加速等)及其MATLAB 程序,求解非线性方程组的方法及其MATLAB 程序. 2.1 方程(组)的根及其MATLAB 命令 ...

  • 非线性方程求根
  • 第7章 非线性方程求根 本章主要内容: 1.区间二分法. 2切线法. 3.弦位法. 4.一般迭代法. 重点.难点 一.区间二分法 区间二分法是求方程f(x)=0根的近似值的常用方法. 基本思想:利用有根区间的判别方法确定方程根的区间[a,b] ,将有根区间平分为二:再利用有根区间的判别方法判断那一个 ...

  • 非线性方程的数值计算方法实验
  • 非线性方程的数值计算方法实验 一.实验描述: 在科学研究和工程实践中,经常需要求解大量的非线性方程.本实验正是通过计算机的程序设计,使用迭代法.波尔查诺二分法.试值法.牛顿-拉夫森法和割线法,来实现非线性方程的求解. 本实验中通过对各种方法的实践运用,可以比较出各种方法的优缺点.并且,通过完成实验, ...

  • 数值计算基础
  • 数值计算基础 实验指导书 2010年 目录 实验一 直接法解线性方程组的 ................................ 1 实验二 插值方法 ........................................... 10 实验三 数值积分 ............. ...

  • MATLAB在有限差分法中的应用
  • 第!"卷第!期 !(("年)月 桂林工学院学报 *+,-'./+01,2/2'2'3424,45+04567'+/+18#$%&!"'$&!.9:&!((" !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ...

  • 化学计量学
  • 南京工业大学 化学计量学 试题(A )卷(闭) 2012-2013学年第二学期 使用班级班级 学号 姓名 一.单项选择题(每小题2分,共30分) 1. 相对于迭代法或牛顿切线等算法,二分法解一元方程的最大优点是( ) A. 程序最简单 B. 运算速度一定最快 C. 初值可随意设置 D. 最可靠,一定 ...

  • 有限差分法
  • 有限差分法 有限差分法 finite difference method 微分方程和积分微分方程数值解的方法.基本思想是把连续的定解区域用有限个离散点构成的网格来代替, 这些离散点称作网格的节点:把连续定解区域上的连续变量的函数用在网格上定义的离散变量函数来近似:把原方程和定解条件中的微商用差商来近 ...