Matlab - Message d'erreur
Répondre à la discussion
Affichage des résultats 1 à 13 sur 13

Matlab - Message d'erreur



  1. #1
    OdeliaSG

    Matlab - Message d'erreur


    ------

    בס"ד
    Bonjour,

    Est-ce que quelqu'un pourrait m'expliquer le message d'erreur suivant que je reçois dans Matlab, s'il vous plaît:

    Attempted to access u(0,2); index must be a
    positive integer or logical.

    Error in Avodakodnew (line 32)
    fl(i,j) = ( u(i-1,j) - u(i,j) ) * ( 1 + tanh( alpha * ( 1 - ( u(i-1,j) - u(i,j) )))) / ( 1 + tanh( alpha )); %by the left-hand neighbor


    C'est la première ligne que je ne comprends pas.

    Il s'agit d'une petite partie d'un problème physique où la fonction fl représente la force existante entre deux particules voisines, et u l'endroit où elles se trouvent. Mon u initial est décrit par la matrice suivante:

    u = [delta*ones(1,x);delta*ones(N/2,2) Z1;(-delta)*ones(N/2,2) Z2;(-delta)*ones(1,x)];

    lorsque

    Z1 = [5*delta/(N+1)*ones(1,x-2);3*delta/(N+1)*ones(1,x-2);delta/(N+1)*ones(1,x-2)];
    Z2 = [(-delta)/(N+1)*ones(1,x-2);(-3*delta)/(N+1)*ones(1,x-2);(-5*delta)/(N+1)*ones(1,x-2)];

    Comprendre les fonctions elles-mêmes est moins important (le contexte serait trop long), j'aimerais juste comprendre ce que dit la première ligne du message d'erreur.

    Merci,

    -----

  2. #2
    siltoon

    Re : Matlab - Message d'erreur

    En matlab, les indices de vecteurs commencent à 1 (pas 0 comme dans le u(0,2) qui doit être donné par le u(i-1,j) de ton erreur)

  3. #3
    OdeliaSG

    Re : Matlab - Message d'erreur

    Mon i devrait en fait commencer par 2, c'est ça?
    ce qui revient à déplacer tout le système d'un rang à droite.
    Donc, je risque d'avoir le même problème avec j?

    Matlab automatiquement considère les lignes et colonnes des matrices comme des vecteurs?

  4. #4
    siltoon

    Re : Matlab - Message d'erreur

    Ca dépend ce que tu veux faire dans ton programme.
    Je te dis d'où vient l'erreur, je pense que tu pourras la corriger par toi même

    Oui, tu peux utiliser l'indexation linéaire pour référencer une case de ta matrice.
    Google est ton ami
    Dernière modification par siltoon ; 07/10/2013 à 12h47.

  5. A voir en vidéo sur Futura
  6. #5
    JPL
    Responsable des forums

    Re : Matlab - Message d'erreur

    Google n'est l'ami de personne, sauf de ses actionnaires.
    Rien ne sert de penser, il faut réfléchir avant - Pierre Dac

  7. #6
    OdeliaSG

    Re : Matlab - Messages d'erreur

    בס"ד
    Bonjour,

    Merci de vos réponses, ça a été corrigé.
    J'ai maintenant un autre message d'erreur que je ne comprends pas tout à fait:

    Subscripted assignment dimension mismatch.

    Error in Avodakodnew (line 46)
    gu(i,j) = etha * ku(i,j) * diff ( u(i,j+1) - u(i,j) ); %upper


    Il s'agit d'un problème de dimension de matrice?
    Peut-être que j'ai mal utilisé "diff"? Il s'agit ici de la dérivée de u(i,j+1) - u(i,j) selon le temps.
    ku(i,j) dépend d'une force semblable au fl précédent, et etha est un simple scalaire.

  8. #7
    OdeliaSG

    Re : Matlab - Message d'erreur

    בס"ד
    Bonjour,

    J'ai essayé d'utiliser ndims pour trouver l'erreur, voilà ce que ça m'a donné:

    >> ndims(gu)

    ans =
    2

    >> ndims(ku)

    ans =
    2

    >> ndims(diff (u(i,j+1) - u(i,j)))
    Subscript indices must either be real positive
    integers or logicals.
    Apparemment ça provient bien de diff, mais je ne comprends pas: que veut dire matlab par "must either be real positive integers or logicals"?

    Si je mets

    >> ndims(diff(u))
    il n'y a pas de problème:

    ans =
    2
    Est-ce que quelqu'un peut m'expliquer?

  9. #8
    OdeliaSG

    Re : Matlab - Message d'erreur

    בס"ד
    Petite correction, diff est une dérivée selon le temps, gu devient donc

    gu(i,j) = etha * ku(i,j) * diff ( u(i,j+1) - u(i,j), t );

    Les dimensions de gu ainsi que les erreurs restent inchangées.

  10. #9
    OdeliaSG

    Re : Matlab - Message d'erreur

    בס"ד

    J'ai essayé ndims avec des valeurs de i et j, et là aussi, pas de problème:

    >> ndims(diff(u(1,3)-u(1,2),t))

    ans =
    2
    mais en essayant de définir i et j directement dans la fenêtre Matlab (pas seulement dans l'éditeur), voilà ce que ça donne:

    >> N=6;
    >> x=100;
    >> for i = 3 : x
    for j = 2 : (N+2) / 2 - 1
    ndims(diff(u(i,j+1)-u(i,j),t))
    end
    end

    ans =
    2


    ans =
    2


    ans =

    2


    ans =

    2


    ans =
    2


    ans =

    2


    ans =

    2


    ans =

    2


    ans =

    2


    ans =

    2


    ans =
    2


    ans =
    2

    Index exceeds matrix dimensions.
    Là, je suis complètement perdue

  11. #10
    OdeliaSG

    Re : Matlab - Message d'erreur

    בס"ד
    Bonjour,

    On m'a donné l'idée de chercher l'erreur en partageant ma fonction en plusieurs, comme suit:
    c1 = u(i,j+1);
    c2 = u(i,j);
    c3 = c1-c2;
    c4 = diff(c3,t);
    c5 = etha * ku(i,j);
    c6 = c5 * c4;
    gu(i,j) = c6;
    J'ai donc réessayé de faire marcher le code, et l'erreur se trouve dans la dernière ligne; selon les mots de matlab:
    Error in Avodakodnew (line 52)
    gu(i,j) = c6;
    Là, je ne vois pas ce que je peux faire pour corriger.

    Je vous remercie d'avance,

    Odeliasg
    L'Unité amène la Rédemption.

  12. #11
    Theophane

    Re : Matlab - Message d'erreur

    Salut,

    Je ne sais pas si ça vient de là, mais fait gaffe, la fonction diff diminue la dimension de la matrice de 1 (la première colonne disparait). Autre chose, pour le calcul de c6, pense qu'il faut un . devant le * si tu veux faire en fait un multiplication terme à terme.

    A+

  13. #12
    OdeliaSG

    Re : Matlab - Message d'erreur

    בס"ד
    Bonjour,

    Je ne sais pas si c'est lié (ça semble l'être), mais lorsque je tape dans la fenêtre de commande fl(3,2), j'obtiens une valeur numérique, alors que pour tout autre i ou j (si vous vous souvenez, fl est décrite comme fl(i,j), vous pouvez la voir dans le premier message de cette discussion), j'obtiens le message d'erreur suivant:

    Index exceeds matrix dimensions.

    De même pour fu(i,j), fonction semblable à fl(i,j), de laquelle dépend gu(i,j).

    S'agissant de gu elle-même, peu importent les valeurs de i et j, cette erreur apparaît.

    Rappel: 3 et 2 sont respectivement les premières valeurs de i et j ( i = 3 : x et j = 2 : (N+2)/2-1 lorsque x=10 et N=6)


    La multiplication n'est pas terme à terme, je ne vois donc pas en quoi le fait que diff diminue la dimension de la matrice pose problème.

    Je vous remercie,
    L'Unité amène la Rédemption.

  14. #13
    OdeliaSG

    Re : Matlab - Message d'erreur

    בס"ד
    Bonjour,

    La solution était simplement de remplacer la fonction diff par gradient (u ne dépendant que du temps, ça revient au même).
    Merci pour votre aide,
    L'Unité amène la Rédemption.

Discussions similaires

  1. Réponses: 3
    Dernier message: 28/04/2013, 13h20
  2. Message d'erreur.
    Par ClaudeH dans le forum Matériel - Hardware
    Réponses: 2
    Dernier message: 12/06/2011, 12h46
  3. Message d'erreur
    Par lordgodgiven dans le forum Matériel - Hardware
    Réponses: 3
    Dernier message: 02/05/2006, 13h15
  4. Message d'erreur...
    Par invite0e163667 dans le forum Matériel - Hardware
    Réponses: 0
    Dernier message: 07/07/2004, 17h31