|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
#include<stdio.h>
#define N 2
int main()
{
void getAStart(double arcs[N][N], int n, double ans[N][N]);
int getA(double arcs[N][N], int n);
double arcs[N][N];
double astar[N][N];
int i, j;
int n;
scanf_s("%d", &n);
for (i = 0; i < n; i++)
{
for (j = 0; j < n; j++)
{
scanf_s("%lf", &arcs[i][j]);
}
}
int a = getA(arcs, n);
if (a == 0)
{
printf("can not transform!\n");
}
else
{
getAStart(arcs, n, astar);
for (i = 0; i < n; i++)
{
for (j = 0; j < n; j++)
{
printf("%.3lf ", (double)astar[i][j] / a);
}
printf("\n");
}
}
printf("\n");
return 0;
}
//
void getAStart(double arcs[N][N], int n, double ans[N][N])//计算每一行每一列的每个元素所对应的余子式,组成A*
{
int getA(double arcs[N][N], int n);
if (n == 1)
{
ans[0][0] = 1;
return;
}
int i, j, k, t;
double temp[N][N];
for (i = 0; i < n; i++)
{
for (j = 0; j < n; j++)
{
for (k = 0; k < n - 1; k++)
{
for (t = 0; t < n - 1; t++)
{
temp[k][t] = arcs[k >= i ? k + 1 : k][t >= j ? t + 1 : t];
}
}
ans[j][i] = getA(temp, n - 1);
if ((i + j) % 2 == 1)
{
ans[j][i] = -ans[j][i];
}
}
}
}
//
int getA(double arcs[N][N], int n)//按第一行展开计算|A|
{
if (n == 1)
{
return (double)arcs[0][0];
}
double ans = 0;
double temp[N][N];
int i, j, k;
for (i = 0; i < n; i++)
{
for (j = 0; j < n - 1; j++)
{
for (k = 0; k < n - 1; k++)
{
temp[j][k] = arcs[j + 1][(k >= i) ? k + 1 : k];
}
}
double t = getA(temp, n - 1);
if (i % 2 == 0)
{
ans = ans + arcs[0][i] * t; (1)
}
else
{
ans = ans - arcs[0][i] * t; (2)
}
}
return (double)ans;
}
矩阵求逆,但是数据类型总是出现说数据丢失,我已将int型改为double型,但还是出现数据丢失,不知怎么回事,(1),(2)处出现问题。
还有一个问题老是说程序是垃圾文件,怎么解决
|
|