Linear Algebra and the C Language/a0ko


Install and compile this file in your working directory.

/* ------------------------------------ */
/*  Save as:    c00d.c                  */
/* ------------------------------------ */
#include "v_a.h"
/* ------------------------------------ */
/* ------------------------------------ */
double **X_invgj_pivot_mR(
double **Ab
)
{
double pivot = 1.;

int r= R1;

    while( pivot &&
          (r<Ab[R_SIZE  ][C0])
         )
       {
		   
        clrscrn();	
printf("/* --------- DEBUG 1 ---------- */\n");	   
		printf(" AID:");
        p_mR(Ab, S8,P4,C8);
        pivot = pivotbestAId_mR(Ab,r);
        printf(" pivot[%d][[%d] = %f         \n\n"
               "           pivotbestAId_mR();  \n"
               " zero_under_pivot_gj1Ab_mR();\n\n"
               ,r,r,pivot);
        printf(" AID:");
        p_mR(Ab, S8,P4,C8);
        stop();

       
        if(pivot>ERROR_E) 
                 zero_under_pivot_gj1Ab_mR(Ab,r);
        r++;
       }
		      
 clrscrn();
 printf("           pivotbestAId_mR();  \n"
        " zero_under_pivot_gj1Ab_mR();\n\n"
        " AID:\n");
 p_mR(Ab, S8,P4,C8); 

/* --------------------------- 

    while( (r>R1) )
       {
		 r--;
         zero_above_pivot_gj1Ab_mR(Ab,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);
   X_invgj_pivot_mR(AID);
/*        sort_c_mR(AID);      */
/*      v sort_r_mR(AID);      */
/*       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();
  
  printf(" A:");
  p_mR(A, S3,P4,C6);
  stop();  
  
  X_invgj_mR(A,InvA);

  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:

                                                                                       
 A:
+0.0060 -0.2050 -0.5100 -0.2720 
-0.0180 -0.0040 -0.6080 -0.8670 
-0.6000 -0.7490 +0.1190 +0.5800 
-0.8520 -0.5360 +0.0280 -0.8860 

 Press return to continue. 


/* --------- DEBUG 1 ---------- */
 AID:
 +0.0060  -0.2050  -0.5100  -0.2720  +1.0000  +0.0000  +0.0000  +0.0000 
 -0.0180  -0.0040  -0.6080  -0.8670  +0.0000  +1.0000  +0.0000  +0.0000 
 -0.6000  -0.7490  +0.1190  +0.5800  +0.0000  +0.0000  +1.0000  +0.0000 
 -0.8520  -0.5360  +0.0280  -0.8860  +0.0000  +0.0000  +0.0000  +1.0000 

 pivot[1][[1] = 0.886000         

           pivotbestAId_mR();  
 zero_under_pivot_gj1Ab_mR();

 AID:
 -0.8860  -0.5360  +0.0280  -0.8520  +1.0000  +0.0000  +0.0000  +0.0000 
 -0.8670  -0.0040  -0.6080  -0.0180  +0.0000  +1.0000  +0.0000  +0.0000 
 +0.5800  -0.7490  +0.1190  -0.6000  +0.0000  +0.0000  +1.0000  +0.0000 
 -0.2720  -0.2050  -0.5100  +0.0060  +0.0000  +0.0000  +0.0000  +1.0000 

 Press return to continue. 


/* --------- DEBUG 1 ---------- */
 AID:
 +1.0000  +0.6050  -0.0316  +0.9616  -1.1287  -0.0000  -0.0000  -0.0000 
 +0.0000  +0.5205  -0.6354  +0.8157  -0.9786  +1.0000  +0.0000  +0.0000 
 +0.0000  -1.0999  +0.1373  -1.1577  +0.6546  +0.0000  +1.0000  +0.0000 
 +0.0000  -0.0404  -0.5186  +0.2676  -0.3070  +0.0000  +0.0000  +1.0000 

 pivot[2][[2] = 1.157743         

           pivotbestAId_mR();  
 zero_under_pivot_gj1Ab_mR();

 AID:
 +1.0000  +0.9616  -0.0316  +0.6050  -1.1287  -0.0000  -0.0000  -0.0000 
 +0.0000  -1.1577  +0.1373  -1.0999  +0.6546  +0.0000  +1.0000  +0.0000 
 +0.0000  +0.8157  -0.6354  +0.5205  -0.9786  +0.0000  +0.0000  +1.0000 
 +0.0000  +0.2676  -0.5186  -0.0404  -0.3070  +1.0000  +0.0000  +0.0000 

 Press return to continue. 


/* --------- DEBUG 1 ---------- */
 AID:
 +1.0000  +0.9616  -0.0316  +0.6050  -1.1287  -0.0000  -0.0000  -0.0000 
 -0.0000  +1.0000  -0.1186  +0.9500  -0.5654  -0.0000  -0.8637  -0.0000 
 +0.0000  +0.0000  -0.5386  -0.2545  -0.5173  +0.0000  +0.7046  +1.0000 
 +0.0000  +0.0000  -0.4869  -0.2946  -0.1557  +1.0000  +0.2311  +0.0000 

 pivot[3][[3] = 0.538639         

           pivotbestAId_mR();  
 zero_under_pivot_gj1Ab_mR();

 AID:
 +1.0000  +0.9616  -0.0316  +0.6050  -1.1287  -0.0000  -0.0000  -0.0000 
 -0.0000  +1.0000  -0.1186  +0.9500  -0.5654  -0.0000  -0.8637  -0.0000 
 +0.0000  +0.0000  -0.5386  -0.2545  -0.5173  +0.0000  +0.7046  +1.0000 
 +0.0000  +0.0000  -0.4869  -0.2946  -0.1557  +1.0000  +0.2311  +0.0000 

 Press return to continue. 


/* --------- DEBUG 1 ---------- */
 AID:
 +1.0000  +0.9616  -0.0316  +0.6050  -1.1287  -0.0000  -0.0000  -0.0000 
 -0.0000  +1.0000  -0.1186  +0.9500  -0.5654  -0.0000  -0.8637  -0.0000 
 -0.0000  -0.0000  +1.0000  +0.4724  +0.9604  -0.0000  -1.3081  -1.8565 
 +0.0000  +0.0000  +0.0000  -0.0646  +0.3119  +1.0000  -0.4057  -0.9039 

 pivot[4][[4] = 0.064646         

           pivotbestAId_mR();  
 zero_under_pivot_gj1Ab_mR();

 AID:
 +1.0000  +0.9616  -0.0316  +0.6050  -1.1287  -0.0000  -0.0000  -0.0000 
 -0.0000  +1.0000  -0.1186  +0.9500  -0.5654  -0.0000  -0.8637  -0.0000 
 -0.0000  -0.0000  +1.0000  +0.4724  +0.9604  -0.0000  -1.3081  -1.8565 
 +0.0000  +0.0000  +0.0000  -0.0646  +0.3119  +1.0000  -0.4057  -0.9039 

 Press return to continue. 


           pivotbestAId_mR();  
 zero_under_pivot_gj1Ab_mR();

 AID:

 +1.0000  +0.9616  -0.0316  +0.6050  -1.1287  -0.0000  -0.0000  -0.0000 
 -0.0000  +1.0000  -0.1186  +0.9500  -0.5654  -0.0000  -0.8637  -0.0000 
 -0.0000  -0.0000  +1.0000  +0.4724  +0.9604  -0.0000  -1.3081  -1.8565 
 -0.0000  -0.0000  -0.0000  +1.0000  -4.8243 -15.4689  +6.2764 +13.9818 


 Press   return to continue
 Press X return to stop