[MATLAB] Calcul valeurs propres matrices [Résolu/Fermé]

Signaler
Messages postés
39
Date d'inscription
samedi 18 janvier 2003
Statut
Membre
Dernière intervention
20 novembre 2008
-
 555 -
Bonjour,
toujours dans le probleme du tambour , qui devient de plus en plus un problème ch**nt.
Il s'agit de calculer les valeur propres d'une matrice 300*300 avec la méthode des puissances itérées. J'ai donc conçu un petit algorithme qui fonctionne ... Mais juste si l'on ne dépasse pas la dimension 10*10 , ce qui est vraimennt étrange ... donc voici le code ... Si quelqu'un peut m'éclairer , ou juste le signaler où se trouve l'érreur ce serait cool ^^

function [BD,mat,VP] = vp(Tambour)
    taille=50;
    BD=zeros(taille,1);
% On prend un Y quelconque
Y=eye(taille,1);        
% On initie mat
mat=Tambour;
%Pour tout le tambour    
for j=1:1:taille


%On lance la boucle des puissances itérées
        for i=1:1:15
         el = norm(Y);
         X = Y/el;
         Y = Tambour*X;
        end

%Récupération de la valeur propre
    lambda = X'*Y;
%Stockage de la valeur propre dans le vecteur BD en sortie
    BD(j)=lambda;
    
% On cherche le vecteur propre en utilisant jacobi (A-lambda*Id)*VP=B avec
% B un vecteur nul
B = zeros(taille,1);
mat = mat -(lambda*eye(taille,taille));

VP = seidel(mat,B,0.01);

% On enlève la matrice du vecteur propre récupéré (VP)
Tambour = Tambour - lambda*((VP*VP')/(VP'*VP));

% On doit stocker les valeurs propres et les vecteurs propres
%fprintf('Valeur propre %d /n', lambda)
%fprintf('vecteur propre :/n')
%VP



end
   BD
end


A voir également:

4 réponses

Messages postés
39
Date d'inscription
samedi 18 janvier 2003
Statut
Membre
Dernière intervention
20 novembre 2008
10
Tu te fous de ma gueule ? C'est moi qui t'ai donné ce code et ça ne répond pas a la question !!!!! ....
8
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 65492 internautes nous ont dit merci ce mois-ci

Vous avez tellement raison…..
Messages postés
9418
Date d'inscription
dimanche 19 août 2007
Statut
Membre
Dernière intervention
29 mai 2009
1 785
Salut

T'as pas besoin de ta fonction seidel dans ton programme.
À la sortie de ta boucle, la valeur propre est bien lambda = X'*Y comme tu l'as écrit et ton vecteur propre unitaire est X, tu l'as directement.

Pour ton souci, je dirais que 15 itérations, c'est peut-être un peu faible, essaie de l'augmenter, d'autant plus que les erreurs se cumulent à chaque fois que tu calcules une nouvelle valeur propre.

Mais si t'utilises pas un nombre faramineux d'itérations nb_it, tu peux aussi faire directement :
Y=eye(taille,1);
X=mat^nb_it*Y;
X=X/norm(X);
lambda=X'*mat*X;
T'as la valeur propre lambda et le vecteur propre unitaire associé X.
Bonne nuit
Messages postés
226
Date d'inscription
lundi 22 septembre 2008
Statut
Membre
Dernière intervention
24 juillet 2012
26
Avec Seidel , ou Jacobi , ou la méthode de relaxation , je te conseille seidel :

function [Xbase]=seidel(A,B,epsilon)
ligne=size(A,1);
colonne=size(A,2);
Xbase=rand(ligne,1);

while norm(A*Xbase-B) > epsilon
for i=1:ligne,
Xbase(i)=(B(i)-sum(A(i,1:(i-1))*Xbase(1:(i-1)))-sum(A(i,(i+1):colonne)*Xbase((i+1):colonne)))/A(i,i);
end
end


ça renvoie un vecteur Xbase qui est la solution du système.
Messages postés
39
Date d'inscription
samedi 18 janvier 2003
Statut
Membre
Dernière intervention
20 novembre 2008
10
up ?