Inscription / Connexion Nouveau Sujet
Niveau algorithmique
Partager :

Programmation de la methode de Lahiri

Posté par
curieuse21
17-05-11 à 22:14

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

Posté par
Simpom
re : Programmation de la methode de Lahiri 18-05-11 à 12:00

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.

Posté par
curieuse21
== 18-05-11 à 22:38

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

Posté par
curieuse21
Réponse de matlab 18-05-11 à 22:41

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.

Posté par
Simpom
re : Programmation de la methode de Lahiri 19-05-11 à 09:09

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 !

Posté par
curieuse21
Merci beaucoup ! 19-05-11 à 15:39

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 :


Rester sur la page

Désolé, votre version d'Internet Explorer est plus que périmée ! Merci de le mettre à jour ou de télécharger Firefox ou Google Chrome pour utiliser le site. Votre ordinateur vous remerciera !