逆矩陣算法三
# include "stdio.h"
# define M 3
void main ( )
{
float MAT[M][2*M];
float MAT1[M][M];
float t;
int i,j,k,l;
/***********************************************/
/*對矩陣進行初始化*/
for(i=0;i<M;i++)
for(j=0;j<2*M;j++)
MAT1[i][j]='\0';
for(i=0;i<M;i++)
for(j=0;j<2*M;j++)
MAT[i][j]='\0';
/*對MAT1矩陣賦初值 */
for(i=0;i<M;i++)
for (j=0;j<M;j++)
scanf("%f",&MAT1[i][j]);
/*打印目標矩陣?*/
printf("原矩陣爲:\n");
for (i=0;i<M;i++)
{
for (j=0;j<M;j++)
printf("%5.2f",MAT1[i][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[i][j]=MAT1[i][j];
else if (j==M+i) MAT[i][j]=1;
else MAT[i][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[i][j]=MAT[i][j]+MAT[k][j];
t=MAT[i][i];
for(j=i;j<2*M;j++)
MAT[i][j]=MAT[i][j]/t;
/*對矩陣進行行變換,使得第i 列只有一個元素不爲零,且爲1*/
for(k=0;k<M;k++)
if(k!=i)
{
t=MAT[i][k];
for (l=i;l<2*M;l++)
MAT[k][l]=MAT[k][l]-MAT[i][l]*t;
}
}
/*將後半部分矩陣即所求矩陣逆陣存入MAT2矩陣。*/
for(i=0;i<M;i++)
{
for(j=0;j<M;j++)
MAT1[i][j]=MAT[i][j+M];
printf("\n");
}
/*********************************************/
/*輸出所求的逆陣*/
printf("逆陣爲:\n");
for(i=0;i<M;i++)
{
for(j=0;j<M;j++)
printf("%5.2f",MAT1[i][j]);
printf("\n");
}
}
# define M 3
void main ( )
{
float MAT[M][2*M];
float MAT1[M][M];
float t;
int i,j,k,l;
/***********************************************/
/*對矩陣進行初始化*/
for(i=0;i<M;i++)
for(j=0;j<2*M;j++)
MAT1[i][j]='\0';
for(i=0;i<M;i++)
for(j=0;j<2*M;j++)
MAT[i][j]='\0';
/*對MAT1矩陣賦初值 */
for(i=0;i<M;i++)
for (j=0;j<M;j++)
scanf("%f",&MAT1[i][j]);
/*打印目標矩陣?*/
printf("原矩陣爲:\n");
for (i=0;i<M;i++)
{
for (j=0;j<M;j++)
printf("%5.2f",MAT1[i][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[i][j]=MAT1[i][j];
else if (j==M+i) MAT[i][j]=1;
else MAT[i][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[i][j]=MAT[i][j]+MAT[k][j];
t=MAT[i][i];
for(j=i;j<2*M;j++)
MAT[i][j]=MAT[i][j]/t;
/*對矩陣進行行變換,使得第i 列只有一個元素不爲零,且爲1*/
for(k=0;k<M;k++)
if(k!=i)
{
t=MAT[i][k];
for (l=i;l<2*M;l++)
MAT[k][l]=MAT[k][l]-MAT[i][l]*t;
}
}
/*將後半部分矩陣即所求矩陣逆陣存入MAT2矩陣。*/
for(i=0;i<M;i++)
{
for(j=0;j<M;j++)
MAT1[i][j]=MAT[i][j+M];
printf("\n");
}
/*********************************************/
/*輸出所求的逆陣*/
printf("逆陣爲:\n");
for(i=0;i<M;i++)
{
for(j=0;j<M;j++)
printf("%5.2f",MAT1[i][j]);
printf("\n");
}
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.