Simulation de probabilités, agrégat, Python (ou Scilab)
Répondre à la discussion
Affichage des résultats 1 à 9 sur 9

Simulation de probabilités, agrégat, Python (ou Scilab)



  1. #1
    Perfectina

    Simulation de probabilités, agrégat, Python (ou Scilab)


    ------

    Bonjour,

    On considère une suite de sous-ensembles de qui croît selon la règle suivante. A l’étape n, une particule est lancée à l’origine puis se déplace suivant une marche aléatoire simple : les probabilités d’aller à gauche et à droite valent ½. La particule se déplace jusqu’à ce qu’elle sorte de en un point . On définit alors : .

    On initialise le modèle avec . est appelé l’agrégat à l’étape n.

    Je dois écrire un programme qui simule l’évolution de l’agrégat jusqu’à l’étape 1000.

    Je ne vois pas du tout comment faire, je dois passer par Python ou Scilab.

    On a A1 = {0}. La particule sort donc en 1 (à droite) ou en -1 (à gauche). Donc A2 = {0,1} avec probabilité ½, et A2 = {-1,0} avec probabilité ½.
    Si A2 = {0,1}, alors on a A3 = {0,1,2} avec probabilité ½ ou A3 = {-1,0,1} avec probabilité ½.
    Si A2 = {-1,0}, alors on a A3 = {-1,0,1} avec probabilité ½ ou A3 = {-2,-1,0} avec probabilité ½.
    Etc.Nom : arbre proba.png
Affichages : 254
Taille : 20,8 Ko

    J’ai fait un arbre représentant l’agrégat jusqu’à l’étape 5. A chaque fois, la particule sort de l’ensemble par la gauche ou par la droite, avec une probabilité ½. Cependant, je ne vois vraiment pas comment simuler l’évolution jusqu’à l’étape 1000 sur Python ou Scilab… Quelqu’un pourrait m’aider ? Ce serait vraiment très sympa ! Merci d'avance.

    -----

  2. #2
    minushabens

    Re : Simulation de probabilités, agrégat, Python (ou Scilab)

    Il te suffit de simuler ta particule, i.e. de stocker sa trajectoire (ses 1000 positions successives) et tu construis les ensembles An à la fin, juste comme tu as dit: en aggrégeant les valeurs une à une.

  3. #3
    minushabens

    Re : Simulation de probabilités, agrégat, Python (ou Scilab)

    Tiens je me suis amusé à programmer ce problème sous R. J'ai écrit deux fonctions, la première simule une trajectoire et la deuxième calcule Ak pour un k donné. Elle renvoie un vecteur qui contient tous les nombres dans Ak mais pas dans l'ordre. Remarque qu'en fait Ak est un intervalle (puisque la particule ne peut pas "sauter" une position) et que donc la fonction n'aurait besoin de renvoyer que les valeurs extrêmes.

    Code:
    simule_particule<-function(nb.pas)
    {
    mouvements <- sample(c(-1,1),nb.pas,replace=TRUE)
    positions  <- cumsum(mouvements)
    
    return(list(mouvements=mouvements,positions=positions))
    }
    
    
    Ak<-function(trajectoire,k) if(k==0) 0 else unique(c(trajectoire$positions[k],Ak(trajectoire,k-1)))

  4. #4
    Perfectina

    Re : Simulation de probabilités, agrégat, Python (ou Scilab)

    Merci beaucoup !

  5. A voir en vidéo sur Futura
  6. #5
    Jack
    Modérateur

    Re : Simulation de probabilités, agrégat, Python (ou Scilab)

    Citation Envoyé par minushabens Voir le message
    Tiens je me suis amusé à programmer ce problème sous R. J'ai écrit deux fonctions, la première simule une trajectoire et la deuxième calcule Ak pour un k donné. Elle renvoie un vecteur qui contient tous les nombres dans Ak mais pas dans l'ordre. Remarque qu'en fait Ak est un intervalle (puisque la particule ne peut pas "sauter" une position) et que donc la fonction n'aurait besoin de renvoyer que les valeurs extrêmes.

    Code:
    simule_particule<-function(nb.pas)
    {
    mouvements <- sample(c(-1,1),nb.pas,replace=TRUE)
    positions  <- cumsum(mouvements)
    
    return(list(mouvements=mouvements,positions=positions))
    }
    
    
    Ak<-function(trajectoire,k) if(k==0) 0 else unique(c(trajectoire$positions[k],Ak(trajectoire,k-1)))
    Pédagogiquement parlant, je ne pense pas que ton intervention soit adaptée.

  7. #6
    minushabens

    Re : Simulation de probabilités, agrégat, Python (ou Scilab)

    mais je suis pas pédagogue. Note que je n'ai pas résolu le problème de Perfectina puisqu'il veut un code python et que c'est plus difficile de traduire du S vers Python que de programme ex nihilo.

    d'ailleurs je devais être fatigué. D'une part ça ne sert à rien de stocker et les mouvements et les positions puisqu'on passe de l'un à l'autre par intégration ou différentiation (entières), d'autre part ma fonction récursive pour trouver Ak à partir de la trajectoire est inutile, il suffit de considérer les k premières valeurs atteintes.

  8. #7
    Jack
    Modérateur

    Re : Simulation de probabilités, agrégat, Python (ou Scilab)

    Il reste en effet un peu de travail à Perfactina pour obtenir le résultat définitif.

  9. #8
    Perfectina

    Re : Simulation de probabilités, agrégat, Python (ou Scilab)

    Bonjour,

    Je up ce topic...
    J'essaie maintenant de faire un graphique de (An), suite de sous-ensembles de . C'est le même principe sauf que la particule a 4 directions potentielles (haut, droite, gauche, bas) et non 2. Donc cette fois-ci, on a A1 = {(0,0)}. A l'étape 1, la particule lancée à l'origine se trouve dans A1 et en sort soit par le point (0,1) (en haut), soit par le point (1,0) (à droite), soit par le point (0,-1) (en bas), soit par le point (-1,0) (à gauche). Donc A2 = {(0,0),(0,1)} ou A2 = {(0,0),(1,0)} ou A2 = {(0,0),(0,-1)} ou A2 = {(0,0),(-1,0)}, avec probabilité 1/4 à chaque fois.

    C'est donc plus difficile que le premier code.

    J'essaie de faire une liste... Voici ce que j'ai codé sur Scilab :

    function y=croissZ2(n)
    A0=[0 0]
    B0=[0 0]
    for i=1:n-1
    e=2*rand()-1
    f=2*rand()-1
    if ((e<0) & (f<0))
    A0=[[(A0(1,1)-1),0];A0];
    elseif ((e<0) & (f>0))
    A0=[A0;[(A0(i,1)+1),0];
    elseif ((e>0) & (f<0))
    B0=[[0,(B0(1,2)-1)];B0];
    else
    B0=[B0;[0,(B0(i,2)+1)]];
    end
    end
    for i=1:length(A0)
    if (A0(i,1)==A0(i,2))
    [A0(i,1),A0(i,2)]=null();
    end
    end
    y=[A0;B0]
    endfunction

    Sauf que ça ne compile pas. Un message d'erreur s'affiche, le voici :
    !--error 47
    end ou else est manquant...
    at line 23 of function croissZ2 called by :
    endfunction
    at line 23 of exec file called by :

    J'ai refait le tour de mon programme, je ne vois pas ce qui cloche... Si quelqu'un pouvait m'aider, je lui en serais très reconnaissante...

  10. #9
    minushabens

    Re : Simulation de probabilités, agrégat, Python (ou Scilab)

    annulé : insanités.

Discussions similaires

  1. Résolution Numérique équation de la chaleur 1D ( Scilab ou Python)
    Par jld1295 dans le forum Mathématiques du supérieur
    Réponses: 0
    Dernier message: 23/09/2016, 12h24
  2. Problème simulation Scilab
    Par Damping dans le forum Logiciel - Software - Open Source
    Réponses: 1
    Dernier message: 29/06/2014, 16h47
  3. [Python] Simulation OFDM
    Par invite0b084d5e dans le forum Électronique
    Réponses: 1
    Dernier message: 22/02/2012, 19h46
  4. simulation de Filtre sous Scilab
    Par invite6a647bb7 dans le forum Programmation et langages, Algorithmique
    Réponses: 6
    Dernier message: 23/01/2012, 14h26
  5. simulation avec scilab
    Par invite44b4596c dans le forum Logiciel - Software - Open Source
    Réponses: 1
    Dernier message: 01/07/2009, 21h02