%©( avril 2009) http://www.cnam.fr/depts/maths/Membres/ghorbanzadeh/ \RequirePackage[latin1]{inputenc} \RequirePackage{fp} \FPmessagesfalse % pour ne pas voir les messages de FP \RequirePackage{pst-func} \RequirePackage{pstricks-add} \RequirePackage{moreverb} \RequirePackage{fancyvrb} \RequirePackage{xkeyval} % pour l'IHM \RequirePackage{ifthen} \RequirePackage{multido} \input{random.tex} %%% pour le titre des figures \addto\captionsfrench{% \renewcommand{\figurename}{Figure }} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \RequirePackage[hang,small]{caption} \renewcommand{\captionfont}{\usefont{T1}{rm}{m}{n}\fontsize{11pt}{11pt}\selectfont} \renewcommand{\captionlabelfont}{\sffamily} \setlength{\captionmargin}{10pt} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%% pour le titre des tables \addto\captionsfrench{ \renewcommand{\tablename}{Table} } %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%% affichage des résultats %%%%%%%%%%%%% %%%%%%%%% Zone UniInf %%%%%%%%%%%%%%%%%%%%%%% \newcommand{\NormalUniInf}[3]{% \displaystyle{\mathbb{P}\left( \mathcal{N}(#1,#2)\leq #3 \right)} } %%%%%%%%% (Zone UniSup ) %%%%%%%%%%%%%%%%%%%%%%% \newcommand{\NormalUniSup}[3]{% \displaystyle{\mathbb{P}\left( \mathcal{N}(#1,#2)\geq #3 \right)} } %%%%%%%%% (Zone BiInt ) %%%%%%%%%%%%%%%%%%%%%%% \newcommand{\NormalBiInt}[4]{% \displaystyle{\mathbb{P}\left( #3 \leq \mathcal{N}(#1,#2)\leq #4 \right)} } %%%%%%%%% (Zone BiExt ) %%%%%%%%%%%%%%%%%%%%%%% \newcommand{\NormalBiExt}[4]{% \displaystyle{\mathbb{P}\left(\mathcal{N}(#1,#2)\leq #3 \right)+\mathbb{P}\left(\mathcal{N}(#1,#2)\geq #4 \right)} } %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%% Partie BC %%%%%%%% %%%%%%%% Ecrire en langage BC %%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%% librairie pour BC %%%%%%%%%%%%%%%%%%%%% \begin{VerbatimOut}[]{NormalLib.b} /* fonction de répartition de loi N(mu,sigma2) */ define normaleg_fdr(x,mu,sigma) { auto y; y=(x-mu)/sqrt(sigma); return normale_fdr(y); } /* calcul de Phi(x) */ define normale_fdr(x) { auto t,b1,b2,b3,b4,b5,p,c; b1=0.319381530; b2=-0.356563782; b3=1.781477937; b4=-1.821255978; b5=1.330274429; p =0.2316419; c =0.39894228; t = 1/(1 + p*valabs(x)); if(x >= 0) return (1-c*e(-x*x/2)*t*(t*(t*(t*(t*b5+b4)+b3)+b2)+b1)); return (c * e(-x*x/2)* t*(t*(t*(t*(t*b5+b4)+b3)+b2)+b1)); } define valabs(x) { if(x >= 0) return (x); return (-x); } \end{VerbatimOut} %%%%%%%% Récupérer les résultats calculés par BC %%%%%%%% \newwrite\FichierBC %%%%%%%%%%%%%%%%%% Zone UniInf %%%%%%%%%%%%%%%%%% % #1 fichier contenant le résultat des calculs % #2 seiul (pour UniInf ) % #3 mu % #4 sigma % #5 précision (chiffres après la virgule) \newcommand{\ResultatBCUniInf}[5][NormalR]{% \immediate\openout\FichierBC #1.bc \immediate\write\FichierBC{scale=#5;} \immediate\write\FichierBC{print "\noexpand$\noexpand\\NormalUniInf{#3}{#4}{#2} = ",(normaleg_fdr(#2,#3,#4))/1, "$";} \immediate\write\FichierBC{quit} \immediate\closeout\FichierBC } %%%%%%%%%%%%%%%%%% Zone UniSup %%%%%%%%%%%%%%%%%% % #1 fichier contenant le résultat des calculs % #2 seiul (pour UniSup ) % #3 mu % #4 sigma % #5 précision (chiffres après la virgule) \newcommand{\ResultatBCUniSup}[5][NormalR]{% \immediate\openout\FichierBC #1.bc \immediate\write\FichierBC{scale=#5;} \immediate\write\FichierBC{print "\noexpand$\noexpand\\NormalUniSup{#3}{#4}{#2} = ",(1-normaleg_fdr(#2,#3,#4))/1, "$";} \immediate\write\FichierBC{quit} \immediate\closeout\FichierBC } %%%%%%%%%%%%%%%%%% Zone BiInt %%%%%%%%%%%%%%%%%% % #1 fichier contenant le résultat des calculs % #2 seiul (pour a ) % #3 seiul (pour b ) % #4 mu % #5 sigma % #6 précision (chiffres après la virgule) \newcommand{\ResultatBCBiInt}[6][NormalR]{% \immediate\openout\FichierBC #1.bc \immediate\write\FichierBC{scale=#6;} \immediate\write\FichierBC{print "\noexpand$\noexpand\\NormalBiInt{#4}{#5}{#2}{#3} = ",(normaleg_fdr(#3,#4,#5)-normaleg_fdr(#2,#4,#5))/1, "$";} \immediate\write\FichierBC{quit} \immediate\closeout\FichierBC } %%%%%%%%%%%%%%%%%% Zone BiExt %%%%%%%%%%%%%%%%%% % #1 fichier contenant le résultat des calculs % #2 seiul (pour a ) % #3 seiul (pour b ) % #4 mu % #5 sigma % #6 précision (chiffres après la virgule) \newcommand{\ResultatBCBiExt}[6][NormalR]{% \immediate\openout\FichierBC #1.bc \immediate\write\FichierBC{scale=#6;} \immediate\write\FichierBC{print "\noexpand$\noexpand\\NormalBiExt{#4}{#5}{#2}{#3} = ",(normaleg_fdr(#2,#4,#5)+1-normaleg_fdr(#3,#4,#5))/1, "$";} \immediate\write\FichierBC{quit} \immediate\closeout\FichierBC } %%%%%%%%%%% Appel à bc %%%%%%%%%% % répertoire de bc.exe : C:/GnuWin32/bin/ % \executBC{#1}{#2}{#3} % #1 librairie BC % #2 fichier contenant les commandes en BC % #3 fichier en sortie \newcommand{\executBC}[3][NormalLib]{ %%% Il faut modifier ici le chemin d'accès à BC ! \immediate\write18{bc -q -l #1.b #2 > #3 } } %%%%%%%%%% IHM-Récupération des résultats en ligne %%%%%%%% \makeatletter % paramètre mu \define@key{NormalEcrire}{mu}{\def\PMu{#1}} % paramètre sigma^2 \define@key{NormalEcrire}{sigma}{\def\PSigmaD{#1}} % borne inf de la zone à calculer \define@key{NormalEcrire}{Binf}{\def\PBinf{#1}} % borne sup de la zone à calculer \define@key{NormalEcrire}{Bsup}{\def\PBsup{#1}} % paramètre pour la Zone à calculer \define@cmdkey{NormalEcrire}{zone}{\def\Zone{#1}} % paramètre précision (chiffres après la virgule) \define@cmdkey{NormalEcrire}{precision}{\def\Paramprecision{#1}} % valeur par default \presetkeys{NormalEcrire}{mu=0,sigma=1,Binf=-2,Bsup=2,precision=6}{} \def\NormalEcrire{\@ifnextchar[\@NormalEcrire{\@NormalEcrire[]}} \def\@NormalEcrire[#1]{\setkeys{NormalEcrire}{#1}% \ifthenelse{\equal{\Zone}{UniInf}}{% \ResultatBCUniInf[NormRUniInf]{\PBinf}{\PMu}{\PSigmaD}{\Paramprecision} \executBC{NormRUniInf.bc}{NormRUniInf.tex}% \input{NormRUniInf.tex}}{} \ifthenelse{\equal{\Zone}{UniSup}}{% \ResultatBCUniSup[NormRUniSup]{\PBsup}{\PMu}{\PSigmaD}{\Paramprecision} \executBC{NormRUniSup.bc}{NormRUniSup.tex}% \input{NormRUniSup.tex}}{} \ifthenelse{\equal{\Zone}{BiInt}}{% \ResultatBCBiInt[NormRBiInt]{\PBinf}{\PBsup}{\PMu}{\PSigmaD}{\Paramprecision} \executBC{NormRBiInt.bc}{NormRBiInt.tex}% \input{NormRBiInt.tex}}{} \ifthenelse{\equal{\Zone}{BiExt}}{% \ResultatBCBiExt[NormRBiExt]{\PBinf}{\PBsup}{\PMu}{\PSigmaD}{\Paramprecision}% \executBC{NormRBiExt.bc}{NormRBiExt.tex}% \input{NormRBiExt.tex}}{} } \makeatother \def\FontOnze{\usefont{T1}{cmr}{m}{n}\fontsize{11pt}{11pt}\selectfont } \renewcommand{\arraystretch}{1.2} \newwrite\FichierTable %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%% Table de la loi N(mu,sigma2) %%%%%%%%%%%%%%%%%% % #1 fichier contenant le résultat des calculs % #2 mu % #3 sigma % #4 borne inf % #5 borne sup % #6 précision \makeatletter \begingroup \catcode`\[=1 \catcode`\]=2 \catcode`\{=11 \catcode`\}=11 \gdef\@myleftbrace[{] \gdef\@myrightbrace[}] \endgroup \newcommand{\NormaleTableBC}[6][NormalTable]{% \immediate\openout\FichierTable #1.bc \immediate\write\FichierTable{scale=#6;} \immediate\write\FichierTable{mu=#2;} \immediate\write\FichierTable{sigma=#3;} \immediate\write\FichierTable{binf=#4;} \immediate\write\FichierTable{bsup=#5;} \immediate\write\FichierTable{pas=bsup - binf;} \immediate\write\FichierTable{for ( j =0; j <100; j ++) \@myleftbrace } \immediate\write\FichierTable{y[j]=binf+pas*j/99; } \immediate\write\FichierTable{\@myrightbrace} \immediate\write\FichierTable{print "\noexpand\\begin\@myleftbrace table\@myrightbrace[ht]","\noexpand\n"} \immediate\write\FichierTable{print "\noexpand\\centering" ,"\noexpand\n"} \immediate\write\FichierTable{print "\noexpand\\[ F(x)=\noexpand\\mathbb{P}(\noexpand\\mathcal{N}(#2 , #3)\noexpand\\leq x)\noexpand\\]","\noexpand\n"} \immediate\write\FichierTable{print "\@myleftbrace \noexpand\\FontOnze","\noexpand\n"} \immediate\write\FichierTable{print "\noexpand\\[ \noexpand\\begin{array}{|c|c|c|c|c|c|c|c|}", "\noexpand\\hline\noexpand\n" } \immediate\write\FichierTable{print "x \noexpand& F(x) \noexpand& x \noexpand& F(x) \noexpand& x \noexpand& F(x) \noexpand& x \noexpand& F(x)" ,"\noexpand\\\noexpand\\\noexpand\\hline\noexpand\n" } \immediate\write\FichierTable{for ( i =0; i <25; i ++) \@myleftbrace } \immediate\write\FichierTable{print y[i]/1, "\noexpand&", normaleg_fdr(y[i]/1,mu,sigma)/1, "\noexpand&",y[i+25]/1, "\noexpand&",normaleg_fdr(y[i+25]/1,mu,sigma)/1 , "\noexpand&\noexpand\n",y[i+50]/1 , "\noexpand&",normaleg_fdr(y[i+50]/1,mu,sigma)/1, "\noexpand&",y[i+75]/1, "\noexpand&",normaleg_fdr(y[i+75]/1,mu,sigma)/1;} \immediate\write\FichierTable{if (i\@percentchar4==0) print "\noexpand\\\noexpand\\\noexpand\\hline\noexpand\n" } \immediate\write\FichierTable{\@myrightbrace} \immediate\write\FichierTable{print "\noexpand\\end{array}","\noexpand\\]\noexpand\n"} \immediate\write\FichierTable{print "\@myrightbrace","\noexpand\n"} \immediate\write\FichierTable{print "\noexpand\\caption\@myleftbrace Table de la loi \noexpand\\(\noexpand\\mathcal{N}(#2 , #3) \noexpand\\) \@myrightbrace" ,"\noexpand\n"} \immediate\write\FichierTable{print "\noexpand\\end\@myleftbrace table\@myrightbrace","\noexpand\n"} %\immediate\write\FichierTable{print "\noexpand\\clearpage","\noexpand\n"} \immediate\write\FichierTable{quit} \immediate\closeout\FichierTable } \makeatother %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%% IHM-Table %%%%%%%% \makeatletter % paramètre mu \define@key{NormalTable}{mu}{\def\PMu{#1}} % paramètre sigma^2 \define@key{NormalTable}{sigma}{\def\PSigmaD{#1}} % borne inf de l'intervalle [a,b] \define@key{NormalTable}{a}{\def\PBinf{#1}} % borne sup % borne inf de l'intervalle [a,b] \define@key{NormalTable}{b}{\def\PBsup{#1}} % paramètre précision (chiffres après la virgule) \define@cmdkey{NormalTable}{precision}{\def\Paramprecision{#1}} % valeur par default \presetkeys{NormalTable}{mu=0,sigma=1,a=-4,b=4,precision=6}{} \def\NormalTable{\@ifnextchar[\@NormalTable{\@NormalTable[]}} \def\@NormalTable[#1]{\setkeys{NormalTable}{#1}% \NormaleTableBC{\PMu}{\PSigmaD}{\PBinf}{\PBsup}{\Paramprecision} \executBC{NormalTable.bc}{NormalTable.tex} %\begin{table}[ht] %\centering \input{NormalTable.tex} %\caption{Table de la loi $\mathcal{N}(\PMu ,\PSigmaD)$} % title of Table %\end{table} } \makeatother %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \newdimen\RandRA \newdimen\RandGA \newdimen\RandBA \setrandim{\RandRA}{0pt}{1pt} \setrandim{\RandGA}{0pt}{1pt} \setrandim{\RandBA}{0pt}{1pt} \newdimen\RandRB \newdimen\RandGB \newdimen\RandBB \setrandim{\RandRB}{0pt}{1pt} \setrandim{\RandGB}{0pt}{1pt} \setrandim{\RandBB}{0pt}{1pt} \definecolor{CouleurA}{rgb}{\pointless\RandRA,\pointless\RandGA,\pointless\RandBA} \definecolor{CouleurB}{rgb}{\pointless\RandRB,\pointless\RandGB,\pointless\RandBB} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%% Partie pstricks %%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \newlength{\LongueurX} \newlength{\LongueurY} \makeatletter % paramètre mu \define@key{Normaleplot}{mu}{\def\PMu{#1}} % paramètre sigma^2 \define@key{Normaleplot}{sigma}{\def\PSigmaD{#1}} % borne inf de la zone à hachurer \define@key{Normaleplot}{Binf}{\def\PBinf{#1}} % borne sup de la zone à hachurer \define@key{Normaleplot}{Bsup}{\def\PBsup{#1}} % xechelle=xunit de \psset \define@key{Normaleplot}{xechelle}{\def\Xechelle{#1}} % yechelle=yunit de \psset \define@key{Normaleplot}{yechelle}{\def\Yechelle{#1}} % nbpoints=plotpoints de \psset \define@key{Normaleplot}{nbpoints}{\def\Nbpoints{#1}} % couleur de la zone à hachurer \define@key{Normaleplot}{couleurz}{\def\CouleurZ{#1}} % couleur de la courbe \define@key{Normaleplot}{couleurc}{\def\CouleurC{#1}} % paramètre pour la Zone à hachurer \define@cmdkey{Normaleplot}{zone}{\def\Zone{#1}} % paramètre précision (chiffres après la virgule) \define@cmdkey{Normaleplot}{precision}{\def\Paramprecision{#1}} % valeur par default \presetkeys{Normaleplot}{mu=0,sigma=1,Binf=-2,Bsup=2,xechelle=11,yechelle=4,nbpoints=200, couleurz=CouleurA, couleurc=CouleurB,precision=6}{} \def\Normaleplot{\@ifnextchar[\@Normaleplot{\@Normaleplot[]}} \def\@Normaleplot[#1]{\setkeys{Normaleplot}{#1}% %\PSigma = sqrt(%\PSigmaD) \FProot{\PSigma}{\PSigmaD}{2} \FPeval\PSigma{round(\PSigma,6)} % x varie dans [mu-4*sigma , mu+4*sigma] % appel à FP pour les calculs intermédiaires % les paramètres de : pspicture \FPeval\PSA{round(clip(\PMu-4*\PSigma),4)} % mu-4*sigma \FPeval\PSB{round(clip(\PMu+4*\PSigma),4)} % mu+4*sigma %1/(sigma * sqrt(2*pi)) = max(f) \FPeval\FMax{round(clip((0.3989)/ \PSigma),4)} % axes des x : longueur de [mu-4*sigma , mu+4*sigma] = 8*sigma \FPeval\Xmesure{round(clip(\Xechelle / (8*\PSigma)),4)} % axes des y : longueur=\FMax \FPeval\Ymesure{round(clip(\Yechelle / \FMax),4)} %\XMarques pour échelonner l'axe des x \FPeval\XMarques{round(clip(0.3989/ \Ymesure),2)} %\PSAA : la position de l'axe des y \FPeval\PSAA{round(clip(\PSA - 0.5*\PSigma),2)} % %\PSBB : la position de l'axe des y \FPeval\PSBB{round(clip(\PSB + 0.5*\PSigma),2)} \FPeval\Xpos{round(clip(\PMu - 0.5*\PSigma),2)} % \setlength{\LongueurX}{\Xmesure cm} % pour passer \Xmesure en longueur \setlength{\LongueurY}{\Ymesure cm} % pour passer \Ymesure en longueur \begin{figure}[htb] \centering \psset{xunit=\LongueurX,yunit=\LongueurY,plotpoints=\Nbpoints} \begin{pspicture}(\PSAA,0)(\PSBB,\FMax) \ifthenelse{\equal{\Zone}{UniInf}}{% \pscustom[fillstyle=solid,fillcolor=\CouleurZ,linestyle=none]{% \psline(\PBinf,0)(\PSA,0)% \psGauss[sigma=\PSigma, mue=\PMu , linewidth=2pt]{\PSA}{\PBinf}% }} {\ifthenelse{\equal{\Zone}{UniSup}}{% \pscustom[fillstyle=solid,fillcolor=\CouleurZ,linestyle=none]{% \psline(\PBsup,0)(\PSB,0)% \psGauss[sigma=\PSigma, mue=\PMu , linewidth=2pt]{\PSB}{\PBsup}% }} {\ifthenelse{\equal{\Zone}{BiInt}}{% \pscustom[fillstyle=solid,fillcolor=\CouleurZ,linestyle=none]{% \psline(\PBsup,0)(\PBinf,0)% \psGauss[sigma=\PSigma, mue=\PMu , linewidth=2pt]{\PBinf}{\PBsup}% }} {\ifthenelse{\equal{\Zone}{BiExt}}{% \pscustom[fillstyle=solid,fillcolor=\CouleurZ,linestyle=none]{% \psline(\PBinf,0)(\PSA,0)% \psGauss[sigma=\PSigma, mue=\PMu , linewidth=2pt]{\PSA}{\PBinf}% } \pscustom[fillstyle=solid,fillcolor=\CouleurZ,linestyle=none]{% \psline(\PBsup,0)(\PSB,0)% \psGauss[sigma=\PSigma, mue=\PMu , linewidth=2pt]{\PSB}{\PBsup}% }}{} } } } \psGauss[sigma=\PSigma, mue=\PMu,linecolor=\CouleurC,linewidth=2pt]{\PSB}{\PSA} \psline[linewidth=1pt]{-}(\PSAA,0)(\PSBB,0) % horizontal % pour remplacer \psaxes \multido{\i=1+1}{9}{% \FPeval\mdx{round(clip(\PMu + (\i - 5)* \PSigma),2)} % l'intervalle sous la forme % [mu-4*sigma,mu-3*sigma, ..., mu,mu+sigma,..,mu+4*sigma] \rput(\mdx,0){\tiny{$\mid$}} \rput[b](\mdx,-\XMarques){\tiny{\mdx}}} \end{pspicture} \medskip \ifthenelse{\equal{\Zone}{UniInf}}{% \ResultatBCUniInf[NormRUniInf]{\PBinf}{\PMu}{\PSigmaD}{\Paramprecision} \executBC{NormRUniInf.bc}{NormRUniInf.tex} \caption{graphe de la loi $\mathcal{N}(\PMu \,,\, \PSigmaD)$ avec \protect\input{NormRUniInf.tex}}}{} \ifthenelse{\equal{\Zone}{UniSup}}{% \ResultatBCUniSup[NormRUniSup]{\PBsup}{\PMu}{\PSigmaD}{\Paramprecision} \executBC{NormRUniSup.bc}{NormRUniSup.tex}% \caption{graphe de la loi $\mathcal{N}(\PMu \,,\, \PSigmaD)$ avec \protect\input{NormRUniSup.tex}}}{} \ifthenelse{\equal{\Zone}{BiInt}}{% \ResultatBCBiInt[NormRBiInt]{\PBinf}{\PBsup}{\PMu}{\PSigmaD}{\Paramprecision} \executBC{NormRBiInt.bc}{NormRBiInt.tex} \caption{graphe de la loi $\mathcal{N}(\PMu \,,\, \PSigmaD)$ avec \protect\input{NormRBiInt.tex}}}{} \FPeval\XExt{round(clip(\PMu - 3* \PSigma),2)} \ifthenelse{\equal{\Zone}{BiExt}}{% \ResultatBCBiExt[NormRBiExt]{\PBinf}{\PBsup}{\PMu}{\PSigmaD}{\Paramprecision}% \executBC{NormRBiExt.bc}{NormRBiExt.tex}% \caption{graphe de la loi $\mathcal{N}(\PMu \,,\, \PSigmaD)$ avec \protect\input{NormRBiExt.tex}}}{} %\label{......} \end{figure} } \makeatother