Linear Algebra and the C Language/a09e


Install and compile this file in your working directory.

/* ------------------------------------ */
/*  Save as :   c00f2.c                 */
/* ------------------------------------ */
#include "v_a.h"
/* ------------------------------------ */
/* ------------------------------------ */
#define   RAb  R4
#define   CA   C4
#define   Cb   C1
/* ------------------------------------ */
# define FREEV C3
/* ------------------------------------ */
/* ------------------------------------ */
int main(void)
{
double ab[RAb*(CA+C1)]={
-1888.0,  +674.0, -1554.0,  -262.0, -1184.0, 
+2832.0, -1011.0, +2331.0,  +393.0, +1776.0, 
 -944.0,  +337.0,  -777.0,  -131.0,  -592.0, 
-3776.0, +1348.0, -3108.0,  -524.0, -2368.0        
};

double **Ab      = ca_A_mR(ab, i_Abr_Ac_bc_mR(RAb, CA, Cb));
double **Ab_free =             i_Abr_Ac_bc_mR(CA,  CA, Cb + FREEV);
double **b_free  =                       i_mR(CA,      Cb + FREEV); 
double **A       = c_Ab_A_mR(Ab,         i_mR(RAb,     CA));     
double **b       = c_Ab_b_mR(Ab,         i_mR(RAb,     Cb)); 

double **Ax      =                       i_mR(RAb,     Cb + FREEV); 

  clrscrn();
  printf(" Ab:");
  p_mR(Ab, S9,P3,C11);
  
      gj_PP_mR(Ab,NO);                /* You can try with gj_PP_mR(Ab,YES); */
  put_zeroR_mR(Ab,Ab_free);           /* you get the same result!!!         */ 
  put_freeV_mR(Ab_free); 
      gj_PP_mR(Ab_free,YES); 
     c_Ab_b_mR(Ab_free,b_free);
  
  printf(" b:"); 
  p_mR(b, S9,P3,C11);     
  printf(" x:"); 
  p_mR(b_free, S9,P3,C11); 
  printf(" Ax:"); 
  p_mR(mul_mR(A,b_free, Ax), S9,P3,C11);   
  stop();

  f_mR(Ab);
  f_mR(Ab_free);
  f_mR(b_free);

  f_mR(A);
  f_mR(b);
  f_mR(Ax);
    
  return 0;
}
/* ------------------------------------ */
/* ------------------------------------ */
You can see that the vectors row of A are orthogonal to the vectors column of the free variables.

                                    <RowA,ColomnFreeV> = 0

Screen output example:

 Ab:
-1888.000  +674.000 -1554.000  -262.000 -1184.000 
+2832.000 -1011.000 +2331.000  +393.000 +1776.000 
 -944.000  +337.000  -777.000  -131.000  -592.000 
-3776.000 +1348.000 -3108.000  -524.000 -2368.000 

 b:
-1184.000 
+1776.000 
 -592.000 
-2368.000 

 x:
   +0.627    +0.357    -0.823    -0.139 
   +0.000    +1.000    +0.000    +0.000 
   +0.000    +0.000    +1.000    +0.000 
   +0.000    +0.000    +0.000    +1.000 

 Ax:
-1184.000    +0.000    +0.000    +0.000 
+1776.000    +0.000    +0.000    +0.000 
 -592.000    +0.000    +0.000    +0.000 
-2368.000    +0.000    +0.000    +0.000 

 Press return to continue.