Linear Algebra and the C Language/a0kl


Install and compile this file in your working directory.

/* ------------------------------------ */
/*  Save as:   c00i.c                   */
/* ------------------------------------ */
#include "v_a.h"
/* ------------------------------------ */
/* ------------------------------------ */
double **X_sort_r_mR(
double **Ab
)
{
double pivot;
int c;
int r;
int r_pivot = R1;


    for ( c=C1; c<Ab[C_SIZE_A][C0]; c++)
      {
              r = r_pivot;
          pivot = 0.;
          
      while( (pivot<ERROR_E) && r<Ab[R_SIZE][C0] )
         {
          pivot = fabs( Ab[r][c] );
clrscrn();     
printf("/* --------- DEBUG 1 ---------- */\n\n");       
printf(" AID: pivot[%d][%d] = %f  ",r,c,pivot);
p_mR(Ab, S8,P4,C8);

          if(pivot>ERROR_E) 
          {
            swapR_mR(Ab, r, r_pivot);
            r_pivot++;
          }
printf(" AID:");
p_mR(Ab, S8,P4,C8);
stop();
clrscrn();                            
/* --------- DEBUG 1 ---------- */

          r++;
         }
       }
       
 return(Ab);
}
/* ------------------------------------ */
/* ------------------------------------ */
double **X_invgj_mR(
double **A,
double **invA
)
{
double **ID = i_RC_mR(A[R_SIZE][C0],A[C_SIZE][C0]);
double **AID;

int r = A[R_SIZE][C0];

  r--;

  AID = i_Abr_Ac_bc_mR(r,r,r);

           eye_mR(ID);
      c_A_b_Ab_mR(A,ID,AID);
   invgj_pivot_mR(AID);
        sort_c_mR(AID);
      X_sort_r_mR(AID);
      
  printf("AID :  After the function: sort_r_mR();");       
  p_mR(AID, S8,P4,C8);
  
/*     c_Inv_A_mR(AID,invA); */

  f_mR(AID);
  f_mR(ID);

return(invA);
}
/* ------------------------------------ */
/* ------------------------------------ */
void fun(int r)
{
double **A    = rE_mR( i_mR(r,r), 999.,1E-3);
double **InvA =        i_mR(r,r);

  clrscrn();

  X_invgj_mR(A,InvA);

  printf(" Copy/Paste into the octave window.\n\n");
  printf("format short e\n");
  p_Octave_mR(A,"A",P4);
  printf(" inv(A)\n\n");
    
  f_mR(InvA);
  f_mR(A);
}
/* ------------------------------------ */
int main(void)
{
time_t t;

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

} while(stop_w());

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

Screen output example:

                                                                                       
/* --------- DEBUG 1 ---------- */

 AID: pivot[1][1] = 0.000000  
 +0.0000  +1.0000  +0.0000  +0.0000  +4.1573  +6.2030 +12.2463  +3.0548 
 +1.0000  +0.0000  +0.0000  +0.0000  -3.2077  -4.9875 -10.8286  -3.3476 
 -0.0000  +0.0000  +1.0000  +0.0000  -2.5456  -2.6766  -4.9260  -2.5902 
 +0.0000  -0.0000  +0.0000  +1.0000  +1.2886  +4.3219  +7.5614  +1.0892 

 AID:
 +0.0000  +1.0000  +0.0000  +0.0000  +4.1573  +6.2030 +12.2463  +3.0548 
 +1.0000  +0.0000  +0.0000  +0.0000  -3.2077  -4.9875 -10.8286  -3.3476 
 -0.0000  +0.0000  +1.0000  +0.0000  -2.5456  -2.6766  -4.9260  -2.5902 
 +0.0000  -0.0000  +0.0000  +1.0000  +1.2886  +4.3219  +7.5614  +1.0892 

 Press return to continue. 


/* --------- DEBUG 1 ---------- */

 AID: pivot[2][1] = 1.000000  
 +0.0000  +1.0000  +0.0000  +0.0000  +4.1573  +6.2030 +12.2463  +3.0548 
 +1.0000  +0.0000  +0.0000  +0.0000  -3.2077  -4.9875 -10.8286  -3.3476 
 -0.0000  +0.0000  +1.0000  +0.0000  -2.5456  -2.6766  -4.9260  -2.5902 
 +0.0000  -0.0000  +0.0000  +1.0000  +1.2886  +4.3219  +7.5614  +1.0892 

 AID:
 +1.0000  +0.0000  +0.0000  +0.0000  -3.2077  -4.9875 -10.8286  -3.3476 
 +0.0000  +1.0000  +0.0000  +0.0000  +4.1573  +6.2030 +12.2463  +3.0548 
 -0.0000  +0.0000  +1.0000  +0.0000  -2.5456  -2.6766  -4.9260  -2.5902 
 +0.0000  -0.0000  +0.0000  +1.0000  +1.2886  +4.3219  +7.5614  +1.0892 

 Press return to continue. 


/* --------- DEBUG 1 ---------- */

 AID: pivot[2][2] = 1.000000  
 +1.0000  +0.0000  +0.0000  +0.0000  -3.2077  -4.9875 -10.8286  -3.3476 
 +0.0000  +1.0000  +0.0000  +0.0000  +4.1573  +6.2030 +12.2463  +3.0548 
 -0.0000  +0.0000  +1.0000  +0.0000  -2.5456  -2.6766  -4.9260  -2.5902 
 +0.0000  -0.0000  +0.0000  +1.0000  +1.2886  +4.3219  +7.5614  +1.0892 

 AID:
 +1.0000  +0.0000  +0.0000  +0.0000  -3.2077  -4.9875 -10.8286  -3.3476 
 +0.0000  +1.0000  +0.0000  +0.0000  +4.1573  +6.2030 +12.2463  +3.0548 
 -0.0000  +0.0000  +1.0000  +0.0000  -2.5456  -2.6766  -4.9260  -2.5902 
 +0.0000  -0.0000  +0.0000  +1.0000  +1.2886  +4.3219  +7.5614  +1.0892 

 Press return to continue. 


/* --------- DEBUG 1 ---------- */

 AID: pivot[3][3] = 1.000000  
 +1.0000  +0.0000  +0.0000  +0.0000  -3.2077  -4.9875 -10.8286  -3.3476 
 +0.0000  +1.0000  +0.0000  +0.0000  +4.1573  +6.2030 +12.2463  +3.0548 
 -0.0000  +0.0000  +1.0000  +0.0000  -2.5456  -2.6766  -4.9260  -2.5902 
 +0.0000  -0.0000  +0.0000  +1.0000  +1.2886  +4.3219  +7.5614  +1.0892 

 AID:
 +1.0000  +0.0000  +0.0000  +0.0000  -3.2077  -4.9875 -10.8286  -3.3476 
 +0.0000  +1.0000  +0.0000  +0.0000  +4.1573  +6.2030 +12.2463  +3.0548 
 -0.0000  +0.0000  +1.0000  +0.0000  -2.5456  -2.6766  -4.9260  -2.5902 
 +0.0000  -0.0000  +0.0000  +1.0000  +1.2886  +4.3219  +7.5614  +1.0892 

 Press return to continue. 


/* --------- DEBUG 1 ---------- */

 AID: pivot[4][4] = 1.000000  
 +1.0000  +0.0000  +0.0000  +0.0000  -3.2077  -4.9875 -10.8286  -3.3476 
 +0.0000  +1.0000  +0.0000  +0.0000  +4.1573  +6.2030 +12.2463  +3.0548 
 -0.0000  +0.0000  +1.0000  +0.0000  -2.5456  -2.6766  -4.9260  -2.5902 
 +0.0000  -0.0000  +0.0000  +1.0000  +1.2886  +4.3219  +7.5614  +1.0892 

 AID:
 +1.0000  +0.0000  +0.0000  +0.0000  -3.2077  -4.9875 -10.8286  -3.3476 
 +0.0000  +1.0000  +0.0000  +0.0000  +4.1573  +6.2030 +12.2463  +3.0548 
 -0.0000  +0.0000  +1.0000  +0.0000  -2.5456  -2.6766  -4.9260  -2.5902 
 +0.0000  -0.0000  +0.0000  +1.0000  +1.2886  +4.3219  +7.5614  +1.0892 

 Press return to continue. 


AID :  After the function: sort_r_mR();
 +1.0000  +0.0000  +0.0000  +0.0000  -3.2077  -4.9875 -10.8286  -3.3476 
 +0.0000  +1.0000  +0.0000  +0.0000  +4.1573  +6.2030 +12.2463  +3.0548 
 -0.0000  +0.0000  +1.0000  +0.0000  -2.5456  -2.6766  -4.9260  -2.5902 
 +0.0000  -0.0000  +0.0000  +1.0000  +1.2886  +4.3219  +7.5614  +1.0892 

 Copy/Paste into the octave window.

format short e
 A=[
+0.6130,+0.9350,+0.0590,-0.5980;
+0.7860,-0.2270,-0.9030,+0.9050;
-0.4820,+0.0950,+0.6000,-0.3210;
-0.4980,-0.8650,-0.6520,+0.2630]

 inv(A)


 Press   return to continue
 Press X return to stop