C语言求矩阵的逆

时间:2023-03-10 06:43:36
C语言求矩阵的逆
#include "stdafx.h"
#include <stdio.h>
#include <stdlib.h>
#include <windows.h> #define N 10 int getA(int arcs[N][N], int n)//按第一行展开计算|A|
{
if (n == )
{
return arcs[][];
}
int ans = ;
int temp[N][N];
int i, j, k;
for (i = ; i<n; i++)
{
for (j = ; j<n - ; j++)
{
for (k = ; k<n - ; k++)
{
temp[j][k] = arcs[j + ][(k >= i) ? k + : k]; }
}
int t = getA(temp, n - );
if (i % == )
{
ans += arcs[][i] * t;
}
else
{
ans -= arcs[][i] * t;
}
}
return ans;
}
void getAStart(int arcs[N][N], int n, int ans[N][N])//计算每一行每一列的每个元素所对应的余子式,组成A*
{
if (n == )
{
ans[][] = ;
return;
}
int i, j, k, t;
int temp[N][N];
for (i = ; i<n; i++)
{
for (j = ; j<n; j++)
{
for (k = ; k<n - ; k++)
{
for (t = ; t<n - ; t++)
{
temp[k][t] = arcs[k >= i ? k + : k][t >= j ? t + : t];
}
} ans[i][j] = getA(temp, n - );
if ((i + j) % == )
{
ans[i][j] = -ans[i][j];
}
}
}
} int main()
{ int arcs[N][N];
int astar[N][N];
int i, j;
int n;
while (scanf_s("%d", &n) != EOF && n)
{
for (i = ; i<n; i++)
{
for (j = ; j<n; j++)
{
scanf_s("%d", &arcs[i][j]);
}
}
int a = getA(arcs, n);
if (a == )
{
printf("can not transform!\n");
}
else
{
getAStart(arcs, n, astar);
for (i = ; i<n; i++)
{
for (j = ; j<n; j++)
{
printf("%.3lf ", (double)astar[i][j] / a);
}
printf("\n");
}
}
printf("\n"); }
system("pause");
return ;
}