// Ejemplos funciones adicionales con TNT
// compilar con  g++ - I./templates tnt_ejemplos2.cpp
#include <cmath>
#include <iostream>
#include "algebralineal.h"
using namespace std;
using namespace CALNUM;

int main()
{
  int  n; //dimension, que puede ser leida en ejecucion
  cout << "Entrar dimension" << endl;
  cin >> n;

  //Ejempos con matrices y escalares
  
  //Construccion de tres matrices de double
  Matrix < double >A(n, n), B(n, n), C(n, n); 
  for(int i = 0; i < n; i++)
    A[i][i] = double (i); //relleno de la matriz A


//creacion identidad de dimension n
  Matrix<double> I=identity<double>(n);
  cout<<I<<endl;  
  B = 2.; //todos los elementos de B = 2.
  cout<<"B= "<<B<<endl;
  C=6./B;
  cout<< "C=6./B "<< C<<endl;
  
 
 //extraccion triangular inferior estricta (lower)
 C=lower(B);
 cout<< "lower(B) ="<<C<<endl;
  
 //extraccion triangular superior estricta (upper)
 C=upper(B);
 cout<< "upper(B) ="<<C<<endl;
   
 //extraccion matriz diagonal 
 C=diagonal(B);
 cout<< "diagonal(B) ="<<C<<endl;
  
//division de matrices elemento a elemento
C=upper(B)/B;
cout<<"upper(B)/B= "<<C<<endl; 

//normas de matrices 
cout<<"normmax(upper(B)/B)= "<<normmax(C)<<endl;
cout<<"norm1(upper(B)/B)= "<<norm1(C)<<endl;
cout<<"normf(upper(B)/B)= "<<normf(C)<<endl; //norma Frobenius

//Extraccion vector diagonal
Vector<double> b= diag(A);
cout<<"diag(A)="<<b<<endl;

//Proyecta fila n de matriz C, empezando por 0  ( row(C,n) )
b=row(C,1);
cout<<b<<endl;
//Proyecta columna n de matriz C, empezando por 0 ( column (C,n) )
b=column(C,1);
cout<<b<<endl;

//Multiplicacion elemento a elemento
cout<<C%B<<endl;

return 0;

}
