数值分析上机题参考答案

数值分析上机题参考答案
数值分析上机题参考答案

如有帮助欢迎下载支持

数值分析上机题

姓名:陈作添 学号:040816

习题1

20.(上机题)舍入误差与有效数 设2

21

1N

N j S j ==-∑

,其精确值为1311221N N ??-- ?+??

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

22

111

21311

N S N =

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

N S N N =+++----,计算N

S 的通用程序。 (3)按两种顺序分别计算210S ,410S ,610S ,并指出有效位数。(编制程序时用单精度) (4)通过本上机题,你明白了什么? 按从大到小的顺序计算N S 的通用程序为: #include

float sum(float N) { float j,s,sum=0; for(j=2;j<=N;j++) { s=1/(j*j-1); sum+=s; } return sum; } 按从小到大的顺序计算N S 的通用程序为: #include float sum(float N) {

float j,s,sum=0; for(j=N;j>=2;j--) {

s=1/(j*j-1); sum+=s; }

return sum; }

从大到小的顺序的值

从小到大的顺序的值

精确值 有效位数 从大到小 从小到大

210S 0.740049 0.74005 0.740049 6 5 410S 0.749852 0.7499 0.7499 4 4 610S

0.749852

0.749999

0.749999

3

6

通过本上机题,看出按两种不同的顺序计算的结果是不相同的,按从大到小的顺序计算的值与精确值有较大的误差,而按从小到大的顺序计算的值与精确值吻合。从大到小的顺序计算得到的结果的有效位数少。计算机在进行数值计算时会出现“大数吃小数”的现象,导致计算结果的精度有所降低,我们在计算机中进行同号数的加法时,采用绝对值较小者先加的算法,其结果的相对误差较小。

习题2

20.(上机题)Newton 迭代法

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

(2)给定方程3()/30f x x x =-=,易知其有三个根13x *=-,20x *=,33x *

=。

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

。试确定尽可能大的δ。

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

(3)通过本上机题,你明白了什么? 解:(1)编制的通用程序: #include #include

#define eps 0.000001 /给定容许误差 float f(float x) //定义函数f(x) { float f; f=x*x*x/3-x; //f(x)的表达式; return(f); }

float df(float x) //定义函数df(x),计算f(x)的导函数 { float df; df=x*x-1; //f(x)导函数的表达式; return (df); }

void main(void)

{ float x0,x1,a; int k=0;

cout<<"请输入初值x0:"; cin>>x0; do { a=-f(x0)/df(x0); x1=x0+a; k++; x0=x1; }

while(fabs(a)>eps); cout<

//输出迭代的次数和根值

}

(2)计算迭代序列收敛于根2x *

的尽可能大的δ的函数为: #include #include

void delay(int n) //定义延时函数 {for(n=10000;n>0;n--);} #define eps 0.000001

float f(float x) //定义函数f(x) { float f; f=x*x*x/3-x; //f(x)的表达式;

return(f);

}

float df(float x) //定义函数df(x),计算f(x)的导函数 { float df; df=x*x-1; //f(x)导函数的表达式; return (df); }

相关主题
相关文档
最新文档