J'ai besoin de calculer toutes les valeurs propres d'une matrice. Pour cela, j'ai besoin de deux algorithmes que j'ai écrits : la méthode de la puissance qui calcule une valeur propre et la méthode de la déflation qui calcule une autre valeur propre à partir d'une valeur propre et d'un vecteur propre déjà trouvés.
Voici mon code écrit en C++:
- Code: Tout sélectionner
//Fonction calculant la valeur propre et le vecteur propre d'une matrice pour un vecteur de départ et une précision dpnnée. Retourne la valeur propre.
double MatriceCarree::methodePuissances(double* vCour,double epsilon)
{
double * vSuiv = new double[n];
vSuiv = MatriceCarree::initVecteur(vSuiv,n);
double * vPrime = new double[n];
int nbIteration = 0;
double lambda = 0;
double signe = 1;
int i = 0;
if (nepsilon && nbIterationsetMat(k,l,(getMat(k,l) - getMat(i,l)*v[k]*(1/v[i])));
}
}
//Calcul du vecteur propre et de la valeur propre de b
mu = b->methodePuissances(vCour,EPS);
//Calcul du vecteur propre de A
for (int k=0;kafficher();
int n=m->getDimension();
double * v = new double[n]; MatriceCarree::initVecteur(v,n); v[0]=1; //Crée un vecteur de dimension n initialisé à 0 (sauf v[0])
lambda = m->methodePuissances(v,10^(-6));
for(int i=0;imethodeDeflation(v,lambda);
system("PAUSE");
return 0;
}
Les 2 premières valeurs propres sont bonnes mais ensuite le programme me trouve des valeurs propres identiques (ou presque) alternativement. Le résultat sera de la forme : {val1, val2, val1, val2...}.
Je n'arrive vraiment pas à régler ce problème donc si quelqu'un aurait la gentillesse de m'aiguiller ?
Merci