#include <iostream>
#include <vector>
#include <fstream>
#include <cmath>
#define MAX_T 65535
int main (int argc, char* argv[])
{
if (argc != 3)
{
std::cout << argv[0] << " inputfile outputfile" << std::endl;
return 0;
}
std::ifstream input(argv[1]);
std::ofstream output(argv[2]);
int n = -1;
input >> n;
std::vector<std::vector<double> > A(n);
for (std::vector<std::vector<double> >::iterator A_iterator = A.begin();
A_iterator != A.end();
++A_iterator)
A_iterator->resize(n);
for (int i = 0; i < n; ++i)
for (int j = 0; j < n; ++j)
input >> A[i][j];
std::vector<double> b(n);
for (int i = 0; i < n; ++i)
input >> b[i];
std::vector<double> x(n, 1.0);
double tol = 1e-14;
double res = 100.0;
int T = 0;
//////////////////////////////////////////////////////////////////////
// std::cout.setf(std::ios::fixed);
// std::cout.precision(4);
while (res > tol && T < MAX_T)
{
T++;
for (int i = 0; i < n; ++i)
{
double s = 0;
for (int j = 0; j < i; ++j)
s += A[i][j] * x[j];
for (int j = i + 1; j < n; ++j)
s += A[i][j] * x[j];
x[i] = (b[i] - s) / A[i][i];
}
res = 0;
for (int i = 0; i < n; ++i)
{
double r = b[i];
for (int j = 0; j < n; ++j)
r -= A[i][j] * x[j];
res += r * r;
}
res = std::sqrt(res);
std::cout << "res = " << res << std::endl;
}
/////////////////////////////////////////////////////////////////////
output.setf(std::ios::fixed);
output.precision(18);
output << "A = [" << std::endl;
for (int i = 0; i < n; ++i)
{
for (int j = 0; j < n; ++j)
output << A[i][j] << " ";
output << std::endl;
}
output << "];" << std::endl;
output << "b = [" << std::endl;
for (int i = 0; i < n; ++i)
output << b[i] << std::endl;
output << "];" << std::endl;
output << "x = [" << std::endl;
for (int i = 0; i < n; ++i)
output << x[i] << std::endl;
output << "];" << std::endl;
input.close();
output.close();
std::cout << "T = " << T << std::endl;
return 0;
}