Linear Algebra and the C Language/a03n


Install and compile this file in your working directory.

/* ------------------------------------ */
/*  Save as:   c01c.c                   */
/* ------------------------------------ */
#include "v_a.h"
/* ------------------------------------ */
#define   RA R5
#define   CA C3
/* ------------------------------------ */
#define FACTOR_E        +1.E-6         
/* ------------------------------------ */
void fun(void)
{
double **A    =       r_mR(        i_mR(RA,CA),999999);
double **Pinv = Pinv_Rn_mR(A,      i_mR(CA,RA),FACTOR_E);; 
double **Ide  =     mul_mR(Pinv,A, i_mR(CA,CA));  ;           

  clrscrn();
  printf(" A:");
  p_mR(A, S13,P2,C7);
  
  printf(" Pinv = V invS_T U_T ");
  pE_mR(Pinv, S13,P4,C10); 
  
  printf(" Ide = Pinv A                     (The left inverse of A)"); 
  p_mR(Ide, S7,P2,C10); 
      
  f_mR(A);
  f_mR(Pinv);
  f_mR(Ide); 
}
/* ------------------------------------ */
int main(void)
{
time_t t;

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


} while(stop_w());

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

Screen output example:

 A :
   -995227.00    -226139.00    -703009.00 
   +108243.00    +588588.00    +285819.00 
   +996770.00    -664334.00    -943657.00 
   +888060.00    +643156.00    +411191.00 
   -651933.00    +555244.00    -100982.00 

 Pinv = V * invS_T * U_T 
  -2.5771e-07   +7.8043e-08   +3.6977e-07   +3.2410e-07   -1.2069e-07 
  +2.5404e-07   +5.5658e-07   +1.6320e-07   +6.1718e-07   +7.9483e-07 
  -5.7204e-07   -2.2997e-07   -7.3835e-07   -2.2963e-07   -6.0662e-07 

 Ide = Pinv * A                     (The left inverse of A)
  +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