% (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}