《解线性方程组.doc》由会员分享,可在线阅读,更多相关《解线性方程组.doc(18页珍藏版)》请在金锄头文库上搜索。
1、#include#include#define n 3/2-1顺序解线性方程组void Cgauss(float ann,float bn,float xn)int i,j,k;float sum=0.0;for(k=0;kn;k+)for(j=k+1;jn;j+)/归一化 if(akk)akj/=akk; / printf(a%d%d=%fn ,k,j,akj);bk/=akk;akk=1;for(i=k+1;in;i+)/消元for(j=k+1;j=0;i-)sum=0.0;for(j=n-1;ji;j-)sum=sum+aij*xj;xi=bi-sum;/2-2顺序解线性方程组void
2、Cgauss1(float ann,float bn,float xn)int i,j,k;float temp,sum=0.0;for(k=0;kn;k+)for(i=k+1;ifabs(akk)&akk!=0)for(j=k;jn;j+)temp=akj;akj=aij;aij=temp;temp=bk;bk=bi;bi=temp;for(j=k+1;jn;j+)/归一化 akj=akj/akk; bk=bk/akk;akk=1;for(i=k+1;in;i+)for(j=k+1;j=0;i-)sum=0.0;for(j=n-1;ji;j-)sum=sum+aij*xj;xi=bi-sum
3、;/2-3顺序解线性方程组void Cgauss2(float ann,float bn,float xn)int i,j,is,jsn,k;float temp,max,t,sum=0.0;for(k=0;kn-1;k+)max=0.0;for(i=k;in;i+)for(j=k;j max)max=t,jsk=j,is=i; if(max+1.0=1.0) printf(矩阵异常!);elseif(jsk!=k)/列交换,每次列交换都是全部交换,因此i是从0开始for(i=0;in;i+) temp=aik,aik=aijsk,aijsk=temp;if(is!=k)/行交换for(j=k
4、;jn;j+) temp=akj,akj=aisj,aisj=temp; temp=bk,bk=bis,bis=temp;for(j=k+1;jn;j+)/归一化 akj=akj/akk;bk=bk/akk;akk=1;for(i=k+1;in;i+)/消元for(j=k+1;j=0;i-)sum=0.0;for(j=n-1;ji;j-)sum=sum+aij*xj;xi=bi-sum;void main()int i,j;float ann=1,2,-2,2,1,2,3,0,4, bn=2,3,1,xn;printf(方程各元素如下:n);for(i=0;in;i+)for(j=0;jn;j
5、+)printf(%.2f ,aij);printf(n);printf(方程常数依次为:n);for(i=0;in;i+)printf(%.2f ,bi);printf(n); printf(-顺序解线性方程组-n);Cgauss(a,b,x);printf(-列选元解线性方程组-n);Cgauss1(a,b,x);printf(-全选组元解线性方程组-n);Cgauss2(a,b,x);printf(方程解为:n);for(i=0;in;i+)printf(x%d=%.2f ,i,xi);printf(n); /2-4 Crout分解法解线性方程组#include#include#incl
6、ude#define n 3void Crout(float ann,float bn,float xn)int r,i,k;float Lnn, Unn,yn,sum;for(i=0;in;i+) /L的第一列Li0=ai0;for(i=0;in;i+) /U的第一行U0i=a0i/L00;Uii=1;for(r=1;rn-1;r+)for(i=r+1;in;i+)sum=0.0;for(k=0;kr;k+)sum+=Lrk*Uki;Uri=(ari-sum)/Lrr;for(r=1;rn;r+)for(i=r;in;i+)sum=0.0;for(k=0;kr;k+)sum+=Lik*Ukr
7、;Lir=air-sum;y0=b0/L00;for(r=1;rn;r+)sum=0.0;for(i=0;ir;i+)sum+=Lri*yi;yr=(br-sum)/Lrr;for(i=0;i=0;r-)sum=0.0;for(i=r+1;in;i+)sum+=Uri*xi;xr=yr-sum;void main()int i,j;float ann=1,-1,3,2,-4,6,4,-9,2, bn=1,4,1,xn;printf(方程各元素如下:n);for(i=0;in;i+)for(j=0;jn;j+)printf(%.2f ,aij);printf(n);printf(方程常数依次为:
8、n);for(i=0;in;i+)printf(%.2f ,bi);printf(n);Crout(a,b,x);/*printf(需解线性方程组消元后为:n);for(i=0;in;i+)for(j=0;jn;j+)printf(%.2f ,aij);printf(n);printf(方程常数消元后为:n);for(i=0;in;i+)printf(%.2f ,bi);printf(n);*/printf(方程解为:n);for(i=0;in;i+)printf(x%d=%.2f ,i,xi);printf(n);/2-5 Doolittle分解法解线性方程组#include#include#include#define n 3void Doolittle(float ann,float bn,float xn)int r,i,k,j;float Lnn=0, Unn=0,yn=0,sum; /*初始化矩阵l*/ fo