#include<matrix.h>

int main() {

Matrix a;
cout << "Enter a Matrix...";
cin >> a;
cout << a;


Matrix b(transpose(a));
cout << "transpose:\n" << b;

double det;
if (a.square()) {
   det = determinant(a);
   cout << "determinant = " << det << '\n';
}

b = inverse(a);
if (b.rows == 0) cout << "singular!\n";
else {
   cout << "inverse of a =\n" << b;
   Matrix c = a * b;
   cout << a << "*\n" << b << "=\n" << c;
}

Vector y;
cout << "Enter a Vector...";
cin >> y;
cout << "inverse of\n" << a << "*\n" << y << "=\n";
Vector x = b * y;
cout << x;
Vector y1 = a * x;
cout << a << "*\n" << x << "=\n" << y1;

cout << "solution of\n" << a << "* x =\n" << y << " is x=\n";
double res;
x = solve(a,y,res,det);
if (x.n == 0) cout << "singular!\n";
else {
   cout << x << "\nresidual = " << res << " determinant = " << det << '\n';
   y1 = a * x;
   cout << a << "*\n" << x << "=\n" << y1;
}

}
