Simuler une loi uniforme sur une surface
Bonjour,
Tout à l'heure on m'a posé une question et je n'ai su y répondre:
Si on se donne $f$ une fonction suffisamment réguliere, comment simuler une loi uniforme sur l'ensemble $\{(x,f(x)), x\in D\}$ où $D$ est un ouvert borné ?
J'aimerais beaucoup avoir une réponse.
Merci.
Tout à l'heure on m'a posé une question et je n'ai su y répondre:
Si on se donne $f$ une fonction suffisamment réguliere, comment simuler une loi uniforme sur l'ensemble $\{(x,f(x)), x\in D\}$ où $D$ est un ouvert borné ?
J'aimerais beaucoup avoir une réponse.
Merci.
Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
http://fr.wikipedia.org/wiki/Méthode_du_rejet
un etudiant veut simuler une loi uniforme sur le disque unite. Il suit le raisonnement suivant:
1: il simule un rayon $r$ uniformement sur $[0;1]$
2: il simule un angle $\theta$ uniformement sur $[0; 2 \pi[$
3: bein alors $(r \cos(\theta), \sin(\theta))$ est la simulation qu'il voulait pardi ..
Pourquoi cet etudiant a t il completement faux ..
sinon juste une question: une fonction $C^1$ admet un graphe de mesure de Hausdorff $2$ dimennsionnelle localement finie, mais pas forcement pourune fonction continue. Quand est il des fonctions derivables ?
Sinon voilà une excellente question, je vais y réfléchir
remarque : Merci bien je savais que je pourrais compter sur le pro du Scilab En attendant j'avais fait le truc avec Maple (beurk), le résultat ci-joint pour $D=[-1,1]^2$ et $f(x,y)=e^x+e^y$, 100 échantillons en utilisant la méthode du rejet pour simuler selon la densité voulue. Ca serait mieux si vous pouviez faire tourner la surface mais bon... Maintenant que j'ai la commande Scilab je vais pourvir faire des essais avec un domaine $D$ un peu plus rigolo.
Je vous présenterai bien les résultats de la simulation en Scilab mais mon PC est sur le point de rendre l'âme, je vais le laisser se reposer et call it a day fûr die Nacht. A demain !
Mais, il n'y a pas de justification élémentaire ? Je suis largué là ...
Le tore est paramétré par
$x=(2+\cos v) \cos u$
$y=(2+\cos v) \sin u$
$z=\sin v$
La densité de proba qu'on en déduit sur $[0,2\pi]^2$ est de la forme $f(u,v)=c \sqrt{4+4 \cos v + \cos^2 v}$.
je me pose une question, résultant du fait que le tore ou la bouteille de Klein sont des espèces de carré, dont les côtés sont identifiés entre eux d'une certaine façon.
Donc tirer des points aléatoires de façon uniforme dans un carré me semble jouable, et si l'on souffle dans le carré (ça c'est hors de portée pour moi, informatiquement parlant), est-ce qu'au final ça va être uniformément distribué sur la surface obtenue?
Merci de faire reculer mon ignorance infinie,
S
Qu'entends-tu par "souffler" ?
Pour le tore, je pense que tu vois bien ce que je veux dire, transformer le carré en cylindre (fini) puis incurver le tout comme il faut.
Est-ce que cela transporte bien l'uniformité, c'est un peu ma question, j'ai envie de dire que ce serait trop simple pour être vrai.
S
L'idée est alors de tirer de manière inhomogène sur le carré, cette inhomogénéité étant choisie de sorte que la distribution qui en résulte sur le tore soit uniforme. Pour une paramétrisation donnée $(u,v) \mapsto (x,y,z)$, on regarde quelle est l'aire (infinitésimale) de l'image sur le tore d'un petit rectangle de côtés $(du,dv)$ ; appellons-la $A(u,v)\, du \,dv$.
Si on tire un point du carré selon la densité de probabilité $f$, la proba de tomber dans notre carré $(du,dv)$ est $f(u,v) \, du \, dv$, on a la même proba de tomber dans son image sur le tore (si la paramétrisation est injective). Or pour avoir une loi uniforme digne de ce nom cette proba doit être proportionnelle à l'aire de ce petit bout de tore : on doit donc avoir $f(u,v) \, du \, dv = cA(u,v) \, du \, dv$.
On en déduit que $f=cA$, avec $c=(\int A)^{-1}$ de sorte qu'on ait bien une densité. Reste à calculer $A(u,v)$ ; pour cela on fait le produit vectoriel des vecteurs tangents $t_1=\left( \frac{\partial x}{\partial u}, \frac{\partial y}{\partial u}, \frac{\partial z}{\partial u} \right)$ et $t_2=\left( \frac{\partial x}{\partial v}, \frac{\partial y}{\partial v}, \frac{\partial z}{\partial v} \right)$ et on en prend la norme.
Reste à simuler des points $(u,v)$ de densité $f$. On utilise la méthode du rejet, qui évite d'avoir à calculer $c$. Supposons que $A$ soit bornée, disons par $M$. Il s'agit de tirer des $(u,v)$ uniformes dans le carré, et un $w$ uniforme dans $[0,M]$. On garde le point $(u,v)$ dès que $w \leq A(u,v)$, sinon on recommence. On montre que ce procédé produit en sortie des points ayant la bonne distribution : intuitivement un point a d'autant plus de chance d'être gardé que $A(u,v)$ est grand.
- les points semblent de répartir par "bandes" : défaut du générateur de nombres aléatoires ? de mon script ? bug d'affichage ?
- plus grave : les points qui devraient être uniformes semblent légèrement resserres au centre malgré tout ; erreur de calcul de la densité ? effet d'optique ? je suis parano ?
Assez parlé, voici les preuves :
Il faut changer l'extension, de .txt à .sci ; les deux dernieres fonctions tirages_uni et tirages_samok sont celles qui marchent ; la valeur de retour est toujours 0. Si tu as des améliorations à proposer tu es le bienvenu !
Disclaimer : The Egoroff Foundation should not be held liable for any problems caused by this script.
uniforme :
- lorsque le tore est vu du dessus, ou de côté, ou
- lorsqu'il est vu d'un angle $\theta$ par rapport au plan horizontal (à distance infinie, ou à distance finie $D$).
Quelqu'un est volontaire ?