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

MATLAB Discussion :

La sous-fonction ne marche pas dans le programme principal


Sujet :

MATLAB

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2007
    Messages : 11
    Points : 4
    Points
    4
    Par défaut La sous-fonction ne marche pas dans le programme principal
    salut,
    j'ai un problème.
    J'ai créé des sous fonctions avec des boucles for. j'ai fait des tests pour voir si elles fonctionnent.
    Mais quand je fait appel à l'une d'elles dans le programme principal,elle ne fonctionne plus.
    j'ai le message suivant:
    Subscripted assignment dimension mismatch
    j'ai fait des vérifications et j'ai trouvé que ça bloque sur cette sous-fonction.
    qq peut m'aider svp?

  2. #2
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 302
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Freelance mécatronique - Conseil, conception et formation

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 302
    Points : 53 166
    Points
    53 166
    Par défaut
    Tu peux déjà jeter un oeil à la : Subscripted assignment dimension mismatch.

    Ensuite, montre nous le bout de code où le problème se produit.
    Voir encore la (Comment exploiter les messages d'erreurs ?) pour déterminer la zone du code qui pose problème.
    Ingénieur indépendant en mécatronique - Conseil, conception et formation
    • Conception mécanique (Autodesk Fusion 360)
    • Impression 3D (Ultimaker)
    • Développement informatique (Python, MATLAB, C)
    • Programmation de microcontrôleur (Microchip PIC, ESP32, Raspberry Pi, Arduino…)

    « J'étais le meilleur ami que le vieux Jim avait au monde. Il fallait choisir. J'ai réfléchi un moment, puis je me suis dit : "Tant pis ! J'irai en enfer" » (Saint Huck)

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2007
    Messages : 11
    Points : 4
    Points
    4
    Par défaut
    voila la sous fonction:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    function T=R1(Te,C,Vmax,Ko,Km,Ro)
        [nbca] = size(Te);
        [nblb,nbcb] = size(C); 
          B= [0 0 0 0 0 ]; 
     
    for i=1:nblb-3
        for j=1:nbcb-1
      B(i,j)=-Vmax*((C(i,j)/((C(i,j)+Km))*((C(i+2,j)/((C(i+2,j)+Ko))))))*2.78*10^(-10)*(Ro/(1+Te(j)));
        end
    end
     
       T=[1;-0.8;1.8;0]*B;
    end
    voila le bout de programme où je fait appel à la sous-fonction

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     while t{k}<30
           k=k+1
                t{k}=t{k-1}+h;
        for i=1:4
            for j=1:5
     
                   C{k}(i,j)= C{k-1}(i,j)+h*(((f1(C{k-1}(i,j),ka,u,deltaX,D,Tp)-f2(C{k-1}(i,j),ka,u,deltaX,D,Tp))/(deltaX*a)))+R1(Te,C{k-1}(i,j),Vmax,Ko,Km,Ro)/a;

  4. #4
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 302
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Freelance mécatronique - Conseil, conception et formation

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 302
    Points : 53 166
    Points
    53 166
    Par défaut
    Quel est le message d'erreur complet ?
    (voir le lien vers la dans mon précédent message)
    Ingénieur indépendant en mécatronique - Conseil, conception et formation
    • Conception mécanique (Autodesk Fusion 360)
    • Impression 3D (Ultimaker)
    • Développement informatique (Python, MATLAB, C)
    • Programmation de microcontrôleur (Microchip PIC, ESP32, Raspberry Pi, Arduino…)

    « J'étais le meilleur ami que le vieux Jim avait au monde. Il fallait choisir. J'ai réfléchi un moment, puis je me suis dit : "Tant pis ! J'irai en enfer" » (Saint Huck)

  5. #5
    Candidat au Club
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2007
    Messages : 11
    Points : 4
    Points
    4
    Par défaut
    voila le message d'erreur complet:
    k =

    2

    ??? Subscripted assignment dimension mismatch.

    Error in ==> fihamdoullilah22 at 32
    C{k}(i,j)= C{k-1}(i,j)+h*(((flux(C{k-1}(i,j),ka,u,deltaX,D,Tp)-flux2(C{k-1}(i,j),ka,u,deltaX,D,Tp))/(deltaX*a)))+R1(Teau,C{k-1}(i,j),Vmax,Koxygene,Kmethane,Ro)/a;

  6. #6
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 302
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Freelance mécatronique - Conseil, conception et formation

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 302
    Points : 53 166
    Points
    53 166
    Par défaut
    A première vue, C{k}(i,j) contient un scalaire (un nombre).

    Donc l'autre membre de l'affectation, C{k-1}(i,j)+h*(((flux(C{k-1}(i,j),ka,u,deltaX,D,Tp)-flux2(C{k-1}(i,j),ka,u,deltaX,D,Tp))/(deltaX*a)))+R1(Teau,C{k-1}(i,j),Vmax,Koxygene,Kmethane,Ro)/a;, devrait aussi être un nombre.

    Il faudrait vérifier ses dimensions en stockant sa valeur dans une variable temporaire.

    Essaie ceci :

    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
    while t{k}<30
           k=k+1
                t{k}=t{k-1}+h;
        for i=1:4
            for j=1:5
     
                temp=h*(((f1(C{k-1}(i,j),ka,u,deltaX,D,Tp)-f2(C{k-1}(i,j),ka,u,deltaX,D,Tp))/(deltaX*a)))+R1(Te,C{k-1}(i,j),Vmax,Ko,Km,Ro)/a;
     
                try
                   C{k}(i,j)= C{k-1}(i,j)+temp;
                catch
                   size(temp)
                   size(C{k}(i,j))
                   size(C{k-1}(i,j))
                   error('Probleme')
                end
    Et montre nous ce que MATLAB renvoie

    Sinon pourquoi utilises-tu des tableaux de cellules pour C ou t ?
    Ingénieur indépendant en mécatronique - Conseil, conception et formation
    • Conception mécanique (Autodesk Fusion 360)
    • Impression 3D (Ultimaker)
    • Développement informatique (Python, MATLAB, C)
    • Programmation de microcontrôleur (Microchip PIC, ESP32, Raspberry Pi, Arduino…)

    « J'étais le meilleur ami que le vieux Jim avait au monde. Il fallait choisir. J'ai réfléchi un moment, puis je me suis dit : "Tant pis ! J'irai en enfer" » (Saint Huck)

  7. #7
    Candidat au Club
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2007
    Messages : 11
    Points : 4
    Points
    4
    Par défaut
    voila la réponse obtenue

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    k =
     
         2
     
     
    ans =
     
         4     4
     
    ??? Index exceeds matrix dimensions.
     
    Error in ==> fihamdoullilah22 at 45
                    size(C{k}(i,j))

  8. #8
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 302
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Freelance mécatronique - Conseil, conception et formation

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 302
    Points : 53 166
    Points
    53 166
    Par défaut
    Mouais... mais non..; j'ai fait une petite boulette

    On reprend avec ceci :
    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
    while t{k}<30
           k=k+1
                t{k}=t{k-1}+h;
        for i=1:4
            for j=1:5
     
                temp=h*(((f1(C{k-1}(i,j),ka,u,deltaX,D,Tp)-f2(C{k-1}(i,j),ka,u,deltaX,D,Tp))/(deltaX*a)))+R1(Te,C{k-1}(i,j),Vmax,Ko,Km,Ro)/a;
     
                try
                   C{k}(i,j)= C{k-1}(i,j)+temp;
                catch
                   size(temp)
                   size(C{k-1}(i,j))
                   error('Probleme')
                end
    Parce que C{k}(i,j) n'est pas affecté dans le TRY-CATCH
    Ingénieur indépendant en mécatronique - Conseil, conception et formation
    • Conception mécanique (Autodesk Fusion 360)
    • Impression 3D (Ultimaker)
    • Développement informatique (Python, MATLAB, C)
    • Programmation de microcontrôleur (Microchip PIC, ESP32, Raspberry Pi, Arduino…)

    « J'étais le meilleur ami que le vieux Jim avait au monde. Il fallait choisir. J'ai réfléchi un moment, puis je me suis dit : "Tant pis ! J'irai en enfer" » (Saint Huck)

  9. #9
    Candidat au Club
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2007
    Messages : 11
    Points : 4
    Points
    4
    Par défaut
    salut,
    quand j'ai maintenant le message d'erreur suivant:
    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
    k =
     
         2
     
     
    ans =
     
         4     4
     
     
    ans =
     
         1     1
     
    ??? Error using ==> filhamdoullilah22 at 46
    Probleme

  10. #10
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 302
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Freelance mécatronique - Conseil, conception et formation

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 302
    Points : 53 166
    Points
    53 166
    Par défaut
    Donc, en simplifiant, tu essaies de stocker temp de dimension 4x4 dans C{k}(i,j) de dimension 1x1... d'où le message d'erreur Subscripted assignment dimension mismatch.
    Ingénieur indépendant en mécatronique - Conseil, conception et formation
    • Conception mécanique (Autodesk Fusion 360)
    • Impression 3D (Ultimaker)
    • Développement informatique (Python, MATLAB, C)
    • Programmation de microcontrôleur (Microchip PIC, ESP32, Raspberry Pi, Arduino…)

    « J'étais le meilleur ami que le vieux Jim avait au monde. Il fallait choisir. J'ai réfléchi un moment, puis je me suis dit : "Tant pis ! J'irai en enfer" » (Saint Huck)

  11. #11
    Candidat au Club
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2007
    Messages : 11
    Points : 4
    Points
    4
    Par défaut
    C'est vrai. merci la fonction ne bloque plus.
    mais il ya encore un problème.
    la fonction "temp" calcule toujours une matrice nulle alors que si je fais le calcul de la première matrice de temp avec (C{k-1}=C{1})manuellement, elle différente de 0.

  12. #12
    Candidat au Club
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2007
    Messages : 11
    Points : 4
    Points
    4
    Par défaut
    non je me suis rendu compte que tout va bien.
    merci pour votre aide.
    bonne soirée.

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

Discussions similaires

  1. "axis" ne marche pas dans un programme
    Par fuyo2004 dans le forum MATLAB
    Réponses: 2
    Dernier message: 12/06/2009, 14h50
  2. Réponses: 7
    Dernier message: 24/03/2009, 16h33
  3. fonction redimensionnement marche pas sous firefox
    Par calitom dans le forum Général JavaScript
    Réponses: 9
    Dernier message: 11/09/2007, 14h39
  4. 'Limit' ne marche pas dans une sous requete !?
    Par walou dans le forum Requêtes
    Réponses: 2
    Dernier message: 07/09/2007, 13h06
  5. Outlook ne marche pas dans mon réseau sous linux
    Par Germain123 dans le forum Applications et environnements graphiques
    Réponses: 3
    Dernier message: 25/03/2006, 22h15

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