大家好,又见面了,我是你们的朋友全栈君。
采用高斯消去法求逆
直接上代码
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改成其他数字就好了
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/129049.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...