Calculer les Valeurs Singulières


Installer et compiler ces fichiers dans votre répertoire de travail.

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

  clrscrn();
  printf(" A \n");
  p_mR(A,3,0,C6);
  printf(" A^t  (transpose)\n");
  p_mR(transpose_mR(A,A_t),S3,P0,C6);
  stop();

  clrscrn();
  printf(" AA_t : ");
  p_mR(mul_mR(A,A_t,AA_t),S8,P0,C6);
  printf(" A_tA : ");
  p_mR(mul_mR(A_t,A,A_tA),S8,P0,C6);  
  
  f_mR(A);
  f_mR(A_t);
  f_mR(AA_t);
  f_mR(A_tA);  
}
/* ------------------------------------ */
int main(void)
{
time_t t;

  srand(time(&t));
  
  do 
    fun(rp_I(R6),rp_I(C6));
        
  while(stop_w());

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


Multiplions une matrice par sa transposé. Nous obtenons une matrice carré, avec des valeurs toujours positives sur la diagonale. 


Exemple de sortie écran :
 A 

 -8  +1  +5  -8  -2  -4 
 -3  -5  +6  -8  +3  -9 
 -9  -5  +6  -1  -1  +3 
 +5  +1  -8  +8  -8  -3 
 +5  +7  +1  -6  +5  +5 

 A^t  (transpose)

 -8  -3  -9  +5  +5 
 +1  -5  -5  +1  +7 
 +5  +6  +6  -8  +1 
 -8  -8  -1  +8  -6 
 -2  +3  -1  -8  +5 
 -4  -9  +3  -3  +5 

 Press return to continue. 

 ------------------------------
 AA_t : 
    +174     +143      +95     -115      -10 
    +143     +224      +66     -129      -26 
     +95      +66     +153     -107      -58 
    -115     -129     -107     +227      -79 
     -10      -26      -58      -79     +161 

 A_tA : 
    +204      +92     -147     +107       +1      +42 
     +92     +101      -56       +3      +15      +58 
    -147      -56     +162     -164      +71      -27 
    +107       +3     -164     +229     -101      +47 
      +1      +15      +71     -101     +103      +27 
     +42      +58      -27      +47      +27     +140 


 Press return to continue
 Press X      to stop