您好,欢迎访问三七文档
本程序是运用矩阵的初等变换的知识来求解矩阵的逆矩阵的。1.理论基础:若存在矩阵P使得矩阵A有PA=E那么P=A’。所以如果我们将(A,E)化成了(E,P),那么,P就是我们要求的A’。2.由上面的分析可知,我们思路可分为以下3步:(1)申请一个新的矩阵,它是(A,E)(2)将A先对角化(3)再将A单位化E,这是A后面的部分就是A’了。3.编程实现#includestdio.h#includestdlib.hfloatA1[10],A2[10][2*10],B[10][10];//原矩阵、加上单位矩阵后的矩阵、所求的逆矩阵voidShangSanJiao(intn)//化成上三角{intk,i,j,l=0,temp;if(A2[0][0]==0){while(A2[l][0]==0&&ln-1)l++;}if(l!=0)//如果[0][0]处的数为0,则交换{for(i=0;i2*n;i++){temp=A2[l][i];A2[l][i]=A2[0][i];A2[0][i]=temp;}}for(k=0;kn-1;k++){for(i=k+1;in;i++)A1[i]=A2[i][k]/A2[k][k];for(l=k+1;ln;l++){for(j=0;j2*n;j++)A2[l][j]=A2[l][j]-A2[k][j]*A1[l];}}}voidDuiJiaoXian(intn)//将对角线上的数化1,这样方便将原矩阵化成单位矩阵{inti,j;for(i=n-1;i=0;i--){A1[i]=A2[i][i];}for(i=n-1;i=0;i--){for(j=0;j2*n;j++)A2[i][j]=A2[i][j]/A1[i];}}voidDanWei(intn)//将原矩阵化成单位矩阵{inti,j,l;floattemp;for(i=n-1;i0;i--){for(j=i-1;j=0;j--){temp=A2[j][i];for(l=0;l2*n;l++)A2[j][l]=A2[j][l]-A2[i][l]*temp;}}}intmain(){intn;//矩阵的阶数scanf(%d,&n);if(n10){printf(矩阵不再表示的范围内!);exit(-1);}inti,j;for(i=0;in;i++){for(j=0;jn;j++){scanf(%f,&A2[i][j]);}for(j=n;j2*n;j++)A2[i][j]=0;}for(i=0,j=n;in,j2*n;i++,j++)A2[i][j]=1;/*for(i=0;in;i++){for(j=0;j2*n;j++){printf(%f,A2[i][j]);}printf(\n);}printf(\n);*///显示输入的矩阵ShangSanJiao(n);//化成上三角/*for(i=0;in;i++){for(j=0;j2*n;j++){printf(%f,A2[i][j]);}printf(\n);}printf(\n);*///显示上三角的矩阵DuiJiaoXian(n);//对角化1/*for(i=0;in;i++){for(j=0;j2*n;j++){printf(%f,A2[i][j]);}printf(\n);}printf(\n);*///显示对角线化1后的矩阵DanWei(n);//将原矩阵单位化/*for(i=0;in;i++){for(j=0;j2*n;j++){printf(%f,A2[i][j]);}printf(\n);}printf(\n);*///将所求矩阵移到B中for(i=0;in;i++)for(j=n;j2*n;j++){B[i][j-n]=A2[i][j];}//显示所求的逆矩阵for(i=0;in;i++){for(j=0;jn;j++){printf(%f,B[i][j]);}printf(\n);}return0;}
本文标题:编程求解逆矩阵
链接地址:https://www.777doc.com/doc-4899856 .html