Linear Algebra and the C Language/a0mj


Install and compile this file in your working directory.

/* ------------------------------------ */
/*  Save as :   c00d.c                  */
/* ------------------------------------ */
#include "v_a.h"
/* ------------------------------------ */
void fun(int r,int rn)
{
double **A          =         r_mR(            i_mR(r+rn,r),9);
double **A_T        = transpose_mR(A,          i_mR(r,r+rn));
double **A_TA       =       mul_mR(A_T,A,      i_mR(r,r)); 

double **SvdValue_2 =      eigs_mR(A_TA,       i_mR(r,C1));
double **SvdValue   =  sqrt_svd_mR(SvdValue_2, i_mR(r,C1));

  clrscrn();
  printf(" A :");
  p_mR(A,S5,P0,C6);  
   
  printf(" Copy/Paste into the octave windows \n\n\n");
  p_Octave_mR(A,"a",P0);
  printf(" SvdValue = svd (a,10)\n\n\n");
  stop();
  
  clrscrn();
  printf(" I calculate the square root of\n"
         " each eigenvalue and obtain the singular values.\n\n"
         " sqrt_svd_mR(SvdValue**2, SvdValue);\n\n" 
         " SvdValue**2:");
  p_mR(SvdValue_2,S13,P4,C1);

  printf(" SvdValue:");
  p_mR(SvdValue,S13,P4,C1);  
        
  f_mR(A);
  f_mR(A_T);
  f_mR(A_TA);
  f_mR(SvdValue_2);
  f_mR(SvdValue);
}
/* ------------------------------------ */
int main(void)
{
time_t t;

  srand(time(&t));

do
{
  fun(rp_I(R4),rp0_I(R4));

} while(stop_w());

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

Screen output example:

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

 Copy/Paste into the octave windows 


 a=[
+5,+5,-3,+7;
-1,+2,-6,-2;
-4,-5,-6,-6;
+2,+9,-2,+7;
+4,-1,+9,-6]

 SvdValue = svd (a,10)


 Press return to continue. 


 I calculate the square root of
 each eigenvalue and obtain the singular values.

 sqrt_svd_mR(SvdValue**2, SvdValue);

 SvdValue**2:
    +316.5309 
    +183.3032 
     +25.5570 
     +12.6089 

 SvdValue:
     +17.7913 
     +13.5390 
      +5.0554 
      +3.5509 


 Press   return to continue
 Press X return to stop    

 Press X return to stop