Linear Algebra and the C Language/a0ir


Install and compile this file in your working directory.

/* ------------------------------------ */
/*  Save as :   c00a.c                  */
/* ------------------------------------ */
#include "v_a.h"
/* ------------------------------------ */
/* ------------------------------------ */
#define   RA R3
#define   CA C5
/* ------------------------------------ */
/* ------------------------------------ */
void fun(void)
{
double **A          =          r_mR(              i_mR(RA,CA),9);/* RA,CA        */
double **A_T        =  transpose_mR(A,            i_mR(CA,RA));  /* CA,RA        */
double **AA_T       =        mul_mR(A,A_T,        i_mR(RA,RA));  /* RA,CA  CA,RA */ 
double **invAA_T    =        inv_mR(AA_T,         i_mR(RA,RA));  /* RA,RA        */ 
double **A_TinvAA_T =        mul_mR(A_T,invAA_T,  i_mR(CA,RA));  /* CA,RA  RA,RA */ 
double **Ide        =        mul_mR(A,A_TinvAA_T, i_mR(RA,RA));  /* RA,CA  CA,RA */ 

  clrscrn();
  printf(" A :");
  p_mR(A, S7,P2,C5);
  
  printf(" A_T :");
  p_mR(A_T, S7,P1,C5);
  printf(" AA_T:");
  p_mR(AA_T, S7,P1,C5);  
  stop();
  
  clrscrn();  
  printf(" inv(AA_T) :");
  pE_mR(invAA_T,  S12,P4,C5);;  
  printf(" Pseudo Inverse = A_T inv(AA_T):");
  pE_mR(A_TinvAA_T, S12,P4,C5);
  printf(" Ide = A (A_T inv(AA_T))");    
  p_mR(Ide, S7,P2,C5);  
  
  f_mR(A);
  f_mR(A_T);
  f_mR(AA_T);        
  f_mR(invAA_T);     
  f_mR(A_TinvAA_T);  
  f_mR(Ide); 
}
/* ------------------------------------ */
int main(void)
{
time_t t;

  srand(time(&t));
do
{
  fun();


} while(stop_w());

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

Screen output example:

                                                                                       
 A :
  -4.00   +9.00   -6.00   -1.00   -8.00 
  -8.00   -1.00   +8.00   -3.00   +2.00 
  -2.00   +2.00   -2.00   +3.00   +2.00 

 A_T :
   -4.0    -8.0    -2.0 
   +9.0    -1.0    +2.0 
   -6.0    +8.0    -2.0 
   -1.0    -3.0    +3.0 
   -8.0    +2.0    +2.0 

 AA_T:
 +198.0   -38.0   +19.0 
  -38.0  +142.0    -7.0 
  +19.0    -7.0   +25.0 

 Press return to continue. 


 inv(AA_T) :
 +5.6840e-03  +1.3264e-03  -3.9484e-03 
 +1.3264e-03  +7.4504e-03  +1.0780e-03 
 -3.9484e-03  +1.0780e-03  +4.3303e-02 

 Pseudo Inverse = A_T inv(AA_T):
 -2.5450e-02  -6.7065e-02  -7.9436e-02 
 +4.1932e-02  +6.6435e-03  +4.9992e-02 
 -1.5596e-02  +4.9488e-02  -5.4291e-02 
 -2.1508e-02  -2.0443e-02  +1.3062e-01 
 -5.0716e-02  +6.4454e-03  +1.2035e-01 

 Ide = A (A_T inv(AA_T))
   +1.00    +0.00    +0.00 
   +0.00    +1.00    -0.00 
   +0.00    +0.00    +1.00 


 Press   return to continue
 Press X return to stop