From 9bca56189bb3edc83bf64b0088ef5a52b07e3b36 Mon Sep 17 00:00:00 2001 From: Norbert Preining Date: Sat, 19 Jan 2008 14:55:20 +0000 Subject: new package tablor, put into mathextra git-svn-id: svn://tug.org/texlive/trunk@6313 c570f23f-e606-0410-a88d-b1316a301751 --- Master/texmf-dist/doc/latex/tablor/README | 26 + Master/texmf-dist/doc/latex/tablor/README-fr.txt | 28 + Master/texmf-dist/doc/latex/tablor/Tablor.pdf | Bin 0 -> 134715 bytes Master/texmf-dist/doc/latex/tablor/Tablor.tex | 564 ++++++++++++++++ Master/texmf-dist/doc/latex/tablor/tablor.html | 813 +++++++++++++++++++++++ Master/texmf-dist/tex/latex/tablor/tablor.sty | 726 ++++++++++++++++++++ Master/tlpkg/tlpsrc/collection-mathextra.tlpsrc | 1 + Master/tlpkg/tlpsrc/tablor.tlpsrc | 2 + 8 files changed, 2160 insertions(+) create mode 100644 Master/texmf-dist/doc/latex/tablor/README create mode 100644 Master/texmf-dist/doc/latex/tablor/README-fr.txt create mode 100644 Master/texmf-dist/doc/latex/tablor/Tablor.pdf create mode 100644 Master/texmf-dist/doc/latex/tablor/Tablor.tex create mode 100644 Master/texmf-dist/doc/latex/tablor/tablor.html create mode 100644 Master/texmf-dist/tex/latex/tablor/tablor.sty create mode 100644 Master/tlpkg/tlpsrc/tablor.tlpsrc diff --git a/Master/texmf-dist/doc/latex/tablor/README b/Master/texmf-dist/doc/latex/tablor/README new file mode 100644 index 00000000000..a51504d7256 --- /dev/null +++ b/Master/texmf-dist/doc/latex/tablor/README @@ -0,0 +1,26 @@ +The package allows the user to use the computer algebra system XCAS +to generate tables of signs and of variations (the actual plotting of +the tables uses the MetaPost macro package "tableauVariation.mp" : + +http://frederic.mazoit.free.fr/LaTeX_metapost/tableauVariations/ . + +The tablor package requires that shell escape be enabled. + + +For instance : + +\begin{TV} TV([-10,+infinity],[-1,1],"g","t",x^2/(x^2-1),1,3) \end{TV} + +draws table of variations of x->x^2/(x^2-1). + + +You can download XCAS here: + + +http://www-fourier.ujf-grenoble.fr/%7Eparisse/giac.html + + +The non-french users need to comment out every + +" \usepackage[upright]{fourier} " + diff --git a/Master/texmf-dist/doc/latex/tablor/README-fr.txt b/Master/texmf-dist/doc/latex/tablor/README-fr.txt new file mode 100644 index 00000000000..9e1de707415 --- /dev/null +++ b/Master/texmf-dist/doc/latex/tablor/README-fr.txt @@ -0,0 +1,28 @@ +L'extension tablor.sty permet de créer des tableaux de signes et de +variations depuis latex en utilisant XCAS pour les calculs et MetaPOST +pour les tableaux. + +On rentre par exemple: + +\begin{TV} TV([-10,+infinity],[-1,1],"g","t",x^2/(x^2-1),1,3) \end{TV} + +et on obtient le tableau de variation de x->x^2/(x^2-1). + +Les tableaux sont construits à partir du fichier tableauVariation.mp de +Frédéric Mazoit disponible à l'adresse + +http://frederic.mazoit.free.fr/LaTeX_metapost/tableauVariations/ + +XCAS est téléchargeable à l'adresse : + +http://www-fourier.ujf-grenoble.fr/%7Eparisse/giac_fr.html + + +Les appels à giac ont été améliorés grâce à Yves Delhaye : + +http://www.yvesdelhaye.be/?Generateur-d-interrogations-le + + +Il faut activer le shell-escape. + + diff --git a/Master/texmf-dist/doc/latex/tablor/Tablor.pdf b/Master/texmf-dist/doc/latex/tablor/Tablor.pdf new file mode 100644 index 00000000000..ba408074c10 Binary files /dev/null and b/Master/texmf-dist/doc/latex/tablor/Tablor.pdf differ diff --git a/Master/texmf-dist/doc/latex/tablor/Tablor.tex b/Master/texmf-dist/doc/latex/tablor/Tablor.tex new file mode 100644 index 00000000000..6e198239a9f --- /dev/null +++ b/Master/texmf-dist/doc/latex/tablor/Tablor.tex @@ -0,0 +1,564 @@ +\documentclass[12pt]{article} +\usepackage[height=250mm,width=183mm]{geometry} +\usepackage[upright]{fourier} +\usepackage{tablor} +\usepackage{listings,amsmath,verbatim,graphicx,xcolor} +\usepackage[dvips,colorlinks=true]{hyperref} + + +\definecolor{0.8white}{rgb}{0.8,0.8,0.8} +\definecolor{0.2white}{rgb}{0.2,0.2,0.2} + + +\newcommand{\lat}{ +\lstset{numbers=none,language=[LaTeX]{TeX},xleftmargin=10pt,% +keywordstyle =\color{0.2white}\usefont{OT1}{cmtt}{b}{n},basicstyle=\ttfamily,commentstyle=\normalfont\scriptsize\slshape, + backgroundcolor=\color{0.8white},breaklines=true} +} + + + + +\title{\texttt{tablor.sty} \\La machine à créer des tableaux de signes et de variations } + +\author{Guillaume \textsc{Connan} \\ \href{http://gconnan.free.fr}{http://gconnan.free.fr}} + +\date{17 janvier 2008 - Version 1.2} + +\begin{document} + +\maketitle + + + +\section{Ça sert à quoi~?} + +Il s'agit d'obtenir rapidement un tableau de signes ou un tableau de variations en entrant un +minimum de commandes. + +\section{Comment ça marche~?} + +On entre une instruction qu'on envoie via \LaTeX{} à \texttt{XCAS} qui effectue un certain nombre de +calculs (résolution d'équations, calcul de limites). \texttt{XCAS} renvoie un résultat sous la forme +d'un script \texttt{MetaPOST} qui est compilé. Un tableau est créé et ensuite inséré dans le document +\texttt{tex}. + + +\section{De quoi a-t-on besoin~?} + +\begin{itemize} + +\item Il faut avoir installé \texttt{XCAS}, logiciel multi-plateforme de calcul et de programmation~: + +\href{http://www-fourier.ujf-grenoble.fr/\%7Eparisse/giac\_fr.html}{http://www-fourier.ujf-grenoble.fr/\%7Eparisse/giac\_fr.html}; + +\item il faut avoir le fichier de macros \texttt{MetaPOST} +\texttt{tableauVariation.mp} de Frédéric Mazoit~: + +\href{http://frederic.mazoit.free.fr/LaTeX\_metapost/tableauVariations/}{http://frederic.mazoit.free.fr/LaTeX\_metapost/tableauVariations/}; + +Pour ceux qui sont guère habitués à \texttt{MetaPOST}, cela ne pose aucun problème car les +scripts et compilations \texttt{MetaPOST} se font automatiquement. Il suffit de créer dans son +\texttt{texmf} personnel une arborescence du style~: \texttt{./texmfperso/metapost/tablor/} et d'y +placer \texttt{tableauVariation.mp} puis un \texttt{rehash}. C'est exactement la même démarche que +pour installer une nouvelle extension \LaTeX{}. + + + +\item il faut être en mode \texttt{shell-escape} pour autoriser + les sorties de la compilation \texttt{tex}. Pour \texttt{emacs}, on rajoute en + fin de fichier \verb+%%% mode: latex --shell-escape+; pour les autres éditeurs, il faut modifier + la commande de compilation. Sinon, on peut modifier le fichier \texttt{texmf.cnf} + pour que le mode soit automatisé en modifiant la ligne suivante~:~\texttt{shell-escape t}; + +\item il faut avoir à disposition l'extension \texttt{fancyvrb}; + +\item pour ceux qui compilent avec \texttt{pdf\LaTeX{}}, il faut avoir effectué les petits réglages + nécessaires à l'utilisation de figures produites par \texttt{MetaPOST}; + +\item il faut enfin installer le fichier \texttt{tablor.sty} dans son \texttt{texmf} personnel. + +\end{itemize} + +\bigskip + + + Pour les utilisateurs de Microsoft Windows, remplacer + \verb+\immediate\write18{giac<#1 }+ par + \verb+\immediate\write18{giac #1 }+ dans le fichier \texttt{tablor.sty} + pour permettre le \texttt{shell-escape}\\ +\smallskip +Pour les utilisateurs de TeXnicCenter, observez cette +\href{http://img221.imageshack.us/img221/27/capture20080114215233hu7.png}{explication} du +paramétrage du \texttt{shell-escape}. On peut par exemple mettre~:\\ +\texttt{-enable-write18 --shell-escape --src -interaction=nonstopmode "\%Wm"}.\\ +Sur TeXmaker, c'est \texttt{latex -enable-write18 --shell-escape -interaction=nonstopmode \%.tex}.\\ +\smallskip +Pour faire comprendre à XP où trouver \texttt{giac}, vous pouvez modifier le \texttt{path} en suivant +ces instructions~: \\ +Demarrer->Panneau de configuration->Système onglet Avancé->Variable d'environnement.\\ +Le séparateur est le point virgule. +(Merci à Gaëtan et à Daniel). + + +\bigskip + + +\section{Comment l'utiliser~?} + +\subsection{Préambule} + +Les ECM donnés en exemple correspondent à une compilation \texttt{\LaTeX{}+dvi+dvips}. + +Le préambule sera toujours~: + +\lat + +\begin{lstlisting} +\documentclass{article} +\usepackage{graphicx,tablor} +\usepackage[upright]{fourier} +\end{lstlisting} + + +\subsection{Tableaux des variations} + +L'environnement s'appelle \texttt{TV}. On utilise une commande au format \texttt{XCAS}~: + +%\xcas + +\begin{lstlisting} +TV([borne inf,borne sup],[valeurs interdites],"nom fonction","nom variable",expression en fonction de x,t,numero du tableau) +\end{lstlisting} + +\begin{itemize} + +\item \texttt{[borne inf,borne sup]} désigne les bornes de l'ensemble de définition. On note + $+\infty$~:~\texttt{+infinity} et $-\infty$~:~\texttt{-infinity}. N'oubliez pas + les crochets~! +\item \texttt{[valeurs interdites]} désigne la liste des valeurs interdites; +\item \texttt{"nom fonction"} désigne la lettre représentant la fonction telle que vous voulez + qu'elle apparaisse : $f$, $g$, $h$, etc. +\item \texttt{"nom variable"}~:~même chose pour la variable, selon que vous voulez la désigner par + $x$, $t$, etc. N'oubliez pas les guillemets~! +\item \texttt{expression en fonction de x} désigne l'expression de la fonction. Attention~! Utilisez + ici toujours $x$ pour désigner la variable; +\item le paramètre \texttt{t} est à remplacer par 1 si vous voulez voir apparaître une ligne + avec le signe de la dérivée et par 0 si vous ne voulez pas de cette ligne. +\item le \texttt{numero du tableau}, comme son nom l'indique, nécessite de numéroter dans l'ordre + les tableaux créés par \texttt{tablor} dans votre document en commençant à un. La navigation entre + \texttt{\LaTeX{}}, \texttt{MetaPOST}, \texttt{XCAS}, le \texttt{shell} complique un peu la gestion des compteurs... +\end{itemize} + +\lat + +Voyons à présent quelques exemples. + +\begin{enumerate} +\item Le tableau de variation sans signe de la dérivée de la fonction $f~:~x\mapsto x^2$ sur $[-5 ; 7]$. On entre~: + + \begin{lstlisting} +\begin{TV} +TV([-5,7],[],"f","x",x^2,0,1) +\end{TV} + \end{lstlisting} + +et on obtient~: + +\begin{TV} +TV([-5,7],[],"f","x",x^2,0,1) +\end{TV} + + + + +\item Si on veut la même fonction sur $]-\infty;+\infty[$ avec le signe de la dérivée~: + + \begin{lstlisting} +\begin{TV} +TV([-infinity,+infinity],[],"f","x",x^2,1,2) +\end{TV} + \end{lstlisting} + +\begin{TV} +TV([-infinity,+infinity],[],"f","x",x^2,1,2) +\end{TV} + +\item Voici ce que cela donne pour $g~:~t\mapsto \frac{t^2}{t^2-1}$ sur $[-10; +\infty[$~: + + \begin{lstlisting} +\begin{TV} +TV([-10,+infinity],[-1,1],"g","t",x^2/(x^2-1),1,3) +\end{TV} + \end{lstlisting} + + \begin{center} + + +\begin{TV} +TV([-10,+infinity],[-1,1],"g","t",x^2/(x^2-1),1,3) +\end{TV} + +\end{center} + + +\item Il y aura des problèmes pour des équations $f'(x)=0$ que \texttt{XCAS} ne saurait pas résoudre + de manière formelle. Il faudrait alors utiliser une résolution numérique et remplacer + \texttt{resoudre} par \texttt{fsolve}. Mais dans les études demandées au Bac, l'étude des signes + de la dérivée est possible formellement. Dans les cas plus exotiques, on peut faire le tableau «~à + la main~». +\end{enumerate} + + +\subsection{Tableau des variations avec théorème des valeurs intermédiaires} + +Si l'on veut mettre en évidence les solutions de l'équation $f(x)=a$, on utilise l'environnement +\texttt{TVI}. + +La syntaxe est~: + +\begin{lstlisting} +TVI([borne inf,borne sup],[valeurs interdites],"nom fonction","nom variable",expression en fonction de x,t,a,numero du tableau) +\end{lstlisting} + +Par exemple, pour $f~:~x\mapsto \frac{x^2}{x^2-1}$ et l'équation $f(x)=10$ on entre~: + +\begin{lstlisting} +\begin{TVI} +TVI([-10,+infinity],[-1,1],"f","x",x^2/(x^2-1),1,10,4) +\end{TVI} +\end{lstlisting} + + +et on obtient~: + +\begin{TVI} +TVI([-10,+infinity],[-1,1],"f","x",x^2/(x^2-1),1,10,4) +\end{TVI} + +Les solutions sont notées $\alpha_1$, $\alpha_2$, etc. + +Si l'équation est plutôt $f(x)=-1$~: + + +\begin{lstlisting} +\begin{TVI} +TVI([-10,+infinity],[-1,1],"f","x",x^2/(x^2-1),1,-1,5) +\end{TVI} +\end{lstlisting} + + +et on obtient~: + +\begin{TVI} +TVI([-10,+infinity],[-1,1],"f","x",x^2/(x^2-1),1,-1,5) +\end{TVI} + + +\subsection{Tableaux de signes} + + +\subsubsection*{Cas du produit de deux facteurs affines} + +Pour étudier le signe de $(-2x+3)(-x+5)$, on entre~: + +\begin{lstlisting} +\begin{TSa} + TSa(-2,3,-1,5,6); +\end{TSa} +\end{lstlisting} + + +Le 6 correspond au numéro du tableau dans le document. On obtient~: + +\begin{TSa} +TSa(-2,3,-1,5,6); +\end{TSa} + +\subsubsection*{Cas du produit d'un nombre quelconque de facteurs quelconques} + + + +Certains cas pathologiques ne vont pas fonctionner, mais sinon, pour étudier le signe de +\[(-2x+3)(x^2-1)(x^2+1)(x-1)(x^2-2)\] On entre cette fois les expressions sous cette forme~: + +\begin{lstlisting} +\begin{TS} + TS([-2*x+3,x^2-1,x^2+1,x-1,x^2-2],7); +\end{TS} +\end{lstlisting} + +Le 7 correspond au numéro du tableau dans le document. On obtient~: + + +\begin{TS} + TS([-2*x+3,x^2-1,x^2+1,x-1,x^2-2],7); +\end{TS} + + +\subsubsection*{Signe d'un quotient} + +On entre~: + + +\begin{lstlisting} +\begin{TSq} +TSq("nom du quotient",[liste des facteurs du numérateur],[liste des facteurs du +dénominateur],numéro du tableau dans le document) +\end{TSq} +\end{lstlisting} + +Par exemple, pour étudier le signe de $\dfrac{(-2x+3)(-4x+5)}{(x^2-16)(x-2)}$~: + +\begin{lstlisting} +\begin{TSq} +TSq("Q",[-2*x+3,-4*x+5],[x^2-16,x-2],8) +\end{TSq} +\end{lstlisting} + + + + +\begin{TSq} +TSq("Q",[-2*x+3,-4*x+5],[x^2-16,x-2],8) +\end{TSq} + +\section{Nettoyage} + +L'extension \texttt{tablor} contient également une commande \verb+\nettoyer+, qui, comme son nom +l'indique, fait le ménage~:~on efface tous les fichiers auxiliaires créés et on garde uniquement les +fichiers eps créés par \texttt{MetaPOST} ayant une extension sous forme de numéro. + +Il suffit de taper \verb+\nettoyer+ juste avant le \verb+\end{document}+ + +\smallskip + +\fbox{ Pour les utilisateurs de Microsoft Windows, il faudra remplacer \texttt{rm} par \texttt{DEL}} + +\smallskip + +On peut également stocker les tableaux dans un autre dossier avec la commande +\verb+\bouger{destination}+, qui, comme son nom l'indique, copie les fichiers eps vers +\texttt{destination}. Il faudra le taper après \verb+\nettoyer+ + +\begin{lstlisting} +\nettoyer +\bouger{/home/moi/Desktop/} + +\end{document} + +\end{lstlisting} + + + +\fbox{ Pour les utilisateurs de Microsoft Windows, il faudra remplacer \texttt{cp} par \texttt{XCOPY}} + + + +\section{Merci...} + +\begin{itemize} + +\item à \href{http://frederic.mazoit.free.fr/LaTeX\_metapost/tableauVariations/}{Frédéric \textsc{Mazoit}} pour son fichier \texttt{tableauVariation.mp}; + +\item à \href{http://www.yvesdelhaye.be/?Generateur-d-interrogations-le}{Yves \textsc{Delhaye}} pour ses idées sur le \texttt{shell-escape} + +\item à \href{http://www-fourier.ujf-grenoble.fr/\%7Eparisse/giac\_fr.html}{Bernard + \textsc{Parisse}} pour \texttt{XCAS}. + +\end{itemize} + +\pagebreak + +\section{Galerie} + +Voici quelques exemples de tableaux~: + +\begin{lstlisting} +\begin{TVI} +TVI([-1,+infinity],[-1],"f","x",x^2/sqrt(x+1)-1,1,2,9) +\end{TVI} +\end{lstlisting} + +\begin{TVI} +TVI([-1,+infinity],[-1],"f","x",x^2/sqrt(x+1)-1,1,2,9) +\end{TVI} + + +\begin{lstlisting} +\begin{TVI} +TVI([-1/2,+infinity],[],"f","x",x^2,1,2,10) +\end{TVI} +\end{lstlisting} + + +\begin{TVI} +TVI([-1/2,+infinity],[],"f","x",x^2,1,2,10) +\end{TVI} + + +\begin{lstlisting} +\begin{TVI} +TVI([0,+infinity],[0],"f","x",ln(x),1,2,11) +\end{TVI} +\end{lstlisting} + +\begin{TVI} +TVI([0,+infinity],[0],"f","x",ln(x),1,2,11) +\end{TVI} + +\begin{lstlisting} +\begin{TV} +TV([1,+infinity],[],"f","x",-ln(x),1,12) +\end{TV} +\end{lstlisting} + +\begin{TV} +TV([1,+infinity],[],"f","x",-ln(x),1,12) +\end{TV} + + + +\begin{lstlisting} +\begin{TVI} +TVI([-pi,pi],[],"f","x",cos(x),1,1/2,13) +\end{TVI} +\end{lstlisting} + +\begin{TVI} +TVI([-pi,pi],[],"f","x",cos(x),1,1/2,13) +\end{TVI} + +\begin{lstlisting} +\begin{TV} +TV([0,2*pi],[],"f","x",cos(x),1,14) +\end{TV} +\end{lstlisting} + +\begin{TV} +TV([0,2*Pi],[],"f","x",cos(x),1,14) +\end{TV} + +\fbox{ Il y aura des problèmes si vous demandez un tableau des variations d'une fonction + périodique sur un intervalle + d'amplitude supérieure à la période, mais est-ce vraiment utile ?...} + + + +\begin{lstlisting} +\begin{TVI} +TVI([0,pi],[pi/2],"h","t",tan(x),1,7,15) +\end{TVI} +\end{lstlisting} + +\begin{TVI} +TVI([0,pi],[pi/2],"h","t",tan(x),1,7,15) +\end{TVI} + + + +\begin{lstlisting} +\begin{TVI} +TVI([-1,1],[],"f","x",(1-x)*sqrt(1-x^2),1,1,16) +\end{TVI} +\end{lstlisting} + +\begin{TVI} +TVI([-1,1],[],"f","x",(1-x)*sqrt(1-x^2),1,1,16) +\end{TVI} + +\begin{lstlisting} +\begin{TV} +TV([-1,+infinity],[-1],"f","x",ln(1+x)-(x-x^2/2+x^3/3),1,17) +\end{TV} +\end{lstlisting} + +\begin{TV} +TV([-1,+infinity],[-1],"f","x",ln(1+x)-(x-x^2/2+x^3/3),1,17) +\end{TV} + + +\begin{lstlisting} +\begin{TS} +TS([-2*x+3,x-1,x+1,x^2+3*x+1],18); +\end{TS} +\end{lstlisting} + +\begin{TS} +TS([-2*x+3,x-1,x+1,x^2+3*x+1],18); +\end{TS} + +\begin{lstlisting} +\begin{TVI} +TVI([-infinity,+infinity],[],"f","x",(x+2)*exp(x-1)-1,1,0,19) +\end{TVI} +\end{lstlisting} + +\begin{TVI} +TVI([-infinity,+infinity],[],"f","x",(x+2)*exp(x-1)-1,1,0,19) +\end{TVI} + + + + +\begin{lstlisting} +\begin{TVI} +TVI([-infinity,+infinity],[],"f","x",1+(-2*x+1)*exp(2*x),1,0,20) +\end{TVI} +\end{lstlisting} + +\begin{TVI} +TVI([-infinity,+infinity],[],"f","x",1+(-2*x+1)*exp(2*x),1,0,20) +\end{TVI} + + + + +\begin{lstlisting} +\begin{TV} +TV([0,+infinity],[],"f","x",ln(exp(x)+x)-x,1,21) +\end{TV} +\end{lstlisting} + +\begin{TV} +TV([0,+infinity],[],"f","x",ln(exp(x)+x)-x,1,21) +\end{TV} + + + + + +\begin{lstlisting} +\begin{TVI} +TVI([0,pi],[],"f","x",cos(x)-x,1,0,22) +\end{TVI} +\end{lstlisting} + +\begin{TVI} +TVI([0,pi],[],"f","x",cos(x)-x,1,0,22) +\end{TVI} + +\begin{lstlisting} +\begin{TVI} +TVI([0,+infinity],[0],"f","x",ln(x)-(ln(x))^2,1,-1,23) +\end{TVI} +\end{lstlisting} + +\begin{TVI} +TVI([0,+infinity],[0],"f","x",ln(x)-(ln(x))^2,1,-1,23) +\end{TVI} + + + + +\nettoyer + + +%\bouger{/home/moi/Desktop/} + +\end{document} + +%%% Local Variables: +%%% mode: latex +%%% TeX-master: t +%%% End: diff --git a/Master/texmf-dist/doc/latex/tablor/tablor.html b/Master/texmf-dist/doc/latex/tablor/tablor.html new file mode 100644 index 00000000000..1ff1f5ed59f --- /dev/null +++ b/Master/texmf-dist/doc/latex/tablor/tablor.html @@ -0,0 +1,813 @@ + + + + + tablor.sty + + + +
+
+\NeedsTeXFormat{LaTeX2e}[1995/12/01]
+\ProvidesPackage{tablor}
+              [17/01/2008 v1.2
+ la machine à créer des tableaux de signes et variations]
+
+
+
+%% Crée 5 environnements :
+%% tableau de signes de 2 facteurs affines
+% \begin{TSa}
+% TSa(-2,3,-1,5,1);
+% \end{TSa}
+% %%%%%% Pour des tableaux de plus de 2 facteurs
+%
+% \begin{TS}
+% TS([-2*x+3,x^2-1,x^2+1,x-1,x^2-2],2);
+% \end{TS}
+%
+% pour les tableaux de signes avec quotient
+%\begin{TSq}
+%TSq("Q",[-2*x+3,-4*x+5],[x^2-16,x-2],3)
+%%\end{TSq}
+% un tableau de variation :
+%
+% \begin{TV}
+% TV([0,+infinity],[0],"h","x",ln(x)-(ln(x))^2,1,4)
+% \end{TV}
+%
+% tableau avec valeurs intermédiares
+%\begin{TVI}
+%TVI([-1,+infinity],[-1],"f","x",x2/sqrt(x+1)-1,1,2,1)
+%\end{TVI}
+%%%
+
+
+
+\newcommand{\nettoyer}{
+\immediate\write18{rm XCasmp.mp* XCasmp.log XCasmp?.mp* XCasmp?.log XCasmpTV.mp* XCasmpTV.log *.out XCasmpTVI.mp* XCasmpTVI.log
+  *.in *.meta *mpx*}}
+
+\newcommand{\bouger}[1]{
+\immediate\write18{cp XCas* #1}}
+
+
+\newcommand{\recup}[2]{
+\immediate\write18{cp #1 #2}}
+
+
+
+\newcounter{TVn}
+
+
+\usepackage{fancyvrb}
+%\usepackage[upright]{fourier}
+
+\makeatletter
+\newcommand{\executGiacmp}[1]{
+\immediate\write18{giac  <#1 } }
+\makeatother
+
+
+\begin{VerbatimOut}{XcasTV.meta}
+TV(L,F,nom,nomv,f,ftt,nmr):={
+nl:=size(L);
+f:=unapply(f,x);
+fp:=fonction_derivee(f);
+Z:=concat(L,F);
+S:=resoudre(fp(x),x);
+  si size(S)>0 alors   pour j de 0 jusque size(S)-1 faire 
+                             kk:=(evalf(S[j])>=evalf(L[0])) and (evalf(S[j])<=evalf(L[nl-1]));
+                          if(kk==1){Z:=append(Z,simplifier(S[j]))};
+                          fpour
+  fsi;
+
+Z:=sort(Z); 
+nz:=size(Z);
+ si Z[0]==Z[1] alors Z:=augment(Z[0],Z[2..nz-1]);nz:=nz-1; 
+     fsi;
+pour u de 1 jusque nz-2 faire 
+     si Z[u]==Z[u+1] alors Z:=augment(Z[0..u-1],Z[u+1..nz-1]);nz:=nz-1; 
+     fsi;
+fpour;
+nz:=size(Z);
+l0:=" newLigneVariables(btex $"+nomv+"$ etex);";lp:=" "; lf:=" ";lsp:=" ";
+pour m de 0 jusque nz-1 faire l0:=l0+"val(btex $"+latex(Z[m])+"$ etex);";fpour; 
+
+       k0:= evalf(limite(f(x),x=Z[0],1))> evalf(limite(f(x),x=Z[1],-1));
+       kz:=evalf(limite(f(x),x=Z[nz-1],-1))> evalf(limite(f(x),x=Z[nz-2],1));
+                          
+lsi:="newLigneSignes(btex $\\hbox{ Signe de }\\atop{\\displaystyle "+nom+"'("+nomv+")}$ etex);"+
+     if(Z[0]==-infinity){if(sign(evalf(fp(if(Z[1]==+infinity){0}else{Z[1]-10^(-5)})))==1){"plus;"}else{"moins;"}}else{if(member(Z[0],F)==0){
+                                                    if(sign(fp(Z[0]+10^(-5)))==1){"plus;"}else{"moins;"}}else{"nonDefBarre;"+
+                                                         if(sign(fp((Z[0]+10^(-5))))==1){"plus;"}else{"moins;"} }}
+ 
+if(nz>2){ for(r:=1; r<=nz-2;r++){      ksp:=evalf(fp(Z[r]+0.01))>0;                     
+                                               lsp:=lsp+if(member(Z[r],F)==0){"valBarre(btex 0 etex);"}else{"nonDefBarre;"}+
+                                                if(ksp==1){"plus;"}else{"moins;"}
+                                                  }; }
+
+lsf:=if(member(Z[nz-1],F)==0){""}else{"nomDefBarre;"}
+lm0:=limite(f(x),x=Z[0],1)==-infinity;
+     li:="newLigneVariations(btex $\\hbox{\\bf Variations de }\\atop{\\displaystyle \\Mathbold{"+nom+"}}$ etex);"+
+           if(member(Z[0],F)==0){"valPos(btex $"+if(lm0==1){"-\\infty"}else{latex(simplifier(limite(f(x),x=Z[0],1)))}+"$ etex,"}
+             else{"nonDefBarre;limDroite(btex $"+if(lm0==1){"-\\infty"}else{latex(simplifier(limite(f(x),x=Z[0],1)))}+"$ etex,"}+                               
+           if(k0==1){"1"}else{"0"}+
+                         ");";
+            
+                     if(nz>2){ for(r:=1; r<=nz-2;r++){  krm:=evalf(limite(f(x),x=Z[r-1],1))< evalf(limite(f(x),x=Z[r],-1));
+                                                 krp:=evalf(limite(f(x),x=Z[r],1))> evalf(limite(f(x),x=Z[r+1],-1)) ;  
+                         lmrm:=limite(f(x),x=Z[r],-1)==-infinity;lmrp:=limite(f(x),x=Z[r],1)==-infinity;
+                                                  lp:=lp+if(member(Z[r],F)){
+                                    "limGauche(btex $"+if(lmrm==1){"-\\infty"}else{latex(simplifier(limite(f(x),x=Z[r],-1)))}+"$ etex,"+if(krm==1){"1);"}else{"0);"}+"nonDefBarre;limDroite(btex $"+if(lmrp==1){"-\\infty"}else{latex(simplifier(limite(f(x),x=Z[r],1)))}+"$ etex,"+if(krp==1){"1);"}else{"0);"}}
+                                          else{"valPos(btex $"+latex(simplifier(f(Z[r])))+"$ etex,"+if(sign(evalf(fp(Z[r]-0.01)))==sign(fp(Z[r]+0.01))){"0.5);"}else{if(krp==1){"1);"}else{"0);"}}}
+                                                   }; }
+
+lnz:=limite(f(x),x=Z[nz-1],-1)==-infinity;
+                           lf:=if(member(Z[nz-1],F)==0){"valPos(btex $"+if(lnz==1){"-\\infty"}else{latex(simplifier(limite(f(x),x=Z[nz-1],-1)))}+"$ etex,"}else{"nonDefBarre;limGauche(btex $"+if(lnz==1){"-\\infty"}else{latex(simplifier(limite(f(x),x=Z[nz-1],-1)))}+"$ etex,"}+                               
+           if(kz==1){"1);"}else{"0);"};    
+    
+
+intro:="input tableauVariation;
+           verbatimtex
+%&latex
+ \\documentclass{article}
+ \\usepackage[upright]{fourier}
+ \\usepackage{amsmath}
+ \\newcommand{\\Mathbold}[1]{\\mbox{\\boldmath$#1$\\unboldmath}}
+ \\begin{document}
+ etex 
+
+"
+  
+
+MetaL:= if(ftt==0){if(nz>2){intro+"beginTableau("+nmr+")"+
+        l0+
+li+
+lp+
+lf
++"endTableau;
+end";}else{intro+"beginTableau("+nmr+")"+
+        l0+
+li+
+lf
++"endTableau;
+end";}}else{
+if(nz>2){intro+"beginTableau("+nmr+")"+
+        l0+
+lsi+lsp+lsf+
+li+
+lp+
+lf
++"endTableau;
+end";}else{intro+"beginTableau("+nmr+")"+
+        l0+
+lsi+lsf+
+li+
+lf
++"endTableau;
+end";}
+}
+
+return(MetaL);
+ }:;
+
+
+
+\end{VerbatimOut}
+
+\begin{VerbatimOut}{XcasTVI.meta}
+
+
+TVI(L,F,nom,nomv,f,ftt,ao,nmr):={
+nl:=size(L);
+f:=unapply(f,x);
+fp:=fonction_derivee(f);
+Z:=concat(L,F);
+S:=resoudre(fp(x),x);
+  si size(S)>0 alors   pour j de 0 jusque size(S)-1 faire 
+                            kk:=(evalf(S[j])>=evalf(L[0])) and (evalf(S[j])<=evalf(L[nl-1]));
+                          if(kk==1){Z:=append(Z,simplifier(S[j]))};
+                          fpour
+  fsi;
+
+Z:=sort(Z); 
+nz:=size(Z);
+ si Z[0]==Z[1] alors Z:=augment(Z[0],Z[2..nz-1]);nz:=nz-1; 
+     fsi;
+pour u de 1 jusque nz-2 faire 
+     si Z[u]==Z[u+1] alors Z:=augment(Z[0..u-1],Z[u+1..nz-1]);nz:=nz-1; 
+     fsi;
+fpour;
+nz:=size(Z);
+l0:=" newLigneVariables(btex $"+nomv+"$ etex);";lp:=" "; lf:=" ";lsp:=" ";
+
+
+
+LI:=limite(f(x),x,Z[0],1);
+LF:=limite(f(x),x,Z[nz-1],-1);
+LP:=NULL;
+if(nz>2){ for(r:=1; r<=nz-2;r++){LP:=LP,if(member(Z[r],F)){limite(f(x),x,Z[r],-1),limite(f(x),x,Z[r],1)}else{f(Z[r])}}};
+if(nz>2){ LL:=[LI,LP,LF]}else{LL:=[LI,LF]};
+      
+NL:=size(LL);
+A:=NULL;aa:=1;kk:=0;
+
+if(NL==nz){for(k:=0;k<nz-1;k++){TestS:=(sign(evalf(LL[k]-ao))==sign(evalf(LL[k+1]-ao))) or (sign(evalf(LL[k]-ao))==0.0)or (sign(evalf(LL[k+1]-ao))==0.0);
+if(TestS==0){A:=A,aa;l0:=l0+"val(btex $"+latex(Z[k])+"$ etex);"+"val(btex $\\alpha_"+aa+"$ etex);";aa:=aa+1;}else{l0:=l0+"val(btex $"+latex(Z[k])+"$ etex);"}}
+l0:=l0+"val(btex $"+latex(Z[nz-1])+"$ etex);"};
+
+if(NL>nz){for(k:=0;k<NL-1;k++){TestS:=(sign(evalf(LL[k]-ao))==sign(evalf(LL[k+1]-ao))) or (sign(evalf(LL[k]-ao))==0.0)or (sign(evalf(LL[k+1]-ao))==0.0);
+TestL:=(abs(LL[k])==abs(LL[k+1]));
+if(TestS==0){ if( TestL==1 ){l0:=l0}else{
+A:=A,aa;l0:=l0+"val(btex $"+latex(Z[kk])+"$ etex);"+"val(btex $\\alpha_"+aa+"$ etex);";aa:=aa+1;kk:=kk+1}}else{l0:=l0+"val(btex $"+latex(Z[kk])+"$ etex);";kk:=kk+1}}
+l0:=l0+"val(btex $"+latex(Z[nz-1])+"$ etex);"};
+
+
+
+TestS:=(sign(evalf(LL[0]-ao))==sign(evalf(LL[1]-ao))) or (sign(evalf(LL[0]-ao))==0.0) or (sign(evalf(LL[1]-ao))==0.0);
+       k0:= evalf(limite(f(x),x=Z[0],1))> evalf(limite(f(x),x=Z[1],-1));
+       kz:=evalf(limite(f(x),x=Z[nz-1],-1))> evalf(limite(f(x),x=Z[nz-2],1));
+                          
+lsi:="newLigneSignes(btex $\\hbox{ Signe de }\\atop{\\displaystyle "+nom+"'("+nomv+")}$ etex);"+
+     if(Z[0]==-infinity){if(sign(evalf(fp(if(Z[1]==+infinity){0}else{Z[1]-10^(-5)})))==1){"plus;"}else{"moins;"}}else{if(member(Z[0],F)==0){
+                                                    if(sign(fp((Z[0]+10^(-10))))==1){"plus;"}else{"moins;"}}else{"nonDefBarre;"+
+                                                         if(sign(fp(10^(-10)+Z[0]))==1){"plus;"}else{"moins;"} }}+if(TestS==0){"valBarre(btex$  $ etex);"+ if(sign(fp(10^(-10)+Z[0]))==1){"plus;"}else{"moins;"}}else{" "}; 
+
+
+
+
+ 
+if(nz>2){rr:=1; if(nz==NL){for(r:=1; r<=NL-2;r++){ TestS:=(sign(evalf(LL[r]-ao))==sign(evalf(LL[r+1]-ao))) or (sign(evalf(LL[r]-ao))==0.0)or (sign(evalf(LL[r+1]-ao))==0.0); 
+                                                 ksp:=evalf(fp(Z[r]+0.01))>0;  
+                                                 TestL:=(abs(LL[r])==abs(LL[r+1]));
+                                 lsp:=lsp+if(member(Z[r],F)==0){"valBarre(btex 0 etex);"}else{"nonDefBarre;"}+
+                                  if(ksp==1){"plus;"}else{"moins;"}+if(TestS==0){"valBarre(btex $  $ etex);"}else{" "}+if(TestS==0){if(ksp==1){"plus;"}else{"moins;"}}else{" "};
+                                             }}
+else{for(r:=1; r<=NL-2;r++){kspp:=evalf(fp(Z[rr]+0.01))>0;TestS:=(sign(evalf(LL[r]-ao))==sign(evalf(LL[r+1]-ao))) or (sign(evalf(LL[r]-ao))==0.0)or (sign(evalf(LL[r+1]-ao))==0.0);
+                                          TestL:=(abs(LL[r])==abs(LL[r+1]));
+                      if(TestS==0){if( TestL==1 ){lsp:=lsp}else{lsp:=lsp+if(member(Z[rr],F)==0){"valBarre(btex 0 etex);"}else{"nonDefBarre;"}+
+                                  if(kspp==1){"plus;"}else{"moins;"}+"valBarre(btex $  $ etex);"+if(kspp==1){"plus;"}else{"moins;"};rr:=rr+1;}
+                                   } else{lsp:=lsp+if(member(Z[rr],F)==0){"valBarre(btex 0 etex);"}else{"nonDefBarre;"}+
+                                  if(kspp==1){"plus;"}else{"moins;"};rr:=rr+1;}        
+}}     
+  }; 
+
+
+
+lsf:=if(member(Z[nz-1],F)==0){""}else{"nomDefBarre;"}
+lm0:=limite(f(x),x=Z[0],1)==-infinity;
+
+TestS:=(sign(evalf(LL[0]-ao))==sign(evalf(LL[1]-ao))) or (sign(evalf(LL[0]-ao))==0.0) or (sign(evalf(LL[1]-ao))==0.0);
+
+     li:="newLigneVariations(btex $\\hbox{\\bf Variations de }\\atop{\\displaystyle \\Mathbold{"+nom+"}}$ etex);"+
+           if(member(Z[0],F)==0){"valPos(btex $"+if(lm0==1){"-\\infty"}else{latex(simplifier(limite(f(x),x=Z[0],1)))}+"$ etex,"}
+             else{"nonDefBarre;limDroite(btex $"+if(lm0==1){"-\\infty"}else{latex(simplifier(limite(f(x),x=Z[0],1)))}+"$ etex,"}+                               
+           if(k0==1){"1);"}else{"0);"}+if(TestS==0){"valPos(btex $ "+ao+" $ etex,0.5);"}else{" "}; 
+                         
+            
+                     if(nz>2){if(nz==NL){for(r:=1; r<=nz-2;r++){TestS:=(sign(evalf(LL[r]-ao))==sign(evalf(LL[r+1]-ao))) or (sign(evalf(LL[r]-ao))==0.0)or (sign(evalf(LL[r+1]-ao))==0.0); 
+                                                 krm:=evalf(limite(f(x),x=Z[r-1],1))< evalf(limite(f(x),x=Z[r],-1));
+                                                 krp:=evalf(limite(f(x),x=Z[r],1))> evalf(limite(f(x),x=Z[r+1],-1)) ;  
+                         lmrm:=limite(f(x),x=Z[r],-1)==-infinity;lmrp:=limite(f(x),x=Z[r],1)==-infinity;
+                                                  lp:=lp+if(member(Z[r],F)) {
+                                    "limGauche(btex $"+if(lmrm==1){"-\\infty"}else{latex(simplifier(limite(f(x),x=Z[r],-1)))}+"$ etex,"+if(krm==1){"1);"}else{"0);"}+"nonDefBarre;limDroite(btex $"+if(lmrp==1){"-\\infty"}else{latex(simplifier(limite(f(x),x=Z[r],1)))}+"$ etex,"+if(krp==1){"1);"}else{"0);"}}
+                                          else{"valPos(btex          $"+latex(simplifier(f(Z[r])))+"$
+                                            etex,"+if(sign(evalf(fp(Z[r]-0.01)))==sign(fp(Z[r]+0.01))){"0.5);"}else{if(krp==1){"1);"}else{"0);"}}}+if(TestS==0){"valPos(btex
+                                            $ "+ao+" $ etex,0.5);"
+                                                           }else{" "}; 
+};//for
+}else{rr:=1;for(r:=1; r<=NL-2;r++){TestS:=(sign(evalf(LL[r]-ao))==sign(evalf(LL[r+1]-ao))) or (sign(evalf(LL[r]-ao))==0.0)or (sign(evalf(LL[r+1]-ao))==0.0); 
+                                                 krm:=evalf(limite(f(x),x=Z[rr-1],1))< evalf(limite(f(x),x=Z[rr],-1));
+                                                 krp:=evalf(limite(f(x),x=Z[rr],1))> evalf(limite(f(x),x=Z[rr+1],-1)) ;  
+                         lmrm:=limite(f(x),x=Z[rr],-1)==-infinity;lmrp:=limite(f(x),x=Z[rr],1)==-infinity; TestL:=(abs(LL[r])==abs(LL[r+1]));
+if(TestS==0){if( TestL==1 ){lp:=lp}else{  lp:=lp+if(member(Z[rr],F)) {
+                                    "limGauche(btex $"+if(lmrm==1){"-\\infty"}else{latex(simplifier(limite(f(x),x=Z[rr],-1)))}+"$ etex,"+if(krm==1){"1);"}else{"0);"}+"nonDefBarre;limDroite(btex $"+if(lmrp==1){"-\\infty"}else{latex(simplifier(limite(f(x),x=Z[rr],1)))}+"$ etex,"+if(krp==1){"1);"}else{"0);"}}
+                                          else{"valPos(btex          $"+latex(simplifier(f(Z[rr])))+"$
+                                            etex,"+if(sign(evalf(fp(Z[rr]-0.01)))==sign(fp(Z[rr]+0.01))){"0.5);"}else{if(krp==1){"1);"}else{"0);"}}}+"valPos(btex
+                                            $ "+ao+" $ etex,0.5);
+                                                                 ";rr:=rr+1;
+}// else testL==1
+}//testS==0
+else{lp:=lp+if(member(Z[rr],F)){
+                                    "limGauche(btex $"+if(lmrm==1){"-\\infty"}else{latex(simplifier(limite(f(x),x=Z[rr],-1)))}+"$ etex,"+if(krm==1){"1);"}else{"0);"}+"nonDefBarre;limDroite(btex $"+if(lmrp==1){"-\\infty"}else{latex(simplifier(limite(f(x),x=Z[rr],1)))}+"$ etex,"+if(krp==1){"1);"}else{"0);"}}
+                                          else{"valPos(btex          $"+latex(simplifier(f(Z[rr])))+"$
+                                            etex,"+if(sign(evalf(fp(Z[rr]-0.01)))==sign(fp(Z[rr]+0.01))){"0.5);"}else{if(krp==1){"1);"}else{"0);
+                                                            "}}};rr:=rr+1;
+}//else testS==0
+}//for nz<NL
+}// else nz<NL
+//if nz=NL
+};//if nz>2
+
+
+lnz:=limite(f(x),x=Z[nz-1],-1)==-infinity;
+                           lf:=if(member(Z[nz-1],F)==0){"valPos(btex $"+if(lnz==1){"-\\infty"}else{latex(simplifier(limite(f(x),x=Z[nz-1],-1)))}+"$ etex,"}else{"nonDefBarre;limGauche(btex $"+if(lnz==1){"-\\infty"}else{latex(simplifier(limite(f(x),x=Z[nz-1],-1)))}+"$ etex,"}+                               
+           if(kz==1){"1);"}else{"0);"};    
+    
+
+
+intro:="
+input tableauVariation;
+verbatimtex
+%&latex
+ \\documentclass{article}
+ \\usepackage[upright]{fourier}
+ \\usepackage{amsmath}
+ \\newcommand{\\Mathbold}[1]{\\mbox{\\boldmath$#1$\\unboldmath}}
+ \\begin{document}
+ etex 
+
+";
+  
+
+MetaL:= if(ftt==0){if(nz>2){intro+"beginTableau("+nmr+")"+
+        l0+
+li+
+lp+
+lf
++"endTableau;
+end";}else{intro+"beginTableau("+nmr+")"+
+        l0+
+li+
+lf
++"endTableau;
+end";}}else{
+if(nz>2){intro+"beginTableau("+nmr+")"+
+        l0+
+lsi+lsp+lsf+
+li+
+lp+
+lf
++"endTableau;
+end";}else{intro+"beginTableau("+nmr+")"+
+        l0+
+lsi+lsf+
+li+
+lf
++"endTableau;
+end";}
+};
+
+return(MetaL);
+ }:;
+
+
+
+\end{VerbatimOut}
+
+
+
+
+
+
+
+
+
+
+\begin{VerbatimOut}{XcasTabSignL.meta}
+TS(L,nmr):={
+L:=apply(f->unapply(f,x),L)
+n:=size(L);
+Z:=NULL;
+
+
+pour k de 0 jusque n-1 faire 
+  S:=resoudre(L[k](x),x);
+  si size(S)>0 alors  pour j de 0 jusque size(S)-1 faire 
+                          Z:=Z,simplifier(S[j]);
+                      fpour;
+  fsi;
+fpour;
+Z:=sort(Z);
+nz:=size(Z);
+pour u de 1 jusque nz-2 faire 
+     si Z[u]==Z[u+1] alors Z:=Z[0..u-1],Z[u+1..nz-1];nz:=nz-1;
+     fsi;
+fpour;
+nz:=size(Z);
+l0:=" ";li:=" ";lr:=" "; 
+pour m de 0 jusque nz-1 faire l0:=l0+"val(btex $"+latex(Z[m])+"$ etex);";fpour; 
+
+
+
+for(p:=0;p<=n-1;p++){lp:=" ";                                     
+     li:=li+"newLigneSignes(btex $\\hbox{\\bf Signe de }\\atop{\\displaystyle \\Mathbold{"+latex(L[p](x))+"}}$ etex);"+
+           if(L[p](Z[0]-1.0)>0){"plus;"}else{"moins;"}+                               
+                           for(r:=0; r<=nz-2;r++){  
+                             lp:=lp+if(simplifier(L[p](Z[r]))==0){"valBarre(btex 0 etex);"}else{"barre;"}+ 
+                             if(L[p]((Z[r]+Z[r+1])*.5)>0){"plus;"}else{"moins;"}}+ 
+                           if(simplifier(L[p](Z[nz-1]))==0){"valBarre(btex 0 etex);"}else{"barre;"}+ 
+                          if(L[p](Z[nz-1]+1.0)>0){"plus;"}else{"moins;"}
+    };  
+
+
+pour t de 0 jusque nz-2 faire 
+                           lr:=lr+if(product(L[s]((Z[t]+Z[t+1])*.5),s,0,n-1)>0){"plus;"}else{"moins;"}+"valBarre(btex 0 etex);"                    
+                         fpour
+
+MetaL:=" input tableauVariation;
+           verbatimtex
+%&latex
+ \\documentclass{article}
+ \\usepackage[upright]{fourier}
+ \\usepackage{amsmath}
+ \\newcommand{\\Mathbold}[1]{\\mbox{\\boldmath$#1$\\unboldmath}}
+ \\begin{document}
+ etex
+          beginTableau("+nmr+")
+newLigneVariables(btex $\\Mathbold{x}$ etex);
+   val(btex $-\\infty$ etex);"+l0+"val(btex $+\\infty$ etex);"+
+                     li
+                     +
+    " newLigneSignes(btex $\\hbox{\\bf Signe du }\\atop{{\\bf produit}}$ etex);"+ 
+                         if(product(L[s](Z[0]-1.0),s,0,n-1)>0){"plus;"}else{"moins;"}+"valBarre(btex 0 etex);"+
+                         lr+
+                         if(product(L[s](Z[nz-1]+1.0),s,0,n-1)>0){"plus;"}else{"moins;"}+"
+endTableau;
+end"
+;
+return(MetaL);
+ }:;
+\end{VerbatimOut}
+
+
+
+
+
+
+
+
+
+\begin{VerbatimOut}{XcasTabSignQ.meta}
+TSq(nomf,L,Fo,nmr):={
+L:=apply(f->unapply(f,x),L);
+Fo:=apply(f->unapply(f,x),Fo);
+L:=concat(L,Fo);
+n:=size(L);
+Z:=NULL;
+m:=size(Fo);
+F:=NULL;
+
+
+
+pour k de 0 jusque n-1 faire 
+  S:=resoudre(L[k](x),x);
+  si size(S)>0 alors   pour j de 0 jusque size(S)-1 faire 
+                          Z:=Z,simplifier(S[j]);
+                      fpour;
+  fsi;
+fpour;
+
+
+pour k de 0 jusque m-1 faire 
+  SF:=resoudre(Fo[k](x),x);
+  si size(SF)>0 alors pour j de 0 jusque size(SF)-1 faire 
+                          F:=F,simplifier(SF[j]);
+                      fpour;
+  fsi;
+fpour;
+
+
+
+Z:=sort(Z); // on classe les zéros dans l'ordre croissant 
+nz:=size(Z);
+pour u de 1 jusque nz-2 faire 
+     si Z[u]==Z[u+1] alors Z:=Z[0..u-1],Z[u+1..nz-1];nz:=nz-1; // pour les zéros en double
+     fsi;
+fpour;
+nz:=size(Z);
+l0:=" ";li:=" ";lr:=" "; 
+pour m de 0 jusque nz-1 faire l0:=l0+"val(btex $"+latex(Z[m])+"$ etex);";fpour; 
+
+
+
+for(p:=0;p<=n-1;p++){lp:=" ";                                     
+     li:=li+"newLigneSignes(btex $\\hbox{\\bf Signe de }\\atop{\\displaystyle \\Mathbold{"+latex(L[p](x))+"}}$ etex);"+
+           if(L[p](Z[0]-1.0)>0){"plus;"}else{"moins;"}+                               
+                           for(r:=0; r<=nz-2;r++){  
+                             lp:=lp+if(simplifier(L[p](Z[r]))==0){"
+                              valBarre(btex 0 etex);"}else{"barre;"}+ 
+                             if(L[p]((Z[r]+Z[r+1])*.5)>0){"plus;"}else{"moins;"}}+ 
+                           if(simplifier(L[p](Z[nz-1]))==0){"valBarre(btex 0 etex);"}else{"barre;"}+ 
+                          if(L[p](Z[nz-1]+1.0)>0){"plus;"}else{"moins;
+                                                                    "}
+    };  
+
+
+pour t de 0 jusque nz-2 faire 
+                           lr:=lr+if(product(L[s]((Z[t]+Z[t+1])*.5),s,0,n-1)>0){"plus;"}else{"moins;"}+if(member(Z[t+1],F)==0){"valBarre(btex 0 etex);"}else{"nonDefBarre;"}                    
+                         fpour
+
+MetaL:=" input tableauVariation;
+           verbatimtex
+%&latex
+ \\documentclass{article}
+ \\usepackage[upright]{fourier}
+ \\usepackage{amsmath}
+ \\newcommand{\\Mathbold}[1]{\\mbox{\\boldmath$#1$\\unboldmath}}
+ \\begin{document}
+ etex
+          beginTableau("+nmr+")
+newLigneVariables(btex $\\Mathbold{x}$ etex);
+   val(btex $-\\infty$ etex);"+l0+"val(btex $+\\infty$ etex);"+
+                     li
+                     +
+    " newLigneSignes(btex $\\hbox{\\bf Signe de }\\atop{\\bf "+nomf+"(x) }$ etex);"+ 
+                         if(product(L[s](Z[0]-1.0),s,0,n-1)>0){"plus;"}else{"moins;"}+if(member(Z[0],F)==0){"valBarre(btex 0 etex);"}else{"nonDefBarre;"}+
+                         lr+                          
+                         if(product(L[s](Z[nz-1]+1.0),s,0,n-1)>0){"plus;"}else{"moins;"}+"
+endTableau;
+end"
+;
+return(MetaL);
+ }:;
+
+
+\end{VerbatimOut}
+
+\begin{VerbatimOut}{XcasTabSign.meta}
+TSa(a,b,c,d,nmr):={
+zA:=resoudre(a*x+b=0,x)[0];
+zB:=resoudre(c*x+d=0,x)[0];
+zmin:=min(zA,zB);
+zmax:=max(zA,zB);
+  Meta:= " input tableauVariation;
+           verbatimtex
+%&latex
+ \\documentclass{article}
+ \\usepackage[upright]{fourier}
+ \\usepackage{amsmath}
+ \\newcommand{\\Mathbold}[1]{\\mbox{\\boldmath$#1$\\unboldmath}}
+ \\begin{document}
+ etex
+          beginTableau("+nmr+")
+   newLigneVariables(btex $\\Mathbold{x}$ etex);
+   val(btex $-\\infty$ etex);val(btex $"+latex(zmin)+"$ etex);
+val(btex $"+latex(zmax)+"$etex);
+val(btex $+\\infty$ etex); 
+   newLigneSignes(btex $\\hbox{\\bf Signe de }\\atop{\\displaystyle \\Mathbold{"+if(a==1){"x+"}else{if(a==-1){"-x+"}else{a+"x+"}}+b+"}}$ etex);"
+        +   if(a>0){"moins;"}else{"plus;"}+
+                                 if(zmin==zA){"valBarre(btex 0 etex);"}else{"barre;"}+
+                                 if(zmin==zA){si a>0 alors "plus;"; sinon "moins;";fsi}
+                                             else{si a>0 alors "moins;"; sinon "plus;"; fsi}+
+                                 if(zmin==zA){"barre;"}else{"valBarre(btex 0 etex);"}+
+                                 if(a>0){"plus;"}else{"moins;"}
+     +" newLigneSignes(btex $\\hbox{\\bf Signe de }\\atop{\\displaystyle \\Mathbold{"+if(c==1){"x+"}else{if(c==-1){"-x+"}else{c+"x+"}}+d+"}}$ etex);"
+        +     if(c>0){"moins"}else{"plus"}+";"+
+                                 if(zmin==zB){"valBarre(btex 0 etex);"}else{"barre;"}+
+                                 if(zmin==zB){si c>0 alors "plus;"; sinon "moins;";fsi}
+                                             else{si c>0 alors "moins;"; sinon "plus;"; fsi}+
+                                 if(zmin==zB){"barre;"}else{"valBarre(btex 0 etex);"}+
+                                 if(c>0){"plus;"}else{"moins;"}  
+     
+   +" newLigneSignes(btex $\\hbox{\\bf Signe de }\\atop{\\displaystyle \\Mathbold{("+if(a==1){"x+"}else{if(a==-1){"-x+"}else{a+"x+"}}+b+")("+if(c==1){"x+"}else{if(c==-1){"-x+"}else{c+"x+"}}+d+")}}$ etex);"
+        +   si a*c>0 alors plus; sinon moins;fsi+";"+
+                                 "valBarre(btex 0 etex);"+
+                                 si a*c>0 alors moins; sinon plus;fsi+";"+
+                                 "valBarre(btex 0 etex);"+
+                                 si a*c>0 alors plus; sinon moins;fsi+";"+"
+endTableau;
+end"
+;
+return(Meta);
+ }:;
+\end{VerbatimOut}
+
+
+
+
+\begin{VerbatimOut}{XCas.in}
+maple_mode(0);
+read("XcasTabSign.meta");
+Sortie:=fopen("XCasmp.mp");
+vect.xcas.out := read("XCas.out");
+vxo := vect.xcas.out;
+dim.vxo := dim(vxo);
+nbr.line.vxo := dim.vxo;
+Resultat:=cat(" "); 
+rslt := vxo[0]; RslT:=cat(rslt);
+Resultat:=cat(Resultat,RslT);
+fprint(Sortie,Unquoted,Resultat);
+fclose(Sortie);
+\end{VerbatimOut}
+
+\newenvironment{TSa}
+{\stepcounter{TVn}\VerbatimEnvironment\begin{VerbatimOut}{XCas.out}}
+{\end{VerbatimOut}
+           \executGiacmp{XCas.in}
+
+   \immediate\write18{mpost  XCasmp}
+
+\begin{center}
+  \includegraphics{XCasmp.\theTVn}
+\end{center}
+
+}
+
+
+\begin{VerbatimOut}{XCasQ.in}
+maple_mode(0);
+read("XcasTabSignQ.meta");
+Sortie:=fopen("XCasmpQ.mp");
+vect.xcas.out := read("XCasQ.out");
+vxo := vect.xcas.out;
+dim.vxo := dim(vxo);
+nbr.line.vxo := dim.vxo;
+Resultat:=cat(" "); 
+rslt := vxo[0]; RslT:=cat(rslt);
+Resultat:=cat(Resultat,RslT);
+fprint(Sortie,Unquoted,Resultat);
+fclose(Sortie);
+\end{VerbatimOut}
+
+\newenvironment{TSq}
+{\stepcounter{TVn}\VerbatimEnvironment\begin{VerbatimOut}{XCasQ.out}}
+{\end{VerbatimOut}
+           \executGiacmp{XCasQ.in}
+
+   \immediate\write18{mpost  XCasmpQ}
+
+\begin{center}
+  \includegraphics{XCasmpQ.\theTVn}
+\end{center}
+
+}
+
+
+
+\begin{VerbatimOut}{XCasL.in}
+maple_mode(0);
+read("XcasTabSignL.meta");
+Sortie:=fopen("XCasmpL.mp");
+vect.xcas.out := read("XCasL.out");
+vxo := vect.xcas.out;
+dim.vxo := dim(vxo);
+nbr.line.vxo := dim.vxo;
+Resultat:=cat(" "); 
+rslt := vxo[0]; RslT:=cat(rslt);
+Resultat:=cat(Resultat,RslT);
+fprint(Sortie,Unquoted,Resultat);
+fclose(Sortie);
+\end{VerbatimOut}
+
+\newenvironment{TS}
+{\stepcounter{TVn}\VerbatimEnvironment\begin{VerbatimOut}{XCasL.out}}
+{\end{VerbatimOut}
+           \executGiacmp{XCasL.in}
+
+   \immediate\write18{mpost  XCasmpL}
+
+\begin{center}
+  \includegraphics{XCasmpL.\theTVn}
+\end{center}
+
+}
+
+
+
+
+
+
+\begin{VerbatimOut}{XCasTV.in}
+maple_mode(0);
+read("XcasTV.meta");
+Sortie:=fopen("XCasmpTV.mp");
+vect.xcas.out := read("XCasTV.out");
+vxo := vect.xcas.out;
+dim.vxo := dim(vxo);
+nbr.line.vxo := dim.vxo;
+Resultat:=cat(" "); 
+rslt := vxo[0]; RslT:=cat(rslt);
+Resultat:=cat(Resultat,RslT);
+fprint(Sortie,Unquoted,Resultat);
+fclose(Sortie);
+\end{VerbatimOut}
+\newenvironment{TV}
+{\stepcounter{TVn}\VerbatimEnvironment\begin{VerbatimOut}{XCasTV.out}}
+{\end{VerbatimOut}
+           \executGiacmp{XCasTV.in}
+
+   \immediate\write18{mpost  XCasmpTV}
+
+\begin{center}
+  \includegraphics{XCasmpTV.\theTVn}
+\end{center}
+
+}
+
+
+
+
+\begin{VerbatimOut}{XCasTVI.in}
+maple_mode(0);
+read("XcasTVI.meta");
+Sortie:=fopen("XCasmpTVI.mp");
+vect.xcas.out := read("XCasTVI.out");
+vxo := vect.xcas.out;
+dim.vxo := dim(vxo);
+nbr.line.vxo := dim.vxo;
+Resultat:=cat(" "); 
+rslt := vxo[0]; RslT:=cat(rslt);
+Resultat:=cat(Resultat,RslT);
+fprint(Sortie,Unquoted,Resultat);
+fclose(Sortie);
+\end{VerbatimOut}
+\newenvironment{TVI}
+{\stepcounter{TVn}\VerbatimEnvironment\begin{VerbatimOut}{XCasTVI.out}}
+{\end{VerbatimOut}
+           \executGiacmp{XCasTVI.in}
+
+   \immediate\write18{mpost  XCasmpTVI}
+
+\begin{center}
+  \includegraphics{XCasmpTVI.\theTVn}
+\end{center}
+
+}
+
+
+
+
+
+
+%%
+%% Zi end
+
+ + diff --git a/Master/texmf-dist/tex/latex/tablor/tablor.sty b/Master/texmf-dist/tex/latex/tablor/tablor.sty new file mode 100644 index 00000000000..fa48fb7905c --- /dev/null +++ b/Master/texmf-dist/tex/latex/tablor/tablor.sty @@ -0,0 +1,726 @@ + +\NeedsTeXFormat{LaTeX2e}[1995/12/01] +\ProvidesPackage{tablor} + [17/01/2008 v1.2 + la machine à créer des tableaux de signes et variations] + + + +%% Crée 5 environnements : +%% tableau de signes de 2 facteurs affines +% \begin{TSa} +% TSa(-2,3,-1,5,1); +% \end{TSa} +% %%%%%% Pour des tableaux de plus de 2 facteurs +% +% \begin{TS} +% TS([-2*x+3,x^2-1,x^2+1,x-1,x^2-2],2); +% \end{TS} +% +% pour les tableaux de signes avec quotient +%\begin{TSq} +%TSq("Q",[-2*x+3,-4*x+5],[x^2-16,x-2],3) +%%\end{TSq} +% un tableau de variation : +% +% \begin{TV} +% TV([0,+infinity],[0],"h","x",ln(x)-(ln(x))^2,1,4) +% \end{TV} +% +% tableau avec valeurs intermédiares +%\begin{TVI} +%TVI([-1,+infinity],[-1],"f","x",x2/sqrt(x+1)-1,1,2,1) +%\end{TVI} +%%% + + + +\newcommand{\nettoyer}{ +\immediate\write18{rm XCasmp.mp* XCasmp.log XCasmp?.mp* XCasmp?.log XCasmpTV.mp* XCasmpTV.log *.out XCasmpTVI.mp* XCasmpTVI.log + *.in *.meta *mpx*}} + +\newcommand{\bouger}[1]{ +\immediate\write18{cp XCas* #1}} + + +\newcommand{\recup}[2]{ +\immediate\write18{cp #1 #2}} + + + +\newcounter{TVn} + + +\usepackage{fancyvrb} +%\usepackage[upright]{fourier} + +\makeatletter +\newcommand{\executGiacmp}[1]{ +\immediate\write18{giac <#1 } } +\makeatother + + +\begin{VerbatimOut}{XcasTV.meta} +TV(L,F,nom,nomv,f,ftt,nmr):={ +nl:=size(L); +f:=unapply(f,x); +fp:=fonction_derivee(f); +Z:=concat(L,F); +S:=resoudre(fp(x),x); + si size(S)>0 alors pour j de 0 jusque size(S)-1 faire + kk:=(evalf(S[j])>=evalf(L[0])) and (evalf(S[j])<=evalf(L[nl-1])); + if(kk==1){Z:=append(Z,simplifier(S[j]))}; + fpour + fsi; + +Z:=sort(Z); +nz:=size(Z); + si Z[0]==Z[1] alors Z:=augment(Z[0],Z[2..nz-1]);nz:=nz-1; + fsi; +pour u de 1 jusque nz-2 faire + si Z[u]==Z[u+1] alors Z:=augment(Z[0..u-1],Z[u+1..nz-1]);nz:=nz-1; + fsi; +fpour; +nz:=size(Z); +l0:=" newLigneVariables(btex $"+nomv+"$ etex);";lp:=" "; lf:=" ";lsp:=" "; +pour m de 0 jusque nz-1 faire l0:=l0+"val(btex $"+latex(Z[m])+"$ etex);";fpour; + + k0:= evalf(limite(f(x),x=Z[0],1))> evalf(limite(f(x),x=Z[1],-1)); + kz:=evalf(limite(f(x),x=Z[nz-1],-1))> evalf(limite(f(x),x=Z[nz-2],1)); + +lsi:="newLigneSignes(btex $\\hbox{ Signe de }\\atop{\\displaystyle "+nom+"'("+nomv+")}$ etex);"+ + if(Z[0]==-infinity){if(sign(evalf(fp(if(Z[1]==+infinity){0}else{Z[1]-10^(-5)})))==1){"plus;"}else{"moins;"}}else{if(member(Z[0],F)==0){ + if(sign(fp(Z[0]+10^(-5)))==1){"plus;"}else{"moins;"}}else{"nonDefBarre;"+ + if(sign(fp((Z[0]+10^(-5))))==1){"plus;"}else{"moins;"} }} + +if(nz>2){ for(r:=1; r<=nz-2;r++){ ksp:=evalf(fp(Z[r]+0.01))>0; + lsp:=lsp+if(member(Z[r],F)==0){"valBarre(btex 0 etex);"}else{"nonDefBarre;"}+ + if(ksp==1){"plus;"}else{"moins;"} + }; } + +lsf:=if(member(Z[nz-1],F)==0){""}else{"nomDefBarre;"} +lm0:=limite(f(x),x=Z[0],1)==-infinity; + li:="newLigneVariations(btex $\\hbox{\\bf Variations de }\\atop{\\displaystyle \\Mathbold{"+nom+"}}$ etex);"+ + if(member(Z[0],F)==0){"valPos(btex $"+if(lm0==1){"-\\infty"}else{latex(simplifier(limite(f(x),x=Z[0],1)))}+"$ etex,"} + else{"nonDefBarre;limDroite(btex $"+if(lm0==1){"-\\infty"}else{latex(simplifier(limite(f(x),x=Z[0],1)))}+"$ etex,"}+ + if(k0==1){"1"}else{"0"}+ + ");"; + + if(nz>2){ for(r:=1; r<=nz-2;r++){ krm:=evalf(limite(f(x),x=Z[r-1],1))< evalf(limite(f(x),x=Z[r],-1)); + krp:=evalf(limite(f(x),x=Z[r],1))> evalf(limite(f(x),x=Z[r+1],-1)) ; + lmrm:=limite(f(x),x=Z[r],-1)==-infinity;lmrp:=limite(f(x),x=Z[r],1)==-infinity; + lp:=lp+if(member(Z[r],F)){ + "limGauche(btex $"+if(lmrm==1){"-\\infty"}else{latex(simplifier(limite(f(x),x=Z[r],-1)))}+"$ etex,"+if(krm==1){"1);"}else{"0);"}+"nonDefBarre;limDroite(btex $"+if(lmrp==1){"-\\infty"}else{latex(simplifier(limite(f(x),x=Z[r],1)))}+"$ etex,"+if(krp==1){"1);"}else{"0);"}} + else{"valPos(btex $"+latex(simplifier(f(Z[r])))+"$ etex,"+if(sign(evalf(fp(Z[r]-0.01)))==sign(fp(Z[r]+0.01))){"0.5);"}else{if(krp==1){"1);"}else{"0);"}}} + }; } + +lnz:=limite(f(x),x=Z[nz-1],-1)==-infinity; + lf:=if(member(Z[nz-1],F)==0){"valPos(btex $"+if(lnz==1){"-\\infty"}else{latex(simplifier(limite(f(x),x=Z[nz-1],-1)))}+"$ etex,"}else{"nonDefBarre;limGauche(btex $"+if(lnz==1){"-\\infty"}else{latex(simplifier(limite(f(x),x=Z[nz-1],-1)))}+"$ etex,"}+ + if(kz==1){"1);"}else{"0);"}; + + +intro:="input tableauVariation; + verbatimtex +%&latex + \\documentclass{article} + \\usepackage[upright]{fourier} + \\usepackage{amsmath} + \\newcommand{\\Mathbold}[1]{\\mbox{\\boldmath$#1$\\unboldmath}} + \\begin{document} + etex + +" + + +MetaL:= if(ftt==0){if(nz>2){intro+"beginTableau("+nmr+")"+ + l0+ +li+ +lp+ +lf ++"endTableau; +end";}else{intro+"beginTableau("+nmr+")"+ + l0+ +li+ +lf ++"endTableau; +end";}}else{ +if(nz>2){intro+"beginTableau("+nmr+")"+ + l0+ +lsi+lsp+lsf+ +li+ +lp+ +lf ++"endTableau; +end";}else{intro+"beginTableau("+nmr+")"+ + l0+ +lsi+lsf+ +li+ +lf ++"endTableau; +end";} +} + +return(MetaL); + }:; + + + +\end{VerbatimOut} + +\begin{VerbatimOut}{XcasTVI.meta} + + +TVI(L,F,nom,nomv,f,ftt,ao,nmr):={ +nl:=size(L); +f:=unapply(f,x); +fp:=fonction_derivee(f); +Z:=concat(L,F); +S:=resoudre(fp(x),x); + si size(S)>0 alors pour j de 0 jusque size(S)-1 faire + kk:=(evalf(S[j])>=evalf(L[0])) and (evalf(S[j])<=evalf(L[nl-1])); + if(kk==1){Z:=append(Z,simplifier(S[j]))}; + fpour + fsi; + +Z:=sort(Z); +nz:=size(Z); + si Z[0]==Z[1] alors Z:=augment(Z[0],Z[2..nz-1]);nz:=nz-1; + fsi; +pour u de 1 jusque nz-2 faire + si Z[u]==Z[u+1] alors Z:=augment(Z[0..u-1],Z[u+1..nz-1]);nz:=nz-1; + fsi; +fpour; +nz:=size(Z); +l0:=" newLigneVariables(btex $"+nomv+"$ etex);";lp:=" "; lf:=" ";lsp:=" "; + + + +LI:=limite(f(x),x,Z[0],1); +LF:=limite(f(x),x,Z[nz-1],-1); +LP:=NULL; +if(nz>2){ for(r:=1; r<=nz-2;r++){LP:=LP,if(member(Z[r],F)){limite(f(x),x,Z[r],-1),limite(f(x),x,Z[r],1)}else{f(Z[r])}}}; +if(nz>2){ LL:=[LI,LP,LF]}else{LL:=[LI,LF]}; + +NL:=size(LL); +A:=NULL;aa:=1;kk:=0; + +if(NL==nz){for(k:=0;knz){for(k:=0;k evalf(limite(f(x),x=Z[1],-1)); + kz:=evalf(limite(f(x),x=Z[nz-1],-1))> evalf(limite(f(x),x=Z[nz-2],1)); + +lsi:="newLigneSignes(btex $\\hbox{ Signe de }\\atop{\\displaystyle "+nom+"'("+nomv+")}$ etex);"+ + if(Z[0]==-infinity){if(sign(evalf(fp(if(Z[1]==+infinity){0}else{Z[1]-10^(-5)})))==1){"plus;"}else{"moins;"}}else{if(member(Z[0],F)==0){ + if(sign(fp((Z[0]+10^(-10))))==1){"plus;"}else{"moins;"}}else{"nonDefBarre;"+ + if(sign(fp(10^(-10)+Z[0]))==1){"plus;"}else{"moins;"} }}+if(TestS==0){"valBarre(btex$ $ etex);"+ if(sign(fp(10^(-10)+Z[0]))==1){"plus;"}else{"moins;"}}else{" "}; + + + + + +if(nz>2){rr:=1; if(nz==NL){for(r:=1; r<=NL-2;r++){ TestS:=(sign(evalf(LL[r]-ao))==sign(evalf(LL[r+1]-ao))) or (sign(evalf(LL[r]-ao))==0.0)or (sign(evalf(LL[r+1]-ao))==0.0); + ksp:=evalf(fp(Z[r]+0.01))>0; + TestL:=(abs(LL[r])==abs(LL[r+1])); + lsp:=lsp+if(member(Z[r],F)==0){"valBarre(btex 0 etex);"}else{"nonDefBarre;"}+ + if(ksp==1){"plus;"}else{"moins;"}+if(TestS==0){"valBarre(btex $ $ etex);"}else{" "}+if(TestS==0){if(ksp==1){"plus;"}else{"moins;"}}else{" "}; + }} +else{for(r:=1; r<=NL-2;r++){kspp:=evalf(fp(Z[rr]+0.01))>0;TestS:=(sign(evalf(LL[r]-ao))==sign(evalf(LL[r+1]-ao))) or (sign(evalf(LL[r]-ao))==0.0)or (sign(evalf(LL[r+1]-ao))==0.0); + TestL:=(abs(LL[r])==abs(LL[r+1])); + if(TestS==0){if( TestL==1 ){lsp:=lsp}else{lsp:=lsp+if(member(Z[rr],F)==0){"valBarre(btex 0 etex);"}else{"nonDefBarre;"}+ + if(kspp==1){"plus;"}else{"moins;"}+"valBarre(btex $ $ etex);"+if(kspp==1){"plus;"}else{"moins;"};rr:=rr+1;} + } else{lsp:=lsp+if(member(Z[rr],F)==0){"valBarre(btex 0 etex);"}else{"nonDefBarre;"}+ + if(kspp==1){"plus;"}else{"moins;"};rr:=rr+1;} +}} + }; + + + +lsf:=if(member(Z[nz-1],F)==0){""}else{"nomDefBarre;"} +lm0:=limite(f(x),x=Z[0],1)==-infinity; + +TestS:=(sign(evalf(LL[0]-ao))==sign(evalf(LL[1]-ao))) or (sign(evalf(LL[0]-ao))==0.0) or (sign(evalf(LL[1]-ao))==0.0); + + li:="newLigneVariations(btex $\\hbox{\\bf Variations de }\\atop{\\displaystyle \\Mathbold{"+nom+"}}$ etex);"+ + if(member(Z[0],F)==0){"valPos(btex $"+if(lm0==1){"-\\infty"}else{latex(simplifier(limite(f(x),x=Z[0],1)))}+"$ etex,"} + else{"nonDefBarre;limDroite(btex $"+if(lm0==1){"-\\infty"}else{latex(simplifier(limite(f(x),x=Z[0],1)))}+"$ etex,"}+ + if(k0==1){"1);"}else{"0);"}+if(TestS==0){"valPos(btex $ "+ao+" $ etex,0.5);"}else{" "}; + + + if(nz>2){if(nz==NL){for(r:=1; r<=nz-2;r++){TestS:=(sign(evalf(LL[r]-ao))==sign(evalf(LL[r+1]-ao))) or (sign(evalf(LL[r]-ao))==0.0)or (sign(evalf(LL[r+1]-ao))==0.0); + krm:=evalf(limite(f(x),x=Z[r-1],1))< evalf(limite(f(x),x=Z[r],-1)); + krp:=evalf(limite(f(x),x=Z[r],1))> evalf(limite(f(x),x=Z[r+1],-1)) ; + lmrm:=limite(f(x),x=Z[r],-1)==-infinity;lmrp:=limite(f(x),x=Z[r],1)==-infinity; + lp:=lp+if(member(Z[r],F)) { + "limGauche(btex $"+if(lmrm==1){"-\\infty"}else{latex(simplifier(limite(f(x),x=Z[r],-1)))}+"$ etex,"+if(krm==1){"1);"}else{"0);"}+"nonDefBarre;limDroite(btex $"+if(lmrp==1){"-\\infty"}else{latex(simplifier(limite(f(x),x=Z[r],1)))}+"$ etex,"+if(krp==1){"1);"}else{"0);"}} + else{"valPos(btex $"+latex(simplifier(f(Z[r])))+"$ + etex,"+if(sign(evalf(fp(Z[r]-0.01)))==sign(fp(Z[r]+0.01))){"0.5);"}else{if(krp==1){"1);"}else{"0);"}}}+if(TestS==0){"valPos(btex + $ "+ao+" $ etex,0.5);" + }else{" "}; +};//for +}else{rr:=1;for(r:=1; r<=NL-2;r++){TestS:=(sign(evalf(LL[r]-ao))==sign(evalf(LL[r+1]-ao))) or (sign(evalf(LL[r]-ao))==0.0)or (sign(evalf(LL[r+1]-ao))==0.0); + krm:=evalf(limite(f(x),x=Z[rr-1],1))< evalf(limite(f(x),x=Z[rr],-1)); + krp:=evalf(limite(f(x),x=Z[rr],1))> evalf(limite(f(x),x=Z[rr+1],-1)) ; + lmrm:=limite(f(x),x=Z[rr],-1)==-infinity;lmrp:=limite(f(x),x=Z[rr],1)==-infinity; TestL:=(abs(LL[r])==abs(LL[r+1])); +if(TestS==0){if( TestL==1 ){lp:=lp}else{ lp:=lp+if(member(Z[rr],F)) { + "limGauche(btex $"+if(lmrm==1){"-\\infty"}else{latex(simplifier(limite(f(x),x=Z[rr],-1)))}+"$ etex,"+if(krm==1){"1);"}else{"0);"}+"nonDefBarre;limDroite(btex $"+if(lmrp==1){"-\\infty"}else{latex(simplifier(limite(f(x),x=Z[rr],1)))}+"$ etex,"+if(krp==1){"1);"}else{"0);"}} + else{"valPos(btex $"+latex(simplifier(f(Z[rr])))+"$ + etex,"+if(sign(evalf(fp(Z[rr]-0.01)))==sign(fp(Z[rr]+0.01))){"0.5);"}else{if(krp==1){"1);"}else{"0);"}}}+"valPos(btex + $ "+ao+" $ etex,0.5); + ";rr:=rr+1; +}// else testL==1 +}//testS==0 +else{lp:=lp+if(member(Z[rr],F)){ + "limGauche(btex $"+if(lmrm==1){"-\\infty"}else{latex(simplifier(limite(f(x),x=Z[rr],-1)))}+"$ etex,"+if(krm==1){"1);"}else{"0);"}+"nonDefBarre;limDroite(btex $"+if(lmrp==1){"-\\infty"}else{latex(simplifier(limite(f(x),x=Z[rr],1)))}+"$ etex,"+if(krp==1){"1);"}else{"0);"}} + else{"valPos(btex $"+latex(simplifier(f(Z[rr])))+"$ + etex,"+if(sign(evalf(fp(Z[rr]-0.01)))==sign(fp(Z[rr]+0.01))){"0.5);"}else{if(krp==1){"1);"}else{"0); + "}}};rr:=rr+1; +}//else testS==0 +}//for nz2 + + +lnz:=limite(f(x),x=Z[nz-1],-1)==-infinity; + lf:=if(member(Z[nz-1],F)==0){"valPos(btex $"+if(lnz==1){"-\\infty"}else{latex(simplifier(limite(f(x),x=Z[nz-1],-1)))}+"$ etex,"}else{"nonDefBarre;limGauche(btex $"+if(lnz==1){"-\\infty"}else{latex(simplifier(limite(f(x),x=Z[nz-1],-1)))}+"$ etex,"}+ + if(kz==1){"1);"}else{"0);"}; + + + +intro:=" +input tableauVariation; +verbatimtex +%&latex + \\documentclass{article} + \\usepackage[upright]{fourier} + \\usepackage{amsmath} + \\newcommand{\\Mathbold}[1]{\\mbox{\\boldmath$#1$\\unboldmath}} + \\begin{document} + etex + +"; + + +MetaL:= if(ftt==0){if(nz>2){intro+"beginTableau("+nmr+")"+ + l0+ +li+ +lp+ +lf ++"endTableau; +end";}else{intro+"beginTableau("+nmr+")"+ + l0+ +li+ +lf ++"endTableau; +end";}}else{ +if(nz>2){intro+"beginTableau("+nmr+")"+ + l0+ +lsi+lsp+lsf+ +li+ +lp+ +lf ++"endTableau; +end";}else{intro+"beginTableau("+nmr+")"+ + l0+ +lsi+lsf+ +li+ +lf ++"endTableau; +end";} +}; + +return(MetaL); + }:; + + + +\end{VerbatimOut} + + + + + + + + + + +\begin{VerbatimOut}{XcasTabSignL.meta} +TS(L,nmr):={ +L:=apply(f->unapply(f,x),L) +n:=size(L); +Z:=NULL; + + +pour k de 0 jusque n-1 faire + S:=resoudre(L[k](x),x); + si size(S)>0 alors pour j de 0 jusque size(S)-1 faire + Z:=Z,simplifier(S[j]); + fpour; + fsi; +fpour; +Z:=sort(Z); +nz:=size(Z); +pour u de 1 jusque nz-2 faire + si Z[u]==Z[u+1] alors Z:=Z[0..u-1],Z[u+1..nz-1];nz:=nz-1; + fsi; +fpour; +nz:=size(Z); +l0:=" ";li:=" ";lr:=" "; +pour m de 0 jusque nz-1 faire l0:=l0+"val(btex $"+latex(Z[m])+"$ etex);";fpour; + + + +for(p:=0;p<=n-1;p++){lp:=" "; + li:=li+"newLigneSignes(btex $\\hbox{\\bf Signe de }\\atop{\\displaystyle \\Mathbold{"+latex(L[p](x))+"}}$ etex);"+ + if(L[p](Z[0]-1.0)>0){"plus;"}else{"moins;"}+ + for(r:=0; r<=nz-2;r++){ + lp:=lp+if(simplifier(L[p](Z[r]))==0){"valBarre(btex 0 etex);"}else{"barre;"}+ + if(L[p]((Z[r]+Z[r+1])*.5)>0){"plus;"}else{"moins;"}}+ + if(simplifier(L[p](Z[nz-1]))==0){"valBarre(btex 0 etex);"}else{"barre;"}+ + if(L[p](Z[nz-1]+1.0)>0){"plus;"}else{"moins;"} + }; + + +pour t de 0 jusque nz-2 faire + lr:=lr+if(product(L[s]((Z[t]+Z[t+1])*.5),s,0,n-1)>0){"plus;"}else{"moins;"}+"valBarre(btex 0 etex);" + fpour + +MetaL:=" input tableauVariation; + verbatimtex +%&latex + \\documentclass{article} + \\usepackage[upright]{fourier} + \\usepackage{amsmath} + \\newcommand{\\Mathbold}[1]{\\mbox{\\boldmath$#1$\\unboldmath}} + \\begin{document} + etex + beginTableau("+nmr+") +newLigneVariables(btex $\\Mathbold{x}$ etex); + val(btex $-\\infty$ etex);"+l0+"val(btex $+\\infty$ etex);"+ + li + + + " newLigneSignes(btex $\\hbox{\\bf Signe du }\\atop{{\\bf produit}}$ etex);"+ + if(product(L[s](Z[0]-1.0),s,0,n-1)>0){"plus;"}else{"moins;"}+"valBarre(btex 0 etex);"+ + lr+ + if(product(L[s](Z[nz-1]+1.0),s,0,n-1)>0){"plus;"}else{"moins;"}+" +endTableau; +end" +; +return(MetaL); + }:; +\end{VerbatimOut} + + + + + + + + + +\begin{VerbatimOut}{XcasTabSignQ.meta} +TSq(nomf,L,Fo,nmr):={ +L:=apply(f->unapply(f,x),L); +Fo:=apply(f->unapply(f,x),Fo); +L:=concat(L,Fo); +n:=size(L); +Z:=NULL; +m:=size(Fo); +F:=NULL; + + + +pour k de 0 jusque n-1 faire + S:=resoudre(L[k](x),x); + si size(S)>0 alors pour j de 0 jusque size(S)-1 faire + Z:=Z,simplifier(S[j]); + fpour; + fsi; +fpour; + + +pour k de 0 jusque m-1 faire + SF:=resoudre(Fo[k](x),x); + si size(SF)>0 alors pour j de 0 jusque size(SF)-1 faire + F:=F,simplifier(SF[j]); + fpour; + fsi; +fpour; + + + +Z:=sort(Z); // on classe les zéros dans l'ordre croissant +nz:=size(Z); +pour u de 1 jusque nz-2 faire + si Z[u]==Z[u+1] alors Z:=Z[0..u-1],Z[u+1..nz-1];nz:=nz-1; // pour les zéros en double + fsi; +fpour; +nz:=size(Z); +l0:=" ";li:=" ";lr:=" "; +pour m de 0 jusque nz-1 faire l0:=l0+"val(btex $"+latex(Z[m])+"$ etex);";fpour; + + + +for(p:=0;p<=n-1;p++){lp:=" "; + li:=li+"newLigneSignes(btex $\\hbox{\\bf Signe de }\\atop{\\displaystyle \\Mathbold{"+latex(L[p](x))+"}}$ etex);"+ + if(L[p](Z[0]-1.0)>0){"plus;"}else{"moins;"}+ + for(r:=0; r<=nz-2;r++){ + lp:=lp+if(simplifier(L[p](Z[r]))==0){" + valBarre(btex 0 etex);"}else{"barre;"}+ + if(L[p]((Z[r]+Z[r+1])*.5)>0){"plus;"}else{"moins;"}}+ + if(simplifier(L[p](Z[nz-1]))==0){"valBarre(btex 0 etex);"}else{"barre;"}+ + if(L[p](Z[nz-1]+1.0)>0){"plus;"}else{"moins; + "} + }; + + +pour t de 0 jusque nz-2 faire + lr:=lr+if(product(L[s]((Z[t]+Z[t+1])*.5),s,0,n-1)>0){"plus;"}else{"moins;"}+if(member(Z[t+1],F)==0){"valBarre(btex 0 etex);"}else{"nonDefBarre;"} + fpour + +MetaL:=" input tableauVariation; + verbatimtex +%&latex + \\documentclass{article} + \\usepackage[upright]{fourier} + \\usepackage{amsmath} + \\newcommand{\\Mathbold}[1]{\\mbox{\\boldmath$#1$\\unboldmath}} + \\begin{document} + etex + beginTableau("+nmr+") +newLigneVariables(btex $\\Mathbold{x}$ etex); + val(btex $-\\infty$ etex);"+l0+"val(btex $+\\infty$ etex);"+ + li + + + " newLigneSignes(btex $\\hbox{\\bf Signe de }\\atop{\\bf "+nomf+"(x) }$ etex);"+ + if(product(L[s](Z[0]-1.0),s,0,n-1)>0){"plus;"}else{"moins;"}+if(member(Z[0],F)==0){"valBarre(btex 0 etex);"}else{"nonDefBarre;"}+ + lr+ + if(product(L[s](Z[nz-1]+1.0),s,0,n-1)>0){"plus;"}else{"moins;"}+" +endTableau; +end" +; +return(MetaL); + }:; + + +\end{VerbatimOut} + +\begin{VerbatimOut}{XcasTabSign.meta} +TSa(a,b,c,d,nmr):={ +zA:=resoudre(a*x+b=0,x)[0]; +zB:=resoudre(c*x+d=0,x)[0]; +zmin:=min(zA,zB); +zmax:=max(zA,zB); + Meta:= " input tableauVariation; + verbatimtex +%&latex + \\documentclass{article} + \\usepackage[upright]{fourier} + \\usepackage{amsmath} + \\newcommand{\\Mathbold}[1]{\\mbox{\\boldmath$#1$\\unboldmath}} + \\begin{document} + etex + beginTableau("+nmr+") + newLigneVariables(btex $\\Mathbold{x}$ etex); + val(btex $-\\infty$ etex);val(btex $"+latex(zmin)+"$ etex); +val(btex $"+latex(zmax)+"$etex); +val(btex $+\\infty$ etex); + newLigneSignes(btex $\\hbox{\\bf Signe de }\\atop{\\displaystyle \\Mathbold{"+if(a==1){"x+"}else{if(a==-1){"-x+"}else{a+"x+"}}+b+"}}$ etex);" + + if(a>0){"moins;"}else{"plus;"}+ + if(zmin==zA){"valBarre(btex 0 etex);"}else{"barre;"}+ + if(zmin==zA){si a>0 alors "plus;"; sinon "moins;";fsi} + else{si a>0 alors "moins;"; sinon "plus;"; fsi}+ + if(zmin==zA){"barre;"}else{"valBarre(btex 0 etex);"}+ + if(a>0){"plus;"}else{"moins;"} + +" newLigneSignes(btex $\\hbox{\\bf Signe de }\\atop{\\displaystyle \\Mathbold{"+if(c==1){"x+"}else{if(c==-1){"-x+"}else{c+"x+"}}+d+"}}$ etex);" + + if(c>0){"moins"}else{"plus"}+";"+ + if(zmin==zB){"valBarre(btex 0 etex);"}else{"barre;"}+ + if(zmin==zB){si c>0 alors "plus;"; sinon "moins;";fsi} + else{si c>0 alors "moins;"; sinon "plus;"; fsi}+ + if(zmin==zB){"barre;"}else{"valBarre(btex 0 etex);"}+ + if(c>0){"plus;"}else{"moins;"} + + +" newLigneSignes(btex $\\hbox{\\bf Signe de }\\atop{\\displaystyle \\Mathbold{("+if(a==1){"x+"}else{if(a==-1){"-x+"}else{a+"x+"}}+b+")("+if(c==1){"x+"}else{if(c==-1){"-x+"}else{c+"x+"}}+d+")}}$ etex);" + + si a*c>0 alors plus; sinon moins;fsi+";"+ + "valBarre(btex 0 etex);"+ + si a*c>0 alors moins; sinon plus;fsi+";"+ + "valBarre(btex 0 etex);"+ + si a*c>0 alors plus; sinon moins;fsi+";"+" +endTableau; +end" +; +return(Meta); + }:; +\end{VerbatimOut} + + + + +\begin{VerbatimOut}{XCas.in} +maple_mode(0); +read("XcasTabSign.meta"); +Sortie:=fopen("XCasmp.mp"); +vect.xcas.out := read("XCas.out"); +vxo := vect.xcas.out; +dim.vxo := dim(vxo); +nbr.line.vxo := dim.vxo; +Resultat:=cat(" "); +rslt := vxo[0]; RslT:=cat(rslt); +Resultat:=cat(Resultat,RslT); +fprint(Sortie,Unquoted,Resultat); +fclose(Sortie); +\end{VerbatimOut} + +\newenvironment{TSa} +{\stepcounter{TVn}\VerbatimEnvironment\begin{VerbatimOut}{XCas.out}} +{\end{VerbatimOut} + \executGiacmp{XCas.in} + + \immediate\write18{mpost XCasmp} + +\begin{center} + \includegraphics{XCasmp.\theTVn} +\end{center} + +} + + +\begin{VerbatimOut}{XCasQ.in} +maple_mode(0); +read("XcasTabSignQ.meta"); +Sortie:=fopen("XCasmpQ.mp"); +vect.xcas.out := read("XCasQ.out"); +vxo := vect.xcas.out; +dim.vxo := dim(vxo); +nbr.line.vxo := dim.vxo; +Resultat:=cat(" "); +rslt := vxo[0]; RslT:=cat(rslt); +Resultat:=cat(Resultat,RslT); +fprint(Sortie,Unquoted,Resultat); +fclose(Sortie); +\end{VerbatimOut} + +\newenvironment{TSq} +{\stepcounter{TVn}\VerbatimEnvironment\begin{VerbatimOut}{XCasQ.out}} +{\end{VerbatimOut} + \executGiacmp{XCasQ.in} + + \immediate\write18{mpost XCasmpQ} + +\begin{center} + \includegraphics{XCasmpQ.\theTVn} +\end{center} + +} + + + +\begin{VerbatimOut}{XCasL.in} +maple_mode(0); +read("XcasTabSignL.meta"); +Sortie:=fopen("XCasmpL.mp"); +vect.xcas.out := read("XCasL.out"); +vxo := vect.xcas.out; +dim.vxo := dim(vxo); +nbr.line.vxo := dim.vxo; +Resultat:=cat(" "); +rslt := vxo[0]; RslT:=cat(rslt); +Resultat:=cat(Resultat,RslT); +fprint(Sortie,Unquoted,Resultat); +fclose(Sortie); +\end{VerbatimOut} + +\newenvironment{TS} +{\stepcounter{TVn}\VerbatimEnvironment\begin{VerbatimOut}{XCasL.out}} +{\end{VerbatimOut} + \executGiacmp{XCasL.in} + + \immediate\write18{mpost XCasmpL} + +\begin{center} + \includegraphics{XCasmpL.\theTVn} +\end{center} + +} + + + + + + +\begin{VerbatimOut}{XCasTV.in} +maple_mode(0); +read("XcasTV.meta"); +Sortie:=fopen("XCasmpTV.mp"); +vect.xcas.out := read("XCasTV.out"); +vxo := vect.xcas.out; +dim.vxo := dim(vxo); +nbr.line.vxo := dim.vxo; +Resultat:=cat(" "); +rslt := vxo[0]; RslT:=cat(rslt); +Resultat:=cat(Resultat,RslT); +fprint(Sortie,Unquoted,Resultat); +fclose(Sortie); +\end{VerbatimOut} +\newenvironment{TV} +{\stepcounter{TVn}\VerbatimEnvironment\begin{VerbatimOut}{XCasTV.out}} +{\end{VerbatimOut} + \executGiacmp{XCasTV.in} + + \immediate\write18{mpost XCasmpTV} + +\begin{center} + \includegraphics{XCasmpTV.\theTVn} +\end{center} + +} + + + + +\begin{VerbatimOut}{XCasTVI.in} +maple_mode(0); +read("XcasTVI.meta"); +Sortie:=fopen("XCasmpTVI.mp"); +vect.xcas.out := read("XCasTVI.out"); +vxo := vect.xcas.out; +dim.vxo := dim(vxo); +nbr.line.vxo := dim.vxo; +Resultat:=cat(" "); +rslt := vxo[0]; RslT:=cat(rslt); +Resultat:=cat(Resultat,RslT); +fprint(Sortie,Unquoted,Resultat); +fclose(Sortie); +\end{VerbatimOut} +\newenvironment{TVI} +{\stepcounter{TVn}\VerbatimEnvironment\begin{VerbatimOut}{XCasTVI.out}} +{\end{VerbatimOut} + \executGiacmp{XCasTVI.in} + + \immediate\write18{mpost XCasmpTVI} + +\begin{center} + \includegraphics{XCasmpTVI.\theTVn} +\end{center} + +} + + + + + + +%% +%% Zi end diff --git a/Master/tlpkg/tlpsrc/collection-mathextra.tlpsrc b/Master/tlpkg/tlpsrc/collection-mathextra.tlpsrc index e89cd827232..34c1642ab0d 100644 --- a/Master/tlpkg/tlpsrc/collection-mathextra.tlpsrc +++ b/Master/tlpkg/tlpsrc/collection-mathextra.tlpsrc @@ -21,6 +21,7 @@ depend nath depend stmaryrd depend susy depend synproof +depend tablor depend tensor depend turnstile depend venn diff --git a/Master/tlpkg/tlpsrc/tablor.tlpsrc b/Master/tlpkg/tlpsrc/tablor.tlpsrc new file mode 100644 index 00000000000..b3bd1077b82 --- /dev/null +++ b/Master/tlpkg/tlpsrc/tablor.tlpsrc @@ -0,0 +1,2 @@ +name tablor +category Package -- cgit v1.2.3