//Ejemplos con TNT y JAMA
//compilar con g++ -I./templates  jama_cholesky.cpp
#include <iostream>
#include <iomanip>
#include "algebralineal.h"
using namespace std;
using namespace CALNUM;

typedef double  Real; //tipo generico Real

int main(){
cout<< "Entrar dimension"<<endl;
int n;
cin>>n;
Matrix<Real> D(n,n);
Matrix<Real> E(n,n);
Vector<Real> b(n);
 b=1.;


//Choleski. Atencion la matriz debe ser definida positiva
for(int  i=0;i<n;i++)
  for(int j=0;j<n;j++)
   D[i][j]=Real(1.)/Real(i+j+1.);
cout<<D<<endl;
Cholesky<Real> chol(D);
Matrix<Real>M=chol.getL();
Matrix<Real> MT= transpose(M);
cout<<"matriz de Cholesky M"<<endl<<M<<endl;
cout<<"transpuesta M"<<endl<<MT<<endl;
 cout<<"producto cholesky"<<endl<<M*transpose(M)<<endl<<
"matriz inicial"<<endl<<D<<endl;

//Resolucion de ecuaciones
Vector<Real> x= chol.solve(b); //Solucion de A*x=b
cout<<" x= "<< x<<endl;
cout<<"D*x= "<<D*x<<endl; //Comprobacion A*x=b

return 0;
}
