Re: [Syracuse] un arbre de probabilite

Auteur: Jean-Côme Charpentier <Jean-Come.Charpentier@wanadoo.fr>
Date: sam avr 29 2006 - 03:49:03 CEST

Thérèse Le Chevalier a écrit :
> Bonsoir,
>
> Pour illustrer un poly pour mes terminales, je voudrais faire un schéma
> de Bernoulli sur 3 ou 4 niveaux.
> Je pensais naïvement que pst-tree serait plus adapté que Metapost à qui
> j'étais prête à faire des infidélités.

   Ce n'est pas une question de mieux ou pas mieux adapté. Les deux
outils sont très bien adaptés pour ce type de graphique. Le choix doit
plus être motivé par l'existence ou non de macros prêtes à l'emploi et
de l'habitude que l'on a de chacun de ces deux outils. Bref, ils sont
tous les deux très bien.

> J'ai renoncé au quatrième niveau à cause de la syntaxe pénible, et des
> galères de "parenthésage".

   Certes. Cela vaut donc le coup d'être rigoureux dans les indentations
du source, sinon, effectivement, on est vite perdu. D'autre part, comme
il s'agit d'une structure très répétitive, on doit penser à une
automatisation de la bête (voir deuxième solution).

> Et je suis prête à renoncer totalement car
> l'étiquette 1-p se place mal. (J'ai l'habitude de faire les arbres en
> mode gauche-droite, ce qui ne doit pas arranger les choses.)
> Y a-t-il des subtilités de pst-tree qui ne figurent pas dans les
> quelques pages que j'ai téléchargées ?

   La référence « officielle » est tout à fait suffisante pour les
différentes macros et les différents paramètres gérant les arbres. Cette
documentation peut être trouvée sur CTAN a :

   <http://tug.ctan.org/tex-archive/graphics/pstricks/obsolete/doc/>

sous forme de 6 fichiers PostScript. Il y a un truc un peu bizarre sur
le site CTAN puisque les 4 fichiers pst-usr<n>.ps qui constituent la
documentation de base sont indiqués avec la date 20 mars 1997 alors que
la documentation est celle du 12 mars 1993. Du coup les deux fichiers
betadoc<n>.ps qui semblent plus anciens sont en fait plus récents. Ils
datent d'avril 1993, ce qui ne fait pas une grosse différence mais il
n'en reste pas moins qu'il s'agit bel et bien de réécriture de certains
chapitres... et notamment du chapitre sur les arbres. Conclusion, la doc
la plus à jour sur les arbres se trouvent dans le fichier betadoc2.ps.
   Je ne suis pas sûr d'être bien clair :-)

> \pstree[treemode=R,nodesep=1ex,levelsep= 12ex]
> {\TR{}}
> {\pstree {\TR{A}\taput{$p$}}
> {\pstree {\TR{A} \taput{$p$}}
> {\TR{A}\taput{$p$} \TR{$\bar{A}$} \tbput{$1-p$}}
> \pstree{\TR{$\bar{A}$} \tbput{$1-p$}}
> {\TR{A} \taput{$p$} \TR{$\bar{A}$} \tbput{$1-p$}}}
> \pstree {\TR{$\bar{A}$} \tbput{$1-p$}}
> {\pstree {\TR{A} \taput{$p$}}
> {\TR{A}\taput{$p$} \TR{$\bar{A}$} \tbput{$1-p$}}
> \pstree{\TR{$\bar{A}$} \tbput{$1-p$}}
> {\TR{A} \taput{$p$} \TR{$\bar{A}$} \tbput{$1-p$}}} }
> --------------------------------------

   Dire que les "1-p" ne sont pas bien placés ne dit pas comment ils
doivent être placés. On peut imaginer plusieurs solutions :

   - parallèlement (et centrés par rapport) au trait
   - droite de la formule alignée plus ou moins avec le centre du trait
   - autre

Par exemple, pour obtenir la seconde solution, j'ai obtenu quelque chose
de pas trop mal en remplaçant systématiquement les
   \taput{$p$}
par
   \taput[tpos=0.4]{$p$}
et les
   \tbpos{$1-p$}
par
   \tbpos[tpos=0.2]{$1-p$}
mais je n'ai pas cherché à obtenir quelque chose d'irréprochable : on
peut sans doute affiner.

   On attaque la solution automatique. Un arbre Bernouillesque, c'est
bêtement une répétition de sous-arbres du type :

      p
    ----- A
   |
   |
    ----- \bar{A}
     1-p

Le premier ennui, c'est que pour la syntaxe de \pstree, il va falloir
savoir si l'on se trouve au niveau des feuilles ou non. D'autre part, et
ce n'est pas propre à \pstree, la racine de l'arbre n'a pas de lettre
associée. L'automatisation va poser quelques problème parce qu'il faut
prévoir plein de cas différents en fonction de l'imagination de
l'utilisateur :-) Du coup, j'ai paramétrisé le plus possible. C'est très
certainement améliorable mais les premiers résultats n'ont pas l'air
trop dégueulasses.

\documentclass{article}
\usepackage{pst-tree}

\makeatletter

\newcount\@Bernoudepth
\newcount\@Bernoumaxdepth

\newcommand\Bernoutree[8][treemode=R,nodesep=1ex,levelsep=12ex]{%
   % #2 = profondeur de l'arbre
   % #3 = nom de l'évènement réussite
   % #4 = nom de l'évènement échec
   % #5 = proba de l'événement réussite
   % #6 = placement de #5
   % #7 = proba de l'évènement échec
   % #8 = placement de #7
   \begingroup
   % initialise paramètres
   \psset{treemode=R,nodesep=1ex,levelsep=12ex}%
   \psset{#1}%
   \@Bernoumaxdepth #2\relax
   \def\@Reussite{#3}%
   \def\@Echec{#4}%
   \def\@probareussite{#5}%
   \def\@Argreussite{#6}%
   % Si pas de spécification de placement,
   % on place au centre
   \ifx\empty\@Argreussite
     \def\@Argreussite{0.5}%
   \fi
   \def\@probaechec{#7}%
   \def\@Argechec{#8}
   \ifx\empty\@Argechec
     \def\@Argechec{0.5}%
   \fi
   % Premier appel (racine vide, niveau 1)
   \pstree{\TR{}}{\@Bernoutree{1}}
   \endgroup
}
\newcommand\@Bernoutree[1]{%
   % #1 = profondeur récursive
   % initialise profondeur en cours
   \@Bernoudepth #1\relax
   \ifnum\@Bernoudepth=\@Bernoumaxdepth
     % si la profondeur max est atteinte
     % on place les deux noeuds terminaux
     \TR{\@Reussite}\taput[tpos=\@Argreussite]{\@probareussite}
     \TR{\@Echec}\tbput[tpos=\@Argechec]{\@probaechec}
     % et c'est tout
   \else
     % sinon on construit récursivement
     % les deux sous-arbres de niveau supérieur
     \advance\@Bernoudepth \@ne
     \pstree{\TR{\@Reussite}\taput[tpos=\@Argreussite]
            {\@probareussite}}{\@Bernoutree{\the\@Bernoudepth}}
     \pstree{\TR{\@Echec}\tbput[tpos=\@Argechec]
            {\@probaechec}}{\@Bernoutree{\the\@Bernoudepth}}
   \fi
}
\makeatother

\begin{document}
\Bernoutree{3}{$A$}{$\bar{A}$}{$p$}{0.4}{$1-p$}{0.2}

\Bernoutree[levelsep=18ex,treenodesize=0pt]{4}{$R$}{$E$}{$p$}{}{$q$}{}
\end{document}

   Jean-Côme Charpentier

_______________________________________________
Syracuse mailing list
Syracuse@melusine.eu.org
http://melusine.eu.org/cgi-bin/mailman/listinfo/syracuse
Received on Sat Apr 29 03:48:57 2006

Cette archive a été créée par hypermail 2.1.8 : sam avr 29 2006 - 14:37:01 CEST