东南大学数值分析上机题答案

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

数值分析上机题

第一章

17.(上机题)舍入误差与有效数 设∑=-=

N

j N j S 2

2

11

,其精确值为)111-23(21+-N N 。 (1)编制按从大到小的顺序1

-1

···1-311-21222N S N +

++=,计算N S 的通用程序;

(2)编制按从小到大的顺序1

21

···1)1(111

222-++--+

-=N N S N ,计算N

S 的通用程序;

(3)按两种顺序分别计算210S ,410S ,610S ,并指出有效位数(编制程序时用单精度); (4)通过本上机题,你明白了什么?

解: 程序:

(1)从大到小的顺序计算1

-1

···1-311-21222N S N +++=

function sn1=fromlarge(n) %从大到小计算sn1

format long ; sn1=single(0); for m=2:1:n

sn1=sn1+1/(m^2-1); end end

(2)从小到大计算1

21

···1)1(111

2

22

-++--+-=

N N S N function sn2=fromsmall(n) %从小到大计算sn2

format long ; sn2=single(0); for m=n:-1:2

sn2=sn2+1/(m^2-1); end end (3)

总的编程程序为: function p203()

clear all

format long;

n=input('please enter a number as the n:') sn=1/2*(3/2-1/n-1/(n+1));%精确值为sn

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

sn1=fromlarge(n);

fprintf('从大到小计算的值为%f\n',sn1);

sn2=fromsmall(n);

fprintf('从小到大计算的值为%f\n',sn2); function sn1=fromlarge(n) %从大到小计算sn1 format long;

sn1=single(0);

for m=2:1:n

sn1=sn1+1/(m^2-1);

end

end

function sn2=fromsmall(n) %从小到大计算sn2 format long;

sn2=single(0);

for m=n:-1:2

sn2=sn2+1/(m^2-1);

end

end

end

运行结果:

从而可以得到

N值真值顺序值有效位数

2 100.740050 从大到小0.740049 5

从小到大0.740050 6

4 100.749900 从大到小0.749852 3

从小到大0.749900 6

6 100.749999 从大到小0.749852 3

从小到大0.749999 6

(4)感想:

通过本上机题,我明白了,从小到大计算数值的精确位数比较高而且与真值较为接近,而从大到小计算数值的精确位数比较低。机器数在进行加法运算时,用从大到小的顺序容易出现

大数吃小数的情况,容易产生较大的误差,是因为对于相加的两个数值,计算机首先提供与大数相一致的位数,此时将小数的尾数向右移位,并进行四舍五入,之后对尾数进行依次相加。从大到小时,越往后计算,相加的数越小,从而出现大数吃小数的情况。相比之下。从小到大计算时,每次小数与大数相加,都会增加位数,从而精确度比较高。

第二章

20.(上机题)Newton 迭代法

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

(2)给定方程x x x f -=3/)(3

,易知其有三个根*1x =-3,*2x =0,*

3x =3。

①有Newton 方法的局部收敛性可知存在δ>0,当0x ∈(-δ,δ)时Newton 迭代序列收敛于根*

2x ,试确定尽可能大的δ;

②试取若干初始值,观察当0x ∈(-∞,-1),(-1,-δ),(-δ,δ),(δ,1),(1,+∞)时Newton 序列是否收敛以及收敛于哪一个根。 (3)通过本上机题,你明白了什么? 解:

(1)程序

先编写函数function 文件: 文件fx.m

%定义函数f(x) function Fx=fx(x) Fx=x^3/3-x;

文件dfx.m

%定义导函数df(x)% function fx=dfx(x) fx=x^2-1;

接下来是具体步骤

文件newton1.m 求尽可能大的delta 值

%%课本56页计算最大delta 值 clear flag=1; k=1; x0=0;

while flag==1

delta=k*10^-6;

x0=delta;

k=k+1;

m=0;

flag1=1;

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

x1=x0-fx(x0)/dfx(x0);

if abs(x1-x0)<10^-6

flag1=0;

end

m=m+1;

x0=x1;

end

if flag1==1||abs(x0)>=10^-6

flag=0;

end

end

fprintf('%f\n',delta);

文件newton2.m求方程的根

%%课本56页newton法求方程的根,确定收敛于哪个根

format long;

ef=1e-6;

k=0;

x0=input('please enter the initial number as the x0:'); while k<1000

x1=x0-fx(x0)/dfx(x0);

if abs(x1-x0)

break

end

x0=x1;

k=k+1;

end

fprintf('方程的根为%f\n',x0);

相关文档
最新文档