数值分析 课程设计1.docx
《数值分析 课程设计1.docx》由会员分享,可在线阅读,更多相关《数值分析 课程设计1.docx(10页珍藏版)》请在冰豆网上搜索。
![数值分析 课程设计1.docx](https://file1.bdocx.com/fileroot1/2023-1/23/4b60e222-2367-48f4-a199-7ce092e48746/4b60e222-2367-48f4-a199-7ce092e487461.gif)
数值分析课程设计1
数值分析课程设计
误差的影响
指导教师
学院名称
理学院
专业名称
提交日期
2013年6月17日
一、问题的提出
在数值分析中,总是假定数学模型能正确的反映客观实际问题,因而不研究模型误差和观察误差,误差主要分为截断误差和舍入误差。
利用牛顿插值多项式可知f(x)=Pn(x)+Rn(x),已知f(x)=ex,Pn(x)=
Rn(x)为误差。
于是我们就要讨论误差在对算法过程中会造成怎么样的影响,我们又将如何改进算法以致能更好的到达精准度。
二、实验内容
1、模型一:
a)根据实验要求自定义函数Exp_Calculate(x),
对于给定点x,若在最大阶数MAXN=20的限制内能得到达到精度EPS=0.00001要求的函数值,则返回计算所得函数值;若否,则返回-1.(注:
可直接调用C语言或MATLAB的内部函数’exp(x)’计算精确值ex.)
b)依次输入x=1,2,3,4,5,6,-1,-2,-3,-4,-5,-6,记录下所有输入值和相应的返回值。
若返回值为-1,则
c)写出泰勒展开式分析此种情况的特点;
d)编写一个测试程序,以检查函数Exp_Calculate(x)中求和过程
的每一步结果,输入各个项(如第m项)
的值以及
的值,并由此分析造成返回值为-1的原因。
2、模型二:
a)根据原因重新定义函数Exp_Test2(x),
b)依次输入x=1,2,3,4,5,6,-1,-2,-3,-4,-5,-6,记录下所有输入值和相应的返回值。
三、实验结果及分析:
模型一结果图表:
x
i
-6
-5
-4
-3
-2
-1
0
0
1.0000
1.0000
1.0000
1.0000
1.0000
1.0000
0.0000
1
-6.0000
-5.0000
-4.0000
-3.0000
-2.0000
1.0000
2
18.0000
12.5000
8.0000
4.5000
2.0000
0.5000
3
-36.0000
-20.8333
-10.6667
-4.5000
-1.3333
0.1667
4
54.0000
26.0417
10.6667
3.3750
0.6667
0.0417
5
-64.8000
-26.0417
-8.5333
-2.0250
-0.2667
0.0083
6
64.8000
21.7014
5.6889
1.0125
0.0889
0.0014
7
-55.5429
-15.5010
-3.2508
-0.4339
-0.0254
0.0002
8
41.6571
9.6881
1.6254
0.1627
0.0063
0.0000
9
-27.7714
-5.3823
-0.7224
-0.0542
-0.0014
0.0000
10
16.6629
2.6911
0.2890
0.0163
0.0003
11
-9.0888
-1.2232
-0.1051
-0.0044
-0.0001
12
4.5444
0.5097
0.0350
0.0011
0.0000
13
-2.0974
-0.1960
-0.0108
-0.0003
14
0.8989
0.0700
0.0031
0.0001
15
-0.3596
-0.0233
-0.0008
-0.0000
16
0.1348
0.0073
0.0002
17
-0.0476
-0.0021
-0.0000
18
0.0159
0.0006
0.0000
19
-0.0050
-0.0002
返回值
-1
-1
0.0183
0.0498
0.1353
0.3679
1.0000
x
i
1
2
3
4
5
6
0
1.0000
1.0000
1.0000
1.0000
1.0000
1.0000
1
1.0000
2.0000
3.0000
4.0000
5.0000
6.0000
2
0.5000
2.0000
4.5000
8.0000
12.5000
18.0000
3
0.1667
1.3333
4.5000
10.6667
20.8333
36.0000
4
0.0417
0.6667
3.3750
10.6667
26.0417
54.0000
5
0.0083
0.2667
2.0250
8.5333
26.0417
64.8000
6
0.0014
0.0889
1.0125
5.6889
21.7014
64.8000
7
0.0002
0.0254
0.4339
3.2508
15.5010
55.5429
8
0.0000
0.0063
0.1627
1.6254
9.6881
41.6571
9
0.0000
0.0014
0.0542
0.7224
5.3823
27.7714
10
0.0003
0.0163
0.2890
2.6911
16.6629
11
0.0001
0.0044
0.1051
1.2232
9.0888
12
0.0000
0.0011
0.0350
0.5097
4.5444
13
0.0003
0.0108
0.1960
2.0974
14
0.0001
0.0031
0.0700
0.8989
15
0.0000
0.0008
0.0233
0.3596
16
0.0002
0.0073
0.1348
17
0.0000
0.0021
0.0476
18
0.0000
0.0006
0.0159
19
0.0002
0.0050
返回值
2.7183
7.3891
20.0855
54.5981
-1
-1
原因分析:
模型一中造成返回‘-1’的原因是:
总误差EXP由截断误差(R)和舍入误差(∈)两部分组成,已知x为精确数,则在计算ex.展开式的各项数值后,由于保留小数点后四位小数而引起舍入误差,他们累加起来和截断误差的大小最终会影响最终结果的准确度。
由表中可知,例如当x=6时,ex=
其截断误差为Rn=exo.xn+1/(n+1)!
(0<θ<1),有以下估计公式Rn<6(n+1)/(n+1)!
取n=20,则R20(x)=620/20!
=1.5027972×10^(-3),截断误差偏大以致超出了预定精度。
当x=6时,exp(6)=403.4287935eps=Σ
—exp(6)
M
0
1
2
3
4
1
7
25
61
115
Eps
-402.4288
-396.4288
-378.4288
-342.4288
-288.4288
M
5
6
7
8
9
179.8000
244.6000
300.1429
341.8000
369.5714
Eps
-223.6288
-158.8288
-103.2859
-61.6288
-33.8574
M
10
11
12
13
14
386.2343
395.3231
399.8675
401.9650
402.8639
Eps
-17.1945
-8.1057
-3.5613
-1.4638
-0.5649
M
15
16
17
18
19
403.2234
403.3582
403.4058
403.4217
403.4267
Eps
-0.2054
-0.0706
-0.0230
-0.0071
-0.0021
而当x=-6时,ex=
,从表中可以看出,
以正负相隔的形式出现,i!
不断增大,以致产生书page12的情况,当两
个相近数相减时,致使误差也很大。
ε=3.9199e-005
列出表格
当x=-6时,exp(-6)=2.4787×10^-3,eps=Σ
—exp(-6)
M
0
1
2
3
4
1
-5
13
-23
33.8000
Eps
0.9975
-5.0025
12.9975
-23.0025
-33.8000
M
5
6
7
8
9
31
-24.5429
17.1143
-10.6571
6.0057
Eps
30.9975
-24.5453
17.1118
-10.6596
6.0032
M
10
11
12
13
14
-3.0831
1.4613
-0.6361
0.2628
-0.0968
Eps
-3.0856
1.4588
-0.6386
0.2603
-0.0993
M
15
16
17
18
19
0.0380
-0.0095
0.0063
0.0013
0.0028
Eps
0.0356
-0.0120
0.0038
-0.0012
3.3667e-004
模型二结果与分析:
X
-6
-5
-4
-3
-2
-1
0
1
2
3
4
5
6
S
0.0025
0.0067
0.0183
0.0498
0.1353
0.3679
1
2.7183
7.3891
20.0855
54.5981
148.4132
403.4288
原因分析:
这次模型二的基本思路为改变算法。
其中先讨论x的正负值,当x>0时,将ex=e×e×e……×e(一共x个)先计算e^1=
的近似值,根据x的p次幂的相对误差是x的本身相对的p倍,当x=1的时候ex误差极其的小,当乘以x的时候其相对误差也是十分的小的,以致能达到精准度。
当x<0时,根据page17例1.9得到e(-x)的部分级数和,然后求倒数。
以致舍入误差限减少。
四、关于本设计的体会
做了这次程序设计,我才发现自己的知识层面是如何的浅薄。
在建立模型一的时候对于我而言是比较简单的,但是到了如何建立模型二的时候就让我很难继续前进。
刚开始的时候分析误差偏大的原因主要是以为只是截断误差太大了,想把maxN直接变大,但这是不符合题目要求的,于是我进一步想把绝对误差改为相对误差,这时候当x>0时,返回值便可以输出近似值。
但是由于当x<0零时,两个近似数相减的话,其相对误差更大,一直不能成功。
后来我查阅书本看到了page17的例1.9,这让我想出先讨论x是否大于零,然后在进行运算。
总的来说,这次实验中主要的困难在于:
1)难以正确分析返回值为‘-1’的原因,而这偏偏是最重要的,后来通过查阅书本以及询问同学才慢慢的把它弄懂;2)在弄懂了原因之后,建立模型二是最大的问题了,我尝试把之前所想的尽量柔和在一起,但是程序一直存在错误,弄得自己都快要放弃了,后来还是一位热心的同学帮我改进了程序的一些错误,才让我真正的完成设计。
通过这次实验是我更了解了误差的计算以及影响,以及让我意识自己在编写程序一些致命却完全可以更改的错误,今后我会更加努力的学习matlab。
五、参考文献
[1]史万明,数值分析[M],北京,理工大学出版社,2010-4
[2]李庆扬,数值分析(第四版)[M],北京,清华大学出版社,2008-12
六、附录
模型一:
functionExp_Calculate(x)%定义一个函数
N=20;
sum=1;
i=1;
fori=1:
N
z(i)=factorial(i);%计算出i!
y(i)=x^i/z(i);%计算
sum=sum+y(i);%求和,得到泰勒展开式级数和
end
if(abs(sum-exp(x))<=10^-5)%限定误差为10^-5
sum,y(i),%输出结果
else
sum=-1,%不符合条件输出sum=-1
end
end
模型二:
functionExp_text2(x)%定义函数
sum=1;
N=20;
ifx>0%讨论x是否大于零
fori=1:
(N-1)
z(i)=factorial(i);
sum=sum+1/z(i);%先计算e^1
if(abs(sum^x-exp(x))<10^-5)%计算e^x
sum=sum^x;
break;
end
end
else%x小于零的情况讨论
fori=1:
(N-1)
z(i)=factorial(i);
y(i)=(-x)^i/z(i);%先计算e^(-x)部分和级数
sum=sum+y(i);
if(abs(1/sum-exp(x))<10^-5)
break;
end
end
sum=1/sum;%最后求其倒数
end
if(abs(1/sum-exp(x))>=10^-5)
sum=--1;
end
sum,
七、教师评价