Valeurs propres, Valeurs singulières


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-2         
#define RCA          RC3  
/* ------------------------------------ */ 
/* ------------------------------------ */
double **invEigsValue_mZ(
double **EigsValue,
double **invEigsValue
)
{
int  r;
int  c;
nb_Z a;

  for (   r=R1; r<EigsValue[R_SIZE][C0]; r++)
    for ( c=C1; c<EigsValue[C_SIZE][C0]; c+=C2)

        if(((r-R1)*C2)==c-C1)
          {
             a = inv_Z(i_Z( EigsValue[r][c], EigsValue[r][c+C1]));
           
               invEigsValue[r][c   ] = a.r;
               invEigsValue[r][c+C1] = a.i;
          }
              
 return(invEigsValue);
}
/* ------------------------------------ */     
/* ------------------------------------ */
void fun(void)
{                          
double **A            = i_mZ(RCA,RCA);
double **invA         = i_mZ(RCA,RCA);

double **V            = i_mZ(RCA,RCA);
double **invV         = i_mZ(RCA,RCA);
double **T            = i_mZ(RCA,RCA);

double **EigsValue    = i_mZ(RCA,RCA);
double **invEigsValue = i_mZ(RCA,RCA);

   do
  {
	    r_mZ(A,99);
   eigs_V_mZ(A,V,FACTOR_E);
  }while(!det_Z(V).r);
  
  clrscrn();
  printf(" Copy/Past into the octave windows \n\n\n");
  p_Octave_mZ(A,"a",P0,P0);  
  printf(" [V, E]  = eigs (a,%d) \n\n\n",RCA);

  printf(" V :");
  eigs_V_mZ(A,V,FACTOR_E);
  pE_mZ(V, S12,P4, S12,P4, C3);
  
  printf(" inv(V) ... Some time the matrix is not invertible :");
  inv_mZ(V,invV);
  pE_mZ(invV, S12,P4, S12,P4, C3);
  stop();

  clrscrn();    
  printf(" EigsValue = invV * A * V");
  mul_mZ(invV,A,T);
  mul_mZ(T,V,EigsValue); 
  pE_mZ(clean_eyes_mZ(EigsValue), S12,P4, S12,P4, C3);
  
  printf(" invEigsValue :");
  invEigsValue_mZ(EigsValue, invEigsValue);
  pE_mZ(invEigsValue, S12,P4, S12,P4, C3);  
  stop();

  clrscrn();        
  printf(" invA = V * invEigsValue * invV");
  mul_mZ(V,invEigsValue,T);
  mul_mZ(T,invV,invA); 
  pE_mZ(invA, S12,P4, S12,P4, C3);

  printf(" Ide = A * invA ");
  mul_mZ(A,invA,T); 
  p_mZ(T, S10,P4, S8,P4, C3); 
                 
  f_mZ(A);
  f_mZ(invA);
  f_mZ(V);  
  f_mZ(invV);  
  f_mZ(T);  
  f_mZ(EigsValue);
  f_mZ(invEigsValue);
}
/* ------------------------------------ */
int main(void)
{
time_t t;

  srand(time(&t));

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

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


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


 a=[
-28-80*i,-47+5*i,-57+27*i;
+6-84*i,+27-20*i,+33-9*i;
-16-9*i,-79+68*i,-18+37*i]

 [V, E]  = eigs (a,3) 


 V :
 +5.4357e-01 +2.8327e-01i  +1.5818e-01 +2.9866e-01i  -3.0179e-01 +3.9226e-02i 
 -1.4062e-01 +5.4817e-01i  -1.0469e-01 -5.4660e-01i  -5.5593e-01 +3.9378e-01i 
 +5.5139e-01 +0.0000e+00i  +7.5898e-01 +0.0000e+00i  +6.6578e-01 +0.0000e+00i 

 inv(V) ... Some time the matrix is not invertible :
 +1.0991e+00 -1.0846e-01i  -6.5297e-02 -5.4744e-01i  +1.1350e-01 -5.3242e-01i 
 +7.6464e-03 -3.8132e-01i  +2.2589e-01 +7.8333e-01i  +6.3293e-01 +3.4719e-01i 
 -9.1896e-01 +5.2453e-01i  -2.0343e-01 -4.3961e-01i  +6.8647e-01 +4.5148e-02i 

 Press return to continue. 


 EigsValue = invV * A * V
 -7.6605e+01 -7.5973e+01i  +0.0000e+00 +0.0000e+00i  +0.0000e+00 +0.0000e+00i 
 +0.0000e+00 +0.0000e+00i  +4.2075e+01 +7.6343e+01i  +0.0000e+00 +0.0000e+00i 
 +0.0000e+00 +0.0000e+00i  +0.0000e+00 +0.0000e+00i  +1.5530e+01 -6.3370e+01i 

 invEigsValue :
 -6.5810e-03 +6.5267e-03i  +0.0000e+00 +0.0000e+00i  +0.0000e+00 +0.0000e+00i 
 +0.0000e+00 +0.0000e+00i  +5.5373e-03 -1.0047e-02i  +0.0000e+00 +0.0000e+00i 
 +0.0000e+00 +0.0000e+00i  +0.0000e+00 +0.0000e+00i  +3.6482e-03 +1.4886e-02i 

 Press return to continue. 


 invA = V * invEigsValue * invV
 -1.8970e-03 +4.0743e-03i  +5.3171e-04 +7.5372e-03i  +1.7514e-03 +1.4049e-03i 
 +6.6327e-03 -2.3956e-04i  -3.5301e-03 +1.4054e-03i  -1.0975e-02 -7.5105e-03i 
 -1.3904e-02 -5.1458e-03i  +1.2993e-02 +2.3711e-04i  +8.0315e-03 +5.8864e-03i 

 Ide = A * invA 
   +1.0000 -0.0000i    +0.0000 +0.0000i    +0.0000 +0.0000i 
   +0.0000 -0.0000i    +1.0000 +0.0000i    -0.0000 +0.0000i 
   -0.0000 -0.0000i    +0.0000 -0.0000i    +1.0000 -0.0000i 


 Press   return to continue
 Press X return to stop