Posez votre question Signaler

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

snakehill 40Messages postés samedi 18 janvier 2003Date d'inscription 20 novembre 2008Dernière intervention - Dernière réponse le 23 avril 2011 à 14:24
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


Lire la suite 
Réponse
+5
moins plus
Tu te fous de ma gueule ? C'est moi qui t'ai donné ce code et ça ne répond pas a la question !!!!! ....
Ajouter un commentaire
Réponse
+5
moins plus
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
Ajouter un commentaire
Réponse
+2
moins plus
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.
Ajouter un commentaire
Réponse
-1
moins plus
up ?
Ajouter un commentaire
Ce document intitulé «  [MATLAB] Calcul valeurs propres matrices  » issu de CommentCaMarche (www.commentcamarche.net) est mis à disposition sous les termes de la licence Creative Commons. Vous pouvez copier, modifier des copies de cette page, dans les conditions fixées par la licence, tant que cette note apparaît clairement.

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes.

Le fait d'être membre vous permet d'avoir des options supplémentaires.