数值计算方法编程作业C语言版汇总

上传人:206****923 文档编号:90751789 上传时间:2019-06-16 格式:DOC 页数:15 大小:60KB
返回 下载 相关 举报
数值计算方法编程作业C语言版汇总_第1页
第1页 / 共15页
数值计算方法编程作业C语言版汇总_第2页
第2页 / 共15页
数值计算方法编程作业C语言版汇总_第3页
第3页 / 共15页
数值计算方法编程作业C语言版汇总_第4页
第4页 / 共15页
数值计算方法编程作业C语言版汇总_第5页
第5页 / 共15页
点击查看更多>>
资源描述

《数值计算方法编程作业C语言版汇总》由会员分享,可在线阅读,更多相关《数值计算方法编程作业C语言版汇总(15页珍藏版)》请在金锄头文库上搜索。

1、1:第二章(1)二分法求解非线性方程:#include#include #define f(x) (x*x-1)*x-1) void main() float a,b,x,eps; int k=0; printf(intput epsn);/* 容许误差 */ scanf(%f,&eps); printf(a,b=n); for(;) scanf(%f, %f,&a ,&b); if(f(a)*f(b)=0) /* 判断是否符合二分法使用的条件 */ printf(二分法不可使用,请重新输入:n); else break; do x=(a+b)/2; k+; if(f(a)*f(x)0) /*

2、 如果f(a)*f(x)0) /* 否则根在区间的右半部分 */ a=x; else break; while(fabs(b-a)eps);/*判断是否达到精度要求,若没有达到,继续循环*/ x=(a+b)/2; /* 取最后的小区间中点作为根的近似值 */ printf(n The root is x=%f, k=%dn,x,k);运行结果:intput eps0.00001a,b=2,-5 The root is x=1.324721, k=20Press any key to continue总结:本题关键在于两个端点的取值和误差的判断,此程序较容易。二分法收敛速度较快,但缺点是只能求解

3、单根。 (2)牛顿法求解非线性方程:#include #include float f(float x) /* 定义函数f(x) */ return(-3*x+4)*x-5)*x+6; float f1(float x) /* 定义函数f(x)的导数 */ return (-9*x+8)*x-5; void main() float eps,x0,x1=1.0; printf(input eps:n); scanf(%f,&eps); /* 输入容许误差 */ do x0=x1; /* 准备下一次迭代的初值 */ x1=x0-f(x0)/f1(x0); /* 牛顿迭代 */ while(fab

4、s(x1-x0)eps); /*当满足精度,输出近似根*/ printf(x=%fn,x1);程序运行结果:x=1.265328总结:关键是牛顿迭代的应用,程序中最大缺点是函数及其导数已唯一给出确定不可求的随意函数的根,牛顿法比二分法收敛快,可以求重根。2:第三章(1)列主元素消去法求解线性方程:#include#include#define N 20using namespace std;void load();float aNN;int m;int main()int i,j;int c,k,n,p,r;float xN,lNN,s,d;coutm;coutendl;cout请按顺序输入增

5、广矩阵a:endl;load();for(i=0;im;i+) for(j=i;jfabs(aii)?j:i; /*找列最大元素*/for(n=0;nm+1;n+) s=ain; ain=acn; acn=s; /*将列最大数防在对角线上*/for(p=0;pm+1;p+)coutaipt;coutendl;for(k=i+1;km;k+) lki=aki/aii; for(r=i;r=0;i-) d=0;for(j=i+1;jm;j+)d=d+aij*xj;xi=(aim-d)/aii; /*求解*/cout该方程组的解为:endl;for(i=0;im;i+)coutxi=xit; /sy

6、stem(pause);return 0;void load()int i,j;for(i=0;im;i+)for(j=0;jaij;运行结果:下面请输入未知数的个数m=3请按顺序输入增广矩阵a:1 2 3 45 1 0 84 6 9 24 6 9 20 -6.5 -11.25 5.50 -1.86265e-008 -0.115385 3.92308该方程组的解为:x0=-9.99999 x1=58 x2=-34 Press any key to continue总结:列主元素消去法的目的是为了防止减去一个较小的数时大数淹没小数,而使结果产生较大误差,本程序关键在每次消元时找到相应列中的最大项

7、,然后交换两行位置,在进行计算。(2)LU分解法求解线性方程:#includevoid solve(float l100,float u100,float b,float x,int n)int i,j;float t,s1,s2;float y100;for(i=1;i=n;i+) /* 第一次回代过程开始 */ s1=0; for(j=1;j=1;i-) /* 第二次回代过程开始 */ s2=0; for(j=n;ji;j-) t=-uij; s2=s2+t*xj; xi=(yi+s2)/uii; void main()float a100100,l100100,u100100,x100,

8、b100;int i,j,n,r,k;float s1,s2;for(i=1;i=99;i+)/*将所有的数组置零,同时将L矩阵的对角值设为1*/ for(j=1;j=99;j+) lij=0,uij=0; if(j=i) lij=1; printf (input n:n);/*输入方程组的个数*/scanf(%d,&n);printf (input array A:n);/*读取原矩阵A*/for(i=1;i=n;i+) for(j=1;j=n;j+) scanf(%f,&aij);printf (input array B:n);/*读取列矩阵B*/for(i=1;i=n;i+) scan

9、f(%f,&bi);for(r=1;r=n;r+)/*求解矩阵L和U*/for(i=r;i=n;i+) s1=0; for(k=1;k=r-1;k+)s1=s1+lrk*uki;uri=ari-s1; for(i=r+1;i=n;i+)s2=0; for(k=1;k=r-1;k+)s2=s2+lik*ukr;lir=(air-s2)/urr;printf(array L:n);/*输出矩阵L*/for(i=1;i=n;i+) for(j=1;j=n;j+) printf(%7.3f ,lij); printf(n);printf(array U:n);/*输出矩阵U*/for(i=1;i=n;

10、i+) for(j=1;j=n;j+) printf(%7.3f ,uij); printf(n);solve(l,u,b,x,n);printf(解为:n);for(i=1;i=n;i+)printf(x%d=%fn,i,xi);运行结果:input n:3input array A:2 2 34 7 7-2 4 5input array B:3 1 -7array L: 1.000 0.000 0.000 2.000 1.000 0.000 -1.000 2.000 1.000array U: 2.000 2.000 3.000 0.000 3.000 1.000 0.000 0.000 6.000解为:x1=2.000000x2=-2.000000x3=1.000000Press any key to continue总结:关键是把矩阵分解为L、U两个三角矩阵,回代过程比较简单。3:第四章(1)拉格朗日差值多项式;#include#include#define MAX 100void main() int i,j,k,m,n,N,mi; float tmp,mx; float XMAXMAX,YMAX,xMAX,yMAX,aMAX; printf(n 输入拟合多项式的次数:n);

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 中学教育 > 其它中学文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号