Linear Algebra and the C Language/a05o


Install and compile this file in your working directory.

/* ------------------------------------ */
/*  Save as :  c00b.c                   */
/* ------------------------------------ */
#include "v_a.h"
/* ------------------------------------ */
/* ------------------------------------ */
double Xdet_R(
double **A
)
{
double **T = c_mR(A,
                i_RC_mR(A[R_SIZE][C0],A[C_SIZE][C0]));
                
double   SIGN = 1;
double  PIVOT = 1;

double deter=1;
int rc;
/* ------------------------------------ */
    for( rc=C1; rc<T[C_SIZE][C0]; rc++)
       { 
        SIGN   = pivotbest_mR(T,rc);
        deter *= SIGN;       
/* ------------------------------------ */
		clrscrn();
		printf(" deter *= pivotbest_mR(T,rc);\n\n" 
		       "  SIGN = %+0.4f \n deter = %+0.4f\n\n\n",SIGN,deter); 
		p_mR(T,S10,P4,C6);
		stop();
/* ------------------------------------ */
        PIVOT  = zero_under_pivot_mR(T,rc);
        deter *= PIVOT;        
/* ------------------------------------ */
		clrscrn();
		printf(" deter *= zero_under_pivot_mR(T,rc);\n\n"  
		       " PIVOT  = %+0.4f\n" 
		       " deter *= PIVOT \n" 	
		       " deter  = %+0.4f\n",PIVOT,deter);		  
		p_mR(T,S10,P4,C6);
		if(rc+C1<T[C_SIZE][C0]) stop();
/* ------------------------------------ */          
       }

   f_mR(T);

return(deter);
}
/* ------------------------------------ */
/* ------------------------------------ */
void fun(void)
{
double **A = r_mR(i_mR(R4,R4),999);

  clrscrn();
  printf(" Copy/Paste into the octave window.       \n\n");
  p_Octave_mR(A,"A",P1);
  printf(" det(A)\n\n\n");
  stop();

  printf(" det(A) = %.4e\n",Xdet_R(A));
  
  f_mR(A);
}
/* ------------------------------------ */
int main(void)
{
time_t t;

  srand(time(&t));

do
{
  fun();

} while(stop_w());

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


Screen output example:

 Copy/Paste into the octave window.       

 A=[
-403.0,+533.0,-613.0,+980.0;
-166.0,-686.0,+431.0,+534.0;
+534.0,+897.0,-248.0,-705.0;
+508.0,+707.0,-506.0,+272.0]

 det(A)


 Press return to continue. 


 deter *= pivotbest_mR(T,rc);

  SIGN = -1.0000 
 deter = -1.0000



 +980.0000  +533.0000  -613.0000  -403.0000 
 +534.0000  -686.0000  +431.0000  -166.0000 
 -705.0000  +897.0000  -248.0000  +534.0000 
 +272.0000  +707.0000  -506.0000  +508.0000 

 Press return to continue. 


 deter *= zero_under_pivot_mR(T,rc);

 PIVOT  = +980.0000
 deter *= PIVOT 
 deter  = -980.0000

   +1.0000    +0.5439    -0.6255    -0.4112 
   +0.0000  -976.4306  +765.0224   +53.5939 
   +0.0000 +1280.4337  -688.9847  +244.0867 
   +0.0000  +559.0653  -335.8612  +619.8531 

 Press return to continue. 


 deter *= pivotbest_mR(T,rc);

  SIGN = -1.0000 
 deter = +980.0000



   +1.0000    +0.5439    -0.6255    -0.4112 
   +0.0000 +1280.4337  -688.9847  +244.0867 
   +0.0000  -976.4306  +765.0224   +53.5939 
   +0.0000  +559.0653  -335.8612  +619.8531 

 Press return to continue. 


 deter *= zero_under_pivot_mR(T,rc);

 PIVOT  = +1280.4337
 deter *= PIVOT 
 deter  = +1254825.0000

   +1.0000    +0.5439    -0.6255    -0.4112 
   +0.0000    +1.0000    -0.5381    +0.1906 
   +0.0000    +0.0000  +239.6178  +239.7291 
   +0.0000    +0.0000   -35.0355  +513.2795 

 Press return to continue. 


 deter *= pivotbest_mR(T,rc);

  SIGN = +1.0000 
 deter = +1254825.0000



   +1.0000    +0.5439    -0.4112    -0.6255 
   +0.0000    +1.0000    +0.1906    -0.5381 
   +0.0000    +0.0000  +513.2795   -35.0355 
   +0.0000    +0.0000  +239.7291  +239.6178 

 Press return to continue. 


 deter *= zero_under_pivot_mR(T,rc);

 PIVOT  = +513.2795
 deter *= PIVOT 
 deter  = +644075901.0000

   +1.0000    +0.5439    -0.4112    -0.6255 
   +0.0000    +1.0000    +0.1906    -0.5381 
   +0.0000    +0.0000    +1.0000    -0.0683 
   +0.0000    +0.0000    +0.0000  +255.9813 

 Press return to continue. 


 deter *= pivotbest_mR(T,rc);

  SIGN = +1.0000 
 deter = +644075901.0000



   +1.0000    +0.5439    -0.4112    -0.6255 
   +0.0000    +1.0000    +0.1906    -0.5381 
   +0.0000    +0.0000    +1.0000    -0.0683 
   +0.0000    +0.0000    +0.0000  +255.9813 

 Press return to continue. 


 deter *= zero_under_pivot_mR(T,rc);

 PIVOT  = +255.9813
 deter *= PIVOT 
 deter  = +164871377501.0002

   +1.0000    +0.5439    -0.4112    -0.6255 
   +0.0000    +1.0000    +0.1906    -0.5381 
   +0.0000    +0.0000    +1.0000    -0.0683 
   +0.0000    +0.0000    +0.0000    +1.0000 

 det(A) = 1.6487e+11

 Press   return to continue
 Press X return to stop