Linear Algebra and the C Language/a0ie


Install and compile this file in your working directory.

/* ------------------------------------ */
/*  Save as :   c00a.c                  */
/* ------------------------------------ */
#include "v_a.h"
/* ------------------------------------ */
/* ------------------------------------ */
double **X_rdefinite_positive_mR(
double **A,
int      n
)
{
int r = rsize_R(A);

double **Q  =       r_Q_mR(       i_mR(r,r),n);
double **QT = transpose_mR(Q,     i_mR(r,r));
double **D  =    rpdiag_mR(       i_mR(r,r),n);
double **QD =       mul_mR(Q,D,   i_mR(r,r));

         mul_mR(QD,QT,A);

  f_mR(Q);
  f_mR(QT);
  f_mR(D);
  f_mR(QD);
  
 return(A);
}
/* ------------------------------------ */
/* ------------------------------------ */
void fun(int r)
{
double **A      =  rdefinite_positive_mR(   i_mR(r,r), 99);
double **EValue =                eigs_mR(A, i_mR(r,C1));

  clrscrn();  
  printf(" A:");
  p_mR(A, S12,P6,C6);

  printf(" Eigenvalue: eigs_mR(A,EValue);");
  p_mR(EValue, S9,P3,C1);    
  
  f_mR(A);
  f_mR(EValue);
}
/* ------------------------------------ */
int main(void)
{
time_t t;

  srand(time(&t));

do
{
  fun(rp_I(R3)+R2);

} while(stop_w());

  return 0;
}

/* ------------------------------------ */
/* ------------------------------------ */


Screen output example:

                                                                                       
 A:
  +61.643792    -0.388592    +2.344456    -4.375525    -8.738462 
   -0.388592   +66.179910    +6.241092    -8.809633    -6.390313 
   +2.344456    +6.241092   +52.629772    -2.536091    +6.409479 
   -4.375525    -8.809633    -2.536091   +57.669349   +19.447437 
   -8.738462    -6.390313    +6.409479   +19.447437   +72.877178 

 Eigenvalue: eigs_mR(A,EValue);
  +93.000 
  +68.000 
  +60.000 
  +49.000 
  +41.000 


 Press   return to continue
 Press X return to stop