Aller au contenu

Mathc complexes/049

Un livre de Wikilivres.

Application


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


c00a.c
/* ------------------------------------ */
/*  Save as :   c00a.c                  */
/* ------------------------------------ */
#include "w_a.h"
/* ------------------------------------ */
#define   RC  RC4
/* ------------------------------------ */
void fun(void)
{
double **A          = r_mRZ(i_mZ(RC,RC),99.);
double **EigsValue  =       i_mZ(RC,C1);

  clrscrn();
  printf(" Copy/Past into the octave windows \n\n");
  p_Octave_mZ(A,"a",P0,P0);  
  printf(" EigenValues  = eigs (a,%d)\n\n\n",RC);
         
  printf(" EigsValue :");
  eigs_mZ(A,EigsValue);  
  p_mZ(EigsValue, S15,P10, S15,P10, C5); 
       
  f_mZ(A);
  f_mZ(EigsValue);
}
/* ------------------------------------ */
int main(void)
{
time_t t;

  srand(time(&t));

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

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


Je veux calculer les valeurs propres de la matrice M.


J'utilise la QR décomposition de M

  - Puis je calcule RQ 
  - RQ devient la nouvelle valeur de M 
  - Et je recommence un cycle.


Je copie M dans RQ pour ne pas modifier M. Puis j'applique 1000 fois l'algorithme vue plus haut.

 c_mZ(M,RQ);
 
 for(i=0;i<1000;i++)
     { 
	QR_mZ(RQ,Q,R);  
       mul_mZ(R,Q,RQ);
     }


À la fin je trouve sur la diagonale de RQ les valeurs propres.


Exemple de sortie écran : Calculons la partie réelle du nombre complexe
 Copy/Past into the octave windows 

 a=[
+32+0*i,+54+0*i,+87+0*i,-51+0*i;
-10+0*i,-57+0*i,-91+0*i,-38+0*i;
+5+0*i,+51+0*i,-58+0*i,+28+0*i;
+83+0*i,+57+0*i,+81+0*i,-89+0*i]

 EigenValues  = eigs (a,4)


 EigsValue :
 -79.0656058257  +0.0000000000i 
 +39.3392362679  +0.0000000000i 
 -56.6687439536  +0.0000000000i 
 -75.6048864886  +0.0000000000i 


 Press   return to continue
 Press X return to stop


Remarque :

* (-79.0656058257 +39.3392362679) / 2 = −19,863184779
* (-56.6687439536 -75.6048864886) / 2 = −66,136815221 


Octave :
EigenValues  = eigs (a,4)
EigenValues =

  -19.863 + 73.473i
  -19.863 - 73.473i
  -66.137 + 21.642i
  -66.137 - 21.642i