Linear Algebra and the C Language/a0fy


Install and compile this file in your working directory.

/* ------------------------------------ */
/*  Save as :  c00f.c                   */
/* ------------------------------------ */
#include "v_a.h"
/* ------------------------------------ */
#define  ARRAY  A4 
/* ------------------------------------ */
#define    RCA  R3  
/* ------------------------------------ */
void fun(void)
{
double **A[ARRAY];
double **P[ARRAY];
double **InvP[ARRAY];

double **T = i_mR(RCA,RCA);
int i;

  for(i=A0; i<ARRAY; i++)
     {   
         A[i] =              i_mR(RCA,RCA); 
         P[i] =   r_mR(      i_mR(RCA,RCA),99); 
      InvP[i] = inv_mR(P[i], i_mR(RCA,RCA));       
	   } 

  rsymmetric_mR(A[A0],99);

/* A[n] similar matrices */  
    for(i=A0; i<(ARRAY-A1); i++)
     {   
        mul_mR(InvP[i],A[i],T); 
        mul_mR(T,P[i],A[i+C1]);
	   } 

  clrscrn();
  printf(" Let A[0], A[1], ... be a set of similar matrices.\n\n\n\n"); 
  stop();	
     
  clrscrn();
  
  for(i=A0; i<ARRAY; i++)
     {
	  printf(" A[%d] : \t\t\t trace = %+.4f ",i,trace_R(A[i]));      
      p_mR(A[i], S9,P2,C6); 
     } 

  for(i=A0; i<ARRAY; i++)
     { 
	   f_mR(A[i]);
	   f_mR(P[i]);		 
	   f_mR(InvP[i]); 
	   }
	   
  f_mR(T);       
}
/* ------------------------------------ */
int main(void)
{
time_t t;

  srand(time(&t));
  
  do{
        fun();
        
  }while(stop_w());

  return 0;
}
/* ------------------------------------ */
/* ------------------------------------ */
The traces of similar matrices:

Screen output example:

                                                                                       
 Let A[0], A[1], ... be a set of similar matrices.



 Press return to continue. 


 A[0] : 			 trace = +65.0000 
    -8.00    +90.00    -60.00 
   +90.00    -15.00    +63.00 
   -60.00    +63.00    +88.00 

 A[1] : 			 trace = +65.0000 
  +410.41   -108.00   +642.45 
  -239.44   +158.02   -464.44 
  -312.47    +62.12   -503.43 

 A[2] : 			 trace = +65.0000 
   +47.98     +3.38    +67.30 
 +2237.43     +8.60   -860.04 
  +103.49     -4.56     +8.43 

 A[3] : 			 trace = +65.0000 
  +625.79   +922.27   +206.84 
  -154.49   -303.33    -47.06 
  -898.08  -1550.41   -257.46 


 Press   return to continue
 Press X return to stop