高斯消元
过程:
将系数矩阵\(A_{n,n}\)和方程右值矩阵\(B_{n,1}\)合并成增广矩阵.
将增广矩阵不断递归变成阶梯型矩阵.
最后逐步回溯得到每个未知数的值.
int judge,n;//n个未知数
double mp[110][110],ans[110];
void dfs(int x)//judge=0表示唯一解,=1表示多组解,=2表示无解
{
if (x == n)
{
if (fabs(mp[n][n]) < 1e-5)
{
if (fabs(mp[n][n + 1]) < 1e-5)
judge = 1;
else
judge = 2;
return;
}
ans[x] = mp[n][n + 1] / mp[n][n];
return;
}
for (int i = x + 1; i <= n; i++)
{
if (fabs(mp[x][x]) < 1e-5)//交换第x行和第i行
{
for (int j = x; j <= n + 1; j++)
swap(mp[i][j], mp[x][j]);
continue;
}
double p = mp[i][x] / mp[x][x];
mp[i][x] = 0;
for (int j = x + 1; j <= n + 1; j++)
{
mp[i][j] -= p * mp[x][j];
}
}
dfs(x + 1);
if (judge != 0)
return;
ans[x] = mp[x][n + 1];
for (int i = x + 1; i <= n; i++)
ans[x] -= ans[i] * mp[x][i];
if (fabs(mp[x][x]) < 1e-5)
{
if (fabs(ans[x]) < 1e-5)
judge = 1;
else
judge = 2;
return;
}
ans[x] = ans[x] / mp[x][x];
}