编程求解逆矩阵.doc
_本程序是运用矩阵的初等变换的知识来求解矩阵的逆矩阵的。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.编程实现#include<stdio.h>#include<stdlib.h>float A110,A2102*10,B1010;/原矩阵、加上单位矩阵后的矩阵、所求的逆矩阵void ShangSanJiao(int n)/化成上三角int k,i,j,l=0,temp;if(A200 = 0)while(A2l0=0&&l<n-1)l+;if(l!=0)/如果00处的数为0,则交换for(i=0;i<2*n;i+)temp = A2li;A2li = A20i;A20i = temp;for(k=0;k<n-1;k+)for(i=k+1;i<n;i+)A1i = A2ik/A2kk;for(l=k+1;l<n;l+)for(j=0;j<2*n;j+)A2lj = A2lj - A2kj*A1l;void DuiJiaoXian(int n)/将对角线上的数化1,这样方便将原矩阵化成单位矩阵int i,j;for(i=n-1;i>=0;i-)A1i=A2ii;for(i=n-1;i>=0;i-)for(j=0;j<2*n;j+)A2ij = A2ij/A1i;void DanWei(int n)/将原矩阵化成单位矩阵int i,j,l;float temp;for(i=n-1;i>0;i-)for(j=i-1;j>=0;j-)temp = A2ji;for(l=0;l<2*n;l+)A2jl = A2jl - A2il*temp;int main()int n;/矩阵的阶数scanf("%d",&n);if(n>10)printf("矩阵不再表示的范围内!");exit(-1);int i,j;for(i=0;i<n;i+)for(j=0;j<n;j+)scanf("%f",&A2ij);for(j=n;j<2*n;j+)A2ij=0;for(i=0,j=n;i<n,j<2*n;i+,j+)A2ij = 1;/*for(i=0;i<n;i+)for(j=0;j<2*n;j+)printf("%f ",A2ij);printf("n");printf("n");*/显示输入的矩阵ShangSanJiao(n);/化成上三角/*for(i=0;i<n;i+)for(j=0;j<2*n;j+)printf("%f ",A2ij);printf("n");printf("n");*/显示上三角的矩阵DuiJiaoXian(n);/对角化1/*for(i=0;i<n;i+)for(j=0;j<2*n;j+)printf("%f ",A2ij);printf("n");printf("n");*/显示对角线化1后的矩阵DanWei(n);/将原矩阵单位化/*for(i=0;i<n;i+)for(j=0;j<2*n;j+)printf("%f ",A2ij);printf("n");printf("n");*/将所求矩阵移到B中for(i=0;i<n;i+)for(j=n;j<2*n;j+)Bij-n =A2ij;/显示所求的逆矩阵for(i=0;i<n;i+)for(j=0;j<n;j+)printf("%f ",Bij);printf("n");return 0;7_