Application


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


c01b.c
/* ------------------------------------ */
/*  Save as :   c01b.c                   */
/* ------------------------------------ */

/* ------------------------------------ */
#include "w_a.h"
/* ------------------------------------ */
void fun(int r)
{
double **A          = r_mZ(i_mZ(r,r),9.);
double **EigsValue  =      i_mZ(r,C1);

  clrscrn();
  printf(" Copy/Past into the octave windows \n\n\n");
  p_Octave_mZ(A,"a",P0,P0);  
  printf(" EigenValues  = eigs (a,10) \n\n\n");
  stop();

  clrscrn();
  printf(" A :");
  p_mZ(A, S2,P0, S2,P0, C10); 
         
  eigs_mZ(A,EigsValue);
  printf(" EigsValue :");
  p_mZ(EigsValue, S10,P4, S10,P4, C3); 
       
  f_mZ(A);
  f_mZ(EigsValue);
}
/* ------------------------------------ */
int main(void)
{
time_t t;

  srand(time(&t));

do
{
  fun(rp_I(R2)+R6);
} 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 T pour ne pas modifier M. Puis j'applique 1000 fois l'algorithme vue plus haut.

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


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

     
  for(re=R1,ce=C1;re<=r;re++,ce+=C2)
     { 
	   EigsValue[re][C1] = T[re][ce];
	   EigsValue[re][C2] = T[re][ce+C1];
     }


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


 a=[
-9.0-5*i,+4.0+6*i,-7.0-5*i,+6.0-5*i,-9.0+2*i,+6.0+8*i,+8.0-1*i,-9.0-5*i;
-7.0+4*i,+4.0+8*i,-5.0-9*i,+4.0-1*i,+6.0+6*i,-1.0-1*i,-9.0+8*i,-5.0+8*i;
+2.0-9*i,+4.0+6*i,+2.0-1*i,-1.0+8*i,-9.0+4*i,+4.0-5*i,+4.0+4*i,-7.0-9*i;
-7.0-9*i,-5.0-9*i,+6.0+8*i,-9.0+2*i,+4.0-9*i,-3.0-1*i,+6.0-5*i,-7.0-7*i;
+2.0+8*i,-3.0-3*i,+6.0+2*i,-9.0-3*i,-5.0-3*i,+8.0-7*i,+4.0-3*i,+4.0-9*i;
+2.0+8*i,+8.0+8*i,+4.0+6*i,-9.0-5*i,-5.0-9*i,+6.0-1*i,-5.0-1*i,-5.0+6*i;
+8.0+6*i,-7.0-5*i,-5.0+4*i,-7.0-9*i,+6.0-3*i,+4.0+8*i,+6.0-7*i,-7.0-7*i;
-3.0-3*i,-3.0+6*i,+8.0-3*i,+2.0+4*i,-9.0-5*i,+2.0+4*i,-3.0-5*i,+8.0-1*i]

 EigenValues  = eigs (a,10) 


 Press return to continue. 
  

 A :
-9-5i +4+6i -7-5i +6-5i -9+2i +6+8i +8-1i -9-5i 
-7+4i +4+8i -5-9i +4-1i +6+6i -1-1i -9+8i -5+8i 
+2-9i +4+6i +2-1i -1+8i -9+4i +4-5i +4+4i -7-9i 
-7-9i -5-9i +6+8i -9+2i +4-9i -3-1i +6-5i -7-7i 
+2+8i -3-3i +6+2i -9-3i -5-3i +8-7i +4-3i +4-9i 
+2+8i +8+8i +4+6i -9-5i -5-9i +6-1i -5-1i -5+6i 
+8+6i -7-5i -5+4i -7-9i +6-3i +4+8i +6-7i -7-7i 
-3-3i -3+6i +8-3i +2+4i -9-5i +2+4i -3-5i +8-1i 

 EigsValue :
  +0.22209 +24.55276i 
  +0.14816 -24.50274i 
 +10.87005 -14.17281i 
 +13.23232  -0.30091i 
  -5.57508 +11.33595i 
 -12.41172  -0.64196i 
  -9.60697  -6.88467i 
  +6.12115  +2.61438i 


 Press return to continue
 Press X      to stop