Linear Algebra and the C Language/a0gt


Install and compile this file in your working directory.

/* ------------------------------------ */
/*  Save as :   c00f.c                  */
/* ------------------------------------ */
#include "v_a.h"
/* ------------------------------------ */
void fun(int r)
{
double **A      =         r_mR(                  i_mR(r,r), 9);
double **AT     = transpose_mR(A,                i_mR(r,r));

double **AplsAT =       add_mR(A,AT,             i_mR(r,r));
double **AmnsAT =       sub_mR(A,AT,             i_mR(r,r));

double **AplsAT2 =      smul_mR(1./2., AplsAT,   i_mR(r,r));
double **AmnsAT2 =      smul_mR(1./2., AmnsAT,   i_mR(r,r));

double **T       =       add_mR(AplsAT2,AmnsAT2, i_mR(r,r));

  clrscrn();  
  printf(" A");  
  p_mR(A, S7,P3, C6);
  
  printf(" Symmetric matrix : A + AT");  
  p_mR(AplsAT, S7,P3, C6);
  
  printf("      Skew matrix : A - AT");  
  p_mR(AmnsAT, S7,P3, C6);
  stop();
  
  clrscrn();  
  printf(" A ");  
  p_mR(A, S7,P3, C6);
  
  printf(" A = (A + AT)/2 + (A - AT)/2");  
  p_mR(T, S7,P3, C6);
      
  f_mR(A);
  f_mR(T);
  f_mR(AT);
  f_mR(AplsAT);
  f_mR(AmnsAT);
  f_mR(AplsAT2);
  f_mR(AmnsAT2);
}
/* ------------------------------------ */
int main(void)
{
time_t t;

  srand(time(&t));

do
{
  fun(rp_I(R4)+R1);

} while(stop_w());

  return 0;
}
/* ------------------------------------ */
/* ------------------------------------ */
Let A be a square matrix: A = (A+AT)/2 + (A-AT)/2

Screen output example:

                                                                                       
 A
 -1.000  -7.000  -5.000  +4.000 
 +3.000  +4.000  -8.000  +7.000 
 -4.000  +6.000  +7.000  +1.000 
 -7.000  -4.000  -1.000  +8.000 

 Symmetric matrix : A + AT
 -2.000  -4.000  -9.000  -3.000 
 -4.000  +8.000  -2.000  +3.000 
 -9.000  -2.000 +14.000  +0.000 
 -3.000  +3.000  +0.000 +16.000 

      Skew matrix : A - AT
 +0.000 -10.000  -1.000 +11.000 
+10.000  +0.000 -14.000 +11.000 
 +1.000 +14.000  +0.000  +2.000 
-11.000 -11.000  -2.000  +0.000 

 Press return to continue. 

 A 
 -1.000  -7.000  -5.000  +4.000 
 +3.000  +4.000  -8.000  +7.000 
 -4.000  +6.000  +7.000  +1.000 
 -7.000  -4.000  -1.000  +8.000 

 A = (A + AT)/2 + (A - AT)/2
 -1.000  -7.000  -5.000  +4.000 
 +3.000  +4.000  -8.000  +7.000 
 -4.000  +6.000  +7.000  +1.000 
 -7.000  -4.000  -1.000  +8.000 


 Press   return to continue
 Press X return to stop