Pagini recente » Cod sursa (job #3155697) | Cod sursa (job #2916622) | Cod sursa (job #1341847) | Cod sursa (job #2927316) | Cod sursa (job #1472278)
#include <cstdio>
#include <cmath>
#include <algorithm>
using namespace std;
const int MAX = 303;
int n, m, lib[MAX];
double mat[MAX][MAX], eps = 0.000001, sol[MAX], cop[MAX][MAX];
int main()
{
freopen("gauss.in", "r", stdin);
freopen("gauss.out", "w", stdout);
scanf("%d%d", &n, &m);
for(int i=1; i<=n; i++)
for(int j=1; j<=m+1;j++){
scanf("%lf", &mat[i][j]);
cop[i][j] = mat[i][j];
}
int lin = 1;
for(int j=1; j<=m; j++){
int cur = lin;
for(int i=cur; i<=n; i++)
if(fabs(mat[i][j])>fabs(mat[cur][j]))
cur = i;
if(fabs(mat[cur][j])>eps){
for(int i=j; i<=m+1; i++)
swap(mat[lin][i], mat[cur][i]);
for(int i=m+1; i>=j; i--)
mat[lin][i] = mat[lin][i]/mat[lin][j];
for(int i=lin+1; i<=n; i++)
for(int k=m+1; k>=j; k--)
mat[i][k] = mat[i][k] - mat[lin][k]*mat[i][j];
lib[j] = lin;
lin++;
}
if(lin>n) break;
}
for(int j=m; j>=1; j--)
if(lib[j]!=0){
sol[j] = mat[lib[j]][m+1];
for(int i = j+1; i<=m; i++)
sol[j] -= sol[i]*mat[lib[j]][i];
}
for(int i=1; i<=n; i++){
double ans = cop[i][m+1];
for(int j=1; j<=m; j++)
ans -= sol[j]*cop[i][j];
if(fabs(ans)>eps){
printf("Imposibil\n");
return 0;
}
}
for(int i=1; i<=m; i++)
printf("%.8f ", sol[i]);
return 0;
}