标题:
C语言经典算法之逆阵:简单逆阵
[打印本页]
作者:
苹果也疯狂
时间:
2014-5-9 17:19
标题:
C语言经典算法之逆阵:简单逆阵
# include "stdio.h"
# define M 3
void main ( )
{
float MAT[M][2*M];
float MAT1[M][M];
float t;
inti,j,k,l;
/***********************************************/
/*
对矩阵进行初始化
*/
for(i=0;i<M;i++)
for(j=0;j<2*M;j++)
MAT1
[j]='\0';
for(i=0;i<M;i++)
for(j=0;j<2*M;j++)
MAT
[j]='\0';
/*
对
MAT1
矩阵赋初值
*/
for(i=0;i<M;i++)
for (j=0;j<M;j++)
scanf("%f",&MAT1
[j]);
/*
打印目标矩阵
?*/
printf("
原矩阵为:
\n");
for(i=0;i<M;i++)
{
for (j=0;j<M;j++)
printf("%5.2f",MAT1
[j]);
printf("\n");
}
/********************************************/
/*
对
MAT1
矩阵进行扩展
,MAT1
矩阵添加单位阵,由
M*M
变成
2M*2M
矩阵
*/
for(i=0;i<M;i++)
for(j=0;j<2*M;j++)
if (j<M) MAT
[j]=MAT1
[j];
else if (j==M+i) MAT
[j]=1;
else MAT
[j]=0;
/*
对
M
矩阵进行变换,使得前半部分矩阵成为单位阵,则
*/
/*
后半部分矩阵即为所求矩阵逆阵
*/
for(i=0;i<M;i++)
{
/*
对第
i
行进行归一化
*/
for (j=0;j<2*M;j++)
for(k=i+1;k<M;k++)
MAT
[j]=MAT
[j]+MAT[k][j];
t=MAT
;
for(j=i;j<2*M;j++)
MAT
[j]=MAT
[j]/t;
/*
对矩阵进行行变换,使得第
i
列只有一个元素不为零,且为
1*/
for(k=0;k<M;k++)
if(k!=i)
{
t=MAT
[k];
for (l=i;l<2*M;l++)
MAT[k][l]=MAT[k][l]-MAT
[l]*t;
}
}
/*
将后半部分矩阵即所求矩阵逆阵存入
MAT2
矩阵。
*/
for(i=0;i<M;i++)
{
for(j=0;j<M;j++)
MAT1
[j]=MAT
[j+M];
printf("\n");
}
/*********************************************/
/*
输出所求的逆阵
*/
printf("
逆阵为:
\n");
for(i=0;i<M;i++)
{
for(j=0;j<M;j++)
printf("%5.2f",MAT1
[j]);
printf("\n");
}
}
欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/)
Powered by Discuz! 7.0.0