Comment modéliser cette expérience en Scilab?
Bonjour, je souhaiterais savoir comment modéliser cette expérience par un programme Scilab svp ? Quel programme permettrait de simuler l'expérience décrite dans l'énoncé ?
Déjà personnellement je pense qu'il faut utiliser l'instruction "rand()" et par exemple, même si je sais que ce que j'ai fait n'est pas parfait et comporte des fautes forcément, voici ma piste.
Déjà personnellement je pense qu'il faut utiliser l'instruction "rand()" et par exemple, même si je sais que ce que j'ai fait n'est pas parfait et comporte des fautes forcément, voici ma piste.
z=0 c=0 / compteur for k= 1 : n c=c+1 if rand()<=(1/2) z=c end disp(z) else z=0 end end disp(z)Merci d'avance pour votre réponse.
Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
Si tu ne l'as pas fait, il est inutile évidemment de demander ce qu'on en pense : Ce serait idiot de demander alors que tu peux savoir tout seul.
Cordialement.
Enfin, la programmation avec des boucles n'est pas le fonctionnement de base de Matlab et Scilab, langages matriciels, il est préférable de faire un vecteur de booléens rand()<0.5 et de faire chercher le rang du premier "true".
J'ai abandonné scilab depuis trop longtemps pour dire comment faire.
Cordialement.
Non, pas ici.
Les facilités d'un langage ne devraient intervenir que dans l'implémentation de l'algorithme, pas dans le choix de l'algorithme.
Ici, si on tire le tableau à l'avance, ce sera vraisemblablement pour rien (on simule une loi géométrique tronquée, ou presque).
PS: je regrette le "repeat until" de Turbo Pascal. Je ne comprends pas que la plupart des langages aient choisi de s'en passer. On peut toujours l'émuler avec des "exit" mais ce n'est pas cool.
Ce serait différent si les probas étaient très déséquilibrées, scilab étant optimisé pour le travail matriciel.
Cordialement.
La solution avec boucle et compteur est très bien et sera proposée par le plus grand nombre de candidats (du moins pour ceux qui veulent bien se donner la peine d'y répondre).
Sinon, en exploitant les possibilités de Scilab :
n=10 ; X=grand(1,n,"bin",1,0.5) ; disp(X)
Z=max([0,min(find(X==1))]) ; disp(Z)
mais je n'imagine pas un candidat en ECS/ECE proposer cette solution.
tu utilises l'aspect matriciel. Est-ce vraiment plus long si n = 1000 par exemple (le cas Z=0 est très improbable) ?
Cordialement.
n=10^6 ; S=sum(1 ./[1:n]) // ultra rapide
ou bien :
n=10^6 ; S=0 ; for k=1:n S=S+1/k ; end // plusieurs minutes sur la même machine
Pour les simulations d'estimation, je tente de faire utiliser au maximum les possibilités matricielles de Scilab aux étudiants mais ils y semblent très réfractaires (de manière générale, la programmation est un problème pour la plupart d'entre eux). L'inconvénient de l'aspect matriciel est la taille limitée des matrices que l'on peut utiliser.
si je me souviens bien, Scilab est un langage interprété, donc dans le deuxième cas, c'est l'interpréteur qui fait un million de boucles, alors que le calcul matriciel est en langage compilé, bien plus rapide.
Si j'ai un moment, je réinstallerai scilab sur ma machine.
Cordialement.
Je peux vous assurer que de tels candidats existent... (mais sont très rares, je vous l'accorde).
Deux codes Scilab des plus basiques pour illustrer mon dernier post; les calculs sont de l'ordre de 60 à 100 fois plus rapides en utilisant la vectorisation pour un vecteur de 1 million de lignes.
On fera attention au " .^ "
on regardera " ./ " et " .* "
Paul
mais dans le cas de l'exercice du premier message, même avec n de l'ordre du million, on ne fera pas des centaines de boucles. Il y a déjà moins d'une chance sur 1000 qu'on ait besoin de plus de 10 boucles.
Cordialement