IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Octave Discussion :

Index exceeds matrix dans housholder


Sujet :

Octave

  1. #1
    Membre du Club
    Inscrit en
    Mars 2010
    Messages
    74
    Détails du profil
    Informations forums :
    Inscription : Mars 2010
    Messages : 74
    Points : 54
    Points
    54
    Par défaut Index exceeds matrix dans housholder
    Bonjour,
    Je ne vois pas comment résoudre ce problème. Voici le code source:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    function x = householder(A, b)
     
    	[m,n] = size(A);
    	Q = eye(m);
    	for k=1:n
    		s=((norm(A(k:m,k))).^2);
    		if A(k,k) < 0
    			s=-s;
    		endif
    		v(1:k-1) = 0;
    		v(k) = A(k,k)+s;
    		A(k,k) = -s;
    		v(k+1:m)=A(k+1:m,k);
    		A=zeros(k+1:m,k);		
    		p=s*v(k);
     
    		for j = k+1:n
    			t=(v(k:m)'*A(k:m,j))/p;	
    			A(k:m,j)=A(k:m,j)-t*v(k:m);
    		endfor
    		t=((v(k:m)'*b(k:m))/p);
    		b(k:m)=b(k:m)-(t*v(k:m));
     
    	for j=k+1:n
    			t=v(k:m)'*Q(k:m,j)/p;
    			Q(k:m,j)=Q(k:m,j)-t*v(k:m);
    		endfor
    	endfor
    	for i=n:-1:1
    		s=A(i,i+1:n)*x(i+1:n)
    		x(i)=(b(i)-s)/A(i,i)
    	endfor
    	R=triu(A);
    	Q=Q';
    endfunction
    Et voici l'erreur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    octave:3> x=householder(A,b)
    warning: implicit conversion from range to real scalar
    error: A(I): Index exceeds matrix dimension.
    error: called from:
    error:   /home/Desktop/householder.m at line 18, column 5
    Merci d'avance.

  2. #2
    Modérateur

    Homme Profil pro
    Ingénieur en calculs scientifiques
    Inscrit en
    Août 2007
    Messages
    4 639
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Ingénieur en calculs scientifiques

    Informations forums :
    Inscription : Août 2007
    Messages : 4 639
    Points : 7 614
    Points
    7 614
    Par défaut
    Bonjour,

    Pour comprendre le message d'erreur :
    Index exceeds matrix dimensions.

    je ne sais pas ce que tu cherches à faire, mais apparemment, tu travailles par rapport aux dimensions d'un tableau A, et tu modifies les dimensions de ce tableau en faisant

  3. #3
    Membre du Club
    Inscrit en
    Mars 2010
    Messages
    74
    Détails du profil
    Informations forums :
    Inscription : Mars 2010
    Messages : 74
    Points : 54
    Points
    54
    Par défaut
    Merci pour ton aide

    ci dessous le m-file correct fonctionel si quelqu'un aurras besoin d'une fonction qui resoud les Ax=b par la methode Householder.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    function x = householder(A, b)
     
    	[m,n] = size(A);
    	Q = eye(m);
    	for k=1:n
    		s=(norm(A(k:m,k)));
    		if A(k,k) < 0
    			s=-s;
    		endif
    		v(1:k-1) = 0;
    		v(k) = A(k,k)+s;
    		A(k,k) = -s;
    		v(k+1:m)=A(k+1:m,k);
    		A(k+1:m,k)=0;		
    		p=s*v(k);
     
    		for j = k+1:n
    			t=v(k:m)*A(k:m,j)/p;	
    			A(k:m,j)=A(k:m,j)'-t*v(k:m);
    		endfor
    		t=((v(k:m)*b(k:m))/p);
    		b(k:m)=b(k:m)'-(t*v(k:m));
     
    	for j=k+1:n
    			t=v(k:m)*Q(k:m,j)/p;
    			Q(k:m,j)=Q(k:m,j)'-t*v(k:m);
    		endfor
    	endfor
    	x = zeros(n,1);
    	for i=n:-1:1
        	suma=0;
       		for j=(i+1):n
            		suma+=A(i,j)*x(j);
        		endfor
        	x(i)=(b(i)-suma)/A(i,i);
        	endfor
    endfunction
    Ps: Desole pour les fautes d'ortographe je suis pas francais.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 1
    Dernier message: 29/01/2010, 21h01
  2. "Index exceeds matrix dimensions. " erreur
    Par M.Chaabane dans le forum MATLAB
    Réponses: 2
    Dernier message: 04/11/2008, 16h54
  3. error : index exceeds matrix dimensions
    Par spinalrock dans le forum Images
    Réponses: 21
    Dernier message: 29/05/2008, 11h18
  4. Message d'erreur "Index exceeds matrix dimensions."
    Par bela1280 dans le forum MATLAB
    Réponses: 1
    Dernier message: 21/04/2007, 13h27
  5. Erreur "Index exceeds matrix dimensions"
    Par usama2 dans le forum MATLAB
    Réponses: 2
    Dernier message: 06/03/2007, 00h34

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo