Linear Algebra and the C Language/a0d7


Install and compile this file in your working directory.

/* ------------------------------------ */
/*  Save as :  c00c.c                   */
/* ------------------------------------ */
#include "v_a.h"
/* ------------------------------------ */
#define   RCA        RC4
/* ------------------------------------ */
/* ------------------------------------ */
double f(
double x)
{
        return(1.0/(x));
}
char  feq[] =  "1.0/(x)";
/* ------------------------------------ */
/* ------------------------------------ */
void fun(void)
{
double **A             = rsymmetric_mR(            i_mR(RCA,RCA),999.);
double **invA          =                           i_mR(RCA,RCA);

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

double **EigsValue     =                           i_mR(RCA,RCA);
double **invEigsValue  =                           i_mR(RCA,RCA);

double **T             =                           i_mR(RCA,RCA);

  clrscrn();
  printf(" A :");
  p_mR(A,S10,P2,C6);  
  
/* EigsValue = T_EigsVector * A * EigsVector */  
  mul_mR(T_EigsVector,A,T);
  mul_mR(T,EigsVector,EigsValue);   
    
  f_eigs_mR(f,EigsValue,invEigsValue);

/* invA = EigsVector * invEigsValue * T_EigsVector */ 
  mul_mR(EigsVector,invEigsValue,T);
  mul_mR(T,T_EigsVector,invA);
  
  printf(" invA = EigsVector * invEigsValue * T_EigsVector");  
  pE_mR(invA,S10,P4,C6); 
  
  printf(" Ide = A * invA "); 
  p_mR(mul_mR(A,invA,T),S10,P5,C10);     
   
  f_mR(A);
  f_mR(invA);
    
  f_mR(EigsVector);
  f_mR(T_EigsVector);
  
  f_mR(EigsValue);
  f_mR(invEigsValue);    
     
  f_mR(T);
}
/* ------------------------------------ */
int main(void)
{
time_t t;

  srand(time(&t));

do
{
  fun();

} while(stop_w());

  return 0;
}
/* ------------------------------------ */
/* ------------------------------------ */


Screen output example:

                                                                                       
 A :
   +421.00    -342.00    +330.00    +597.00 
   -342.00    -623.00    -182.00    -388.00 
   +330.00    -182.00    +660.00    +216.00 
   +597.00    -388.00    +216.00    -182.00 

 invA = EigsVector * invEigsValue * T_EigsVector
+2.2760e-04 -8.1928e-04 -8.3237e-04 +1.5053e-03 
-8.1928e-04 -1.1110e-03 +1.4953e-04 -1.4138e-04 
-8.3237e-04 +1.4953e-04 +2.1395e-03 -5.0998e-04 
+1.5053e-03 -1.4138e-04 -5.0998e-04 -8.6062e-04 

 Ide = A * invA 
  +1.00000   -0.00000   +0.00000   -0.00000 
  +0.00000   +1.00000   +0.00000   +0.00000 
  -0.00000   -0.00000   +1.00000   -0.00000 
  -0.00000   -0.00000   +0.00000   +1.00000 


 Press   return to continue
 Press X return to stop