Retour

Source de Gibbs-BC-meta.tex

Fichier TeX
% (novembre 2008) http://www.cnam.fr/maths/Membres/ghorbanzadeh/
%
\documentclass[12pt,a4paper]{article}
 \usepackage[latin1]{inputenc}
 \usepackage[T1]{fontenc}
 \usepackage[french]{babel}
 \usepackage{palatino}
 \usepackage{fancyvrb}
\usepackage{moreverb}
\usepackage{xkeyval}
\usepackage{graphicx,emp,ifpdf}
\ifpdf
\DeclareGraphicsRule{*}{mps}{*}{}
\fi
\addto\captionsfrench{ \renewcommand{\figurename}{Figure }}
% fichier des fonctions qui va être utilisé comme Librairie  par BC

\begin{VerbatimOut}{MaLiB.b}
/* somme de Gibbs */

define gibbs(n,x){
 auto som_x;
 /* pour bc les indices démmarent de 0 */
 som_x[0]=s(x);  /* premier terme = sin(x)*/
 for ( k =1; k <=n; k ++)
 som_x[k]=som_x[k-1]+ s((k+1)*x)/(k+1);
  /* sin(kx)/k */
 return(som_x[n]);
 }

/* fonction intervalle retourne un point de [a,b] */
/* parmi les nb_point points de [a,b] */

define intervalle(a,b,nb_point,indice){
/* indice dans{0,1,..., nb_point-1} */
auto xj;
xj=a+(b-a)*(indice/(nb_point-1));
return(xj);
}
\end{VerbatimOut}
%%%%%%%%%%%%% Exécution de BC %%%%%%%%%%%
% répertoire de  bc.exe  : C:/GnuWin32/bin/
% #1 fichier contenant les commandes de bc
% #2 fichier contenant les résultats des calculs
\newcommand{\executBC}[2]{
% \immediate\write18{C:/GnuWin32/bin/bc.exe  -q -l MaLiB.b #1 > #2}
\immediate\write18{bc  -q -l MaLiB.b #1 > #2} % linux (JMS)
}
%%%%%%%%%%%%% Fin d'Exécution de BC %%%%%%%%%%%%%%%%
\newcounter{ComptFich}   % compteur pour les fichiers internes
%%%%%%%% Ecrire en langage BC     %%%%%%%%%%%%%%%%%%%%
%Ecrire en langage BC le fichier contenant les calculs
% x\in[a*pi,b*pi]
% x parcourt les intervalles de longueur 'multiple' de 2*pi
% #1 valeur de a
% #2 valeur de b
% #3 valeur de n
% #4 valeur de nombre de points
% #5 chiffres après la virgule
\newwrite\FichierBC
\newcommand{\EcrireBC}[5]{%
\immediate\openout\FichierBC bcgibbs\theComptFich.bc
\immediate\write\FichierBC{scale = #5 ;}
\immediate\write\FichierBC{a=#1\noexpand*4*a(1);}
\immediate\write\FichierBC{b=#2\noexpand*4*a(1);}
\immediate\write\FichierBC{n=#3;}
\immediate\write\FichierBC{nbp=#4;}
\immediate\write\FichierBC{for ( i =0; i <=nbp-1; i ++)}
\immediate\write\FichierBC{xx[i]=intervalle(a,b,nbp,i);}
\immediate\write\FichierBC{  }
\immediate\write\FichierBC{for ( j =0; j <=nbp-2; j ++)}
\immediate\write\FichierBC{print xx[j], " ", gibbs(n,xx[j]) , "\noexpand\n";}
\immediate\write\FichierBC{  }
\immediate\write\FichierBC{print xx[nbp-1], " ", gibbs(n,xx[nbp-1])}
\immediate\write\FichierBC{  }
\immediate\write\FichierBC{quit}
\immediate\closeout\FichierBC
}
%%%%%%%%%%%% Fin Ecrire en langage BC %%%%%%%%%%%%%%%%
%%%%%%%%   Ecrire en langage metapost     %%%%%%%%%%%%%%%%%%%%
%Ecrire en langage metapost le fichier contenant les commandes graphiques
\newwrite\FichierMETAPOST
\newcommand{\EcrireMETA}{%
\immediate\openout\FichierMETAPOST bcgibbs\theComptFich.mp
\immediate\write\FichierMETAPOST{input graph ;}
\immediate\write\FichierMETAPOST{beginfig(\theComptFich)}
\immediate\write\FichierMETAPOST{u:=1 cm;}
\immediate\write\FichierMETAPOST{draw begingraph(10cm,10cm)}
\immediate\write\FichierMETAPOST{gdraw "bcgibbs\theComptFich.dat"
withpen pencircle scaled 1.5bp
withcolor (uniformdeviate(1),uniformdeviate(1),uniformdeviate(1));}
\immediate\write\FichierMETAPOST{frame.llft;}
\immediate\write\FichierMETAPOST{label.lrt(btex $x$ etex, (10.1*u,0));}
\immediate\write\FichierMETAPOST{label.ulft(btex $S_n(x)$ etex, (-.2*u,10.1*u)) ;}
\immediate\write\FichierMETAPOST{endgraph;}
\immediate\write\FichierMETAPOST{endfig ;}
\immediate\write\FichierMETAPOST{end ;}
\immediate\closeout\FichierMETAPOST
}
%%%%%%%%%%%%%%%% Fin Ecrire en langage Metapost  %%%%%%%%%%%%%%%
% la commande pour afficher le titre des graphes
\newcommand{\Affichage}[3]{%
\ifnum#1 =0
repr\'esentation de $\mathrm{S}_{#3}(x)$
pour $x\in[0, #2\pi]$  \fi
\ifnum#1 =1
repr\'esentation de $\mathrm{S}_{#3}(x)$
pour $x\in[\pi, #2\pi]$  \fi
\ifnum#1 =-1
repr\'esentation de $\mathrm{S}_{#3}(x)$
pour $x\in[-\pi, #2\pi]$ \fi
\ifnum#2 =0
repr\'esentation de $\mathrm{S}_{#3}(x)$
pour $x\in[#1\pi, 0]$ \fi
\ifnum#2 =1
repr\'esentation de $\mathrm{S}_{#3}(x)$
pour $x\in[#1\pi, \pi]$ \fi
\ifnum#2 =-1
repr\'esentation de $\mathrm{S}_{#3}(x)$
pour $x\in[#1\pi, -\pi]$  \fi
\ifnum#1 >1 \ifnum#1 >1
repr\'esentation de $\mathrm{S}_{#3}(x)$
pour $x\in[#1\pi, #2\pi]$\else  \fi \fi
\ifnum#1 < -1 \ifnum#2 < -1
repr\'esentation de $\mathrm{S}_{#3}(x)$
pour $x\in[#1\pi, #2\pi]$\else  \fi \fi
}
%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%% IHM  %%%%%%%%%%%%%
\makeatletter
% paramètre a
\define@cmdkey{PHGibbs}{a}{\def\ParamA{#1}}
% paramètre b
\define@cmdkey{PHGibbs}{b}{\def\ParamB{#1}}
% paramètre n
\define@cmdkey{PHGibbs}{n}{\def\ParamN{#1}}
% paramètre nombre de points
\define@cmdkey{PHGibbs}{nb}{\def\ParamNB{#1}}
% paramètre precision
\define@cmdkey{PHGibbs}{pscale}{\def\ParamP{#1}}
% valeurs par default
\presetkeys{PHGibbs}{a=0, b=2,n=50,nb=\the\time,pscale=7}{}
% corps du la  commande
\def\PHGibbs{\@ifnextchar[\@PHGibbs{\@PHGibbs[]}}
\def\@PHGibbs[#1]{\setkeys{PHGibbs}{#1}%
\stepcounter{ComptFich}

% code en BC
\EcrireBC{\ParamA}{\ParamB}{\ParamN}{\ParamNB}{\ParamP}
% Exécution de BC
\executBC{bcgibbs\theComptFich.bc}{bcgibbs\theComptFich.dat}
% code en Metapost
\EcrireMETA
% Compilation du fichier metapost
% \immediate\write18{C:/texmf/miktex/bin/mp.exe bcgibbs\theComptFich.mp}
\immediate\write18{mpost bcgibbs\theComptFich.mp}
% inclusion des figures
\begin{figure}[ht]
\begin{center}
\includegraphics{bcgibbs\theComptFich.\theComptFich}
\caption{\Affichage{\ParamA}{\ParamB}{\ParamN}}
\end{center}
\end{figure}
}
\makeatother
%%%%%%%%%%%%%%%%%% Fin IHM  %%%%%%%%%%%%%

\pagestyle{empty}

\begin{document}

\begin{center} \verb+ \PHGibbs +  \end{center}
\PHGibbs
\newpage
\begin{center} \verb+ \PHGibbs[a=-1, b=2,n=20,nb=250,pscale=7]  +  \end{center}
\PHGibbs[a=-1, b=2,n=20,nb=250,pscale=7]
\newpage
\begin{center} \verb+ \PHGibbs[a=-2, b=0,n=30,nb=250,pscale=7]  +  \end{center}
\PHGibbs[a=-2, b=0,n=30,nb=250,pscale=7]
\newpage
\begin{center} \verb+ \PHGibbs[a=-2, b=1,n=10,nb=250,pscale=11]  +  \end{center}
\PHGibbs[a=-2, b=1,n=10,nb=250,pscale=11]
\newpage
\begin{center} \verb+ \PHGibbs[a=-3, b=-1,n=50,nb=450,pscale=7]  +  \end{center}
\PHGibbs[a=-3, b=-1,n=50,nb=450,pscale=7]
\newpage
\begin{center} \verb+  \PHGibbs[a=2, b=6,n=200,nb=500,pscale=5] +  \end{center}
\PHGibbs[a=2, b=6,n=200,nb=500,pscale=5]
\newpage
\begin{center} \verb+ \PHGibbs[a=-5, b=-3,n=10,nb=500,pscale=13]  +  \end{center}
\PHGibbs[a=-5, b=-3,n=10,nb=500,pscale=13]

\end{document}