Pagini recente » Cod sursa (job #688312) | Cod sursa (job #2591034) | Cod sursa (job #2574590) | Cod sursa (job #1985260) | Cod sursa (job #1702536)
#include <bits/stdc++.h>
using namespace std;
constexpr int MAX_N = 300 + 1;
constexpr double EPS = 1e-10;
double A[MAX_N][MAX_N];
double solution[MAX_N];
int N, M;
void gauss()
{
int i = 1, j = 1;
while (i <= N && j <= M)
{
int k = i;
while (k <= N && abs(A[k][j]) < EPS)
k++;
if (k == N + 1)
{
j++;
continue;
}
for (int p = j; p <= M + 1; ++p)
swap(A[i][p], A[k][p]);
for (int p = j + 1; p <= M + 1; ++p)
A[i][p] /= A[i][j];
A[i][j] = 1;
for (int l = i + 1; l <= N; ++l)
{
double coef = A[l][j];
for (int c = j; c <= M + 1; ++c)
A[l][c] -= coef * A[i][c];
A[l][j] = 0;
}
i++;
j++;
}
}
void computeSolutions()
{
ofstream out("gauss.out");
for (int i = N; i >= 1; i--)
{
int j = 1;
while (j <= M + 1 && abs(A[i][j]) < EPS)
j++;
if (j == M + 1)
{
out << "Imposibil" << endl;
return;
}
solution[j] = A[i][M + 1];
for (int p = j + 1; p <= M; ++p)
solution[j] -= solution[p] * A[i][p];
}
for (int i = 1; i <= M; ++i)
out << fixed << setprecision(10) << solution[i] << " ";
out << endl;
out.close();
}
int main()
{
ifstream in("gauss.in");
in >> N >> M;
for (int i = 1; i <= N; ++i)
for (int j = 1; j <= M + 1; ++j)
in >> A[i][j];
in.close();
gauss();
computeSolutions();
return 0;
}