Pagini recente » Cod sursa (job #1058775) | Cod sursa (job #1709917) | Cod sursa (job #613306)
Cod sursa(job #613306)
#include <iostream>
using namespace std;
#define maxN 305
#define dif 0.00001
int N, M;
double A[maxN][maxN], X[maxN];
void swap (int i , int j)
{
for (int t = 1; t <= M + 1; ++ t)
{
double aux = A[i][t];
A[i][t] = A[j][t];
A[j][t] = aux;
}
}
void gauss ()
{
for (int i = 1, j = 1; i <= N && j <= M; )
{
int l = i;
for (l = i; l <= N; ++ l)
if (A[l][i] > dif || A[l][i] < - dif) break;
if (l == N + 1)
{
++ j;
continue;
}
if (l != i) swap (l, i);
for (int t = j + 1; t <= M + 1; ++ t) A[i][t] /= A[i][j];
A[i][j] = 1;
for (int t = i + 1; t <= N; ++ t)
{
for (int u = j + 1; u <= M + 1; ++ u)
A[t][u] -= A[t][j] * A[i][u];
A[t][j] = 0;
}
++ i, ++ j;
}
for (int i = N; i > 0; -- i)
for (int j = 1; j <= M + 1; ++ j)
if (A[i][j] > dif || A[i][j] < - dif)
{
if (j == M + 1)
{
printf ("Imposibil\n");
return;
}
X[j] = A[i][M + 1];
for (int t = j + 1; t <= M; ++ t)
X[j] -= X[t] * A[i][t];
break;
}
for (int i = 1; i <= M; ++ i) printf ("%.8lf ", X[i]);
}
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", &A[i][j]);
gauss ();
return 0;
}