Menu

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

snakehill 40 Messages postés samedi 18 janvier 2003Date d'inscription 20 novembre 2008 Dernière intervention - 2 nov. 2008 à 02:35 - Dernière réponse :  xd
- 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


Afficher la suite 

5 réponses

Meilleure réponse
snakehill 40 Messages postés samedi 18 janvier 2003Date d'inscription 20 novembre 2008 Dernière intervention - 2 nov. 2008 à 11:33
4
Merci
Tu te fous de ma gueule ? C'est moi qui t'ai donné ce code et ça ne répond pas a la question !!!!! ....

Merci snakehill 4

Avec quelques mots c'est encore mieux Ajouter un commentaire

CCM a aidé 24278 internautes ce mois-ci

Sacabouffe 9585 Messages postés dimanche 19 août 2007Date d'inscription 29 mai 2009 Dernière intervention - 4 nov. 2008 à 00:21
1
Merci
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
Scoleproj 228 Messages postés lundi 22 septembre 2008Date d'inscription 24 juillet 2012 Dernière intervention - 2 nov. 2008 à 03:43
0
Merci
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.
snakehill 40 Messages postés samedi 18 janvier 2003Date d'inscription 20 novembre 2008 Dernière intervention - 2 nov. 2008 à 14:47
0
Merci
up ?