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 :

Erreur : One or more output arguments not assigned


Sujet :

MATLAB

  1. #1
    Membre du Club
    Inscrit en
    Avril 2007
    Messages
    227
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 227
    Points : 64
    Points
    64
    Par défaut Erreur : One or more output arguments not assigned
    Salut à tous,

    Lorsque je tente d'exécuter mon programme Sph.m , l'erreur suivante s'affiche:

    One or more output arguments not assigned during call to
    'G:\MATLAB701\work\Sph.m (Sph)'

    Qu'est ce que cela signifie?

  2. #2
    Membre émérite
    Homme Profil pro
    Inscrit en
    Mai 2008
    Messages
    2 040
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 2 040
    Points : 2 841
    Points
    2 841
    Par défaut
    Salut.
    One or more output arguments not assigned during call to
    'G:\MATLAB701\work\Sph.m (Sph)'
    Qu'est ce que cela signifie?
    Si Sph est une function, il manque des attributions à certaines variables de sortie. Fait nous voir ce programme.

  3. #3
    Expert éminent sénior
    Avatar de Caro-Line
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    9 458
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 9 458
    Points : 14 828
    Points
    14 828
    Par défaut
    En gros cela signifie que si par exemple l'entête de ta fonction est :Que tu n'as défini la variable a nulle part dans le code de la fonction, ou alors éventuellement dans un bloc conditionnel (if, switch) dans lequel il n'est pas passé lors de l'exécution.

  4. #4
    Membre du Club
    Inscrit en
    Avril 2007
    Messages
    227
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 227
    Points : 64
    Points
    64
    Par défaut
    Je vous transmet les deux programmes:

    Le code dans sphere.m permet de calculer le taux d'erreur , et ceci en utilisant la fonction Sph (Sph.m).
    Fichiers attachés Fichiers attachés

  5. #5
    Expert éminent sénior
    Avatar de Caro-Line
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    9 458
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 9 458
    Points : 14 828
    Points
    14 828
    Par défaut
    La fonction Sph.m suffisait et l'explication que je t'avais donnée aussi.
    L'entête de ta fonction est ainsi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    function sopt = Sph(Y1,Q,M,C)
    Il faut donc absolument qu'à la fin de ta fonction la variable sopt soit définie.
    Or celle-ci n'apparait qu'à un seul endroit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    while(1)
        u(i)=u(i)+1;
        if u(i)>L(i)
            if (i==n)
                sopt=uchap;
    Cela signifie que s'il n'y a aucun i pour lequel u(i)>L(i) et tel que i=n alors sopt ne sera jamais initialisé.
    C'est donc ce qui arrive quand tu obtiens le warning.

    Donc :
    - soit tu initialises ta variable sopt dès le début du programme à une valeur par défaut
    - soit tu revoies ton programme

  6. #6
    Membre du Club
    Inscrit en
    Avril 2007
    Messages
    227
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 227
    Points : 64
    Points
    64
    Par défaut
    Vous dites que le problème pourrait parvenir du code...

    En fait, le code devrait être une traduction de l'organigramme suivant(voir le fichier en pièces jointes).

    Je ne sais pas si le code est bien conforme à l'organigramme......
    Images attachées Images attachées  

  7. #7
    Membre du Club
    Inscrit en
    Avril 2007
    Messages
    227
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 227
    Points : 64
    Points
    64
    Par défaut
    J'ai essayé de revoir le code, je ne sais pas, peut être que j'ai sauté une instruction ou que j'en ai ajouté une de plus...

    Est ce que quelqu'un pourrait vérifier si mon code est bien compatible avec l'organigramme????

  8. #8
    Expert éminent sénior
    Avatar de Caro-Line
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    9 458
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 9 458
    Points : 14 828
    Points
    14 828
    Par défaut
    Et bien si j'arrive à faire le lien entre tes différentes variables, déjà dans l'organigramme il y a marqué que les OUTPUT devraient être uchap et d_square_chap (et non pas sopt).
    Donc l'entête de ta fonction devrait être :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    function [uchap,d_square] = Sph(Y1,Q,M,C)
    Après il faut revoir dans le fichier sphere.m comment tu utilises ces variables (mais bon c'est toi qui doit savoir ce qu'elles représentent).

    Il y avait aussi quelques u(i)=u(i)+1 en trop.
    Mes modifications et commentaires (sans assurance que ça fonctionne puisque je n'ai ni les données ni les compétences pour tester) :
    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
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    %function sopt = Sph(Y1,Q,M,C)
    function [uchap,d_square_chap] = Sph(Y1,Q,M,C)
    ro=Y1*inv(M);%ok
    n=size(ro,1);%ok
    d_square=C;%ok
    T=zeros(1,n);%ok
    L=zeros(1,n);%
    u=zeros(1,n);%
    epsilon=zeros(1,n);%
    uchap=zeros(1,n);%
    T(n)=C;%ok
     
    S=ro;%ok
    i=n;%ok
    L(i)=sqrt(T(i)/Q(i,i))+S(i);%ok bien que je ne sache pas ce que
    % representent les traits dans le dessin ?
    u(i)=-(sqrt(T(i)/Q(i,i))+S(i))-1;%pareil
     
    while(1)
        u(i)=u(i)+1;%ok
        if u(i)>L(i)%ok
            if (i==n)%ok
                sopt=uchap;
                d_square_chap=d_square;
                break;%plutot un return meme si cela fonctionne
            else
                i=i+1;
                %u(i)=u(i)+1;%NON car il est fait dans la boucle while
            end
        else
            if (i>1)
                epsilon(i)=ro(i)-u(i);%ok
                T(i-1)=T(i)-Q(i,i)*(S(i)-u(i))^2;%ok
                S(i-1)=ro(i-1)+sum(Q(i-1,i:n)*epsilon(i:n));%ok
                i=i-1;%ok
                L(i)=sqrt(T(i)/Q(i,i))+S(i);%ok
                u(i)=-(sqrt(T(i)/Q(i,i))+S(i))-1;%ok
            else
                d_square_chap=T(n)-T(1)+Q(1,1)*(S(1)-u(1))^2;%ok
                if (d_square_chap < d_square)%ok
                    uchap=u;%ok
                    d_square=d_square_chap;%ok
                    T(n)=d_square_chap;%ok
                    i=n;%ok
                    L(i)=sqrt(T(i)/Q(i,i))+S(i);%ok
                    u(i)=-(sqrt(T(i)/Q(i,i))+S(i))-1;%ok
                    %else %du coup il sert à rien celui-ci
                    %u(i)=u(i)+1;%NON car on revient au début du while
                end
            end
        end
    end
    Mais sinon tu fais beaucoup d'initialisations dont certaines ne sont pas dans l'organigramme, tu pourrais peut-être de la même manière initialiser TOUTES les variables utilisées ?

  9. #9
    Membre du Club
    Inscrit en
    Avril 2007
    Messages
    227
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 227
    Points : 64
    Points
    64
    Par défaut
    J'ai effectué les modifications....
    Le problème, c'est que lorsque je fais l'exécution, ça dure une eternité sans afficher aucun résultat.
    Je me demande:est ce que c'est le while(1) qui pose problème?

Discussions similaires

  1. Output argument (and maybe others) not assigned during call
    Par clobern dans le forum Interfaces Graphiques
    Réponses: 9
    Dernier message: 21/09/2011, 19h37
  2. [Débutant] one or more projects in the solution were not loaded correctly
    Par wikiele dans le forum VB.NET
    Réponses: 11
    Dernier message: 18/08/2011, 17h10
  3. Réponses: 17
    Dernier message: 25/07/2011, 20h18
  4. [Lazarus] Contourner l'erreur Database not assigned
    Par weberick dans le forum Lazarus
    Réponses: 4
    Dernier message: 09/11/2008, 19h35
  5. Réponses: 1
    Dernier message: 28/04/2006, 20h36

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