Bonjour à tous,
J'ai un problème que vous pourrez, j'espère, m'aider à résoudre :
je dois programmer un échantillon avec remise selon un plan pps pour de la statistique, l'algorithme est le suivant :
Soit U un vecteur contenant les variables d'interêt u={x1,x2,....xN}, N la longueur de U et M son maximum.
L'algorithme est le suivant :
1) tirer un nombre entre 1 et N : k
2)tirer un nombre entre 1 et M : r
Si r<=xk alors k va dans l'échantillon s sinon on recommence à l'étape 1)
3) recommencer jusqu'à la taille d'échantillon voulue
J'ai ainsi programmé en matlab ce qui suit mais le problème est que l'échantillon reste la liste vide et donc que mon programme ne s'arrête jamais, pouvez vous m'aider ?
function [s] = echarpps(U,n)
%Donne un echantillon pour un plan pps avec remise sur la population V
%ayant pour vecteur U contenant une variable auxiliaire bien corellee
%renvoyant un echantillon de taille n
N=length(U);
M=max(U);
s=[];
while (length(s)<n)
k=randi(N,1,1); %donne un entier de maniere aleatoire entre 1 et N
e=randi(M,1,1); %donne un entier de maniere aleatoire entre 1 et M
if (e<=(U(k)))
(s==[s [k]]);
end
end
end
Merci beaucoup
Salut.
Bon il y a une erreur évidente : tu ne modifies jamais s, mais tu testes l'égalité de s avec [s, [k]] !
Enlève un '=', et vois si ça tourne mieux.
En réalité il ne veut pas de mon = il faut un double == pour une égalité dans un if sous matlab.
Et en fait j'ai cru comprendre qu'on ne mettait pas de then sous matlab donc mon S==[s [k]] est la modification de mon vecteur. Je réessaye en enlevant le double égal !
Merci beaucoup
Voila la réponse de matlab lorsque j'enleve le double egal
??? Error: File: echarpps.m Line: 12 Column: 10
The expression to the left of the equals sign is not a valid target for an
assignment.
Alors tout d'abord je suis quasi sûr de moi : l'opérateur '==' teste si les deux opérandes sont égaux, alors que l'opérateur '=' assigne à l'opérande de gauche la valeur de ce qu'il y a à droite.
Donc sur ta ligne " (s==[s [k]]); ", rien n'est jamais modifié.
Ensuite j'ai l'impression que tu utilises les parenthèses un peu à outrance (probablement pour te rassurer de peur de n'en oublier...), et là c'est justement le problème : l'expression "(s=[s [k]]);" (j'ai utilisé le '=' simple) n'as pas de sens entre parenthèses...
En mettant des parenthèses, matlab interprète "ce qu'il y a entre parenthèses est une valeur qui doit être calculée", alors que tu cherches à lui faire comprendre "la variable de gauche doit prendre la valeur qui lui est passée à droite du signe égal".
J'espère avoir été clair.
Bon courage !
Merci beaucoup le programme fonctionne sans les parenthèses et avec un simple égal, en réalité je n'avais pas compris la différence entre le == et le = merci d'avoir pris du temps pour me l'expliquer , il est vrai qu'on doit rendre un projet sur la théorie des sondages en Matlab alors que je sais me servir uniquement de Caml et que j'ai eu un prof un peu pointilleux sur les parenthèses dans les if then else !
Merci beaucoup de votre réponse et bonne journée
Vous devez être membre accéder à ce service...
Pas encore inscrit ?
1 compte par personne, multi-compte interdit !
Ou identifiez-vous :