Pagini recente » Cod sursa (job #689899) | Cod sursa (job #749280) | Cod sursa (job #955) | Cod sursa (job #1477747) | Cod sursa (job #2692728)
#include <bits/stdc++.h>
using namespace std;
using ld = double;
const ld EPS = 1e-9;
vector<int> RowEchelon(vector<vector<ld>>& A) {
int n = A.size(), m = A[0].size();
vector<int> piv;
for (int i = 0, rnk = 0; i < m && rnk < n; ++i) {
for (int j = rnk + 1; j < n; ++j)
if (abs(A[j][i]) > abs(A[rnk][i]))
swap(A[j], A[rnk]);
ld coef = A[rnk][i];
if (abs(coef) < EPS) continue;
for (int j = 0; j < m; ++j) A[rnk][j] /= coef;
for (int j = 0; j < n; ++j) {
if (j == rnk) continue;
coef = A[j][i];
for (int k = 0; k < m; ++k)
A[j][k] -= coef * A[rnk][k];
}
piv.push_back(i); ++rnk;
}
return piv;
}
vector<ld> SolveLinear(vector<vector<ld>>& A) {
int m = A[0].size() - 1;
auto piv = RowEchelon(A);
if (piv.size() > m) return {};
vector<ld> sol(m, 0.);
for (int i = 0; i < (int)piv.size(); ++i)
sol[piv[i]] = A[i][m];
return sol;
}
int main() {
ifstream cin("gauss.in");
ofstream cout("gauss.out");
int n, m; cin >> n >> m;
vector<vector<ld>> A(n, vector<ld>(m + 1));
for (auto& row : A) for (auto& x : row) cin >> x;
auto sol = SolveLinear(A);
if (sol.empty()) cout << "Imposibil";
else for (auto x : sol) cout << fixed << setprecision(20) << x << " ";
cout << endl;
return 0;
}