?? 簡單逆陣.c
字號:
# 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");
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -