Linear Algebra and the C Language/a04u


Install and compile this file in your working directory.

/* ------------------------------------ */
/*  Save as:   c00b.c                   */
/* ------------------------------------ */
#include "v_a.h"
/* ------------------------------------ */
#define   RA R5
#define   CA C3
/* ------------------------------------ */
int main(void)
{
double tA[RA*CA]={
  -8,  +6,  -3, 
  +4,  -9,  +5,
  -7,  -5,  -5, 
  +9,  +9,  -1, 
  +3,  -8,  +3  
};

double **A          =      ca_A_mR(tA,           i_mR(RA,CA));
double **A_T        = transpose_mR(A,            i_mR(CA,RA));
double **A_TA       =       mul_mR(A_T,A,        i_mR(CA,CA));  
double **invA_TA    =       inv_mR(A_TA,         i_mR(CA,CA));  
double **invA_TAA_T =       mul_mR(invA_TA,A_T,  i_mR(CA,RA));  
double **Ide        =       mul_mR(invA_TAA_T,A, i_mR(CA,CA)); 

  clrscrn();
  printf(" A:");
  p_mR(A, S7,P2,C5);
  
  printf(" A_T:");
  p_mR(A_T, S7,P2,C5);
  
  printf(" A_TA:");
  p_mR(A_TA, S7,P2,C5); 
  stop();
  
  clrscrn();  
  printf(" inv(A_TA):");
  pE_mR(invA_TA, S12,P4,C5);  
  
  printf(" Pseudo Inverse = inv(A_TA) A_T");
  pE_mR(invA_TAA_T, S12,P4,C5); 
  
  printf(" Ide = (inv(A_TA) A_T) A");   
  p_mR(Ide, S8,P2,C5);
  
  stop();  
  
  f_mR(A);

  f_mR(A_T);
  f_mR(A_TA);        
  f_mR(invA_TA);     
  f_mR(invA_TAA_T);  
    
  f_mR(Ide); 


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

Screen output example:

 A:
  -8.00   +6.00   -3.00 
  +4.00   -9.00   +5.00 
  -7.00   -5.00   -5.00 
  +9.00   +9.00   -1.00 
  +3.00   -8.00   +3.00 

 A_T:
  -8.00   +4.00   -7.00   +9.00   +3.00 
  +6.00   -9.00   -5.00   +9.00   -8.00 
  -3.00   +5.00   -5.00   -1.00   +3.00 

 A_TA:
+219.00   +8.00  +79.00 
  +8.00 +287.00  -71.00 
 +79.00  -71.00  +69.00 

 Press return to continue. 


 inv(A_TA):
 +1.0955e-02  -4.5720e-03  -1.7247e-02 
 -4.5720e-03  +6.5823e-03  +1.2008e-02 
 -1.7247e-02  +1.2008e-02  +4.6595e-02 

 Pseudo Inverse = inv(A_TA) A_T
 -6.3329e-02  -1.2675e-03  +3.2411e-02  +7.4691e-02  +1.7700e-02 
 +4.0047e-02  -1.7490e-02  -6.0946e-02  +6.0851e-03  -3.0351e-02 
 +7.0236e-02  +5.5918e-02  -1.7229e-01  -9.3747e-02  -8.0175e-03 

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

 Press return to continue.