Aller au contenu

Mathc complexes/a92

Un livre de Wikilivres.



Valeurs propres


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


c00d.c
/* ------------------------------------ */
/*  Save as :   c00d.c                  */
/* ------------------------------------ */
#include "w_a.h"
/* ------------------------------------ */
/* ------------------------------------ */
#define FACTOR_E    +1.E-2   
#define RCA          RC4  
/* ------------------------------------ */       
/* ------------------------------------ */
double f(
double x)
{
        return(1.0/(x));
}
char  feq[] =  "1.0/(x)";
/* ------------------------------------ */
/* ------------------------------------ */
void fun(void)
{
double a[RC4*(RC4*C2)] ={   
  +25072,     +0,   +21293,  -4811,    +5386,  -6531,   +11975,  -5847, 
  +21293,  +4811,   +30848,     +0,    -1526,  -1774,   +13478,  -6658, 
   +5386,  +6531,    -1526,  +1774,   +20007,     +0,    +7542,  -1322, 
  +11975,  +5847,   +13478,  +6658,    +7542,  +1322,   +21250,     +0  };
                       
double **A = ca_A_mZ(a, i_mZ(RCA,RCA));

double **V         = i_mZ(RCA,RCA);
double **cV_T      = i_mZ(RCA,RCA);

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

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

double **InvA      = i_mZ(RCA,RCA);

  clrscrn();
  printf(" A :");
  p_mZ(A, S8,P0, S7,P0, C4);

/* V and cV_T*/    
  eigs_V_mZ(A,V,FACTOR_E);
  ctranspose_mZ(V,cV_T);
    
/* EigsValue : cV_T * A * V */   
  mul_mZ(cV_T,A,T);
  mul_mZ(T,V,EigsValue); 
   
  f_eigs_mZ(f,EigsValue,invEValue); 

/* inv : V * inv(EigsValue) * cV_T*/     
  mul_mZ(V,invEValue,T);
  mul_mZ(T,cV_T,InvA);          
  printf(" invA = V * inv(EigsValue) * cV_T");
  pE_mZ(InvA, S12,P4, S12,P4, C3); 
  
  printf(" Ide = InvA * A");  
  mul_mZ(InvA,A,T);
  p_mZ(T, S8,P4, S8,P4, C4);  
  stop(); 
     
  f_mZ(A);
  f_mZ(V);
  f_mZ(cV_T);
  f_mZ(T); 
  f_mZ(invEValue);
  f_mZ(EigsValue);
  f_mZ(InvA);
}
/* ------------------------------------ */
int main(void)
{
  fun();

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


Avec les matrices réelles nous avons calculer les vecteurs et valeurs propres des matrices symétriques. Avec les matrices complexes nous allons calculer les vecteurs et valeurs propres des matrices symétriques conjuguées.


Contrôle du facteur :

  • FACTOR_E ..... +1.E-1 ......... -9 < x < 9
  • FACTOR_E ..... +1.E-2 ....... -99 < x < 99
  • FACTOR_E ..... +1.E-3 ..... -999 < x < 999


Nous allons étudier une des propriétés des valeurs propres et des vecteurs propres :

              invA = V * inv(EigsValue) * cV_T


Exemple de sortie écran :
 A :
  +25072     +0i   +21293  -4811i    +5386  -6531i   +11975  -5847i 
  +21293  +4811i   +30848     +0i    -1526  -1774i   +13478  -6658i 
   +5386  +6531i    -1526  +1774i   +20007     +0i    +7542  -1322i 
  +11975  +5847i   +13478  +6658i    +7542  +1322i   +21250     +0i 

 invA = V * inv(EigsValue) * cV_T
 +2.4401e-04 -4.2021e-22i  -1.6775e-04 +9.5627e-05i  -7.7699e-05 +1.0843e-04i 
 -1.6775e-04 -9.5627e-05i  +2.0965e-04 -1.3553e-20i  +1.1807e-04 -4.3268e-05i 
 -7.7699e-05 -1.0843e-04i  +1.1807e-04 +4.3268e-05i  +1.3955e-04 +8.4703e-21i 
 -4.0241e-05 +8.9388e-05i  -5.1345e-05 -9.6122e-05i  -6.4355e-05 -5.7956e-05i 

 -4.0241e-05 -8.9388e-05i 
 -5.1345e-05 +9.6122e-05i 
 -6.4355e-05 +5.7956e-05i 
 +1.3427e-04 -2.3510e-38i 

 Ide = InvA * A
 +1.0000 -0.0000i  +0.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  -0.0000 -0.0000i  +1.0000 +0.0000i  -0.0000 -0.0000i 
 -0.0000 -0.0000i  -0.0000 +0.0000i  -0.0000 -0.0000i  +1.0000 +0.0000i 

 Press return to continue.