数值计算方法实验1

  • 格式:doc
  • 大小:374.00 KB
  • 文档页数:4

下载文档原格式

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

学院(系)名称:

)

()

()()

(0101112x x x f x f x f x x ---

=

附录(源程序及运行结果):

一.二分法

#include

#include

double f(double x){

return x*x-x-1;

}

void main(){

float a=0,b=0,x=1,m,e;

int k;

while(f(a)*f(b)>0){

printf("请输入区间a,b的值。以及精度e\n");

scanf("%f,%f,%f",&a,&b,&e);

}

k=0;

if(f(a)*f(b)==0){

if(f(a)==0)

printf("使用二分法输出:a=%f,k=%d\n",a,k);

else

printf("使用二分法输出:b=%f,k=%d\n",b,k);

}

else{

while(f(a)*f(b)!=0){

m=(a+b)/2;

if(fabs(a-b)/2

printf("使用二分法输出:m=%f,k=%d\n",m,k);break;

}

else {if(f(a)*f(m)>0)

a=m;

else b=m;

k=k+1;

}

}

}

}

运行结果:

二.迭代法与牛顿迭代法

#include

#include

double f(double x){return exp(-x);}

double f1(double x){return (x*exp(x)-1);}

double ff(double x){return (exp(x)+x*exp(x));}

void diedaifa(double x0,double e,int N){

double x1;

int k=1;

while(k!=N){

x1=f(x0);

if(fabs(x1-x0)>=e){

k++;

if(k==N)

printf("迭代失败!\n");

x0=x1;

}

else{

printf("使用迭代法输出结果:%lf\n",x1);break;

}

}

}

void NDdiedaifa(double x0,double e,int N){

int k=1;

double x1;

while(k!=N){

if(ff(x0)==0)

printf("公式f(x)奇异!\n");

else{

x1=x0-f1(x0)/ff(x0);

if(fabs(x1-x0)>=e){

k++;

if(k==N)

printf("迭代失败!\n");

x0=x1;

}

else{

printf("使用牛顿迭代法输出结果:%lf\n",x1);break;

}

}

}

}

void main(){

double x0,e;

int N;

printf("请输入初值:");

scanf("%lf",&x0);

printf("精度:");

scanf("%lf",&e);

printf("以及判定迭代失败的最大次数N:");

scanf("%d",&N);

diedaifa(x0,e,N);

NDdiedaifa(x0,e,N);

}

运行结果:

四.双点弦截法

#include

#include

double f(double x){return (x*x*x+3*x*x-x-9);}

void main(){

double x0,x1,x2,e;

int N;

int k=1;

printf("请输入初值x0和x1:");

scanf("%lf,%lf",&x0,&x1);

printf("精度:");

scanf("%lf",&e);

printf("以及判定迭代失败的最大次数N:");

scanf("%d",&N);

while(k!=N){

x2=x1-f(x1)*(x1-x0)/(f(x1)-f(x0));

if(fabs(f(x2))>=e){

k++;

if(k==N)

printf("迭代失败!\n");

x0=x1;

x1=x2;

}

else{

printf("使用双点弦截法输出结果:%lf\n",x2);break;

}

}

}

运行结果: