// test case for LA_SYMM_BAND_MAT_DOUBLE_H
// and LA_SYMM_BAND_FACT_DOUBLE_H

#include <stdlib.h>        

#include "lafnames.h"
#include LA_GEN_MAT_DOUBLE_H
#include LA_SYMM_BAND_MAT_DOUBLE_H
#include LA_SYMM_BAND_FACT_DOUBLE_H

int main(void)
{
  int n=5;
  LaSymmBandMatDouble A(n, 2);

  A(0,0)=16;
  A(1,0)=4;
  A(2,0)=4;
  A(1,1)=5;
  A(2,1)=7;
  A(3,1)=-4;
  A(2,2)=19;
  A(3,2)=-18;
  A(4,2)=3;
  A(3,3)=45;
  A(4,3)=6;
  A(4,4)=6;
  
  printf("\nSymmetric 5 x 5 bandes matrix with bandwidth 5.\n");
  for (int i=0; i<n; i++)
  {
    for (int j=0; j<n; j++)
    {
      printf("%f \t", A(i,j));
    }
    printf("\n");
  }

  LaGenMatDouble B(5, 2);
  B(0,0)=44;
  B(1,0)=-5;
  B(2,0)=-58;
  B(3,0)=116;
  B(4,0)=0;
  B(0,1)=-8;
  B(1,1)=6;
  B(2,1)=28;
  B(3,1)=33;
  B(4,1)=36;
  printf("\nSolving A*X = B with B := \n");
  for (int i=0; i<n; i++)
  {
    printf("%f \t%f\n", B(i,0), B(i,1));
  }

  LaSymmBandMatDouble AF(A);
  LaSymmBandMatFactorizeIP(AF);

  printf("\nCholesky factorization.\n");
  for (int i=0; i<n; i++)
  {
    for (int j=0; j<n; j++)
    {
      printf("%f \t", AF(i,j));
    }
    printf("\n");
  }

  LaLinearSolveIP(A,B);

  printf("\nSolution X:= \n");
  for (int i=0; i<n; i++)
  {
    printf("%f \t%f\n", B(i,0), B(i,1));
  }
  printf("\nShould be <<3,1,-2,2,-1>|<-1,0,2,1,4>>. \n");

  return 0;
}


syntax highlighted by Code2HTML, v. 0.9.1