Aller au contenu

Mathc complexes/a70

Un livre de Wikilivres.


Applications

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-1    
#define ARRAY     A3
/* ------------------------------------ */
#define RC        RC3
/* ------------------------------------ */
void fun(void)
{
double **A         = rcsymmetric_mZ(        i_mZ(RC,RC),99);
double **AEVect    =      eigs_V_mZ(A,      i_mZ(RC,RC),FACTOR_E);
double **InvAEVect =  ctranspose_mZ(AEVect, i_mZ(RC,RC));
double **AEValue   =        eigs_mZ(A,      i_mZ(RC,C1)); 

double **T         =                        i_mZ(RC,RC);
double **a         =                        i_mZ(RC,RC);

double **b    [ARRAY];
double **r    [ARRAY];
double **br   [ARRAY];
double **EVabr[ARRAY];

int i;

  for(i=A0; i<ARRAY; i++)
     {
      b[i]     =  c_c_mZ(   AEVect,i+C1,           i_mZ(RC,C1),C1);
      r[i]     =  c_r_mZ(InvAEVect,i+R1,           i_mZ(R1,RC),R1);
      
      br[i]    =  mul_mZ(b[i],r[i],                i_mZ(RC,RC));
      
      EVabr[i] = smul_mZ(AEValue[i+R1][C1], br[i], i_mZ(RC,RC));  
      }
      
  clrscrn();
  printf(" A:");
  p_mZ(A, S7,P0,S6,P0,C7);

  printf(" eigenvectors of A");
  p_mZ(AEVect, S5,P4,S5,P4,C7);
   
  printf(" eigenvalues of A");
  p_mZ(AEValue, S7,P0,S6,P0,C7);
  stop();

  clrscrn(); 
  printf(" A:");
  p_mZ(A, S7,P0,S6,P0,C7);
  
  add_mZ(EVabr[0], EVabr[1], T); 
  add_mZ(       T, EVabr[2], a);  
  printf(" E1*b1r1 + E2*b2r2 + E3*b3r3 = A");
  p_mZ(a, S7,P0,S6,P0,C7);
   
  f_mZ(A);
  f_mZ(AEVect);
  f_mZ(InvAEVect);
  f_mZ(AEValue);
      
  f_mZ(T);
  
  for(i=A0; i<ARRAY; i++)
     {
       f_mZ(    b[i]);
       f_mZ(    r[i]);
       f_mZ(   br[i]); 
       f_mZ(EVabr[i]);                   
     }   
}
/* ------------------------------------ */
int main(void)
{
time_t t;

  srand(time(&t));

do
{
 fun();

} while(stop_w());

  return 0;
}
/* ------------------------------------ */
/* ------------------------------------ */
Nous voyons une des propriètés de la décomposition spectral:

 E1*b1r1 + E2*b2r2 + E3*b3r3 = A
 
E1 est la première valeur propre, E2 la deuxième et E3 la troisième.

b1r1 est obtenue en multipliant la première colonne de la matrice des vecteurs propres par la première ligne de la matrice inverse des vecteurs propres.
Exemple de sortie écran :
 A:
 +19218    +0i   +1937 +7205i   +9904 -7978i 
  +1937 -7205i  +17235    +0i   -6748-11688i 
  +9904 +7978i   -6748+11688i  +14116    +0i 

 eigenvectors of A
+0.4422-0.3775i -0.2778+0.6799i -0.2921+0.1929i 
-0.2654-0.4909i -0.5806-0.3363i +0.2706+0.4065i 
+0.5921+0.0000i +0.1020-0.0000i +0.7994+0.0000i 

 eigenvalues of A
 +39314    -0i 
 +10910    -0i 
   +345    +0i 

 Press return to continue. 


 A:
 +19218    +0i   +1937 +7205i   +9904 -7978i 
  +1937 -7205i  +17235    +0i   -6748-11688i 
  +9904 +7978i   -6748+11688i  +14116    +0i 

 E1*b1r1 + E2*b2r2 + E3*b3r3 = A
 +19218    +0i   +1937 +7205i   +9904 -7978i 
  +1937 -7205i  +17235    +0i   -6748-11688i 
  +9904 +7978i   -6748+11688i  +14116    +0i 


 Press   return to continue
 Press X return to stop