1、 else break; while(fabs(b-a)/*判断是否达到精度要求,若没有达到,继续循环*/ x=(a+b)/2; /* 取最后的小区间中点作为根的近似值 */n The root is x=%f, k=%dn,x,k);运行结果:intput epsa,b=2,-5 The root is x=, k=20Press any key to continue总结:本题关键在于两个端点的取值和误差的判断,此程序较容易。二分法收敛速度较快,但缺点是只能求解单根。 (2)牛顿法求解非线性方程:float f(float x) /* 定义函数f(x) */ return(-3*x+4)*
2、x-5)*x+6;float f1(float x) /* 定义函数f(x)的导数 */ return (-9*x+8)*x-5; float eps,x0,x1=;input eps: /* 输入容许误差 */ x0=x1; /* 准备下一次迭代的初值 */ x1=x0-f(x0)/f1(x0); /* 牛顿迭代 */ while(fabs(x1-x0) /*当满足精度,输出近似根*/x=%fn,x1);程序运行结果:x=关键是牛顿迭代的应用,程序中最大缺点是函数及其导数已唯一给出确定不可求的随意函数的根,牛顿法比二分法收敛快,可以求重根。2:第三章(1)列主元素消去法求解线性方程:iost
3、reamcmath#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;endl;请按顺序输入增广矩阵a: load(); for(i=0;ii+) for(j=i;jfabs(aii)?j:i; /*找列最大元素*/ for(n=0;nm+1;n+) s=ain; ain=acn; acn=s; /*将列最大数防在对角线上*/ for(p=0;pp+)aipt for(k=i+1;kk+) lki=aki/ai
4、i; for(r=i;r=0;i-) d=0; for(j=i+1;j+) d=d+aij*xj; xi=(aim-d)/aii; /*求解*/该方程组的解为: coutx=xiaij; 下面请输入未知数的个数m=31 2 3 45 1 0 84 6 9 20 x0= x1=58 x2=-34 Press any key to continue列主元素消去法的目的是为了防止减去一个较小的数时大数淹没小数,而使结果产生较大误差,本程序关键在每次消元时找到相应列中的最大项,然后交换两行位置,在进行计算。(2)LU分解法求解线性方程:void solve(float l100,float u100,
5、float b,float x,int n)int i,j;float t,s1,s2;float y100;for(i=1;=n;i+) /* 第一次回代过程开始 */ s1=0; for(j=1; t=-lij; s1=s1+t*yj; yi=(bi+s1)/lii;for(i=n;=1;i-) /* 第二次回代过程开始 */ s2=0; for(j=n;jj-) t=-uij; s2=s2+t*xj; xi=(yi+s2)/uii;float a100100,l100100,u100100,x100,b100;int i,j,n,r,k;float s1,s2;=99;i+)/*将所有的
6、数组置零,同时将L矩阵的对角值设为1*/ for(j=1; lij=0,uij=0; if(j=i) lij=1;printf (input n:/*输入方程组的个数*/scanf(%dn);input array A:/*读取原矩阵A*/aij);input array B:/*读取列矩阵B*/bi);for(r=1;r+)/*求解矩阵L和U*/ for(i=r; s1=0; for(k=1;=r-1;k+) s1=s1+lrk*uki; uri=ari-s1; for(i=r+1; s2=0; s2=s2+lik*ukr; lir=(air-s2)/urr;printf(array L:/
7、*输出矩阵L*/% ,lij);array U:/*输出矩阵U*/,uij);solve(l,u,b,x,n);解为:x%d=%fn,i,xi);32 2 34 7 7-2 4 53 1 -7 x1=x2=x3=关键是把矩阵分解为L、U两个三角矩阵,回代过程比较简单。3:第四章(1)拉格朗日差值多项式;#define MAX 100 int i,j,k,m,n,N,mi; float tmp,mx; float XMAXMAX,YMAX,xMAX,yMAX,aMAX;n 输入拟合多项式的次数:m);n 输入给定点的个数n及坐标(x,y):N);N; scanf(%f,%fxi,&yi);=m;
8、 tmp=0; for(k=0; tmp=tmp+pow(xk,(i+j); Xij=tmp; Xji=Xij; tmp=tmp+yk*pow(xk,i); Yi=tmp; for(j=0; for(i=j+1,mi=j,mx=fabs(Xjj); if(fabs(Xij)mx) mi=i; mx=fabs(Xij); if(j=fabs(au)printf(“failn”);return(-1);p=eps+;while(p=eps)for(i=0;t=xi;s=;if(j!=i)s=s+ai*n+j*xj;xi=(bi-s)/ai*n+j;q=fabs(xi-t)/+fabs(xi);if(qp)p=q;return(1);int i;double eps;static double a44=7,2,1,-29,15,3,-2-2,-2,11,51,3,2,13;static double x5,b4=4,7,-1,0;eps=;if(dsdl(a,b,4,x,eps)0)=3;printf(“x(%d)=%n”,i,xi);
copyright@ 2008-2023 冰点文库 网站版权所有
经营许可证编号:鄂ICP备19020893号-2