编程求解逆矩阵

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

本程序是运用矩阵的初等变换的知识来求解矩阵的逆矩阵的。

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

#include

float A1[10],A2[10][2*10],B[10][10];//原矩阵、加上单位矩阵后的矩阵、所求的逆矩阵

void ShangSanJiao(int n)//化成上三角

{

int k,i,j,l=0,temp;

if(A2[0][0] == 0)

{

while(A2[l][0]==0&&l

l++;

}

if(l!=0)//如果[0][0]处的数为0,则交换

{

for(i=0;i<2*n;i++)

{

temp = A2[l][i];

A2[l][i] = A2[0][i];

A2[0][i] = temp;

}

}

for(k=0;k

{

for(i=k+1;i

A1[i] = A2[i][k]/A2[k][k];

for(l=k+1;l

{

for(j=0;j<2*n;j++)

A2[l][j] = A2[l][j] - A2[k][j]*A1[l];

}

}

}

void DuiJiaoXian(int n)//将对角线上的数化1,这样方便将原矩阵化成单位矩阵

{

int i,j;

for(i=n-1;i>=0;i--)

{

A1[i]=A2[i][i];

}

for(i=n-1;i>=0;i--)

{

for(j=0;j<2*n;j++)

A2[i][j] = A2[i][j]/A1[i];

}

}

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 = A2[j][i];

for(l=0;l<2*n;l++)

A2[j][l] = A2[j][l] - A2[i][l]*temp;

}

}

}

int main()

{

int n;//矩阵的阶数

scanf("%d",&n);

if(n>10)

{

printf("矩阵不再表示的范围内!");

exit(-1);

}

int i,j;

for(i=0;i

{

for(j=0;j

{

scanf("%f",&A2[i][j]);

}

for(j=n;j<2*n;j++)

A2[i][j]=0;

}

for(i=0,j=n;i

A2[i][j] = 1;

/* for(i=0;i

{

for(j=0;j<2*n;j++)

{

printf("%f ",A2[i][j]);

}

printf("\n");

}

printf("\n");*///显示输入的矩阵

ShangSanJiao(n);//化成上三角

/* for(i=0;i

{

for(j=0;j<2*n;j++)

{

printf("%f ",A2[i][j]);

}

printf("\n");

}

printf("\n");*///显示上三角的矩阵

DuiJiaoXian(n);//对角化1

/* for(i=0;i

{

for(j=0;j<2*n;j++)

{

printf("%f ",A2[i][j]);

}

printf("\n");

}

printf("\n");*///显示对角线化1后的矩阵DanWei(n);//将原矩阵单位化

/* for(i=0;i

{

for(j=0;j<2*n;j++)

{

printf("%f ",A2[i][j]);

}

printf("\n");

}

printf("\n");

*/

//将所求矩阵移到B中

for(i=0;i

for(j=n;j<2*n;j++)

{

B[i][j-n] =A2[i][j];

}

//显示所求的逆矩阵

for(i=0;i

{

for(j=0;j

{

printf("%f ",B[i][j]);

}

printf("\n");

}

return 0;

}

相关文档
最新文档