「学习笔记」高斯消元

解方程组

构造上三角矩阵,对角线上的为该方程求解的未知数。

对于第 ii 个方程,找到一个第 ii 个未知数系数不为 00 的方程,交换两行。

将其他方程的第 ii 个未知数系数都消为 00

最后从下往上依次求解。

若第 nn 个方程的第 nn 个未知数系数为 00,则方程组的解不唯一。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
void gauss()
{
for(int i = 1; i <= n; i++)
{
if(!a[i][i])
{
int j;
for(j = i + 1; j <= n; j++)
if(a[j][i]) break;
for(int k = 1; k <= n + 1; k++)
swap(a[i][k], a[j][k]);
}
for(int k = i + 1; k <= n; k++)
for(int j = n + 1; j >= i; j--)
a[k][j] -= a[k][i] / a[i][i] * a[i][j];
}
for(int i = n; i >= 1; i--)
{
for(int j = i + 1; j <= n; j++)
a[i][n + 1] -= a[i][j] * a[j][n + 1];
a[i][n + 1] /= a[i][i];
}
return;
}