数学实验报告样本.docx

上传人:b****2 文档编号:13961599 上传时间:2023-06-19 格式:DOCX 页数:32 大小:79.02KB
下载 相关 举报
数学实验报告样本.docx_第1页
第1页 / 共32页
数学实验报告样本.docx_第2页
第2页 / 共32页
数学实验报告样本.docx_第3页
第3页 / 共32页
数学实验报告样本.docx_第4页
第4页 / 共32页
数学实验报告样本.docx_第5页
第5页 / 共32页
数学实验报告样本.docx_第6页
第6页 / 共32页
数学实验报告样本.docx_第7页
第7页 / 共32页
数学实验报告样本.docx_第8页
第8页 / 共32页
数学实验报告样本.docx_第9页
第9页 / 共32页
数学实验报告样本.docx_第10页
第10页 / 共32页
数学实验报告样本.docx_第11页
第11页 / 共32页
数学实验报告样本.docx_第12页
第12页 / 共32页
数学实验报告样本.docx_第13页
第13页 / 共32页
数学实验报告样本.docx_第14页
第14页 / 共32页
数学实验报告样本.docx_第15页
第15页 / 共32页
数学实验报告样本.docx_第16页
第16页 / 共32页
数学实验报告样本.docx_第17页
第17页 / 共32页
数学实验报告样本.docx_第18页
第18页 / 共32页
数学实验报告样本.docx_第19页
第19页 / 共32页
数学实验报告样本.docx_第20页
第20页 / 共32页
亲,该文档总共32页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

数学实验报告样本.docx

《数学实验报告样本.docx》由会员分享,可在线阅读,更多相关《数学实验报告样本.docx(32页珍藏版)》请在冰点文库上搜索。

数学实验报告样本.docx

数学实验报告样本

 

数学实验报告

 

实验序号:

3

日期:

2013年12月

14日

班级

应数一班

姓名陈菲

学号

1101114209

实验

求代数方程的近似根

名称

 

问题背景描述:

 

求代数方程f(x)0的根是最常见的数学问题之一,当f(x)是一次多项式时,称f(x)0

 

为线性方程,否则称之为非线性方程.

 

当f(x)0是非线性方程时,由于f(x)的多样性,尚无一般的解析解法可使用,但如果

对任意的精度要求,能求出方程的近似根,则可以认为求根的计算问题已经解决,至少能满足实际要求.

 

本实验介绍一些求方程实根的近似值的有效方法,要求在使用这些方法前先确定求根区间

[a,b],或给出某根的近似值x0.

 

实验目的:

 

1.了解代数方程求根求解的四种方法:

对分法、迭代法、牛顿切线法

 

2.掌握对分法、迭代法、牛顿切线法求方程近似根的基本过程。

 

 

实验原理与数学模型:

 

1.对分法

对分法思想:

将区域不断对分,判断根在某个分段内,再对该段对分,依此类推,直到满足精度为止.对分法适用于求有根区间内的单实根或奇重实根.

设f(x)在[a,b]上连续,f(a)f(b)

0,即f(a)

0,f(b)

0

或f(a)

0,f(b)0.则根据

连续函数的介值定理,在(a,b)内至少存在一点

,使f()

0

下面的方法可以求出该根:

x0

a

b

2,计算f(x0);

f(x0)0

,则

x0

f(x)0

的根,停止计算,输出结果

xx0

若f(a)

f(x0)

0,则令a1

a,b1

x0,若f(a)f(x0)

0,则令a1

ak

bk

⋯⋯,有ak、bk以及相应的

xk

2.

f(xk)

xk

(3)若

为预先给定的精度要求),退出计算,输出结果

反之,返回

(1),重复

(1),

(2),(3).

 

a1

b1

x0,b1

b

x1

2.

 

akbk

2;

以上方法可得到每次缩小一半的区间序列

{[ak,bk]},在(ak,bk)中含有方程的根.

ak

bk

当区间长bk

ak很小时,取其中点

xk

2为根的近似值,显然有

xk

1

1

1

ak1)

1

(ba)

(bk

ak)

(bk1

k1

2

2

2

2

以上公式可用于估计对分次数k.

2.迭代法

迭代法的基本思想:

由方程f(x)0构造一个等价方程

x(x)

从某个近似根x0出发,令

xk1

(xk),k0,1,2,

可得序列{xk},这种方法称为迭代法.

若{xk}收敛,即

limxk

x*

k

只要(x)连续,有

limxk1

lim(xk)

(limxk)

k

k

k

 

可知,{xk}的极限x*

x*

(x*)

是x(x)

的根,也就是f(x)0的根.

当然,若xk发散,迭代法就失败.

迭代过程xk1

(xk)收敛的常用判别标准:

当根区间

[a,b]

较小,且对某一

x0[a,b]

'(x)

明显小于1时,则迭代收敛

 

2)迭代法的加速:

a)松弛法:

若(x)与xk同是x*的近似值,则xk1(1k)xkk(xk)是两个近似值的加权平均,其中k称

为权重,现通过确定k看能否得到加速.

 

迭代方程是:

x

(x)

其中

(x)

(1

)x

(x),令

'(x)

1

'(x)

0,试确定

1

k

1

1k

'(xk)

当'(x)1时,有

'(x),即当

1'(xk),

'(xk)时,

1

1

k

1

可望获得较好的加速效果,于是有松弛法:

xk1

(1

k)xkk

(xk),

1'(xk)

b)Altken方法:

x*

(x*),x*是它的根,x0是其近似根.

设x1

(x0),x2

(x1),因为

x*

x2[x*

x2]

x2

[(x*)

(x1)]

x2

'()(x*

x1),

x2

x1

(x1)

(x0)

用差商x1

x0

x1

x0

近似代替'(

),有

x*

x2x2

x1(x*

x1)

x1

x0

解出x*,得

 

*

(x

x)2

x

x2

2

1

x2

2x1

x0

由此得出公式

xk

(1)

(xk);

xk

(2)

(xk

(1));

xk1

(2)

(xk

(2)

xk

(1))2

xk

xk

(2)

2xk

(1)

xk,k0,1,2,

这就是Altken公式。

 

3.牛顿(Newton)法(牛顿切线法)

1)牛顿法的基本思想:

f(x)0是非线性方程,一般较难解决,多采用线性化方法.

f(x)

f(x

)f'(x

)(x

x

f''()(xx)2

0

0

0

2!

0

记:

P(x)f(x0)

f'(x0)(xx0)

P(x)是一次多项式,用P(x)

0作为f(x)

0的近似方程.

P(x)

f(x0)f'(x0)(x

x0)

0的解为

xx0

f(x0)

f'(x0)

(f'(x0)0)

记为x1,一般地,记

xk1

f(xk)

xk

k

0,1,2,

f'(xk)

即为牛顿法公式。

 

实验所用软件及版本:

MatlabR2012b

 

主要内容(要点):

 

分别用对分法、普通迭代法、松弛迭代法、Altken迭代法、牛顿切法线等5种方法,求方程txsin(x)的正的近似根,0t1.(建议取t0.5.)

 

实验过程记录(含基本步骤、主要程序清单及异常情况记录等):

 

1.对分法

symsxfx;

a=0.001;b=3;

fx=0.5*x-sin(x);

x=(a+b)/2;k=0;

ffx=subs(fx,'x',x);

ifffx==0;

disp(['therootis:

',num2str(x)])

elsedisp('kakbkf(xk)')

whileabs(ffx)>0.0001&a

disp([num2str(k),'',num2str(a),'',num2str(b),'',num2str(ffx)])

fa=subs(fx,'x',a);ffx=subs(fx,'x',x);

iffa*ffx<0

b=x;

else

a=x;

end

k=k+1;x=(a+b)/2;

end

disp([num2str(k),'',num2str(a),'',num2str(b),'',num2str(ffx)])

end

fprintf('所求的解是:

x=%f,迭代步数是:

%d/n',x,k)

 

【调试结果】

00.0013-0.24728

11.50053-0.24728

21.50052.25020.34721

31.87542.2502-0.016286

41.87542.06280.15002

51.87541.96910.062824

61.87541.92220.022239

71.87541.89880.0027165

81.88711.8988-0.0068499

91.89291.8988-0.002083

101.89291.89590.0003127

111.89441.8959-0.00088616

121.89511.8959-0.00028698

131.89511.89551.2794e-005

所求的解是:

x=1.895327,迭代步数是:

13

 

3.普通迭代法

 

symsxfxgx;

gx=sin(x)/0.5;fx=0.5*x-sin(x);

disp('kxf(x)')

x=1.1;k=0;

ffx=subs(fx,'x',x);

whileabs(ffx)>0.0001;

disp([num2str(k),'',num2str(x),'',num2str(ffx)]);

x=subs(gx,'x',x);ffx=subs(fx,'x',x);k=k+1;

end

disp([num2str(k),'',num2str(x),'',num2str(ffx)])

fprintf('所求的解是:

x=%f,迭代步数是:

%d/n',x,k)

 

【调试结果】

01.1-0.34121

11.7824-0.086485

21.95540.050739

31.8539-0.033238

41.92040.020677

51.879-0.013357

61.90570.0084433

71.8889-0.005416

81.89970.0034431

91.8928-0.0022017

101.89720.0014028

111.8944-0.00089584

121.89620.00057125

131.895-0.00036462

141.89580.00023259

151.8953-0.00014842

161.89569.4692e-005

 

所求的解是:

x=1.895610,迭代步数是:

16

 

3.松弛迭代法

symsfxgxxdgx;

gx=sin(x)*2;fx=0.5*x-sin(x);dgx=diff(gx,'x');

x=1.8;k=0;

ggx=subs(gx,'x',x);ffx=subs(fx,'x',x);dgxx=subs(dgx,'x',x);

disp('kxw')

whileabs(ffx)>0.0001;

w=1/(1-dgxx);

disp([num2str(k),'',num2str(x),'',num2str(w)])

x=(1-w)*x+w*ggx;k=k+1;

ggx=subs(gx,'x',x);ffx=subs(fx,'x',x);dgxx=subs(dgx,'x',x);

end

disp([num2str(k),'',num2str(x),'',num2str(w)])

fprintf('所求的解是:

x=%f,迭代步数是:

%d\n',x,k)

 

【调试结果】

kxw

01.80.68757

11.90160.60624

21.89550.60624

所求的解是:

x=1.895515,迭代步数是:

2

 

4.altken法

symsfxgxx;

gx=sin(x)*2;fx=0.5*x-sin(x);

disp('kxx1x2')

x=1.5;k=0;

ffx=subs(fx,'x',x);

whileabs(ffx)>0.0001;

u=subs(gx,'x',x);v=subs(gx,'x',u);

disp([num2str(k),'',num2str(x),'',num2str(u),'',num2str(v)])

x=v-(v-u)^2/(v-2*u+x);k=k+1;ffx=subs(fx,'x',x);

end

disp([num2str(k),'',num2str(x),'',num2str(u),'',num2str(v)])

fprintf('所求的解是:

x=%f,迭代步数是:

%d\n',x,k)

 

【调试结果】

k

x

x1

x2

0

1.51.9951.8227

1

1.86721.91281.8842

2

1.89521.89571.8954

3

1.89551.89571.8954

所求的解是:

x=1.895494,迭代步数是:

3

 

5.牛顿法

symsxfxgx;

fx=0.5*x-sin(x);gx=diff(fx,'x');

x1=0.8;x2=1.5;x3=4;k=0;

disp('kx1x2x3')

fx1=subs(fx,'x',x1);fx2=subs(fx,'x',x2);fx3=subs(fx,'x',x3);

gx1=subs(gx,'x',x1);gx2=subs(gx,'x',x2);gx3=subs(gx,'x',x3);

whileabs(fx1)>0.0001|abs(fx2)>0.0001|abs(fx3)>0.0001;

disp([num2str(k),'',num2str(x1),'',num2str(x2),'',num2str(x3)])x1=x1-fx1/gx1;x2=x2-fx2/gx2;x3=x3-fx3/gx3;k=k+1;fx1=subs(fx,'x',x1);fx2=subs(fx,'x',x2);fx3=subs(fx,'x',x3);gx1=subs(gx,'x',x1);gx2=subs(gx,'x',x2);gx3=subs(gx,'x',x3);

end

disp([num2str(k),'',num2str(x1),'',num2str(x2),'',num2str(x3)])

fprintf('所求的解是:

x1=%f,x2=%f,x3=%f,迭代步数:

%d\n',x1,x2,x3,k)

 

【调试结果】

kx1x2x3

00.81.54

1-0.813352.07661.6104

20.896791.91051.97

3-1.78561.89561.8984

4-1.90371.89551.8955

5-1.89551.89551.8955

所求的解是:

x1=-1.895533,x2=1.895494,x3=1.895494,迭代步数:

5

 

【情况记录】

1.对分法简单,然而,若在是有几个零点时,只能算出其中一个零点,它不能求重根,

也不能求虚根.另一方面,即使在上有零点,也未必有。

这就限制了对

分法的使用范围。

对分法只能计算方程的实根。

对分法的收敛速度较慢,它常用来试

探实根的分布区间,或求根的近似值.

 

寻找满足定理条件的等价形式是难于做到的。

事实上,如果为的零点,若能构造等价

形式而,由的连续性,一定存在的邻域,其上有

,这时若初值迭代也就收敛了。

由此构造收敛迭代式有两个要

素,其一,等价形式应满足;其二,初值必须取自的充分小邻域,这个

邻域大小决定于函数,及做出的等价形式。

 

松弛法的加速效果明显,甚至不收敛的迭代函数经加速后也能获得收敛.

 

松弛法要先计算'(xk),在使用中有时不方便,而Altken公式,它的加速效果是十分明显的,它同样可使不收敛的迭代格式获得收敛。

 

5.牛顿法的收敛速度明显快于对分法。

牛顿法也有局限性。

牛顿法至少是二阶收敛的,而在重

根附近,牛顿法是线性收敛的,且重根收敛很慢。

另外,在牛顿法中,选取适当迭代初始值

是求解的前题,当迭代的初始值在某根的附近时迭代才能收敛到这个根,有时会发生从一个

根附近跳向另一个根附近的情况,尤其在导数数值很小时。

 

实验结果报告及实验总结:

调试结果:

1.对分法

所求的解是:

x=1.895327,迭代步数是:

13

 

2.普通迭代法

所求的解是:

x=1.895610,迭代步数是:

16

 

3.松弛迭代法

所求的解是:

x=1.895515,迭代步数是:

2

 

4.altken法

所求的解是:

x=1.895494,迭代步数是:

3

 

5.牛顿法

所求的解是:

x1=-1.895533,x2=1.895494,x3=1.895494,迭代步数:

5

 

总结:

在调试和运行的过程中,选取不同的等价方程和不同的初值,得到的结果不同,精确度也有相差异。

但五种方法所得的数值相近,基本在误差允许范围内。

且从运行结果知,相对而言,二分法和

普通迭代法的收敛速度过慢,不是最佳方法。

松弛迭代法和altken法的加速效果是明显的。

牛顿法的收敛速度也较快,但需要得出原函数的导函数,在某些情况下是不可行的。

故在这五种方法中,相较而言,松弛迭代法和altken法更为可行。

 

思考与深入:

 

通过本实验加深了解了求方程实根的近似值的有效方法。

学习并掌握了用对分法、迭代法、牛

顿切线法求方程近似根的基本过程。

并认识到对于不同的题目,需要确定好求根区间[a,b],

或给出某根的近似值x0.这对于结果的精度有很大影响。

同时,对于自身,要深刻了解对分法、迭代法、牛顿切线法求方程近似根四种方法的基本思想,熟练掌握编程语句,更快更准确且熟练地设计出程序。

 

教师评语:

 

10

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 小学教育 > 语文

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2