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