资源描述:
《数值计算方法编程作业(C语言版).doc》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、1:第二章(1)二分法求解非线性方程:#include#include#definef(x)((x*x-1)*x-1)voidmain(){floata,b,x,eps;intk=0;printf("intputeps");/*容许误差*/scanf("%f",&eps);printf("a,b=");for(;;){scanf("%f,%f",&a,&b);if(f(a)*f(b)>=0)/*判断是否符合二分法使用的条件*/printf("二分法不可使用,请重新输入:");elsebreak;}do{x=(a+b)/2;
2、k++;if(f(a)*f(x)<0)/*如果f(a)*f(x)<0,则根在区间的左半部分*/b=x;elseif(f(a)*f(x)>0)/*否则根在区间的右半部分*/a=x;elsebreak;}while(fabs(b-a)>eps);/*判断是否达到精度要求,若没有达到,继续循环*/x=(a+b)/2;/*取最后的小区间中点作为根的近似值*/printf("Therootisx=%f,k=%d",x,k);}运行结果:intputeps0.00001a,b=2,-5Therootisx=1.324721,k=20Pressanykeytocontinu
3、e总结:本题关键在于两个端点的取值和误差的判断,此程序较容易。二分法收敛速度较快,但缺点是只能求解单根。(2)牛顿法求解非线性方程:#include#includefloatf(floatx)/*定义函数f(x)*/{return((-3*x+4)*x-5)*x+6;}floatf1(floatx)/*定义函数f(x)的导数*/{return(-9*x+8)*x-5;}voidmain(){floateps,x0,x1=1.0;printf("inputeps:");scanf("%f",&eps);/*输入容许误差*/do{x0
4、=x1;/*准备下一次迭代的初值*/x1=x0-f(x0)/f1(x0);/*牛顿迭代*/}while(fabs(x1-x0)>eps);/*当满足精度,输出近似根*/printf("x=%f",x1);}程序运行结果:x=1.265328总结:关键是牛顿迭代的应用,程序中最大缺点是函数及其导数已唯一给出确定不可求的随意函数的根,牛顿法比二分法收敛快,可以求重根。2:第三章(1)列主元素消去法求解线性方程:#include#include#defineN20usingnamespacestd;voidload();floata[N
5、][N];intm;intmain(){inti,j;intc,k,n,p,r;floatx[N],l[N][N],s,d;cout<<"下面请输入未知数的个数m=";cin>>m;cout<fabs(a[i][i]))?j:i;/*找列最大元素*/for(n=0;n6、or(p=0;p=0;i--){d=0;for(j=i+1;j7、"<>a[i][j];}运行结果:下面请输入未知数的个数m=3请按顺序输入增广矩阵a:12345108469246920-6.5-11.255.50-1.86265e-008-0.1153853.92308该方程组的解为:x[0]=-9.99999x[1]=58x[2]=-34Pr