Linear Algebra and the C Language/a0ne


Install and compile this file in your working directory.

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

double s = 0;
int    i = 0;

  clrscrn(); 
  printf(" A:");
  p_mR(A, S5,P0,C10);
    
  printf(" Singular values:");
  p_mR(Svalues, S5,P5,C10);
  stop();
  
  clrscrn(); 

  for(i=R1;i<=r;i++)
  
      s += Svalues[i][C1];
      
  printf(" Sum of the singular values of A : s = %.3f\n\n\n", s); 
  

  printf(" The contribution of each singular value in percentage\n\n");
  
  for(i=R1;i<=r;i++)
  
      printf(" 100 Svalues[%d]/s = %+.3f%%\n",i,(100*Svalues[i][C1])/s);


  printf("\n\n\n"
         " The contribution of each singular value in proportion\n\n");
  
  for(i=R1;i<=r;i++)
  
      printf(" Svalues[%d]/s = %+.3f\n",i,(Svalues[i][C1])/s);
                  
  f_mR(A);
  f_mR(A_T);
  f_mR(Svalues);    
}
/* ------------------------------------ */
int main(void)
{
time_t t;

  srand(time(&t));

do
{
  
  fun(R4,C6);

} while(stop_w());

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

Screen output example:

                                                                                       
 A:
   +7    +6    +9    -4    -2    +6 
   +1    +4    +4    +1    +7    +7 
   +7    +6    +1    -8    -6    +4 
   +5    -5    +7    +7    -9    +5 

 Singular values:
+20.82396 
+15.06937 
+11.75594 
+3.32782 

 Press return to continue. 


 Sum of the singular values of A : s = 50.977


 The contribution of each singular value in percentage

 100 Svalues[1]/s = +40.850%
 100 Svalues[2]/s = +29.561%
 100 Svalues[3]/s = +23.061%
 100 Svalues[4]/s = +6.528%



 The contribution of each singular value in proportion

 Svalues[1]/s = +0.408
 Svalues[2]/s = +0.296
 Svalues[3]/s = +0.231
 Svalues[4]/s = +0.065

 Press   return to continue
 Press X return to stop