Rechercher : dans
Par :

[MATLAB] Calcul valeurs propres matrices

Dernière réponse le 22 jan 2009 à 17:53:29 snakehill, le 2 nov 2008 à 02:35:59 
 Signaler ce message aux modérateurs

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


Configuration: Windows XP
Firefox 3.0.3

Meilleures réponses pour « [MATLAB] Calcul valeurs propres matrices » dans :
Concaténer les vecteurs ou les matrices sous Matlab VoirL'opération de concaténation des variables de Matlab consiste à regrouper ces variables dans une seule (vecteur ou matrice). Exemple : |2 3 4| X= |1 2 5| |0 2 7| Avec : |9 6 8| Y= |5 6 2| |3 2 1| Donne...
Manipulations élémentaires des tableaux sous MatLab VoirSommaire I. Stockage des tableaux II. L'indexation linéaire II.1. Accéder à un élément d'un tableau en utilisant l'indexation linéaire II.2. Passer d'une indexation à l'autre II.2.1. La fonction ind2sub II.2.2. La fonction sub2ind III. La...

1

Scoleproj, le 2 nov 2008 à 03:43:02

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.

Répondre à Scoleproj

2

snakehill, le 2 nov 2008 à 11:33:28
  • +1

Tu te fous de ma gueule ? C'est moi qui t'ai donné ce code et ça ne répond pas a la question !!!!! ....

Répondre à snakehill

3

snakehill, le 2 nov 2008 à 14:47:07

Up ?

Répondre à snakehill

4

 Sacabouffe, le 4 nov 2008 à 00:21:32

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 Thought I heard a rumbling, calling to my name
Two hundred million guns are loaded, Satan cries "Take aim!"

Répondre à Sacabouffe