Pagini recente » Cod sursa (job #926590) | Cod sursa (job #675861) | Cod sursa (job #2541084) | Cod sursa (job #838594) | Cod sursa (job #2951059)
#include <bits/stdc++.h>
using namespace std;
const int N = 305;
double A[N][N], res[N];
const double eps = 1.0e-10;
bool gauss(double A[][N], int n, int m, double *res) {
vector <int> found(m, -1);
for(int i = 0, j = 0; i < n && j < m; i++) {
int r = i;
for(int c = r; c < n; c++)
if(abs(A[c][j]) > abs(A[r][j]))
r = c;
if(abs(A[r][j]) < eps) continue;
for(int jj = 0; jj <= m; jj++)
swap(A[r][jj], A[i][jj]);
found[j] = i;
for(int ii = 0; ii < n; ii++) if(ii != i) {
double coef = A[ii][j] / A[i][j];
for(int jj = 0; jj <= m; jj++)
A[ii][jj] -= coef * A[i][jj];
}
j++;
}
for(int j = 0; j < m; j++)
if(found[j] != -1)
res[j] = A[found[j]][m] / A[found[j]][j];
for(int i = 0; i < n; i++) {
double sum = 0;
for(int j = 0; j < m; j++)
sum += A[i][j] * res[j];
if(abs(sum - A[i][m]) >= eps) return false;
}
return true;
}
int main()
{
const string fn = "gauss";
ifstream cin(fn + ".in");
ofstream cout(fn + ".out");
int n, m;
cin >> n >> m;
for(int i = 0; i < n; i++)
for(int j = 0; j <= m; j++)
cin >> A[i][j];
if(gauss(A, n, m, res)) {
cout << fixed << setprecision(10);
for(int i = 0; i < m; i++)
cout << res[i] << " ";
} else cout << "Imposibil\n";
return 0;
}