数值计算方法实验1
- 格式:doc
- 大小:374.00 KB
- 文档页数:4
学院(系)名称:
)
()
()()
(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; } } } 运行结果: