Pagini recente » Cod sursa (job #1250315) | Cod sursa (job #262612) | Cod sursa (job #1349551) | Cod sursa (job #1561122) | Cod sursa (job #3357399)
#include <fstream>
#include <iomanip>
#include <vector>
using namespace std;
ifstream in("gauss.in");
ofstream out("gauss.out");
const double EPS=1e-7;
int n, m;
vector<vector<double>> a;
vector<double> b, sol;
vector<int> poz;
bool gauss()
{
sol.assign(m, 0);
poz.assign(m, -1);
int j=0, i=0;
for(;i<n && j<m;j++)
{
int maxi=i;
for(int ii=i;ii<n;ii++)
if(abs(a[ii][j])>abs(a[maxi][j]))
maxi=ii;
if(abs(a[maxi][j])<EPS)
continue;
swap(a[i], a[maxi]);
swap(b[i], b[maxi]);
poz[j]=i;
for(int ii=0;ii<n;ii++)
if(ii!=i)
{
double q=a[ii][j]/a[i][j];
for(int jj=0;jj<m;jj++)
a[ii][jj]-=q*a[i][jj];
b[ii]-=q*b[i];
}
i++;
}
for(j=0;j<m;j++)
if(poz[j]!=-1)
sol[j]=b[poz[j]]/a[poz[j]][j];
for(i=0;i<n;i++)
{
double sum=0;
for(j=0;j<m;j++)
sum+=a[i][j]*sol[j];
if(abs(sum-b[i])>EPS)
return 0;
}
return 1;
}
int main()
{
in>>n>>m;
a.resize(n); b.resize(n);
for(int i=0;i<n;i++)
{
a[i].resize(m);
for(int j=0;j<m;j++)
in>>a[i][j];
in>>b[i];
}
if(!gauss())
{
out<<"Imposibil";
return 0;
}
for(int j=0;j<m;j++)
out<<fixed<<setprecision(10)<<sol[j]<<" ";
return 0;
}