Mathc matrices/c05b
Installer et compiler ces fichiers dans votre répertoire de travail.
![]() |
c05b.c |
---|
/* ------------------------------------ */
/* Save as : c05b.c */
/* ------------------------------------ */
#include "v_a.h"
/* ------------------------------------ */
void fun(int r)
{
double **A = rsymmetric_mR(i_mR(r,r),99.);
double **EigsValue = i_mR(r,C1);
clrscrn();
printf(" A :");
p_mR(A,5,0,C6);
printf(" Copy/Past into the octave windows \n\n");
p_octave_mR(A,"a",1,0);
printf(" EigenValues = eigs (a,10) \n\n");
stop();
clrscrn();
printf(" A :");
p_mR(A,5,0,C6);
eigsuv_mR(A,EigsValue);
printf(" EigsValue :");
p_mR(EigsValue,13,5,C1);
f_mR(A);
f_mR(EigsValue);
}
/* ------------------------------------ */
int main(void)
{
time_t t;
srand(time(&t));
do
{
fun(rp_I(3)+R2);
} 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_mR(M,T);
for(i=0;i<1000;i++)
{
QRuv_mR(T,Q,R);
mul_mR(R,Q,T);
}
A la fin je trouve sur la diagonale de T les valeurs propres.
for(rc=R1;rc<=r;rc++)
{
EigsValue[rc][C1] = T[rc][rc];
}
Exemple de sortie écran :
A :
+22 +54 +14
+54 -67 -83
+14 -83 +52
Copy/Past into the octave windows
a=[
+22,+54,+14;
+54,-67,-83;
+14,-83,+52]
EigenValues = eigs (a,10)
Press return to continue.
Exemple de sortie écran :
A :
+22 +54 +14
+54 -67 -83
+14 -83 +52
EigsValue :
-129.29348
+97.07976
+39.21372
Press return to continue
Press X to stop