From 243fcb8274bd9c2570c4af8713456bca85dd6e99 Mon Sep 17 00:00:00 2001 From: Karl Berry Date: Mon, 24 Mar 2008 23:38:02 +0000 Subject: tablor 2.01 (24mar08) git-svn-id: svn://tug.org/texlive/trunk@7130 c570f23f-e606-0410-a88d-b1316a301751 --- Master/texmf-dist/doc/latex/tablor/Figures.zip | Bin 142673 -> 148920 bytes Master/texmf-dist/doc/latex/tablor/tablor.html | 1156 ++++++++++++++++++------ Master/texmf-dist/doc/latex/tablor/tablor.pdf | Bin 287467 -> 299304 bytes Master/texmf-dist/doc/latex/tablor/tablor.tex | 87 +- Master/texmf-dist/tex/latex/tablor/tablor.sty | 752 +++++++++++++-- 5 files changed, 1657 insertions(+), 338 deletions(-) (limited to 'Master/texmf-dist') diff --git a/Master/texmf-dist/doc/latex/tablor/Figures.zip b/Master/texmf-dist/doc/latex/tablor/Figures.zip index 9e1f9648f9b..3203b1f239b 100644 Binary files a/Master/texmf-dist/doc/latex/tablor/Figures.zip and b/Master/texmf-dist/doc/latex/tablor/Figures.zip differ diff --git a/Master/texmf-dist/doc/latex/tablor/tablor.html b/Master/texmf-dist/doc/latex/tablor/tablor.html index e26383d0ea4..f102f34fba8 100644 --- a/Master/texmf-dist/doc/latex/tablor/tablor.html +++ b/Master/texmf-dist/doc/latex/tablor/tablor.html @@ -31,6 +31,12 @@ font-weight: bold; text-decoration: underline; } + .flyspell-incorrect { + /* flyspell-incorrect-face */ + color: #ff4500; + font-weight: bold; + text-decoration: underline; + } .font-latex-bold { /* font-latex-bold-face */ color: #6b8e23; @@ -83,13 +89,13 @@
 
 \NeedsTeXFormat{LaTeX2e}[1995/12/01]
-\ProvidesPackage{tablor}[19/03/2008 v1.9 la machine à créer des tableaux de signes et variations]
+\ProvidesPackage{tablor}[24/03/2008 v2.01 la machine à créer des tableaux de signes et variations]
 
 % \copyleft Connan le Barbare \copyright
-% avec l'efficace participation de Jean-Michel Boucart
+% avec l'efficace participation de Jean-Michel Boucart
 
 
-%% Crée 10 environnements :
+%% Crée 14 environnements :
 %% tableau de signes de 2 facteurs affines
 % \begin{TSa}
 % TSa(-2,3,-1,5,\tv);
@@ -107,15 +113,27 @@
 % un tableau de variation :
 %
 % \begin{TV}
-% TV([0,+infinity],[0],"h","x",ln(x)-(ln(x))^2,1,\tv)
+% TV([0,+infinity],[0],"h","x",ln(x)-(ln(x))^2,1,\tv)
 % \end{TV}
 %
-% tableau avec valeurs intermédiares
+% tableau avec valeurs intermédiares
 %\begin{TVI}
 %TVI([-1,+infinity],[-1],"f","x",x2/sqrt(x+1)-1,1,2,\tv)
 %\end{TVI}
 %%%
+% tableau de variations avec f' sans zéro formel
+%\begin{TVapp}
+% TVapp([0,+infinity],[0],"g","x",ln(x)-x*exp(2-x),1,\tv)
+% \end{TVapp}
+%
 %
+% tableau de variations avec f' sans zéro formel
+%\begin{TVIapp}
+% TVIapp([0,+infinity],[0],"g","x",ln(x)-x*exp(2-x),1,0,\tv)
+% \end{TVIapp}
+%
+%
+%%%
 % et leurs pendants étoilés qui permet l'affichage intermédiaire du 
 % fichier metapost pour le modifier
 %
@@ -133,17 +151,17 @@
 
 \RequirePackage{ifthen}
 \RequirePackage{fancyvrb}
-\RequirePackage{ifpdf}
+\RequirePackage{ifpdf}
 
 
 % option xcas présent 
 
 
-\newboolean{xcas}\setboolean{xcas}{false}
+\newboolean{xcas}\setboolean{xcas}{false}
 \DeclareOption{xcas}{\setboolean{xcas}{true}}
 
-%% Initialisation du choix d'OS
-\newboolean{windows}\setboolean{windows}{false}
+%% Initialisation du choix d'OS
+\newboolean{windows}\setboolean{windows}{false}
 
 
 %% on configure  tablor  dans un fichier extérieur pour la plateforme
@@ -153,15 +171,15 @@
 
 \ProcessOptions\relax
 
-%% pour ceux compilant via pdflatex
+%% pour ceux compilant via pdflatex
 
 \ifpdf
-\DeclareGraphicsRule{*}{mps}{*}{}
+\DeclareGraphicsRule{*}{mps}{*}{}
 \fi
 
 %% pour nettoyer les fichiers auxiliaires
 
-\AtEndDocument{\immediate\write18{\rem tete.* *.user XCas* Xcas* *.mpx}}
+\AtEndDocument{\immediate\write18{\rem tete.* *.user XCas* Xcas* *.mpx}}
 
 
 
@@ -169,7 +187,7 @@
 %% de tous les tableaux produits
 
  \begin{VerbatimOut}{tete.mp}
-  input tableauVariation;
+  input tableauVariation;
   verbatimtex
 %&latex
      \documentclass{article}
@@ -187,17 +205,17 @@
 
 
 %% Définit des commandes disque selon l'OS utilisé
-\ifthenelse{\boolean{windows}}%
+\ifthenelse{\boolean{windows}}%
     {\newcommand{\rem}{DEL } \newcommand{\cat}{TYPE }
       \newcommand{\cp}{COPY }}%
     {\newcommand{\rem}{rm }\newcommand{\cat}{cat }
-      \newcommand{\cp}{cp }}
+      \newcommand{\cp}{cp }}
 
 
 
 \newcommand{\nettoyer}[1][\jobname]%
 {\immediate\write18{\rem #1.Tab.log}
-\immediate\write18{echo end >> #1.Tab.mp}
+\immediate\write18{echo end >> #1.Tab.mp}
 }
 
 
@@ -210,7 +228,7 @@
 
 %% initialise les compteurs
 
-\newcounter{TVn}
+\newcounter{TVn}
 \newcommand{\tv}{\theTVn}
 
 \newcounter{TVnbis}
@@ -229,7 +247,7 @@
 {\IfFileExists{\Tableaux.Tab.mp}%      Si Tableaux.mp est présent...
         {\immediate\write18{\rem \Tableaux.Tab.mp}}%  le détruire
         {}%   
- \immediate\write18{\cp -f tete.mp \Tableaux.Tab.mp}% Reconstituer l'entête de Tableaux.mp
+ \immediate\write18{\cp -f tete.mp \Tableaux.Tab.mp}% Reconstituer l'entête de Tableaux.mp
 } 
 {\IfFileExists{\Tableaux.Tab.mp}%      Sans l'option XCas, si
                                 %      Tableaux.mp existe
@@ -246,7 +264,7 @@
 \makeatletter
 \newcommand{\executGiacmp}[1]{%
 \ifthenelse{\boolean{windows}}%
-{\immediate\write18{giac #1 }}%
+{\immediate\write18{giac #1 }}%
 {\immediate\write18{giac  <#1 }}}
 \makeatother
 
@@ -255,7 +273,7 @@
 
 %%%
 %
-%%% LES SCRIPTS GIAC/XCAS
+%%% LES SCRIPTS GIAC/XCAS
 %
 %%%
 
@@ -271,7 +289,7 @@
 
 
 \begin{VerbatimOut}{XcasTV.cxx}
-TV(L,F,nom,nomv,f,ftt,nmr):={
+TV(L,F,nom,nomv,f,ftt,nmr):={
 nl:=size(L);
 f:=unapply(f,x);
 fp:=fonction_derivee(f);
@@ -288,19 +306,19 @@ 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; 
+     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; 
+";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);"+
+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(fp(Z[0])==0){"valBarre(btex 0 etex);"}else{" "}+
                                                     if(sign(fp(Z[0]+10^(-5)))==1){"plus;"}else{"moins;"}}else{"nonDefBarre;"+
@@ -315,9 +333,9 @@ 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);"+
+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,"}+                               
+             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"}+
                          ");";
             
@@ -327,13 +345,13 @@ newLigneVariations(btex $\\hbox{\$"+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);
+                                            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);
+           if(kz==1){"1);"}else{"0);
 "};    
     
 
@@ -345,26 +363,26 @@ intro:="input tableauVariation;
  \\usepackage{amsmath}
  \\newcommand{\\Mathbold}[1]{\\mbox{\\boldmath$#1$\\unboldmath}}
  \\begin{document}
- etex;
+ etex;
 
 "
   
 
 MetaL:=if(ftt==2){if(nz>2){intro+"beginTableau("+nmr+")"+
         l0+lsi+lsp+lsf+"
-endTableau;
+endTableau;
 end
 ";}else{
 intro+"beginTableau("+nmr+")"+
         l0+
 lsi+lsf+"
-endTableau;
+endTableau;
 end";
 }
 }else{ if(ftt==0){if(nz>2){intro+"beginTableau("+nmr+")"+
         l0+
 li+
-lp+
+lp+
 lf
 +"
 endTableau;
@@ -375,22 +393,22 @@ lf
 +"
 endTableau;
 end";}}else{
-if(nz>2){intro+"beginTableau("+nmr+")"+
+if(nz>2){intro+"beginTableau("+nmr+")"+
         l0+
 lsi+lsp+lsf+
 li+
 lp+
 lf
 +"
-endTableau;
+endTableau;
 end";}else{intro+"beginTableau("+nmr+")"+
         l0+
 lsi+lsf+
 li+
-lf
+lf
 +"
 endTableau;
-end";}
+end";}
 }}
 
 
@@ -399,245 +417,768 @@ MetaLfc:=if(ftt==2){if(nz>2){"
 
 beginTableau("+nmr+")"+
         l0+lsi+lsp+lsf+"
-endTableau;
+endTableau;
 
 ";}else{
 intro+"beginTableau("+nmr+")"+
         l0+
 lsi+lsf+"
+endTableau;
+
+";
+}
+}else{ if(ftt==0){if(nz>2){"beginTableau("+nmr+")"+
+        l0+
+li+
+lp+
+lf
++"
 endTableau;
 
+";}else{"beginTableau("+nmr+")"+
+        l0+
+li+
+lf
++"
+endTableau;
+
+";}}else{
+if(nz>2){"beginTableau("+nmr+")"+
+        l0+
+lsi+lsp+lsf+
+li+
+lp+
+lf
++"
+endTableau;
+
+";}else{"beginTableau("+nmr+")"+
+        l0+
+lsi+lsf+
+li+
+lf
++"
+endTableau;
+
+";}
+}}
+
+
+sortie:=fopen("XCasmpfc.mp");
+fprint(sortie,Unquoted,MetaLfc);
+fclose(sortie);
+
+
+return(MetaL);
+ }:;
+
+\end{VerbatimOut}
+
+
+
+
+
+%%
+%%
+%% Quand les solutions formelles de f'(x)=0 ne sont pas calculables
+%%
+
+
+
+\begin{VerbatimOut}{XcasTVapp.cxx}
+
+
+
+
+
+
+
+TVapp(L,F,nom,nomv,f,ftt,nmr):={
+
+
+nl:=size(L);
+f:=unapply(f,x);
+fp:=fonction_derivee(f);
+z0:=concat(L,F);z:=sort(z0);
+nz:=size(z);
+if(L==[-infinity,+infinity]){S:=seq(fsolve(fp(x),x,k/10,newton_solver),k=-100..100);}
+else{if(L[0]==-infinity){S:=seq(fsolve(fp(x),x,k/10,newton_solver),k=-100..L[1]);}
+else{if(L[1]==+infinity){S:=seq(fsolve(fp(x),x,k/10,newton_solver),k=L[0]..100);}
+else{S:=seq(fsolve(fp(x),x,k/10,newton_solver),k=z[0]..z[nz-1])}}};
+si size(S)>0 alors   pour j de 0 jusque size(S)-1 faire 
+                             kk:=(re(S[j])==S[j]);kok:=(evalf(S[j])>=L[0]) and (evalf(S[j])<=L[1]);
+                          if(kk==1){if(kok==1){z:=append(z,simplifier(S[j]))}};
+                          fpour;
+fsi;
+
+
+S:=NULL;
+S:=S,z[0];
+for(j:=1;j<size(z);j++){
+ if(z[j]!=undef and (abs(z[j])>1e-15 or z[j]==0)){
+   S:=S,z[j]};
+}
+z:=[S];
+
+Z:=sort(z);
+nz:=size(Z);
+
+S:=NULL;
+S:=S,Z[0];
+for(j:=1;j<nz;j++){
+ if(Z[j]!=S[size(S)-1]){
+   S:=S,Z[j]};
+}
+Z:=[S]; 
+
+
+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(fp(Z[0])==0){"valBarre(btex 0 etex);"}else{" "}+
+                                                    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==2){if(nz>2){intro+"beginTableau("+nmr+")"+
+        l0+lsi+lsp+lsf+"
+endTableau;
+end
+";}else{
+intro+"beginTableau("+nmr+")"+
+        l0+
+lsi+lsf+"
+endTableau;
+end";
+}
+}else{ 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";}
+}}
+
+
+
+MetaLfc:=if(ftt==2){if(nz>2){"
+
+beginTableau("+nmr+")"+
+        l0+lsi+lsp+lsf+"
+endTableau;
+
+";}else{
+intro+"beginTableau("+nmr+")"+
+        l0+
+lsi+lsf+"
+endTableau;
+
 ";
 }
 }else{ if(ftt==0){if(nz>2){"beginTableau("+nmr+")"+
         l0+
 li+
-lp+
+lp+
+lf
++"
+endTableau;
+
+";}else{"beginTableau("+nmr+")"+
+        l0+
+li+
+lf
++"
+endTableau;
+
+";}}else{
+if(nz>2){"beginTableau("+nmr+")"+
+        l0+
+lsi+lsp+lsf+
+li+
+lp+
+lf
++"
+endTableau;
+
+";}else{"beginTableau("+nmr+")"+
+        l0+
+lsi+lsf+
+li+
+lf
++"
+endTableau;
+
+";}
+}}
+
+
+sortie:=fopen("XCasmpfc.mp");
+fprint(sortie,Unquoted,MetaLfc);
+fclose(sortie);
+
+
+return(MetaL);
+ }:;
+
+
+
+
+
+
+
+\end{VerbatimOut}
+
+
+
+
+
+
+
+%%
+%% Code giac/Xcas pour les Tableaux de Variations avec 
+%% Valeurs intermédiaires
+%%
+
+
+
+
+
+\begin{VerbatimOut}{XcasTVI.cxx}
+
+
+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(fp(Z[0])==0){"valBarre(btex 0 etex);"}else{" "}+
+                                                    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==2){if(nz>2){intro+"beginTableau("+nmr+")"+
+        l0+lsi+lsp+lsf+"
+endTableau;
+end";}else{
+intro+"beginTableau("+nmr+")"+
+        l0+
+lsi+lsf+"
+endTableau;
+end";
+}
+}else{
+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";}
+}};
+
+
+MetaLfc:= if(ftt==2){if(nz>2){"beginTableau("+nmr+")"+
+        l0+lsi+lsp+lsf+"
+endTableau;
+
+";}else{
+"beginTableau("+nmr+")"+
+        l0+
+lsi+lsf+"
+endTableau;
+
+";
+}
+}else{
+if(ftt==0){if(nz>2){"beginTableau("+nmr+")"+
+        l0+
+li+
+lp+
 lf
 +"
-endTableau;
+endTableau;
 
-";}else{"beginTableau("+nmr+")"+
+";}else{"beginTableau("+nmr+")"+
         l0+
 li+
 lf
 +"
-endTableau;
-
+endTableau;
 ";}}else{
 if(nz>2){"beginTableau("+nmr+")"+
         l0+
-lsi+lsp+lsf+
+lsi+lsp+lsf+
 li+
-lp+
-lf
+lp+
+lf
 +"
 endTableau;
 
-";}else{"beginTableau("+nmr+")"+
+";}else{"beginTableau("+nmr+")"+
         l0+
 lsi+lsf+
 li+
 lf
 +"
-endTableau;
+endTableau;
 
 ";}
-}}
+}};
+
 
 
 sortie:=fopen("XCasmpfc.mp");
 fprint(sortie,Unquoted,MetaLfc);
-fclose(sortie);
+fclose(sortie);
 
 
-return(MetaL);
+return(MetaL);
  }:;
 
+
+
 \end{VerbatimOut}
 
 
 
+
+
+
+
 %%
-%% Code giac/Xcas pour les Tableaux de Variations avec 
-%% Valeurs intermédiaires
+%%
+%% Quand les solutions de f'(x)=0 ne sont pas formellement calculables
 %%
 
 
 
 
+\begin{VerbatimOut}{XcasTVIapp.cxx}
 
-\begin{VerbatimOut}{XcasTVI.cxx}
 
+TVIapp(L,F,nom,nomv,f,ftt,ao,nmr):={
 
-TVI(L,F,nom,nomv,f,ftt,ao,nmr):={
-nl:=size(L);
+
+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;
+z0:=concat(L,F);z:=sort(z0);
+nz:=size(z);
+if(L==[-infinity,+infinity]){S:=seq(fsolve(fp(x),x,k/10,newton_solver),k=-100..100);}
+else{if(L[0]==-infinity){S:=seq(fsolve(fp(x),x,k/10,newton_solver),k=-100..L[1]);}
+else{if(L[1]==+infinity){S:=seq(fsolve(fp(x),x,k/10,newton_solver),k=L[0]..100);}
+else{S:=seq(fsolve(fp(x),x,k/10,newton_solver),k=z[0]..z[nz-1])}}};
+si size(S)>0 alors   pour j de 0 jusque size(S)-1 faire 
+                             kk:=(re(S[j])==S[j]);kok:=(evalf(S[j])>=L[0]) and (evalf(S[j])<=L[1]);
+                          if(kk==1){if(kok==1){z:=append(z,simplifier(S[j]))}};
+                          fpour;
+fsi;
+
+
+S:=NULL;
+S:=S,z[0];
+for(j:=1;j<size(z);j++){
+ if(z[j]!=undef and (abs(z[j])>1e-15 or z[j]==0)){
+   S:=S,z[j]};
+}
+z:=[S];
 
-Z:=sort(Z); 
+
+
+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;
+
+S:=NULL;
+S:=S,Z[0];
+for(j:=1;j<nz;j++){
+ if(Z[j]!=S[size(S)-1]){
+   S:=S,Z[j]};
+}
+Z:=[S]; 
+
+
 nz:=size(Z);
-l0:=" newLigneVariables(btex $"+nomv+"$ etex);";lp:=" "; lf:=" ";lsp:=" ";
+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;
+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]};
+if(nz>2){ LL:=[LI,LP,LF]}else{LL:=[LI,LF]};
       
 NL:=size(LL);
-A:=NULL;aa:=1;kk:=0;
+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(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);"};
+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]));
+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);
+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);
+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){
+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(fp(Z[0])==0){"valBarre(btex 0 etex);"}else{" "}+
                                                     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(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); 
+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{" "};
+                                 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;}        
+                                  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;"}
+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);
+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{" "}; 
+             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); 
+                     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);"}}
+                                    "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
+                                            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)) ;  
+                                                 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);"}}
+                                    "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
+                                            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
+}// 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;
+                                            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
+}// else nz<NL
 //if nz=NL
-};//if nz>2
+};//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);"};    
+           if(kz==1){"1);"}else{"0);"};    
     
 
 
-intro:="
+intro:="
 input tableauVariation;
-verbatimtex
+verbatimtex
 %&latex
  \\documentclass{article}
  \\usepackage[upright]{fourier}
  \\usepackage{amsmath}
  \\newcommand{\\Mathbold}[1]{\\mbox{\\boldmath$#1$\\unboldmath}}
  \\begin{document}
- etex;
+ etex;
 
 ";
   
 
-MetaL:= if(ftt==2){if(nz>2){intro+"beginTableau("+nmr+")"+
+MetaL:= if(ftt==2){if(nz>2){intro+"beginTableau("+nmr+")"+
         l0+lsi+lsp+lsf+"
 endTableau;
 end";}else{
-intro+"beginTableau("+nmr+")"+
+intro+"beginTableau("+nmr+")"+
         l0+
 lsi+lsf+"
-endTableau;
-end";
+endTableau;
+end";
 }
 }else{
 if(ftt==0){if(nz>2){intro+"beginTableau("+nmr+")"+
         l0+
 li+
 lp+
-lf
+lf
 +"
 endTableau;
-end";}else{intro+"beginTableau("+nmr+")"+
+end";}else{intro+"beginTableau("+nmr+")"+
         l0+
 li+
-lf
+lf
 +"
 endTableau;
 end";}}else{
@@ -646,64 +1187,64 @@ if(nz>2){intro+"beginTableau("+nmr+")"+
 lsi+lsp+lsf+
 li+
 lp+
-lf
+lf
 +"
 endTableau;
-end";}else{intro+"beginTableau("+nmr+")"+
+end";}else{intro+"beginTableau("+nmr+")"+
         l0+
 lsi+lsf+
 li+
-lf
+lf
 +"
 endTableau;
-end";}
+end";}
 }};
 
 
 MetaLfc:= if(ftt==2){if(nz>2){"beginTableau("+nmr+")"+
         l0+lsi+lsp+lsf+"
-endTableau;
+endTableau;
 
-";}else{
+";}else{
 "beginTableau("+nmr+")"+
         l0+
 lsi+lsf+"
-endTableau;
+endTableau;
 
 ";
 }
 }else{
-if(ftt==0){if(nz>2){"beginTableau("+nmr+")"+
+if(ftt==0){if(nz>2){"beginTableau("+nmr+")"+
         l0+
 li+
 lp+
-lf
+lf
 +"
-endTableau;
+endTableau;
 
 ";}else{"beginTableau("+nmr+")"+
         l0+
 li+
 lf
 +"
-endTableau;
+endTableau;
 ";}}else{
-if(nz>2){"beginTableau("+nmr+")"+
+if(nz>2){"beginTableau("+nmr+")"+
         l0+
 lsi+lsp+lsf+
 li+
-lp+
+lp+
 lf
 +"
-endTableau;
+endTableau;
 
-";}else{"beginTableau("+nmr+")"+
+";}else{"beginTableau("+nmr+")"+
         l0+
 lsi+lsf+
 li+
-lf
+lf
 +"
-endTableau;
+endTableau;
 
 ";}
 }};
@@ -715,7 +1256,7 @@ fprint(sortie,Unquoted,MetaLfc);
 fclose(sortie);
 
 
-return(MetaL);
+return(MetaL);
  }:;
 
 
@@ -724,6 +1265,16 @@ return(MetaL);
 
 
 
+
+
+
+
+
+
+
+
+
+
 %%
 %% Code giac/Xcas pour les Tableaux de signes de produits
 %%
@@ -734,7 +1285,7 @@ return(MetaL);
 \begin{VerbatimOut}{XcasTabSignL.cxx}
 
 
-TS(L,D,nmr):={
+TS(L,D,nmr):={
 L:=apply(f->unapply(f,x),L)
 n:=size(L);
 Z:=NULL;
@@ -754,7 +1305,7 @@ if(nz>2){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);
+nz:=size(Z);
 
 if(nz==0){li:="";l0:="val(btex $"+latex(D[0])+"$ etex);val(btex $"+latex(D[1])+"$ etex);";
           for(p:=0;p<=n-1;p++){li:=li+"
@@ -763,14 +1314,14 @@ if(mini!=-infinity and L[p](mini)==0){"
                                 valBarre(btex 0 etex);"}else{"
                               "}+ 
 if(L[p]((mini+maxi)*0.5>0)){"plus;"}else{"moins;"}+if(maxi!=+infinity and L[p](maxi)==0){"
-                                valBarre(btex 0 etex);"}else{"
+                                valBarre(btex 0 etex);"}else{"
                               "}
 
 }
            lf:=if(product(L[s]((mini+maxi)*.5),s,0,n-1)>0){"plus;"}else{"moins;"};
 
 MetaL:=" input tableauVariation;
-           verbatimtex
+           verbatimtex
 %&latex
  \\documentclass{article}
  \\usepackage[upright]{fourier}
@@ -788,14 +1339,14 @@ newLigneVariables(btex $\\Mathbold{x}$ etex
                                 valBarre(btex 0 etex);"}else{"
                               "}+  lf+
                                if(maxi!=+infinity and product(L[s](maxi),s,0,n-1)==0){"
-                                valBarre(btex 0 etex);"}else{"
+                                valBarre(btex 0 etex);"}else{"
                               "}+"
-endTableau;
+endTableau;
 end"
 ;
 
 
-MetaLfc:="    beginTableau("+nmr+")
+MetaLfc:="    beginTableau("+nmr+")
 newLigneVariables(btex $\\Mathbold{x}$ etex);
    "+l0+li+
     "
@@ -806,7 +1357,7 @@ newLigneVariables(btex $\\Mathbold{x}$ etex
                                if(maxi!=+infinity and product(L[s](maxi),s,0,n-1)==0){"
                                 valBarre(btex 0 etex);"}else{"
                               "}+"
-endTableau;
+endTableau;
 "
 ;
 
@@ -818,11 +1369,11 @@ pour m de 0 jusque nz-1 faire l0:=l0+"val(btex $"+
 l0:=l0+"val(btex $"+latex(D[1])+"$ etex);";
 
 
-for(p:=0;p<=n-1;p++){lp:="";                                     
+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(mini!=-infinity and L[p](mini)==0){"
-                                valBarre(btex 0 etex);"}else{"
+                                valBarre(btex 0 etex);"}else{"
                               "}+ 
            if(L[p](Z[0]-0.01)>0){"plus;"}else{"moins;"};
                                
@@ -835,7 +1386,7 @@ newLigneSignes(btex $\\hbox{\else{"
                               "}
     };  
 
@@ -852,7 +1403,7 @@ MetaL:=" input tableauVariation;
  \\usepackage{amsmath}
  \\newcommand{\\Mathbold}[1]{\\mbox{\\boldmath$#1$\\unboldmath}}
  \\begin{document}
- etex;
+ etex;
           beginTableau("+nmr+")
 newLigneVariables(btex $\\Mathbold{x}$ etex);
    "+l0+
@@ -863,37 +1414,37 @@ newLigneVariables(btex $\\Mathbold{x}$ etex
                if(mini!=-infinity and product(L[s](mini),s,0,n-1)==0){"
                                 valBarre(btex 0 etex);"}else{"
                               "}+  
-                         if(product(L[s](Z[0]-0.01),s,0,n-1)>0){"plus;"}else{"moins;"}+"valBarre(btex 0 etex);"+
+                         if(product(L[s](Z[0]-0.01),s,0,n-1)>0){"plus;"}else{"moins;"}+"valBarre(btex 0 etex);"+
                          lr+
                          if(product(L[s](Z[nz-1]+0.01),s,0,n-1)>0){"plus;"}else{"moins;"}+
                                if(maxi!=+infinity and product(L[s](maxi),s,0,n-1)==0){"
                                 valBarre(btex 0 etex);"}else{"
                               "}+"
 endTableau;
-end"
+end"
 ;
 MetaLfc:="  beginTableau("+nmr+")
-newLigneVariables(btex $\\Mathbold{x}$ etex);
+newLigneVariables(btex $\\Mathbold{x}$ etex);
    "+l0+
                      li
                      +
     "
  newLigneSignes(btex $\\hbox{\\bf Signe du }\\atop{{\\bf produit}}$ etex);"+
                if(mini!=-infinity and product(L[s](mini),s,0,n-1)==0){"
-                                valBarre(btex 0 etex);"}else{"
+                                valBarre(btex 0 etex);"}else{"
                               "}+  
                          if(product(L[s](Z[0]-0.01),s,0,n-1)>0){"plus;"}else{"moins;"}+"valBarre(btex 0 etex);"+
                          lr+
                          if(product(L[s](Z[nz-1]+0.01),s,0,n-1)>0){"plus;"}else{"moins;"}+
                                if(maxi!=+infinity and product(L[s](maxi),s,0,n-1)==0){"
-                                valBarre(btex 0 etex);"}else{"
+                                valBarre(btex 0 etex);"}else{"
                               "}+"
 endTableau;
 
  ";
 }
 sortie:=fopen("XCasmpfc.mp");
-fprint(sortie,Unquoted,MetaLfc);
+fprint(sortie,Unquoted,MetaLfc);
 fclose(sortie);
 return(MetaL);
  }:;
@@ -910,7 +1461,7 @@ return(MetaL);
 
 
 \begin{VerbatimOut}{XcasTabSignQ.cxx}
-TSq(nomf,L,Fo,D,nmr):={
+TSq(nomf,L,Fo,D,nmr):={
 L:=apply(f->unapply(f,x),L);
 Fo:=apply(f->unapply(f,x),Fo);
 L:=concat(L,Fo);
@@ -927,7 +1478,7 @@ pour k de 0 jusque n-1 faire
                           if(S[j]>mini and S[j]<maxi){Z:=Z,simplifier(S[j]);}
                       fpour;
   fsi;
-fpour;
+fpour;
 
 
 pour k de 0 jusque m-1 faire 
@@ -946,31 +1497,31 @@ nz:=size(Z);
 if(nz>2){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;}
+fpour;}
 
 
 Z:=sort(Z);
 nz:=size(Z);
 if(nz>2){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;
+     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);
 
-if(nz==0){li:="";l0:="val(btex $"+latex(D[0])+"$ etex);val(btex $"+latex(D[1])+"$ etex);";
+if(nz==0){li:="";l0:="val(btex $"+latex(D[0])+"$ etex);val(btex $"+latex(D[1])+"$ etex);";
           for(p:=0;p<=n-1;p++){li:=li+"
-newLigneSignes(btex $\\hbox{\\bf Signe de }\\atop{\\displaystyle \\Mathbold{"+latex(L[p](x))+"}}$ etex);"+
+newLigneSignes(btex $\\hbox{\\bf Signe de }\\atop{\\displaystyle \\Mathbold{"+latex(L[p](x))+"}}$ etex);"+
 if(mini!=-infinity and L[p](mini)==0){"
                                 valBarre(btex 0 etex);"}else{"
                               "}+ 
-if(L[p]((mini+maxi)*0.5>0)){"plus;"}else{"moins;"}+if(maxi!=+infinity and L[p](maxi)==0){"
+if(L[p]((mini+maxi)*0.5>0)){"plus;"}else{"moins;"}+if(maxi!=+infinity and L[p](maxi)==0){"
                                 valBarre(btex 0 etex);"}else{"
                               "}
 
 }
            lf:=if(product(L[s]((mini+maxi)*.5),s,0,n-1)>0){"plus;"}else{"moins;"};
 
-MetaL:=" input tableauVariation;
+MetaL:=" input tableauVariation;
            verbatimtex
 %&latex
  \\documentclass{article}
@@ -981,25 +1532,25 @@ MetaL:=" input tableauVariation;
  etex;
 
 beginTableau("+nmr+")
-newLigneVariables(btex $\\Mathbold{x}$ etex);
+newLigneVariables(btex $\\Mathbold{x}$ etex);
    "+l0+li+
     "
  newLigneSignes(btex $\\hbox{\\bf Signe }\\atop{{\\bf  de "+nomf+"(x)}}$ etex);"+
               if(member(mini,FF)==0){if(mini!=-infinity and product(L[s](mini),s,0,n-1)==0){"
                                 valBarre(btex 0 etex);"}else{"
-                              "}}else{"nonDefBarre;"}+  lf+
+                              "}}else{"nonDefBarre;"}+  lf+
                                if(member(maxi,FF)==0){if(maxi!=+infinity and product(L[s](maxi),s,0,n-1)==0){"
                                 valBarre(btex 0 etex);"}else{"
                               "}}else{"nonDefBarre;"}+"
 endTableau;
-end"
+end"
 ;
 
 
 
 
 MetaLfc:=" 
-beginTableau("+nmr+")
+beginTableau("+nmr+")
 newLigneVariables(btex $\\Mathbold{x}$ etex);
    "+l0+li+
     "
@@ -1010,7 +1561,7 @@ newLigneVariables(btex $\\Mathbold{x}$ etex
                                if(member(maxi,FF)==0){if(maxi!=+infinity and product(L[s](maxi),s,0,n-1)==0){"
                                 valBarre(btex 0 etex);"}else{"
                               "}}else{"nonDefBarre;"}+"
-endTableau;
+endTableau;
 
 "
 ;
@@ -1018,20 +1569,20 @@ endTableau;
 
 
 
-}else{
+}else{
 
 
 l0:="val(btex $"+latex(D[0])+"$ etex);";li:=" ";lr:=" "; 
 pour m de 0 jusque nz-1 faire l0:=l0+"val(btex $"+latex(Z[m])+"$ etex);
 ";fpour; 
-l0:=l0+"val(btex $"+latex(D[1])+"$ etex);";
+l0:=l0+"val(btex $"+latex(D[1])+"$ etex);";
 
 
-for(p:=0;p<=n-1;p++){lp:="";                                     
+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(mini!=-infinity and L[p](mini)==0){"
-                                valBarre(btex 0 etex);"}else{"
+                                valBarre(btex 0 etex);"}else{"
                               "}+ 
            if(L[p](Z[0]-0.01)>0){"plus;"}else{"moins;"};
                                
@@ -1044,7 +1595,7 @@ newLigneSignes(btex $\\hbox{\else{" "}
                               
     };  
 
@@ -1054,8 +1605,8 @@ pour t de 0 jusque nz-2 faire
                                       if(member(Z[t+1],FF)==0){"valBarre(btex 0 etex);"}else{ "nonDefBarre;"}                   
                          fpour
 
-MetaL:=" input tableauVariation;
-verbatimtex
+MetaL:=" input tableauVariation;
+verbatimtex
 %&latex
  \\documentclass{article}
  \\usepackage[upright]{fourier}
@@ -1069,9 +1620,9 @@ newLigneVariables(btex $\\Mathbold{x}$ etex
                      li
                      +
     "
- newLigneSignes(btex $\\hbox{\\bf Signe }\\atop{{\\bf de"+nomf+"(x)}}$ etex);"+
+ newLigneSignes(btex $\\hbox{\\bf Signe de}\\atop{{\\bf "+nomf+"(x)}}$ etex);"+
                if(member(mini,FF)==0){if(mini!=-infinity and product(L[s](mini),s,0,n-1)==0){"
-                                valBarre(btex 0 etex);"}else{"
+                                valBarre(btex 0 etex);"}else{"
                               "}}else{"nonDefBarre;"}+  
                          if(product(L[s](Z[0]-0.01),s,0,n-1)>0){"plus;"}else{"moins;"}+
                          if(member(Z[0],FF)==0){"valBarre(btex 0 etex);"}else{ "nonDefBarre;"}+
@@ -1079,8 +1630,8 @@ newLigneVariables(btex $\\Mathbold{x}$ etex
                          if(product(L[s](Z[nz-1]+0.01),s,0,n-1)>0){"plus;"}else{"moins;"}+
                                if(member(maxi,FF)==0){if(maxi!=+infinity and product(L[s](maxi),s,0,n-1)==0){"
                                 valBarre(btex 0 etex);"}else{" "}}else{"nonDefBarre;"}+"
-endTableau;
-end"
+endTableau;
+end"
 ;
 
 
@@ -1088,22 +1639,22 @@ end"
 
 MetaLfc:="
 beginTableau("+nmr+")
-newLigneVariables(btex $\\Mathbold{x}$ etex);
+newLigneVariables(btex $\\Mathbold{x}$ etex);
    "+l0+
                      li
                      +
     "
- newLigneSignes(btex $\\hbox{\\bf Signe }\\atop{{\\bf de"+nomf+"(x)}}$ etex);"+
+ newLigneSignes(btex $\\hbox{\\bf Signe de}\\atop{{\\bf "+nomf+"(x)}}$ etex);"+
                if(member(mini,FF)==0){if(mini!=-infinity and product(L[s](mini),s,0,n-1)==0){"
                                 valBarre(btex 0 etex);"}else{"
-                              "}}else{"nonDefBarre;"}+  
+                              "}}else{"nonDefBarre;"}+  
                          if(product(L[s](Z[0]-0.01),s,0,n-1)>0){"plus;"}else{"moins;"}+
                          if(member(Z[0],FF)==0){"valBarre(btex 0 etex);"}else{ "nonDefBarre;"}+
                          lr+
                          if(product(L[s](Z[nz-1]+0.01),s,0,n-1)>0){"plus;"}else{"moins;"}+
                                if(member(maxi,FF)==0){if(maxi!=+infinity and product(L[s](maxi),s,0,n-1)==0){"
                                 valBarre(btex 0 etex);"}else{" "}}else{"nonDefBarre;"}+"
-endTableau;
+endTableau;
 
 "
 
@@ -1114,14 +1665,14 @@ endTableau;
 
 
 sortie:=fopen("XCasmpfc.mp");
-fprint(sortie,Unquoted,MetaLfc);
+fprint(sortie,Unquoted,MetaLfc);
 fclose(sortie);
 
 
 
 
 
-return(MetaL);
+return(MetaL);
  }:;
 
 \end{VerbatimOut}
@@ -1137,13 +1688,13 @@ return(MetaL);
 
 
 \begin{VerbatimOut}{XcasTabSign.cxx}
-TSa(a,b,c,d,nmr):={
-zA:=resoudre(a*x+b=0,x)[0];
+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);
+zmax:=max(zA,zB);
   Meta:= " input tableauVariation;
-           verbatimtex
+           verbatimtex
 %&latex
  \\documentclass{article}
  \\usepackage[upright]{fourier}
@@ -1155,12 +1706,12 @@ zmax:=max(zA,zB);
    newLigneVariables(btex $\\Mathbold{x}$ etex);
    val(btex $-\\infty$ etex);val(btex $"+latex(zmin)+"$ etex);
 val(btex $"+latex(zmax)+"$etex);
-val(btex $+\\infty$ 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}+
+                                             else{si a>0 alors "moins;"; sinon "plus;"; fsi}+
                                  if(zmin==zA){"barre;"}else{"valBarre(btex 0 etex);"}+
                                  if(a>0){"plus;"}else{"moins;"}
      +" 
@@ -1169,20 +1720,20 @@ newLigneSignes(btex $\\hbox{\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+";"+
+        +   si a*c>0 alors plus; sinon moins;fsi+";"+
                                  "valBarre(btex 0 etex);"+
-                                 si a*c>0 alors moins; sinon plus;fsi+";"+
+                                 si a*c>0 alors moins; sinon plus;fsi+";"+
                                  "valBarre(btex 0 etex);"+
                                  si a*c>0 alors plus; sinon moins;fsi+";"+"
 endTableau;
-end"
+end"
 ;
-return(Meta);
+return(Meta);
  }:;
 \end{VerbatimOut}
 
@@ -1198,8 +1749,8 @@ return(Meta);
 
 
 
-\begin{VerbatimOut}{XcasTSc.cxx}
-TSc(g,D,nmr):={
+\begin{VerbatimOut}{XcasTSc.cxx}
+TSc(g,D,nmr):={
 f:=unapply(g,x);
 Z:=NULL;
 mini:=D[0]; maxi:=D[1];lm:=" ";
@@ -1210,13 +1761,13 @@ li:=if(mini!=-infinity and f(mini)==0){"
                                 valBarre(btex 0 etex);"}else{"
                               "}+ 
 if(mini!=-infinity or maxi!=+infinity){if(f((mini+maxi)*0.5>0)){"plus;"}else{"moins;"}}else{if(f(0)>0){"plus;"}else{"moins;"}};
-lf:=if(maxi!=+infinity and f(maxi)==0){"
-                                valBarre(btex 0 etex);"}else{"
+lf:=if(maxi!=+infinity and f(maxi)==0){"
+                                valBarre(btex 0 etex);"}else{"
                               "};
 }
 else{pour j de 0 jusque size(S)-1 faire 
                            if(S[j]>mini and S[j]<maxi){Z:=Z,simplifier(S[j])};
-                      fpour;
+                      fpour;
 
 
 Z:=sort(Z);
@@ -1224,7 +1775,7 @@ nz:=size(Z);
 if(nz>2){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;}
+fpour;}
 
 
 nz:=size(Z);
@@ -1234,32 +1785,32 @@ li:=if(mini!=-infinity and f(mini)==0){"
                                 valBarre(btex 0 etex);"}else{"
                               "}+ 
 if(f((mini+maxi)*0.5>0)){"plus;"}else{"moins;"};
-lf:=if(maxi!=+infinity and f(maxi)==0){"
+lf:=if(maxi!=+infinity and f(maxi)==0){"
                                 valBarre(btex 0 etex);"}else{"
                               "};
 
 }else{
 l0:="val(btex $"+latex(D[0])+"$ etex);";li:=" ";
-pour m de 0 jusque nz-1 faire l0:=l0+"val(btex $"+latex(Z[m])+"$ etex);
+pour m de 0 jusque nz-1 faire l0:=l0+"val(btex $"+latex(Z[m])+"$ etex);
 ";
-fpour; 
+fpour; 
 l0:=l0+"val(btex $"+latex(D[1])+"$ etex);";
                                      
 li:= if(mini!=-infinity and f(mini)==0){"
                                 valBarre(btex 0 etex);"}else{"
                               "}+ 
-if(f(Z[0]-0.01)>0){"plus;"}else{"moins;"}+"valBarre(btex 0 etex);";                               
+if(f(Z[0]-0.01)>0){"plus;"}else{"moins;"}+"valBarre(btex 0 etex);";                               
 
 lm:=if(nz>=2){for(r:=0; r<=nz-2;r++){lm:=lm+if(f((Z[r]+Z[r+1])*.5)>0){"plus;"}else{"moins;"}+
                                       "valBarre(btex 0 etex);" 
-                           }}else{" "}; 
+                           }}else{" "}; 
 
-lf:=if(f(Z[nz-1]+1.0)>0){"plus;"}else{"moins;"}+if(maxi!=+infinity and f(maxi)==0){"valBarre(btex 0 etex);"}else{"
+lf:=if(f(Z[nz-1]+1.0)>0){"plus;"}else{"moins;"}+if(maxi!=+infinity and f(maxi)==0){"valBarre(btex 0 etex);"}else{"
                               "};
 }};  
 
 
-MetaL:=" input tableauVariation;
+MetaL:=" input tableauVariation;
            verbatimtex
 %&latex
  \\documentclass{article}
@@ -1269,7 +1820,7 @@ MetaL:=" input tableauVariation;
  \\begin{document}
  etex;
 beginTableau("+nmr+")
-newLigneVariables(btex $\\Mathbold{x}$ etex);
+newLigneVariables(btex $\\Mathbold{x}$ etex);
    "+l0+"
 newLigneSignes(btex $\\hbox{\\bf Signe de }\\atop{\\displaystyle \\Mathbold{"+latex(f(x))+"}}$ etex);"+
                      li+lm+lf
@@ -1279,10 +1830,10 @@ endTableau;
 ;
 
 
-MetaLfc:="
+MetaLfc:="
 
-beginTableau("+nmr+")
-newLigneVariables(btex $\\Mathbold{x}$ etex);
+beginTableau("+nmr+")
+newLigneVariables(btex $\\Mathbold{x}$ etex);
    "+l0+"
 newLigneSignes(btex $\\hbox{\\bf Signe de }\\atop{\\displaystyle \\Mathbold{"+latex(f(x))+"}}$ etex);"+
                      li+lm+lf
@@ -1302,7 +1853,7 @@ fclose(sortie);
 
 
 
-return(MetaL);
+return(MetaL);
  }:;
 \end{VerbatimOut}
 
@@ -1328,19 +1879,19 @@ fclose(sortie);
                                    % exporter le source mp
                                    % puis lancer metapost pour créer
                                    % l'image du tableau
-         \immediate\write18{\cat XCasmpfc.mp >> \Tableaux.Tab.mp}
+         \immediate\write18{\cat XCasmpfc.mp >> \Tableaux.Tab.mp}
          \immediate\write18{mpost -interaction=batchmode -jobname=\Tableaux.Tab  XCasmp#1}}%
          {% sinon, si le tableau est absent, alerte.
          \IfFileExists{\Tableaux.Tab.\theTVn}{}{% 
          \PackageError{tablor}{Tableau absent non
          reconstituable.}{Pour compiler il faut, soit les fichiers de
          tableaux, soit le fichier \Tableaux.Tab.mp, soit disposer de
-         XCas.}}}
+         XCas.}}}
                 
 \begin{center}
   \includegraphics{\Tableaux.Tab.\theTVn}
 \end{center}
-\stepcounter{TVn}}
+\stepcounter{TVn}}
 
 
 %%
@@ -1353,21 +1904,22 @@ fclose(sortie);
 \newcommand{\dressetoile}[1]{%
 \IfFileExists{\Tableaux.Tab.\theTVn}{% Test sur l'existence du tableau
 % Si oui, inclusion du fichier source de sauvegarde mp dans Tableaux
-\immediate\write18{\cat TSav-\theTVn.mp >> \Tableaux.Tab.mp}}
+\immediate\write18{\cat TSav-\theTVn.mp >> \Tableaux.Tab.mp}}
 % Si  non,  lancement des opérations de fabrication 
 {\executGiacmp{XCas#1.giac}% 
 \immediate\write18{\editeur XCasmpfc.mp}
 
   % Modification avec l'éditeur choisi
 
-\immediate\write18{\cp -f XCasmpfc.mp TSav-\theTVn.mp}   % Sauvegarde du 
+\immediate\write18{\cp -f XCasmpfc.mp TSav-\theTVn.mp}   % Sauvegarde du 
                                  % source mp sur le disque pour une
                                  % inclusion ultérieure dans Tableaux.mp. 
 \immediate\write18{\cat XCasmpfc.mp >> \Tableaux.Tab.mp}} % Inclusion du
                                                      % source dans le
                                                      % fichier
                                                      % Tableaux 
-\immediate\write18{mpost -interaction=batchmode \Tableaux.Tab}% Reconstitution des tableaux
+
+\immediate\write18{mpost -interaction=batchmode \Tableaux.Tab}% Reconstitution des tableaux
                                 % et création du dernier. L'option
                                 % pallie l'absence de end en fin de
                                 % fichier 
@@ -1376,7 +1928,7 @@ fclose(sortie);
   \includegraphics{\Tableaux.Tab.\theTVn}
 \end{center}
 
-\setcounter{TVn}{\theTVnbis}    % Restauration du compteur TVn
+\setcounter{TVn}{\theTVnbis}    % Restauration du compteur TVn
 }
 
 
@@ -1389,7 +1941,7 @@ fclose(sortie);
 %%
 %%%
 %%%
-%%% les "giac" qui permettent d'exécuter la commande rentrée dans le fichier tex
+%%% les "giac" qui permettent d'exécuter la commande rentrée dans le fichier tex
 %%% suivis des environnements qui permettront la saisie du code giac/xcas
 %%% Les versions étoilées permettent de modifier le code metapost produit initialement
 %%%
@@ -1398,21 +1950,21 @@ fclose(sortie);
 
 
 \begin{VerbatimOut}{XCas.giac}
-maple_mode(0);
+maple_mode(0);
 read("XcasTabSign.cxx");
-Sortie:=fopen("XCasmp.mp");
+Sortie:=fopen("XCasmp.mp");
 vect.xcas.user := read("XCas.user");
-vxo := vect.xcas.user;
+vxo := vect.xcas.user;
 dim.vxo := dim(vxo);
-nbr.line.vxo := dim.vxo;
+nbr.line.vxo := dim.vxo;
 Resultat:=cat(" "); 
-rslt := vxo[0]; RslT:=cat(rslt);
+rslt := vxo[0]; RslT:=cat(rslt);
 Resultat:=cat(Resultat,RslT);
-fprint(Sortie,Unquoted,Resultat);
+fprint(Sortie,Unquoted,Resultat);
 fclose(Sortie);
 \end{VerbatimOut}
 
-\newenvironment{TSa}
+\newenvironment{TSa}
 {\VerbatimEnvironment\begin{VerbatimOut}[commandchars=\\£µ]{XCas.user}}
 {\end{VerbatimOut}
           \dresse{}
@@ -1428,48 +1980,48 @@ fclose(Sortie);
 
 \begin{VerbatimOut}{XCasQ.giac}
 maple_mode(0);
-read("XcasTabSignQ.cxx");
+read("XcasTabSignQ.cxx");
 Sortie:=fopen("XCasmpQ.mp");
-vect.xcas.user := read("XCasQ.user");
-vxo := vect.xcas.user;
-dim.vxo := dim(vxo);
+vect.xcas.user := read("XCasQ.user");
+vxo := vect.xcas.user;
+dim.vxo := dim(vxo);
 nbr.line.vxo := dim.vxo;
-Resultat:=cat(" "); 
+Resultat:=cat(" "); 
 rslt := vxo[0]; RslT:=cat(rslt);
-Resultat:=cat(Resultat,RslT);
+Resultat:=cat(Resultat,RslT);
 fprint(Sortie,Unquoted,Resultat);
-fclose(Sortie);
+fclose(Sortie);
 \end{VerbatimOut}
 
-\newenvironment{TSq}%
+\newenvironment{TSq}%
 {\VerbatimEnvironment\begin{VerbatimOut}[commandchars=\\£µ]{XCasQ.user}}
 {\end{VerbatimOut}\dresse{Q}}
 
 
 
-\newenvironment{TSq*}[1]%
+\newenvironment{TSq*}[1]%
 {\setcounter{TVnbis}{\theTVn}
-\setcounter{TVn}{#1}
+\setcounter{TVn}{#1}
 \VerbatimEnvironment\begin{VerbatimOut}[commandchars=\\£µ]{XCasQ.user}}
 {\end{VerbatimOut}\dressetoile{Q}}
 
 
 \begin{VerbatimOut}{XCasL.giac}
 maple_mode(0);
-read("XcasTabSignL.cxx");
+read("XcasTabSignL.cxx");
 Sortie:=fopen("XCasmpL.mp");
-vect.xcas.user := read("XCasL.user");
+vect.xcas.user := read("XCasL.user");
 vxo := vect.xcas.user;
-dim.vxo := dim(vxo);
-nbr.line.vxo := dim.vxo;
-Resultat:=cat(" "); 
+dim.vxo := dim(vxo);
+nbr.line.vxo := dim.vxo;
+Resultat:=cat(" "); 
 rslt := vxo[0]; RslT:=cat(rslt);
-Resultat:=cat(Resultat,RslT);
+Resultat:=cat(Resultat,RslT);
 fprint(Sortie,Unquoted,Resultat);
-fclose(Sortie);
+fclose(Sortie);
 \end{VerbatimOut}
 
-\newenvironment{TS}%
+\newenvironment{TS}%
 {\VerbatimEnvironment\begin{VerbatimOut}[commandchars=\\£µ]{XCasL.user}}
 {\end{VerbatimOut}\dresse{L}}
 
@@ -1482,60 +2034,101 @@ fclose(Sortie);
 
 
 \begin{VerbatimOut}{XCasTSc.giac}
-maple_mode(0);
+maple_mode(0);
 read("XcasTSc.cxx");
 Sortie:=fopen("XCasmpTSc.mp");
 vect.xcas.user := read("XCasTSc.user");
-vxo := vect.xcas.user;
+vxo := vect.xcas.user;
 dim.vxo := dim(vxo);
-nbr.line.vxo := dim.vxo;
+nbr.line.vxo := dim.vxo;
 Resultat:=cat(" "); 
-rslt := vxo[0]; RslT:=cat(rslt);
+rslt := vxo[0]; RslT:=cat(rslt);
 Resultat:=cat(Resultat,RslT);
-fprint(Sortie,Unquoted,Resultat);
+fprint(Sortie,Unquoted,Resultat);
 fclose(Sortie);
 \end{VerbatimOut}
 
 
 
 
-\newenvironment{TSc*}[1]%
+\newenvironment{TSc*}[1]%
 {\setcounter{TVnbis}{\theTVn}
-\setcounter{TVn}{#1}
+\setcounter{TVn}{#1}
 \VerbatimEnvironment\begin{VerbatimOut}[commandchars=\\£µ]{XCasTSc.user}}
-{\end{VerbatimOut}\dressetoile{TSc}}
+{\end{VerbatimOut}\dressetoile{TSc}}
 
 
 \newenvironment{TSc}%
 {\VerbatimEnvironment\begin{VerbatimOut}[commandchars=\\£µ]{XCasTSc.user}}
-{\end{VerbatimOut}\dresse{TSc}}
+{\end{VerbatimOut}\dresse{TSc}}
 
 
 \begin{VerbatimOut}{XCasTV.giac}
-maple_mode(0);
+maple_mode(0);
 read("XcasTV.cxx");
 Sortie:=fopen("XCasmpTV.mp");
-vect.xcas.user := read("XCasTV.user");
-vxo := vect.xcas.user;
+vect.xcas.user := read("XCasTV.user");
+vxo := vect.xcas.user;
 dim.vxo := dim(vxo);
-nbr.line.vxo := dim.vxo;
+nbr.line.vxo := dim.vxo;
 Resultat:=cat(" "); 
-rslt := vxo[0]; RslT:=cat(rslt);
+rslt := vxo[0]; RslT:=cat(rslt);
 Resultat:=cat(Resultat,RslT);
-fprint(Sortie,Unquoted,Resultat);
+fprint(Sortie,Unquoted,Resultat);
 fclose(Sortie);
 \end{VerbatimOut}
 
 \newenvironment{TV}%
 {\VerbatimEnvironment\begin{VerbatimOut}[commandchars=\\£µ]{XCasTV.user}}%
 {\end{VerbatimOut}
-\dresse{TV}}
+\dresse{TV}}
 
-\newenvironment{TV*}[1]{%
+\newenvironment{TV*}[1]{%
 \setcounter{TVnbis}{\theTVn}
-\setcounter{TVn}{#1}
+\setcounter{TVn}{#1}
 \VerbatimEnvironment\begin{VerbatimOut}[commandchars=\\£µ]{XCasTV.user}}%
-{\end{VerbatimOut}\dressetoile{TV}}
+{\end{VerbatimOut}\dressetoile{TV}}
+
+
+
+
+
+
+
+\begin{VerbatimOut}{XCasTVapp.giac}
+maple_mode(0);
+read("XcasTVapp.cxx");
+Sortie:=fopen("XCasmpTVapp.mp");
+vect.xcas.user := read("XCasTVapp.user");
+vxo := vect.xcas.user;
+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{TVapp}%
+{\VerbatimEnvironment\begin{VerbatimOut}[commandchars=\\£µ]{XCasTVapp.user}}%
+{\end{VerbatimOut}
+\dresse{TVapp}}
+
+\newenvironment{TVapp*}[1]{%
+\setcounter{TVnbis}{\theTVn}
+\setcounter{TVn}{#1}
+\VerbatimEnvironment\begin{VerbatimOut}[commandchars=\\£µ]{XCasTVapp.user}}%
+{\end{VerbatimOut}\dressetoile{TVapp}}
+
+
+
+
+
+
+
+
+
 
 
 \begin{VerbatimOut}{XCasTVI.giac}
@@ -1543,13 +2136,13 @@ maple_mode(0);
 read("XcasTVI.cxx");
 Sortie:=fopen("XCasmpTVI.mp");
 vect.xcas.user := read("XCasTVI.user");
-vxo := vect.xcas.user;
+vxo := vect.xcas.user;
 dim.vxo := dim(vxo);
 nbr.line.vxo := dim.vxo;
 Resultat:=cat(" "); 
-rslt := vxo[0]; RslT:=cat(rslt);
+rslt := vxo[0]; RslT:=cat(rslt);
 Resultat:=cat(Resultat,RslT);
-fprint(Sortie,Unquoted,Resultat);
+fprint(Sortie,Unquoted,Resultat);
 fclose(Sortie);
 \end{VerbatimOut}
 
@@ -1560,20 +2153,49 @@ fclose(Sortie);
 
 \newenvironment{TVI*}[1]%
 {\setcounter{TVnbis}{\theTVn}
-\setcounter{TVn}{#1}
+\setcounter{TVn}{#1}
 \VerbatimEnvironment\begin{VerbatimOut}[commandchars=\\£µ]{XCasTVI.user}}%
-{\end{VerbatimOut}\dressetoile{TVI}}
+{\end{VerbatimOut}\dressetoile{TVI}}
+
+
 
 
 
 
+\begin{VerbatimOut}{XCasTVIapp.giac}
+maple_mode(0);
+read("XcasTVIapp.cxx");
+Sortie:=fopen("XCasmpTVIapp.mp");
+vect.xcas.user := read("XCasTVIapp.user");
+vxo := vect.xcas.user;
+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{TVIapp}%
+{\VerbatimEnvironment\begin{VerbatimOut}[commandchars=\\£µ]{XCasTVIapp.user}}%
+{\end{VerbatimOut}\dresse{TVIapp}}
+
+
+\newenvironment{TVIapp*}[1]%
+{\setcounter{TVnbis}{\theTVn}
+\setcounter{TVn}{#1}
+\VerbatimEnvironment\begin{VerbatimOut}[commandchars=\\£µ]{XCasTVIapp.user}}%
+{\end{VerbatimOut}\dressetoile{TVIapp}}
+
+
 
 
 
 
 
 %%
-%% Zi end -> enjoy :)
+%% Zi end -> enjoy :)
 
diff --git a/Master/texmf-dist/doc/latex/tablor/tablor.pdf b/Master/texmf-dist/doc/latex/tablor/tablor.pdf index b1975418732..f9eb59537b8 100644 Binary files a/Master/texmf-dist/doc/latex/tablor/tablor.pdf 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 index 211b1339708..3678920eda9 100644 --- a/Master/texmf-dist/doc/latex/tablor/tablor.tex +++ b/Master/texmf-dist/doc/latex/tablor/tablor.tex @@ -25,7 +25,7 @@ keywordstyle =\color{0.2white}\usefont{OT1}{cmtt}{b}{n},basicstyle=\ttfamily,com \author{Guillaume \textsc{Connan} \\ \href{http://gconnan.free.fr}{http://gconnan.free.fr}\\ avec l'efficace participation de Jean-Michel \textsc{Boucart}} -\date{19 mars 2008 - Version 1.9} +\date{24 mars 2008 - Version 2.01} \begin{document} @@ -312,7 +312,12 @@ ou bien, selon les cas~: \end{lstlisting} -\subsection{Tableaux des variations} + + + +\section{Tableaux des variations} + +\subsection{Tableau standard} L'environnement s'appelle \texttt{TV}. On utilise une commande au format \texttt{XCAS}~: @@ -470,6 +475,51 @@ TVI([-10,+infinity],[-1,1],"f","x",x^2/(x^2-1),1,-1,\tv) + + +\subsection{Tableaux de variations avec approximation des zéros de la dérivée} + +Il n'est parfois pas possible d'obtenir une valeur formelle des zéros de la dérivée. On est donc +amené à rechercher une approximation numérique de ces zéros. Cela est possible grâce à la commande +\code{fsolve} de \Prog{XCAS} utilisée à bon escient. On appelera les environnements \code{TVapp} et +\code{TVIapp} ainsi que leurs associés étoilés. + +Voyons sur un exemple. + +\paragraph*{Exemple} + + +Soit $g$ la fonction $x\mapsto \ln(x)-x\E^{2-x} $. + +On étudie d'abord la fonction $x\mapsto g'(x)$~: + +\begin{lstlisting} +\begin{TVIapp} + TVIapp([0,+infinity],[0],"g'","x",diff(ln(x)-x*exp(2-x),x),1,0,\tv) +\end{TVIapp} +\end{lstlisting} + + +\begin{TVIapp} + TVIapp([0,+infinity],[0],"g'","x",diff(ln(x)-x*exp(2-x),x),1,0,\tv) + \end{TVIapp} + +On en déduit le tableau suivant~: + + +\begin{lstlisting} +\begin{TVapp*}{201} + TVapp([0,+infinity],[0],"g","x",ln(x)-x*exp(2-x),1,\tv) +\end{TVapp*} +\end{lstlisting} + + + +\begin{TVapp*}{201} +TVapp([0,+infinity],[0],"g","x",ln(x)-x*exp(2-x),1,\tv) +\end{TVapp*} + + \subsection{Tableaux de signes} @@ -491,7 +541,6 @@ TSa(-2,3,-1,5,\tv); \end{TSa} - \subsubsection*{Cas du produit d'un nombre quelconque de facteurs quelconques sur un intervalle quelconque} Certains cas pathologiques ne vont pas fonctionner, mais sinon, pour étudier le signe de @@ -1050,7 +1099,39 @@ TSc((x-10)*(x+10),[-10,10],\tv) +\begin{lstlisting} +On considère la fonction $f$ définie sur $\bbr$ par $f(x)=\frac{1}{2}\bigl(x+(1-x)\E^{2x}\bigr)$ + +Étudions sa dérivée~: + + +\begin{TVIapp*}{202} + TVIapp([-infinity,+infinity],[],"f'","x",diff(1/2*(x+(1-x)*exp(2*x)),x),1,0,\tv) + \end{TVIapp*} + +On en déduit le tableau de variation de $f$ + + +\begin{TVapp*}{203} + TVapp([-infinity,+infinity],[],"f","x",1/2*(x+(1-x)*exp(2*x)),1,\tv) + \end{TVapp*} +\end{lstlisting} + +On considère la fonction $f$ définie sur $\bbr$ par $f(x)=\frac{1}{2}\bigl(x+(1-x)\E^{2x}\bigr)$ + +Étudions sa dérivée~: + + +\begin{TVIapp*}{202} + TVIapp([-infinity,+infinity],[],"f'","x",diff(1/2*(x+(1-x)*exp(2*x)),x),1,0,\tv) + \end{TVIapp*} + +On en déduit le tableau de variation de $f$ + +\begin{TVapp*}{203} + TVapp([-infinity,+infinity],[],"f","x",1/2*(x+(1-x)*exp(2*x)),1,\tv) + \end{TVapp*} diff --git a/Master/texmf-dist/tex/latex/tablor/tablor.sty b/Master/texmf-dist/tex/latex/tablor/tablor.sty index 726ed6f45a5..4b5a9e57334 100644 --- a/Master/texmf-dist/tex/latex/tablor/tablor.sty +++ b/Master/texmf-dist/tex/latex/tablor/tablor.sty @@ -1,12 +1,12 @@ \NeedsTeXFormat{LaTeX2e}[1995/12/01] -\ProvidesPackage{tablor}[19/03/2008 v1.9 la machine à créer des tableaux de signes et variations] +\ProvidesPackage{tablor}[24/03/2008 v2.01 la machine à créer des tableaux de signes et variations] % \copyleft Connan le Barbare \copyright % avec l'efficace participation de Jean-Michel Boucart -%% Crée 10 environnements : +%% Crée 14 environnements : %% tableau de signes de 2 facteurs affines % \begin{TSa} % TSa(-2,3,-1,5,\tv); @@ -32,7 +32,19 @@ %TVI([-1,+infinity],[-1],"f","x",x2/sqrt(x+1)-1,1,2,\tv) %\end{TVI} %%% +% tableau de variations avec f' sans zéro formel +%\begin{TVapp} +% TVapp([0,+infinity],[0],"g","x",ln(x)-x*exp(2-x),1,\tv) +% \end{TVapp} % +% +% tableau de variations avec f' sans zéro formel +%\begin{TVIapp} +% TVIapp([0,+infinity],[0],"g","x",ln(x)-x*exp(2-x),1,0,\tv) +% \end{TVIapp} +% +% +%%% % et leurs pendants étoilés qui permet l'affichage intermédiaire du % fichier metapost pour le modifier % @@ -170,11 +182,437 @@ -%%% -% -%%% LES SCRIPTS GIAC/XCAS -% -%%% +%%% +% +%%% LES SCRIPTS GIAC/XCAS +% +%%% + + + + + + + +%% +%% Code giac/Xcas pour les Tableaux de Variations +%% + + +\begin{VerbatimOut}{XcasTV.cxx} +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(fp(Z[0])==0){"valBarre(btex 0 etex);"}else{" "}+ + 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==2){if(nz>2){intro+"beginTableau("+nmr+")"+ + l0+lsi+lsp+lsf+" +endTableau; +end +";}else{ +intro+"beginTableau("+nmr+")"+ + l0+ +lsi+lsf+" +endTableau; +end"; +} +}else{ 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";} +}} + + + +MetaLfc:=if(ftt==2){if(nz>2){" + +beginTableau("+nmr+")"+ + l0+lsi+lsp+lsf+" +endTableau; + +";}else{ +intro+"beginTableau("+nmr+")"+ + l0+ +lsi+lsf+" +endTableau; + +"; +} +}else{ if(ftt==0){if(nz>2){"beginTableau("+nmr+")"+ + l0+ +li+ +lp+ +lf ++" +endTableau; + +";}else{"beginTableau("+nmr+")"+ + l0+ +li+ +lf ++" +endTableau; + +";}}else{ +if(nz>2){"beginTableau("+nmr+")"+ + l0+ +lsi+lsp+lsf+ +li+ +lp+ +lf ++" +endTableau; + +";}else{"beginTableau("+nmr+")"+ + l0+ +lsi+lsf+ +li+ +lf ++" +endTableau; + +";} +}} + + +sortie:=fopen("XCasmpfc.mp"); +fprint(sortie,Unquoted,MetaLfc); +fclose(sortie); + + +return(MetaL); + }:; + +\end{VerbatimOut} + + + + + +%% +%% +%% Quand les solutions formelles de f'(x)=0 ne sont pas calculables +%% + + + +\begin{VerbatimOut}{XcasTVapp.cxx} + + + + + + + +TVapp(L,F,nom,nomv,f,ftt,nmr):={ + + +nl:=size(L); +f:=unapply(f,x); +fp:=fonction_derivee(f); +z0:=concat(L,F);z:=sort(z0); +nz:=size(z); +if(L==[-infinity,+infinity]){S:=seq(fsolve(fp(x),x,k/10,newton_solver),k=-100..100);} +else{if(L[0]==-infinity){S:=seq(fsolve(fp(x),x,k/10,newton_solver),k=-100..L[1]);} +else{if(L[1]==+infinity){S:=seq(fsolve(fp(x),x,k/10,newton_solver),k=L[0]..100);} +else{S:=seq(fsolve(fp(x),x,k/10,newton_solver),k=z[0]..z[nz-1])}}}; +si size(S)>0 alors pour j de 0 jusque size(S)-1 faire + kk:=(re(S[j])==S[j]);kok:=(evalf(S[j])>=L[0]) and (evalf(S[j])<=L[1]); + if(kk==1){if(kok==1){z:=append(z,simplifier(S[j]))}}; + fpour; +fsi; + + +S:=NULL; +S:=S,z[0]; +for(j:=1;j1e-15 or z[j]==0)){ + S:=S,z[j]}; +} +z:=[S]; + +Z:=sort(z); +nz:=size(Z); + +S:=NULL; +S:=S,Z[0]; +for(j:=1;j 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(fp(Z[0])==0){"valBarre(btex 0 etex);"}else{" "}+ + 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==2){if(nz>2){intro+"beginTableau("+nmr+")"+ + l0+lsi+lsp+lsf+" +endTableau; +end +";}else{ +intro+"beginTableau("+nmr+")"+ + l0+ +lsi+lsf+" +endTableau; +end"; +} +}else{ 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";} +}} + + + +MetaLfc:=if(ftt==2){if(nz>2){" + +beginTableau("+nmr+")"+ + l0+lsi+lsp+lsf+" +endTableau; + +";}else{ +intro+"beginTableau("+nmr+")"+ + l0+ +lsi+lsf+" +endTableau; + +"; +} +}else{ if(ftt==0){if(nz>2){"beginTableau("+nmr+")"+ + l0+ +li+ +lp+ +lf ++" +endTableau; + +";}else{"beginTableau("+nmr+")"+ + l0+ +li+ +lf ++" +endTableau; + +";}}else{ +if(nz>2){"beginTableau("+nmr+")"+ + l0+ +lsi+lsp+lsf+ +li+ +lp+ +lf ++" +endTableau; + +";}else{"beginTableau("+nmr+")"+ + l0+ +lsi+lsf+ +li+ +lf ++" +endTableau; + +";} +}} + + +sortie:=fopen("XCasmpfc.mp"); +fprint(sortie,Unquoted,MetaLfc); +fclose(sortie); + + +return(MetaL); + }:; + + + + + + + +\end{VerbatimOut} @@ -183,19 +621,25 @@ %% -%% Code giac/Xcas pour les Tableaux de Variations +%% Code giac/Xcas pour les Tableaux de Variations avec +%% Valeurs intermédiaires %% -\begin{VerbatimOut}{XcasTV.cxx} -TV(L,F,nom,nomv,f,ftt,nmr):={ + + + +\begin{VerbatimOut}{XcasTVI.cxx} + + +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])); + 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; @@ -210,9 +654,32 @@ pour u de 1 jusque nz-2 faire 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; + + +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)); @@ -220,42 +687,86 @@ 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(fp(Z[0])==0){"valBarre(btex 0 etex);"}else{" "}+ - 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(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){ 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;"} - }; } +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; -"} + + +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,"} +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(k0==1){"1);"}else{"0);"}+if(TestS==0){"valPos(btex $ "+ao+" $ etex,0.5);"}else{" "}; + - 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)); + 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)){ + 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); -"}}} - }; } + 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); -"}; + if(kz==1){"1);"}else{"0);"}; -intro:="input tableauVariation; - verbatimtex + +intro:=" +input tableauVariation; +verbatimtex %&latex \\documentclass{article} \\usepackage[upright]{fourier} @@ -264,21 +775,21 @@ intro:="input tableauVariation; \\begin{document} etex; -" +"; -MetaL:=if(ftt==2){if(nz>2){intro+"beginTableau("+nmr+")"+ +MetaL:= if(ftt==2){if(nz>2){intro+"beginTableau("+nmr+")"+ l0+lsi+lsp+lsf+" endTableau; -end -";}else{ +end";}else{ intro+"beginTableau("+nmr+")"+ l0+ lsi+lsf+" endTableau; end"; } -}else{ if(ftt==0){if(nz>2){intro+"beginTableau("+nmr+")"+ +}else{ +if(ftt==0){if(nz>2){intro+"beginTableau("+nmr+")"+ l0+ li+ lp+ @@ -308,25 +819,23 @@ lf +" endTableau; end";} -}} - - +}}; -MetaLfc:=if(ftt==2){if(nz>2){" -beginTableau("+nmr+")"+ +MetaLfc:= if(ftt==2){if(nz>2){"beginTableau("+nmr+")"+ l0+lsi+lsp+lsf+" endTableau; ";}else{ -intro+"beginTableau("+nmr+")"+ +"beginTableau("+nmr+")"+ l0+ lsi+lsf+" endTableau; "; } -}else{ if(ftt==0){if(nz>2){"beginTableau("+nmr+")"+ +}else{ +if(ftt==0){if(nz>2){"beginTableau("+nmr+")"+ l0+ li+ lp+ @@ -340,7 +849,6 @@ li+ lf +" endTableau; - ";}}else{ if(nz>2){"beginTableau("+nmr+")"+ l0+ @@ -360,7 +868,8 @@ lf endTableau; ";} -}} +}}; + sortie:=fopen("XCasmpfc.mp"); @@ -371,42 +880,68 @@ fclose(sortie); return(MetaL); }:; + + \end{VerbatimOut} + + + + %% -%% Code giac/Xcas pour les Tableaux de Variations avec -%% Valeurs intermédiaires +%% +%% Quand les solutions de f'(x)=0 ne sont pas formellement calculables %% +\begin{VerbatimOut}{XcasTVIapp.cxx} -\begin{VerbatimOut}{XcasTVI.cxx} + +TVIapp(L,F,nom,nomv,f,ftt,ao,nmr):={ -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; +z0:=concat(L,F);z:=sort(z0); +nz:=size(z); +if(L==[-infinity,+infinity]){S:=seq(fsolve(fp(x),x,k/10,newton_solver),k=-100..100);} +else{if(L[0]==-infinity){S:=seq(fsolve(fp(x),x,k/10,newton_solver),k=-100..L[1]);} +else{if(L[1]==+infinity){S:=seq(fsolve(fp(x),x,k/10,newton_solver),k=L[0]..100);} +else{S:=seq(fsolve(fp(x),x,k/10,newton_solver),k=z[0]..z[nz-1])}}}; +si size(S)>0 alors pour j de 0 jusque size(S)-1 faire + kk:=(re(S[j])==S[j]);kok:=(evalf(S[j])>=L[0]) and (evalf(S[j])<=L[1]); + if(kk==1){if(kok==1){z:=append(z,simplifier(S[j]))}}; + fpour; +fsi; + + +S:=NULL; +S:=S,z[0]; +for(j:=1;j1e-15 or z[j]==0)){ + S:=S,z[j]}; +} +z:=[S]; -Z:=sort(Z); + + +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; + +S:=NULL; +S:=S,Z[0]; +for(j:=1;j