OI中的线性代数
程序员文章站
2022-06-03 13:50:51
...
OI中的线性代数
高斯消元法
用于求解线性方程组:
- 选择主元并系数化为1
- 向下步骤:向下消元
- 向上步骤:向上消元
#include <bits/stdc++.h>
using namespace std;
#define FR freopen("in.txt", "r", stdin)
#define FW freopen("out.txt", "w", stdout)
#define MOD 998244353
typedef long long ll;
double matrix[105][105];
int main()
{
int n;
scanf("%d", &n);
for (int i = 0; i < n; i++)
{
for (int j = 0; j <= n; j++)
{
scanf("%lf", &matrix[i][j]);
}
}
for (int r = 0; r < n; r++)
{
int domain = 0;
while (matrix[r][domain] == 0 && domain < n)
domain++;
if (domain == n)
{
printf("No Solution");
return 0;
}
// to 1
for (int j = n; j >= domain; j--)
{
matrix[r][j] /= matrix[r][domain];
}
// down
for (int l = r + 1; l < n; l++)
{
if (matrix[l][domain] != 0)
{
for (int j = n; j >= domain; j--)
{
matrix[l][j] -= matrix[r][j] * matrix[l][domain];
}
}
}
// up
for (int l = r - 1; l >= 0; l--)
{
if (matrix[l][domain] != 0)
{
for (int j = n; j >= domain; j--)
{
matrix[l][j] -= matrix[r][j] * matrix[l][domain];
}
}
}
}
for (int r = 0; r < n; r++)
{
printf("%.2lf\n", matrix[r][n]);
}
return 0;
}
下一篇: 详解webpack 如何集成第三方js库