计算方法第二章作业答案参考

习题二

1. 用二分法求方程0134

=+-x x 在区间【0.3,0.4】内的根,要求误差不超过

2102

1

-?。

#include #include

#define f(x) (x)*(x)*(x)*(x)-3*(x)+1 main() { double mid=0,x1=0.3,x2=0.4; while(1) {mid=(x1+x2)/2; if(f(mid)<0) {x2=mid;printf("x1=%10f,x2=%10f\n",x1,x2);} else if(f(mid)>0) {x1=mid;printf("x1=%10f,x2=%10f\n",x1,x2);} else break;} printf("因此,x=%f\n",mid); }

3.方程012

3=--x x 在1.5附近有根,把方程写成4种不同的等价形式,并建立相应的迭代公式。

(1)2

31x x +=,32

11n n x x +=+

#include #include

#define f(x) pow(1+(x)*(x),1.0/3) main() { float x1=1.3; int i; for(i=0;i<20;i++) { x1=f(x1); printf("%10f",x1); } printf("\n 因此,x=%f\n",x1); }

(2)211x x +

=,=+1n x 2

1

1n

x + #include

#include

#define f(x) 1+1.0/(x*x) main() {

float x1=1.3; int i;

for(i=0;i<20;i++) { x1=f(x1); printf("%10f",x1); }

printf("\n 因此,x=%f\n",x1);

}

(3)1

1

2

-=

x x ,=+1n x 1

1-n x

#include #include

#define f(x) pow(x-1,-1*1.0/2) main() { float x1=1.3; int i; for(i=0;i<20;i++) { x1=f(x1); printf("%10f",x1); } printf("\n 因此,x=%f\n",x1); }

(4)13

2

-=x x ,=

+1n x 13-n x

#include #include

#define f(x) pow((x)*(x)*(x)-1,1.0/2) main() { float x1=1.3; int i; for(i=0;i<20;i++) { x1=f(x1); printf("%10f",x1); } printf("\n 因此,x=%f\n",x1); }

4.用迭代法求02.05

=--x x 的正根,要求准确到小数点后第5位 解:

:

512

.0+=+x x n

#inc

lude #include

#define f(x) pow((x)+0.2,1.0/5) main() { float x1=4.0; int i; for(i=0;i<20;i++) { x1=f(x1); printf("%10f",x1); } printf("\n 因此,x=%.5f\n",x1); }

7.用迭代-加速公式求方程x

e

x -=在x=0.5附近的根,要求准确到小数点后第4位

解:迭代公式:

x

n e x -+=1,

n

n x q

q x q x ---=

+1111

#in

clude

#include #define f(x) exp(-1*x) main() {

float x1=1.0,a=0,q=-1*exp(-1*0.5); int i;

for(i=0;i<20;i++) { a=x1; x1=f(x1); x1=1.0/(1.0-q)*(x1)-q/(1.0-q)*(a); printf("%10f",x1); }

printf("\n 因此,x=%.4f\n",x1); }

8用埃特金加速法求方程13

-=x x 在区间【1,1.5】内的根,要求准确到小数点后第4位 解

公式:

1

31-=+x x n ,

1

3

12-=++n n x x ,

n

n n n n n n x x x x x x x +--=

++-++122

1

21

2#in

clude #include

#define f(x) (x)*(x)*(x)-1 main() { float x1=1.5,a=0,b=0; int i; for(i=0;i<20;i++) { b=x1; a=f(x1);

x1=f(a); x1=(x1*b-a*a)/(x1-2*a+b); printf("%10f",x1); }

printf("\n 因此,x=%.4f\n",x1);

}

9.用牛顿法求方程0133

=--x x 在20=x 附近的根,要求准确到小数点后第3位 解

迭代公式:

3

3132

31

----=+n n n n n x x x x x

#inc

lude

#include

#define f(x) (x)*(x)*(x)-3*(x)-1 #define f1(x) 3*(x)*(x)-3 main() {

float x1=2.2,a=0,b=0; int i;

for(i=0;i<20;i++) { a=f(x1); b=f1(x1); x1=x1-a/b; printf("%10f",x1); }

printf("\n 因此,x=%.3f\n",x1);

}

11.分别用单点和双点弦截法求方程013

=--x x 在【1,1.5】内的根,要求

51102

1

||-+?≤

-n n x x 解

)111()

111()1(1

13

1---------

=+n n n n x x x x

#incl

ude

#include

#define f(x) (x)*(x)*(x)-(x)-1

main()

{

float x1=1.5,a=0,b=0,c=0;

int i;

for(i=0;;i++)

{

c=x1;

a=f(1);

b=f(x1);

x1=1-(x1-1)/(b-a)*a;

printf("%10f",x1);

if(fabs(x1-c)<=0.000005) break;

}

printf("\n因此,x=%f\n",x1);

}

双点:)1()

1()1(3

13

1311---------

=---+n n n n n n n n n n x x x x x x x x x x #include #include

#define f(x) (x)*(x)*(x)-(x)-1 main() { float x1=1,x2=1.5,a=0,b=0,c=0; int i; for(i=0;;i++) { c=x1; a=f(x2); b=f(x1); x1=x1-(x1-x2)/(b-a)*b; printf("%10f",x1); if(fabs(x1-c)<=0.000005) break; } printf("\n 因此,x=%f\n",x1); }

相关文档
最新文档