Mathc matrices/c12b3

Un livre de Wikilivres.


Application


Installer ce fichier dans votre répertoire de travail.


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

double **U     = i_mR(r,r);
double **V     = i_mR(c,c);
double **U_T   = i_mR(r,r);
double **V_T   = i_mR(c,c);

double **U_TA  = i_mR(r,c);  /* rr rc */
double **S     = i_mR(r,c);
double **US    = i_mR(r,c);  /* rr rc */

  clrscrn();
  printf(" Copy/Past into the octave windows \n\n\n");
  p_Octave_mR(A,"A",P2);
  printf(" [U, S, V] =svd (A,10)\n\n\n");
  stop();

  clrscrn(); 
  svd_U_Cn_mR(A,U);   
  svd_V_Cn_mR(A,V);      
  printf(" U :");
  p_mR(U ,S10,P6,C10);  
  printf(" V ");
  p_mR(V,S10,P6,C10); 

  transpose_mR( U,U_T);
  
/* S = U_T * A * V */
  mul_mR(U_T,A,U_TA);
  mul_mR(U_TA,V,S);
  
  printf(" S = U_T * A * V :");
  p_mR(S,S10,P5,C10); 
  stop();
  
  clrscrn();
  
  transpose_mR(V,V_T);
  
/* A = U * S * V_T */
  mul_mR(U,S,US);
  mul_mR(US,V_T,a);
  
  printf(" A :");
  p_mR(A ,S10,P6,C10); 
  printf(" A = U * S * V_T ");
  p_mR(a,S10,P6,C10);   
  
  f_mR(A);
  f_mR(a);  
  
  f_mR(U);
  f_mR(V); 
  f_mR(U_T);
  f_mR(V_T); 
  
  f_mR(U_TA);
  
  f_mR(S);   
  f_mR(US);   
 
}
/* ------------------------------------ */
int main(void)
{
time_t t;

  srand(time(&t));

int i;

do
{
  i = rp_I(R3)+R1;
  
  fun(i,i+C1);

} while(stop_w());

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


Dans cet exemple on vérifie que A = U * S * V_T.


Exemple de sortie écran :
 ------------------------------------ 
 Copy/Past into the octave windows 


 A=[
+4.00,-9.00,+4.00,-3.00,+4.00,-7.00;
-3.00,+6.00,+6.00,+2.00,+4.00,+8.00;
+6.00,-9.00,+8.00,-1.00,-3.00,-7.00;
-3.00,+2.00,+4.00,+2.00,-7.00,-5.00]

 [U, S, V] =svd (A,10)


 Press return to continue. 


 ------------------------------------ 
 U :
 +0.587930  -0.411385  +0.159656  +0.677946 
 -0.410144  -0.103193  +0.902580  +0.080510 
 +0.690032  +0.160158  +0.384660  -0.591813 
 +0.099883  +0.891326  +0.109066  +0.428562 

 V 
 -0.348395  +0.273605  -0.008539  +0.636541  +0.629582  -0.000000 
 +0.645975  -0.307306  +0.071007  -0.151982  +0.657789  -0.213340 
 -0.272731  -0.231687  +0.924606  -0.046963  +0.018612  -0.121413 
 +0.144299  -0.237825  +0.112069  +0.114025  +0.000000  +0.944595 
 +0.096601  +0.787710  +0.225314  -0.486712  +0.190516  +0.200505 
 +0.597328  +0.316192  +0.276880  +0.565350  -0.366466  -0.085336 

 S = U_T * A * V :
 -21.30538   +0.00000   +0.00000   +0.00000   -0.00000   -0.00000 
  +0.00000  -11.14379   +0.00000   -0.00000   +0.00000   +0.00000 
  +0.00000   +0.00000  +10.34781   +0.00000   +0.00000   -0.00000 
  -0.00000   +0.00000   +0.00000   -3.71745   +0.00000   -0.00000 

 Press return to continue. 


 ------------------------------------ 
 A :
 +4.000000  -9.000000  +4.000000  -3.000000  +4.000000  -7.000000 
 -3.000000  +6.000000  +6.000000  +2.000000  +4.000000  +8.000000 
 +6.000000  -9.000000  +8.000000  -1.000000  -3.000000  -7.000000 
 -3.000000  +2.000000  +4.000000  +2.000000  -7.000000  -5.000000 

 a = U * S * V_T 
 +4.000000  -9.000000  +4.000000  -3.000000  +4.000000  -7.000000 
 -3.000000  +6.000000  +6.000000  +2.000000  +4.000000  +8.000000 
 +6.000000  -9.000000  +8.000000  -1.000000  -3.000000  -7.000000 
 -3.000000  +2.000000  +4.000000  +2.000000  -7.000000  -5.000000 


 Press return to continue
 Press X      to stop