Linear Algebra and the C Language/a0fw


Install and compile this file in your working directory.

/* ------------------------------------ */
/*  Save as :  c00e.c                   */
/* ------------------------------------ */
#include "v_a.h"
/* ------------------------------------ */
#define   RA R3          
/* ------------------------------------ */
void fun(void)
{
double **A             = rsymmetric_mR(            i_mR(RA,RA),999.);

double **EigsVector    =     eigs_V_mR(A,          i_mR(RA,RA)); 
double **T_EigsVector  =  transpose_mR(EigsVector, i_mR(RA,RA));  
double **EigsValues    =                           i_mR(RA,RA);

double **T_EigsVectorA =                           i_mR(RA,RA);

  clrscrn(); 
  printf(" A:");
  p_mR(A, S10,P4,C6);
   
  printf(" EigsValues = T_EigsVector * A * EigsVector");
  mul_mR(T_EigsVector,A,T_EigsVectorA);
  mul_mR(T_EigsVectorA,EigsVector,EigsValues);
  p_mR(EigsValues, S10,P4,C6);  
    
  printf(" trace_R(A) \t\t= %10.1f\n",       trace_R(A));
  printf(" trace_R(EigsValues) \t= %10.1f\n",trace_R(EigsValues));    
    
  f_mR(A);
  
  f_mR(EigsVector);
  f_mR(T_EigsVector);
   
  f_mR(EigsValues);
   
  f_mR(T_EigsVectorA);
}
/* ------------------------------------ */
int main(void)
{
time_t t;

  srand(time(&t));

do
{
  fun();

} while(stop_w());

  return 0;
}
/* ------------------------------------ */
/* ------------------------------------ */
trace_R(A) = trace_R(EigsValues):

Screen output example:

                                                                                       
 A:
 -524.0000  +310.0000  +858.0000 
 +310.0000  -956.0000  -471.0000 
 +858.0000  -471.0000  +365.0000 

 EigsValues = T_EigsVector * A * EigsVector
-1523.6429    -0.0000    +0.0000 
   -0.0000  +920.2002    -0.0000 
   +0.0000    -0.0000  -511.5574 

 trace_R(A) 		=    -1115.0
 trace_R(EigsValues) 	=    -1115.0

 Press   return to continue
 Press X return to stop