Salut à tous,
Lorsque je tente d'exécuter mon programme Sph.m , l'erreur suivante s'affiche:
:aie:Citation:
One or more output arguments not assigned during call to
'G:\MATLAB701\work\Sph.m (Sph)'
Qu'est ce que cela signifie?
Version imprimable
Salut à tous,
Lorsque je tente d'exécuter mon programme Sph.m , l'erreur suivante s'affiche:
:aie:Citation:
One or more output arguments not assigned during call to
'G:\MATLAB701\work\Sph.m (Sph)'
Qu'est ce que cela signifie?
Salut.
Si Sph est une function, il manque des attributions à certaines variables de sortie. Fait nous voir ce programme.Citation:
One or more output arguments not assigned during call to
'G:\MATLAB701\work\Sph.m (Sph)'
Qu'est ce que cela signifie?
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.Code:function a=myfun()
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).
La fonction Sph.m suffisait et l'explication que je t'avais donnée aussi.
L'entête de ta fonction est ainsi :Il faut donc absolument qu'à la fin de ta fonction la variable sopt soit définie.Code:function sopt = Sph(Y1,Q,M,C)
Or celle-ci n'apparait qu'à un seul endroit :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é.Code:
1
2
3
4
5 while(1) u(i)=u(i)+1; if u(i)>L(i) if (i==n) sopt=uchap;
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
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......
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????
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 :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).Code:function [uchap,d_square] = Sph(Y1,Q,M,C)
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) :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 ?Code:
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
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?