Pensez à lire la Charte avant de poster !

$\newcommand{\K}{\mathbf K}$


Les-Mathematiques.net - Cours de mathématiques supérieures
 Les-Mathematiques.net - Cours de mathématiques universitaires - Forum - Cours à télécharger

A lire
Deug/Prépa
Licence
Agrégation
A télécharger
Télécharger
84 personne(s) sur le site en ce moment
E. Cartan
A lire
Articles
Math/Infos
Récréation
A télécharger
Télécharger
Théorème de Cantor-Bernstein
Théo. Sylow
Théo. Ascoli
Théo. Baire
Loi forte grd nbre
Nains magiques
 
 
 
 
 

Simuler une loi uniforme sur une surface

Envoyé par Argeuh 
Argeuh
Simuler une loi uniforme sur une surface
il y a dix années
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.
Re: Simuler une loi uniforme sur une surface
il y a dix années
cela se fait souvent avec la methode du rejet:
[fr.wikipedia.org]
Re: Simuler une loi uniforme sur une surface
il y a dix années
un exo que tout debutant en programmaion/probabilite devrait faire:

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 ..
Re: Simuler une loi uniforme sur une surface
il y a dix années
avatar
Le problème dans le cas de Argeuh est que son ensemble est de mesure nulle dans $\R^{n+1}$, si je comprends bien l'énoncé... Je commencerais par exprimer la loi de $X$, si $(X,f(X))$ suit la loi uniforme sur $\{(x,f(x)\}$, a priori elle sera plus concentrée là où le gradient de $f$ est grand. Ensuite on essaye de simuler $X$ suivant cette loi.
Et oui, tout le problème est que cet ensemble est de mesure nulle ...
Re: Simuler une loi uniforme sur une surface
il y a dix années
ah oui, effectivement. Il faudrait alors définir par ce que tu entends par "uniformément" sur cet ensemble de mesure nulle ..
Puisque la surface $S$ est "un objet de dimension 2", on peut dire que $X$ est uniforme sur $S$ si et seulement si $P(X \in A) = \dfrac{|A|}{|S|}$ pour tout $A\subset S$ et où $|.|$ désigne la mesure de Lebesgue en dimension 2 ? (je sens un gros problème en écrivant ces lignes, mais disons, le uniforme est au sens intuitif du terme) (et cette question a été posée en exercice dans un TD donc ça ne doit pas être très compliqué ... enfin en théorie)
Re: Simuler une loi uniforme sur une surface
il y a dix années
avatar
Non pas de gros problème, enfin il faut savoir de quoi on parle. Il y a une arme atomique qui permet de parler d'aire d'a peu près n'importe quelle partie de $\R^3$, c'est la mesure de Hausdorff 2-dimensionnelle. Dans le cas d'une sous-variété régulière pas la peine de sortir ce bouzin, on sait définir une mesure de surface "unitaire", qui coïncide avec la mesure de Lebesgue lorsque la variété est incluse dans un sous-espace affine. Dans ton cas, la mesure unitaire sur le graphe de $f$ donne par projection une mesure sur $D$, sauf erreur elle est de densité $\sqrt{1+\left \frac{\partial f}{\partial x} \right^2} \sqrt{1+\left \frac{\partial f}{\partial y} \right^2}$ par rapport à la mesure de Lebesgue (il manque peut-être un produit croisé), et pour obtenir une proba il suffit de diviser par la masse totale ; cela dit dans la méthode du rejet pas besoin de connaître cette masse.
Re: Simuler une loi uniforme sur une surface
il y a dix années
oui, je pense que cela marche bien !

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 ?
Re: Simuler une loi uniforme sur une surface
il y a dix années
avatar
Après réflexion je dirais que la densité est plutôt $\sqrt{1+\left( \frac{\partial f}{\partial x} \right)^2 +\left( \frac{\partial f}{\partial y} \right)^2}=\sqrt{1+||\nabla f||^2}$, ça paraît plus plausible vu l'invariance par rotation.
Re: Simuler une loi uniforme sur une surface
il y a dix années
avatar
En effet l'autre marchait bien aussi pour les exemples simples ! du genre les "cylindres" $f(x,y)=g(x)$.

Sinon voilà une excellente question, je vais y réfléchir :)
Re: Simuler une loi uniforme sur une surface
il y a dix années
avatar
Bon j'ai écrit un petit programme pour tester le truc, est-ce que quelqu'un sait comment dessiner un point dans l'espace sous scilab ? En 2D je connais xrect mais ça ne marche pas avec 3 coordonnées.
Re: Simuler une loi uniforme sur une surface
il y a dix années
Est-ce que l'on peut construire une paramétrisation injective dérivable par morceaux de D ? Dans ce cas, on pourrait compléter le jacobien par des vecteurs orthonormaux, prendre l'inverse du déterminant, et faire une sorte de normalisation. Enfin, c'est un peu flou dans ma tête mais il doit y avoir un truc comme ça. Non, désolé, après avoir mieux lu ce que vous avez dit, je crois que ce que je viens de dire ne sert à rien.



Edité 2 fois. La dernière correction date de il y a dix années et a été effectuée par Jean-Louis Lambda.
remarque
Re: Simuler une loi uniforme sur une surface
il y a dix années
egoroff : param3d1
Re: Simuler une loi uniforme sur une surface
il y a dix années
avatar
Jean-Louis : En effet pour obtenir ma densité j'ai regardé l'image par la projection sur $D$ d'un parallèlogramme infinitésimal tangent à la surface construit sur deux vecteurs tangents.

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.
[attachment 10476 argeuh.jpg]
[attachment 10477 argeuh2.jpg]
remarque
Re: Simuler une loi uniforme sur une surface
il y a dix années
A propos, on n'est pas obligé de se limiter à des graphes. On peut faire la même chose sur une nappe paramétrée. Ca peut être utile pour tirer uniformément sur une sphère par exemple (si j'ai bien compris le principe de la méthode de rejet). Comme je ne maîtrise pas l'aspect aléatoire de la chose, je m'abstiendrai de faire du scilab, et j'attendrai qu'egoroff nous livre le résultat de ses cogitations.
Re: Simuler une loi uniforme sur une surface
il y a dix années
avatar
Tout à fait monseigneur ; il y a sans doute des formes fondamentales ou je ne sais quoi là-dessous, c'est à creuser, j'ai bien envie de simuler des points uniformément sur des surfaces un peu tordues genre immersion d'une bouteille de Klein ou que sais-je.

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 !
Waouh :)-D

Mais, il n'y a pas de justification élémentaire ? Je suis largué là ...
Re: Simuler une loi uniforme sur une surface
il y a dix années
avatar
Pas trop de justification élémentaire je pense, car il s'agit bien de géométrie différentielle ; mais si on en connaît un peu c'est tout simplement la formule de changement de variable avec jacobien, mais pour des "espaces courbes". M'enfin peut-être que remarque va trouver comment rendre ça plus élémentaire.
remarque
Re: Simuler une loi uniforme sur une surface
il y a dix années
Ben, c'est évident, non ? C'est l'élément d'aire dans un système de coordonnées curvilignes. Dans le cas d'un graphe, ça donne la formule $\sqrt{1+\|\nabla f\|^2}$. Pour une nappe paramétrée générale $\Phi\colon\omega\to\R^3$ avec $\omega\subset\R^2$, on pose classiquement $a_\alpha=\partial_\alpha \Phi$, et la densité en question, c'est juste $\|a_1\wedge a_2\|$. C'est aussi la racine carrée du déterminant de la première forme fondamentale.
remarque
Re: Simuler une loi uniforme sur une surface
il y a dix années
Et on attend toujours la bouteille de Klein remplie de petits points aléatoires en scilab et en 3d...
Re: Simuler une loi uniforme sur une surface
il y a dix années
avatar
D'accord pour la densité pour le cas d'une nappe générale. Maintenant il ne me manque plus qu'une paramétrisation raisonnable de la bouteille de Klein, parce que pour l'instant je ne trouve que des trucs horribles qui me donnent le mal de mer sad smiley Je vais peut-être me rabattre sur une surface un poil plus simple...
Re: Simuler une loi uniforme sur une surface
il y a dix années
avatar
Pour patienter en attendant la bouteille de Félix...
[attachment 10505 argeuh.JPG]


remarque
Re: Simuler une loi uniforme sur une surface
il y a dix années
Aaaah ! Tout vient à point pour qui sait attendre ! C'est beau.
Re: Simuler une loi uniforme sur une surface
il y a dix années
avatar
Oui désolé j'ai un peu tardé :)

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}$.
Re: Simuler une loi uniforme sur une surface
il y a dix années
avatar
Bonsoir,

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
Re: Simuler une loi uniforme sur une surface
il y a dix années
avatar
Bonsoir samok,

Qu'entends-tu par "souffler" ? :)
Re: Simuler une loi uniforme sur une surface
il y a dix années
avatar
Des sombres histoires de roméo-morphismes, sans doute, sourire.

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
remarque
Re: Simuler une loi uniforme sur une surface
il y a dix années
Non justement : on ne regarde pas une surface abstraite, mais un plongement particulier de cette surface dans $\R^3$ et on veut que la distribution apparaisse uniforme sur cette surface plongée, c'est-à-dire par rapport à la mesure superficielle, ie, un truc qui est modifié via la transformation que tu préconises. Je pense qu'egoroff pourrait, si ce n'est pas abuser, illustrer graphiquement la différence grâce à son script scilab magique.
Re: Simuler une loi uniforme sur une surface
il y a dix années
avatar
Tout le problème est là. Lorsque je fabrique un cylindre, je peux conserver l'uniformité. Mais lorsque je veux en faire un tore, mon carré de caoutchouc n'est plus uniformément tendu. Donc des points uniformes sur un carré ne le seront plus sur le tore.

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.
Re: Simuler une loi uniforme sur une surface
il y a dix années
avatar
Aucun problème, aussitôt dit aussitôt fait. Le problème, c'est que la différence n'est pas franchement flagrante.
remarque
Re: Simuler une loi uniforme sur une surface
il y a dix années
Peut-être avec un tore dont le petit rayon est proche du grand rayon ?
Re: Simuler une loi uniforme sur une surface
il y a dix années
avatar
Oups désolé j'ai oublié d'attacher le fichier. Bon en comparant les deux on voit quand même une concentration plus forte au centre et plus faible à l'extérieur.
[attachment 10509 argeuh2.jpg]


Re: Simuler une loi uniforme sur une surface
il y a dix années
avatar
Alors, pour un tore $(R,r)$ la densité est proportionnelle à $A(u,v)=r (R+r \cos v)$ (merci Maple), donc la densité au centre est $\frac{R-r}{R+r}$ fois celle à l'extérieur. Effectivement avec un $r$ proche de $R$ (disons $0,9R$) on accentue la différence, mais on ne dépassera jamais 2.
Re: Simuler une loi uniforme sur une surface
il y a dix années
avatar
Euh.. n'importe quoi ! Bon je fais tout de suite un dessin illustrant la différence pour $r=0,9R$
Re: Simuler une loi uniforme sur une surface
il y a dix années
avatar
Bon alors voilà le dessin tant attendu, pour r=0,9R, et 60000 points (contre 2000 sur les dessins précédents). Je ne suis qu'à moitié satisfait, pour deux raisons :
- 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 :
[attachment 10516 samoklmin.jpg]


Re: Simuler une loi uniforme sur une surface
il y a dix années
avatar
En taille réelle, retourné pour ne pas exploser la largeur du forum :
[attachment 10517 samokrot.jpg]


remarque
Re: Simuler une loi uniforme sur une surface
il y a dix années
Oui, les bandes sont bizarres... balance le script, pour voir (s'il n'est pas couvert par le secret industriel).
Re: Simuler une loi uniforme sur une surface
il y a dix années
avatar
J'ai toujours un peu honte de montrer ce que je code à quelqu'un d'autre, parce que c'est rarement très élégant (voire un peu crade parfois) mais bon...

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.
[attachment 10520 samok.txt]
Pièces jointes:
ouvrir | télécharger - samok.txt (2.5 KB)
remarque
Re: Simuler une loi uniforme sur une surface
il y a dix années
Il y a définitivement des bandes, et le plus curieux c'est qu'elles semblent correspondre aux lignes de coordonnées sur le tore... j'essaie d'y voir plus clair.
remarque
Re: Simuler une loi uniforme sur une surface
il y a dix années
Ah, pourrait-ce être un problème de discrétisation de la paramétrisation du tore ? (je n'ai pas encore mis le nez dans ton admirable script (c) egoroff).
remarque
Re: Simuler une loi uniforme sur une surface
il y a dix années
Bof, non ça n'a pas l'air d'être ça...sad smiley
remarque
Re: Simuler une loi uniforme sur une surface
il y a dix années
C'est quand même marrant, parce que quand on tire les points à plat, dans le plan u,v, on ne voit pas les bandes... Bon, je vais laisser refroidir un peu.
remarque
Re: Simuler une loi uniforme sur une surface
il y a dix années
OK, je crois que c'est un problème graphique : le tracé du tore cache une partie des points :

[attachment 10522 Image1.png]


Re: Simuler une loi uniforme sur une surface
il y a dix années
avatar
..et pour aller dans le même sens, voilà l'image sur le tore d'un maillage régulier 200x200 du carré.
[attachment 10523 reg.jpg]


Re: Simuler une loi uniforme sur une surface
il y a dix années
avatar
Ah ben voilà ! Je savais que tu trouverais la solution. Tu nous mets la même en version samok ?
remarque
Re: Simuler une loi uniforme sur une surface
il y a dix années
Et la comparaison uniforme/samok :

uniforme :

[attachment 10524 uni.png]

samok :

[attachment 10525 samok.png]


Re: Simuler une loi uniforme sur une surface
il y a dix années
avatar
Re: Simuler une loi uniforme sur une surface
il y a dix années
avatar
Prochaine étape : tirer les points de sorte qu'on ait une impression d'uniformité :
- 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 ?
Seuls les utilisateurs enregistrés peuvent poster des messages dans ce forum.

Cliquer ici pour vous connecter

Liste des forums - Statistiques du forum

Total
Discussions: 132 722, Messages: 1 276 233, Utilisateurs: 22 608.
Notre dernier utilisateur inscrit GTB.


Ce forum
Discussions: 7 817, Messages: 59 169.

 

 
©Emmanuel Vieillard Baron 01-01-2001
Adresse Mail:

Inscription
Désinscription

Actuellement 16057 abonnés
Qu'est-ce que c'est ?
Taper le mot à rechercher

Mode d'emploi
En vrac

Faites connaître Les-Mathematiques.net à un ami
Curiosités
Participer
Latex et autres....
Collaborateurs
Forum

Nous contacter

Le vote Linux

WWW IMS
Cut the knot
Mac Tutor History...
Number, constant,...
Plouffe's inverter
The Prime page