数学实验报告样本.docx
《数学实验报告样本.docx》由会员分享,可在线阅读,更多相关《数学实验报告样本.docx(32页珍藏版)》请在冰点文库上搜索。
![数学实验报告样本.docx](https://file1.bingdoc.com/fileroot1/2023-6/19/a41098ce-0ae3-47d0-acc1-8fb5da2e2e48/a41098ce-0ae3-47d0-acc1-8fb5da2e2e481.gif)
数学实验报告样本
数学实验报告
实验序号:
3
日期:
2013年12月
14日
班级
应数一班
姓名陈菲
学号
1101114209
实验
求代数方程的近似根
名称
问题背景描述:
求代数方程f(x)0的根是最常见的数学问题之一,当f(x)是一次多项式时,称f(x)0
为线性方程,否则称之为非线性方程.
当f(x)0是非线性方程时,由于f(x)的多样性,尚无一般的解析解法可使用,但如果
对任意的精度要求,能求出方程的近似根,则可以认为求根的计算问题已经解决,至少能满足实际要求.
本实验介绍一些求方程实根的近似值的有效方法,要求在使用这些方法前先确定求根区间
[a,b],或给出某根的近似值x0.
实验目的:
1.了解代数方程求根求解的四种方法:
对分法、迭代法、牛顿切线法
2.掌握对分法、迭代法、牛顿切线法求方程近似根的基本过程。
1
实验原理与数学模型:
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
即
2
可知,{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,
3
这就是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.)
4
实验过程记录(含基本步骤、主要程序清单及异常情况记录等):
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
5
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)
6
【调试结果】
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)
7
【调试结果】
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.牛顿法的收敛速度明显快于对分法。
牛顿法也有局限性。
牛顿法至少是二阶收敛的,而在重
根附近,牛顿法是线性收敛的,且重根收敛很慢。
另外,在牛顿法中,选取适当迭代初始值
是求解的前题,当迭代的初始值在某根的附近时迭代才能收敛到这个根,有时会发生从一个
根附近跳向另一个根附近的情况,尤其在导数数值很小时。
8
实验结果报告及实验总结:
调试结果:
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.这对于结果的精度有很大影响。
同时,对于自身,要深刻了解对分法、迭代法、牛顿切线法求方程近似根四种方法的基本思想,熟练掌握编程语句,更快更准确且熟练地设计出程序。
9
教师评语:
10