东南大学数值分析上机报告完整版

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

数值分析上机实验报告

目录

1.chapter1舍入误差及有效数 (1)

2.chapter2Newton迭代法 (3)

3.chapter3线性代数方程组数值解法-列主元Gauss消去法 (7)

4.chapter3线性代数方程组数值解法-逐次超松弛迭代法 (8)

5.chapter4多项式插值与函数最佳逼近 (10)

1.chapter1舍入误差及有效数

1.1题目

设S N =∑1

j 2−1

N j=2

,其精确值为

)1

1

123(21+--N N 。 (1)编制按从大到小的顺序11

13112122

2-+⋯⋯+-+-=N S N ,计算S N 的通用程序。 (2)编制按从小到大的顺序1

21

1)1(1112

22-+⋯⋯+--+-=

N N S N ,计算S N 的通用程序。 (3)按两种顺序分别计算64210,10,10S S S ,并指出有效位数。(编制程序时用单精度)

(4)通过本次上机题,你明白了什么? 1.2编写相应的matlab 程序 clear;

N=input('please input N:'); AValue=((3/2-1/N-1/(N+1))/2); sn1=single(0); sn2=single(0); for i=2:N

sn1=sn1+1/(i*i-1); %从大到小相加的通用程序% end

ep1=abs(sn1-AValue); for j=N:-1:2

sn2=sn2+1/(j*j-1); %从小到大相加的通用程序% end

ep2=abs(sn2-AValue);

fprintf('精确值为:%f\n',AValue);

fprintf('从大到小的顺序累加得sn=%f\n',sn1); fprintf('从大到小相加的误差ep1=%f\n',ep1); fprintf('从小到大的顺序累加得sn=%f\n',sn2); fprintf('从小到大相加的误差ep2=%f\n',ep2); disp('================================='); 1.3matlab 运行程序结果 >> chaper1

please input N:100 精确值为:0.740050

从大到小的顺序累加得sn=0.740049 从大到小相加的误差ep1=0.000001 从小到大的顺序累加得sn=0.740050 从小到大相加的误差ep2=0.000000 >> chaper1

please input N:10000 精确值为:0.749900

从大到小的顺序累加得sn=0.749852 从大到小相加的误差ep1=0.000048 从小到大的顺序累加得sn=0.749900 从小到大相加的误差ep2=0.000000

please input N:1000000

精确值为:0.749999

从大到小的顺序累加得sn=0.749852 从大到小相加的误差ep1=0.000147 从小到大的顺序累加得sn=0.749999 从小到大相加的误差ep2=0.000000

1.4结果分析以及感悟

按照从大到小顺序相加的有效位数为:5,4,3。按照从小到大顺序相加的和的有效位数为:6,6,6。 从程序的输出误差结果可以看出,按照不同的顺序相加造成的误差限是不同的,按照从大到小相加的顺序就是一个病态问题,而按照从小到大顺序相加的误差很小,并且在从大到小顺序相加的误差随着n 的增大而增大。因此,采取从小到大的顺序累加得到的结果更加精确。

2.chapter2Newton 迭代法

2.1题目

(1)给定初值0x 及容许误差ε,编制牛顿法解方程f(x)=0的通用程序。

(2)给定方程03

)(3

=-=x x

x f ,易知其有三个根3,0,3321=

*=*-=*x x x

○1由牛顿方法的局部收敛性可知存在,0>δ当),(0δδ+-∈x 时,Newton 迭代序列收敛于根x2*。试确定尽可能大的δ。

○2试取若干初始值,观察当),1(),1,(),,(),,1(),1,(0+∞+-----∞∈δδδδx 时Newton 序列的收敛性以及收敛于哪一个根。

(3)通过本上机题,你明白了什么? 2.2编写相应的matlab 程序 定义f(x)函数 function F=fu(x) F=x^3/3-x; end

定义f(x)的导函数 function F=dfu(x) F=x*x-1; end

求根的通用程序 clear;

x0=input('请输入初始值x0:'); ep=input('请输入容许误差:'); flag=1;

while flag==1

x1=x0-fu(x0)/dfu(x0); if abs(x1-x0)<=ep flag=0; end

end

fprintf('方程的一个近似解为:%f\n',x0);

求sigma的通用程序

clear;

eps=input('请输入搜索精度:');

ep=input('请输入容许误差:');

flag=1;

k=0;

x0=0;

while flag==1;

sigma=k*eps;

x0=sigma;

k=k+1;

m=0;

flag1=1;

while flag1==1&&m<=10^3

x1=x0-fu(x0)/dfu(x0);

if abs(x1-x0)

flag1=0;

end

m=m+1;

x0=x1;

end

if flag1==1||abs(x0)>=ep

flag=0;

end

end

fprintf('最大的sigma值为:%f\n',sigma);

2.3运行结果

寻找最大的sigma值

主要是在0的基础上,不断的增加步长,带入Newton公式,验证该值是否收敛于0,不断的循环,最后得到最小的不收敛于0的sigma值,此时也为最大满足收敛于0的最大的sigma值。改变不同的步长,分别得到不同的sigma值,取其中的最小值,即为满足条件的最大的sigma值。

程序相应的运行结果如下:

>> chapter2_2

请输入搜索精度:10^-6

请输入容许误差:10^-6

最大的sigma值为:0.774597

>> chapter2_2

请输入搜索精度:10^-4

请输入容许误差:10^-6

最大的sigma值为:0.774600

>> chapter2_2

请输入搜索精度:10^-2

请输入容许误差:10^-6

最大的sigma值为:0.780000

相关文档
最新文档