Aller au contenu

Mathc complexes/a316

Un livre de Wikilivres.


SVD Singular Value Decomposition

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


c00c.c
/* ------------------------------------ */
/*  save as :   c00c.c                  */
/* ------------------------------------ */
#include "w_a.h"
/* ------------------------------------ */
#define FACTOR_E        +1.E-4   
/* ------------------------------------ */
/* ------------------------------------ */
void fun(int rc)
{      
double **A       =          r_mZ(              i_mZ(rc,rc),        99);	
double **A_T     = ctranspose_mZ(A,            i_mZ(rc,rc));
double **A_TA    =        mul_mZ(A_T, A,       i_mZ(rc,rc));

double **U       =        X_U_mZ(A_TA,         i_mZ(rc,rc),   FACTOR_E);  
double **U_T     = ctranspose_mZ(U,            i_mZ(rc,rc));  

double **UU_T    =        mul_mZ(U, U_T,       i_mZ(rc,rc));
double **U_TU    =        mul_mZ(U_T, U,       i_mZ(rc,rc));

  clrscrn();
  printf(" A :");
  p_mZ(A, S10,P2, S8,P2, C4);
  
  printf(" A_TA :");
  p_mZ(A_TA, S12,P2, S10,P2, C3);
  stop();

  clrscrn();       
  printf(" U :");
  p_mZ(U, S8,P4, S7,P4, C4);
  
  printf(" U * U_T :");
  p_mZ(UU_T, S7,P2, S6,P2, C6);
  
  printf(" U_T * U :");
  p_mZ(U_TU, S7,P2, S6,P2, C6);

  f_mZ(A);   
  f_mZ(A_T);
  f_mZ(A_TA);
      
  f_mZ(U);
  f_mZ(U_T); 
  f_mZ(UU_T);  
  f_mZ(U_TU);   
}
/* ------------------------------------ */
int main(void)
{
time_t t;

  srand(time(&t));

do
{
    fun(RC4);
    
} while(stop_w());

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


Exemple de sortie écran :
 A :
    -81.00  +77.00i     -89.00  -68.00i     -39.00  +51.00i     +33.00   +6.00i 
    -18.00  -32.00i     +81.00  -78.00i     +15.00  +45.00i     +41.00  -30.00i 
    -13.00  -38.00i     -90.00  +95.00i     +42.00  +39.00i     -11.00  -71.00i 
    +18.00   +4.00i     -94.00  +77.00i     -26.00  +76.00i     -23.00  +85.00i 

 A_TA :
   +15791.00     +0.00i      -813.00 +13464.00i     +3184.00  +1103.00i 
     -813.00 -13464.00i    +57080.00     +0.00i     +5929.00 -15018.00i 
    +3184.00  -1103.00i     +5929.00 +15018.00i    +16109.00     +0.00i 
     +778.00   -952.00i     +5268.00  -3694.00i     +2111.00  +7227.00i 

     +778.00   +952.00i 
    +5268.00  +3694.00i 
    +2111.00  -7227.00i 
   +16622.00     +0.00i 

 Press return to continue. 


 U :
 -0.1357+0.2246i  +0.0499+0.0314i  +0.6833-0.6543i  -0.1750+0.0456i 
 +0.8038+0.4366i  +0.0865+0.0937i  +0.1159+0.1655i  -0.2442-0.2159i 
 -0.0359+0.2960i  +0.1425-0.5595i  +0.0323+0.2285i  -0.1988+0.6964i 
 +0.0746+0.0000i  +0.8043+0.0000i  +0.1047-0.0000i  +0.5801-0.0000i 

 U * U_T :
  +1.00 +0.00i   -0.00 +0.00i   +0.00 +0.00i   -0.00 -0.00i 
  -0.00 -0.00i   +1.00 +0.00i   +0.00 -0.00i   -0.00 -0.00i 
  +0.00 -0.00i   +0.00 +0.00i   +1.00 +0.00i   -0.00 +0.00i 
  -0.00 +0.00i   -0.00 +0.00i   -0.00 -0.00i   +1.00 +0.00i 

 U_T * U :
  +1.00 +0.00i   -0.00 -0.00i   -0.00 -0.00i   +0.00 +0.00i 
  -0.00 +0.00i   +1.00 +0.00i   +0.00 +0.00i   +0.00 +0.00i 
  -0.00 +0.00i   +0.00 -0.00i   +1.00 +0.00i   -0.00 -0.00i 
  +0.00 -0.00i   +0.00 -0.00i   -0.00 +0.00i   +1.00 +0.00i 


 Press   return to continue
 Press X return to stop