Décomposition d'une matrice en éléments propres

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


c00a.c
/* ------------------------------------ */
/*  save as :   c00a.c                  */
/* ------------------------------------ */
#include "w_a.h"
/* ------------------------------------ */
#define FACTOR_E        +1.E-0   
/* ------------------------------------ */       
/* ------------------------------------ */
void fun(int rc)
{
double **A    = rEcsymmetric_mZ(             i_mZ(rc,rc),99,1E-2);;
double **A_T  =   ctranspose_mZ(A,           i_mZ(rc,rc));

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

double **U_TA =          mul_mZ(U_T, A,      i_mZ(rc,rc));
double **X    =          mul_mZ(U_TA, U,     i_mZ(rc,rc));
            
double **ExpX =       f_eigs_mZ(exp,X,       i_mZ(rc,rc));
double **UExpX =         mul_mZ(U,ExpX,      i_mZ(rc,rc));
double **ExpA =          mul_mZ(UExpX,U_T,   i_mZ(rc,rc));

  clrscrn();
  printf(" A :");
  p_mZ(A, S9,P4, S8,P4, C4);
       
  printf(" U :");
  p_mZ(U, S9,P4, S8,P4, C4);
     
  printf(" X = U_T * A * U :");
  p_mZ(X, S9,P4, S8,P4, C4);
  stop(); 
   
  clrscrn();
  printf(" Copy/Past into the octave window.       \n\n");
  pE_Octave_mZ(A,"A",P4 ,P4);
  printf(" expm(A)\n\n\n");
  
  printf(" Exp(A) = U Exp(X) T_U :");
  p_mZ(ExpA, S10,P4, S9,P4, C4);

   f_mZ(A);
   f_mZ(A_T);

   f_mZ(U);
   f_mZ(U_T);
   f_mZ(U_TA);
   f_mZ(X);
   
   f_mZ(ExpX);
   f_mZ(UExpX);
   f_mZ(ExpA);   
}
/* ------------------------------------ */
int main(void)
{
time_t t;

  srand(time(&t));

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

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


Exemple de sortie écran :
 A :
  +1.5722 +0.0000i   -0.5899 +0.6995i   -0.0471 +0.0117i 
  -0.5899 -0.6995i   +1.2184 +0.0000i   -0.6906 -0.3813i 
  -0.0471 -0.0117i   -0.6906 +0.3813i   +1.2535 +0.0000i 

 U :
  +0.5813 -0.2305i   -0.5865 +0.2258i   +0.4335 -0.1617i 
  -0.5924 -0.3212i   -0.1167 -0.0699i   +0.6342 +0.3538i 
  +0.3935 +0.0000i   +0.7659 +0.0000i   +0.5085 +0.0000i 

 X = U_T * A * U :
  +2.5281 -0.0000i   -0.0000 -0.0000i   +0.0000 -0.0000i 
  +0.0000 +0.0000i   +1.4330 +0.0000i   +0.0000 -0.0000i 
  -0.0000 -0.0000i   +0.0000 -0.0000i   +0.0830 +0.0000i 

 Press return to continue. 


 Copy/Past into the octave window.       

 A=[
+1.5722e+00+0.0000e+00*i,-5.8990e-01+6.9950e-01*i,-4.7100e-02+1.1700e-02*i;
-5.8990e-01-6.9950e-01*i,+1.2184e+00+0.0000e+00*i,-6.9060e-01-3.8130e-01*i;
-4.7100e-02-1.1700e-02*i,-6.9060e-01+3.8130e-01*i,+1.2535e+00+0.0000e+00*i]

 expm(A)


 Exp(A) = U Exp(X) T_U :
   +6.7869  -0.0000i    -2.9299  +3.4899i    +1.2228  -0.5009i 
   -2.9299  -3.4899i    +6.3406  +0.0000i    -2.9449  -1.6125i 
   +1.2228  +0.5009i    -2.9449  +1.6125i    +4.6795  +0.0000i 


 Press   return to continue
 Press X return to stop