大家好,又見面了,我是你們的朋友全棧君。
采用高斯消去法求逆
直接上代碼
void Matrix_inverse(double arc[6][6], int n, double ans[6][6])//計算矩陣的逆
{
int i, j, k;//列
double max, tempA, tempB, P;
int max_num;
double arcs[6][6];
memcpy(arcs, arc, 288);
for (i = 0; i < n; i++)
{
ans[i][i] = 1;
}
for (i = 0; i < n; i++)//第i列
{
max = fabs(arcs[i][i]);
max_num = i;
for (j = i + 1; j < n; j++)//選出主元
{
if (fabs(arcs[j][i]) > max)
{
max = fabs(arcs[j][i]);
max_num = j;
}
}
/*if (max == 0)
{
printf("i can't");
break;
}*/
for (k = 0; k < n; k++)//交換行
{
tempA = arcs[i][k];
arcs[i][k] = arcs[max_num][k];
arcs[max_num][k] = tempA;
tempB = ans[i][k];
ans[i][k] = ans[max_num][k];
ans[max_num][k] = tempB;
}
for (k = i + 1; k < n; k++)
{
P = arcs[k][i] / arcs[i][i];
for (j = 0; j < n; j++)
{
arcs[k][j] = arcs[k][j] - arcs[i][j] * P;
ans[k][j] = ans[k][j] - ans[i][j] * P;
}
}
}
for (i = 0; i < n; i++)//行
{
P = arcs[i][i];
for (j = i; j < n; j++)
{
arcs[i][j] = arcs[i][j] / P;
}
for (j = 0; j < n; j++)
{
ans[i][j] = ans[i][j] / P;
}
}
for (i = n - 1; i > 0; i--)
{
for (j = i - 1; j >= 0; j--)
{
for (k = 0; k < n; k++)
{
ans[j][k] = ans[j][k] - ans[i][k] * arcs[j][i];
}
}
}
}
複制
我寫的是針對6×6矩陣的,有需要的話,把6改成其他數字就好了
釋出者:全棧程式員棧長,轉載請注明出處:https://javaforall.cn/129049.html原文連結:https://javaforall.cn