Mathc complexes/049
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