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

上传人:b****0 文档编号:285663 上传时间:2022-10-08 格式:DOCX 页数:27 大小:538.10KB
下载 相关 举报
东南大学数值分析上机题答案.docx_第1页
第1页 / 共27页
东南大学数值分析上机题答案.docx_第2页
第2页 / 共27页
东南大学数值分析上机题答案.docx_第3页
第3页 / 共27页
东南大学数值分析上机题答案.docx_第4页
第4页 / 共27页
东南大学数值分析上机题答案.docx_第5页
第5页 / 共27页
点击查看更多>>
下载资源
资源描述

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

《东南大学数值分析上机题答案.docx》由会员分享,可在线阅读,更多相关《东南大学数值分析上机题答案.docx(27页珍藏版)》请在冰豆网上搜索。

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

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

数值分析上机题

第一章

17.(上机题)舍入误差与有效数

,其精确值为

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

,计算

的通用程序;

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

,计算

的通用程序;

(3)按两种顺序分别计算

并指出有效位数(编制程序时用单精度);

(4)通过本上机题,你明白了什么?

解:

程序:

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

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

formatlong;

sn1=single(0);

form=2:

1:

n

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

end

end

(2)从小到大计算

functionsn2=fromsmall(n)%从小到大计算sn2

formatlong;

sn2=single(0);

form=n:

-1:

2

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

end

end

(3)

总的编程程序为:

functionp203()

clearall

formatlong;

n=input('pleaseenteranumberasthen:

')

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);

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

formatlong;

sn1=single(0);

form=2:

1:

n

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

end

end

functionsn2=fromsmall(n)%从小到大计算sn2

formatlong;

sn2=single(0);

form=n:

-1:

2

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

end

end

end

运行结果:

从而可以得到

N值

真值

顺序

有效位数

0.740050

从大到小

0.740049

5

从小到大

0.740050

6

0.749900

从大到小

0.749852

3

从小到大

0.749900

6

0.749999

从大到小

0.749852

3

从小到大

0.749999

6

(4)感想:

通过本上机题,我明白了,从小到大计算数值的精确位数比较高而且与真值较为接近,而从大到小计算数值的精确位数比较低。

机器数在进行加法运算时,用从大到小的顺序容易出现大数吃小数的情况,容易产生较大的误差,是因为对于相加的两个数值,计算机首先提供与大数相一致的位数,此时将小数的尾数向右移位,并进行四舍五入,之后对尾数进行依次相加。

从大到小时,越往后计算,相加的数越小,从而出现大数吃小数的情况。

相比之下。

从小到大计算时,每次小数与大数相加,都会增加位数,从而精确度比较高。

 

第二章

20.(上机题)Newton迭代法

(1)给定初值

及容许误差ε,编制Newton法解方程

=0根的通用程序。

(2)给定方程

,易知其有三个根

=-

=0,

=

①有Newton方法的局部收敛性可知存在δ>0,当

(-δ,δ)时Newton迭代序列收敛于根

,试确定尽可能大的δ;

②试取若干初始值,观察当

(-∞,-1),(-1,-δ),(-δ,δ),(δ,1),(1,+∞)时Newton序列是否收敛以及收敛于哪一个根。

(3)通过本上机题,你明白了什么?

解:

(1)程序

先编写函数function文件:

文件fx.m

%定义函数f(x)

functionFx=fx(x)

Fx=x^3/3-x;

文件dfx.m

%定义导函数df(x)%

functionfx=dfx(x)

fx=x^2-1;

接下来是具体步骤

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

%%课本56页计算最大delta值

clear

flag=1;

k=1;

x0=0;

whileflag==1

delta=k*10^-6;

x0=delta;

k=k+1;

m=0;

flag1=1;

whileflag1==1&&m<=10^3

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

ifabs(x1-x0)<10^-6

flag1=0;

end

m=m+1;

x0=x1;

end

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

flag=0;

end

end

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

文件newton2.m求方程的根

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

formatlong;

ef=1e-6;

k=0;

x0=input('pleaseentertheinitialnumberasthex0:

');

whilek<1000

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

ifabs(x1-x0)

break

end

x0=x1;

k=k+1;

end

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

(2)运行结果

1求尽可能大的delta值

2判断收敛于哪个根。

已知有三个根,

=-

=0,

=

,(-1,-δ),(-δ,δ),(δ,1),(1,+∞)

(-∞,-1)

收敛于

=-

(-1,-δ)

可见部分收敛于

,部分收敛于

(-δ,δ)

可见,收敛于

=0。

(δ,1)

可见部分收敛于

,部分收敛于

(1,∞)

收敛于

(3)感想:

通过自行编写NEWTON的程序,加深了我对于NEWTON迭代法具体的运行方式、结果、利弊的了解。

在不同的区间上,根据给定的x0的不同,x会以不同的速度收敛于某个根,也会产生意想不到的跳动,如在(1,∞)区间是。

因此给定初值的重要性很大,即在某些区间上,收敛于某个根是由一定限制的,要取得合适的初值,才能够正确地求得收敛的根。

总体上来说,通过上机,巩固学习了第二章关于迭代的运用。

 

第三章

39.列主元Gauss消去法

对于某电路的分析,归结为求解线性方程组

其中

(1)编制解n阶线性方程组

的列主元高斯消去法的通用程序;

(2)用所编程序线性方程组

,并打印出解向量,保留5位有效数;

(3)本章编程之中,你提高了哪些编程能力?

解:

(1)程序

Gauss函数的function程序

%用列主元Gauss消去法求解线性方程组Ax=b

function[x]=gauss1(A,b)

n=length(b);

fork=1:

n

a=max(A(k:

n,k));

[pm]=find(A(:

k)==a);

ifp>k

A([p,k],:

)=A([k,p],:

);

b([p,k],:

)=b([k,p],:

);

end

m=A(k+1:

n,k)/A(k,k);

A(k+1:

n,k+1:

n)=A(k+1:

n,k+1:

n)-m*A(k,k+1:

n);

b(k+1:

n)=b(k+1:

n)-m*b(k);

A(k+1:

n,k)=zeros(n-k,1);

end

x=zeros(n,1);

x(n)=b(n)/A(n,n);

fori=n-1:

-1:

1

m=0;

fork=i+1:

1:

n

m=m+A(i,k)*x(k);

end

x(i)=(b(i)-m)/A(i,i);

end

end

下面是主程序的m文件

%%课本127页用列主元gauss消去法求解方程

clear

R=[31-13000-10000;-1335-90-110000;0-931-1000000;00-1079-30000-9;000-3057-70-50;0000-747-3000;00000-304100;0000-50027-2;000-9000-229];

V=[-15;27;-23;0;-20;12;-7;7;10];

I=gauss1(R,V);

I

(2)运行结果

(3)感想:

本次上机重点学习了列主元GUASS消去法的应用。

列主元GUASS消去法在进行第K步消元前,先选出位于第K列中位于对角线及其以下元素绝对值中的最大者,然后将他们互相交换,在进行接下来的一般消元过程。

较少了误差,而且一般保证舍入误差不增加,基本上是稳定的。

通过上机程序设计,加深了对该方法的了解,对于矩阵、编程的了解也更深入。

 

第四章

37.三次样条插值函数

(1)编制求第一型3次样条插值函数的通用程序

(2)已知汽车门曲线型值点的数据如下

i

0

1

2

3

4

5

6

7

8

9

10

0

1

2

3

4

5

6

7

8

9

10

2.51

3.30

4.04

4.70

5.22

5.54

5.78

5.40

5.57

5.70

5.80

端点条件为

=0.8,

=0.2,用所编程序求出门的三次样条差值函数S(x),打印出S(i+0.5),i=1,2,```9。

(1)程序(n是x的总个数)

%%样条插值函数

clear

clc

%%输入相关参数xi,yi

n=input('enterthen:

');%%输入X的总个数

xn=zeros(1,n);

yn=zeros(1,n);

xn(1,:

)=input('enterthex:

');

yn(1,:

)=input('enterthey:

');

%%求h,mu,lambda,d值

d=zeros(n,1);

h=zeros(1,n-1);

mu=zeros(1,n-2);%%

lambda=zeros(1,n-2);

f1=zeros(1,n-1);%%一阶导数

f2=zeros(1,n-2);%%二阶导数

dy0=input('enterthevalueofdy0:

');

dyn=input('enterthevalueofdyn:

');

fori=1:

n-1

h(i)=xn(i+1)-xn(i);

f1(i)=(yn(i+1)-yn(i))/h(i);

end

fori=1:

n-2

mu(i)=h(i)/(h(i)+h(i+1));

lambda(i)=1-mu(i);

end

d

(1)=6*(f1

(1)-dy0)/h

(1);

d(n)=6*(dyn-f1(n-1))/h(n-1);

fori=2:

n-1

f2(i)=(f1(i)-f1(i-1))/(xn(i+1)-xn(i-1));

d(i)=6*f2(i);

end

A=zeros(n);

A(1,2)=1;

A(n,n-1)=1;

fori=1:

n

A(i,i)=2;

end

fori=2;n-1

A(i,i-1)=mu(i-1);

A(i,i+1)=la

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

当前位置:首页 > 自然科学 > 生物学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1