summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/tex/latex/tablor
diff options
context:
space:
mode:
authorKarl Berry <karl@freefriends.org>2008-10-10 23:15:06 +0000
committerKarl Berry <karl@freefriends.org>2008-10-10 23:15:06 +0000
commit41977cc6e6769af289a96d6846be398bdd94d133 (patch)
treee05fceb93f97d08ebc333e21ddc1f1f27c39200e /Master/texmf-dist/tex/latex/tablor
parenta4e7b650b36655b60114b5bcf614496a9dfcfc31 (diff)
tablor 4.0 (8oct08)
git-svn-id: svn://tug.org/texlive/trunk@10915 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/tex/latex/tablor')
-rw-r--r--Master/texmf-dist/tex/latex/tablor/tablor.sty418
1 files changed, 326 insertions, 92 deletions
diff --git a/Master/texmf-dist/tex/latex/tablor/tablor.sty b/Master/texmf-dist/tex/latex/tablor/tablor.sty
index ebcb6445802..b759961e1a3 100644
--- a/Master/texmf-dist/tex/latex/tablor/tablor.sty
+++ b/Master/texmf-dist/tex/latex/tablor/tablor.sty
@@ -1,5 +1,5 @@
\NeedsTeXFormat{LaTeX2e}[1995/12/01]
-\ProvidesPackage{tablor}[12/06/2008 v3.00 la machine a creer des tableaux de signes et variations]
+\ProvidesPackage{tablor}[08/10/2008 v4.00 la machine a creer des tableaux de signes et variations]
% \copyleft Connan le Barbare (aka Guillaume Connan) \copyright
% This work may be distributed and/or mofified under the conditions
@@ -18,29 +18,29 @@
% %%%%%% Pour des tableaux de plus de 2 facteurs
%
% \begin{TS}
-% TS("P",[-2*x+3,x^2-1,x^2+1,x-1,x^2-2],[a,b],\tv);
+% TS("P",[-2*x+3,x^2-1,x^2+1,x-1,x^2-2],[a,b],n,\tv);
% \end{TS}
%
% pour les tableaux de signes avec quotient
%\begin{TSq}
-%TSq("Q",[-2*x+3,-4*x+5],[x^2-16,x-2],[a,b],\tv)
+%TSq("Q",[-2*x+3,-4*x+5],[x^2-16,x-2],[a,b],n,\tv)
%%\end{TSq}
% 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,n,\tv)
% \end{TV}
%
% tableau de variation avec zones interdites
%
% \begin{TVZ}
-% TVZ([-infinity,+infinity],[],[[-1,1]],"f","x",sqrt(x^2-1),1,\tv)
+% TVZ([-infinity,+infinity],[],[[-1,1]],"f","x",sqrt(x^2-1),1,n,\tv)
% \end{TVZ}
%
%
% tableau avec valeurs intermediares
%\begin{TVI}
-%TVI([-1,+infinity],[-1],"f","x",x2/sqrt(x+1)-1,1,2,\tv)
+%TVI([-1,+infinity],[-1],"f","x",x2/sqrt(x+1)-1,1,2,n,\tv)
%\end{TVI}
%%%
% tableau de variations avec f' sans zero formel
@@ -62,12 +62,12 @@
%
% Courbes parametrees
% \begin{TVP}
-% TVP([-infinity,+infinity],[[-1,2],[-1]],["x","y"],"t",[t^2/((t+1)*(t-2)),t^2*(t+2)/(t+1)],1,0,\tv)
+% TVP([-infinity,+infinity],[[-1,2],[-1]],["x","y"],"t",[t^2/((t+1)*(t-2)),t^2*(t+2)/(t+1)],1,n,\tv)
% \end{TVP}
%
%
% \begin{TVP}
-% TVP([0,pi/2],[[],[]],["x","y"],"t",[2*cos(t),sin(2*t)],1,1,\tv)
+% TVP([0,pi/2],[[],[]],["x","y"],"t",[2*cos(t),sin(2*t)],1,t,\tv)
% \end{TVP}
% %
@@ -102,6 +102,7 @@
\newboolean{windows}\setboolean{windows}{false}
+
%% on configure tablor dans un fichier exterieur pour la plateforme
%% et l'editeur
@@ -162,7 +163,7 @@
%% Donne comme prefixe aux tableaux le prefixe courant
%% Peut-être modifie par \initablor
-\newcommand{\Tableaux}{\jobname}
+\newcommand{\nomtravail}{\jobname}
%% initialise les compteurs
@@ -179,17 +180,17 @@
\newcommand{\initablor}[1][\jobname]{%
-\renewcommand{\Tableaux}{#1}% Arret du nom des tableaux
+\renewcommand{\nomtravail}{#1}% Arret du nom des tableaux
\setcounter{TVn}{0}% Initialisation du compteur de tableaux.
\ifthenelse{\boolean{xcas}}% Avec l'option XCas
-{\IfFileExists{\Tableaux.Tab.mp}% Si Tableaux.mp est present...
- {\immediate\write18{\rem \Tableaux.Tab.mp}}% le detruire
+{\IfFileExists{\nomtravail.Tab.mp}% Si Tableaux.mp est present...
+ {\immediate\write18{\rem \nomtravail.Tab.mp}}% le detruire
{}%
- \immediate\write18{\cp enteteMP.cfg \Tableaux.Tab.mp}% Reconstituer l'entête de Tableaux.mp
+ \immediate\write18{\cp enteteMP.cfg \nomtravail.Tab.mp}% Reconstituer l'entête de Tableaux.mp
}
-{\IfFileExists{\Tableaux.Tab.mp}% Sans l'option XCas, si
+{\IfFileExists{\nomtravail.Tab.mp}% Sans l'option XCas, si
% Tableaux.mp existe
-{\immediate\write18{mpost -interaction=batchmode \Tableaux.Tab}}% l'executer pour reconstituer les figures
+{\immediate\write18{mpost -interaction=batchmode \nomtravail.Tab}}% l'executer pour reconstituer les figures
{\PackageWarning{tablor}{Pas de source metapost pour creer les tableaux.}}% sinon message d'erreur
% (mais pas d'arret car les tableaux
% peuvent être presents )
@@ -224,12 +225,52 @@
\begin{VerbatimOut}{XcasTV.cxx}
-TV(L,F,nom,nomv,f,ftt,nmr):={
+TV(L,F,nom,nomv,f,ftt,trigo,nmr):={
nl:=size(L);
f:=unapply(f,x);
fp:=fonction_derivee(f);
Z:=concat(L,F);
+S:=[];
+
+
+if(trigo==t){
+all_trig_solutions:=1;
+reset_solve_counter(-1,-1);
+SS:=resoudre(factor(simplifier(fp(x))),x);
+ns:=size(SS);
+for(k:=0;k<ns;k++){
+m:=0;
+while(evalf(simplifier(subst(SS[k],n_1=m)))<=evalf(L[nl-1])){
+S:=concat(S,simplifier(subst(SS[k],n_1=m)));m:=m+1;
+};m:=-1;
+while(evalf(subst(SS[k],n_1=m))>=L[0]){
+S:=concat(S,simplifier(subst(SS[k],n_1=m)));m:=m-1;
+}
+}
+}else{
S:=resoudre(fp(x),x);
+}
+
+
+ si size(S)>0 alors pour j de 0 jusque size(S)-1 faire
+ qq:=member(simplifier(S[j]),Z)==0;
+ kk:=(evalf(S[j])>=evalf(L[0])) and (evalf(S[j])<=evalf(L[nl-1]));
+ if(kk==1){if(qq==1){Z:=append(Z,simplifier(S[j]))}};
+ fpour
+ fsi;
+Z:=sort(Z);
+nz:=size(Z);
+
+
+ tantque evalf(Z[0])==evalf(Z[1]) faire Z:=Z[1..nz-1];nz:=size(Z);
+ ftantque;
+
+
+
+
+
+
+
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]))};
@@ -360,7 +401,7 @@ fclose(sortie);
\begin{VerbatimOut}{XcasTVZ.cxx}
-TVZ(L,F,FF,nom,nomv,f,ftt,nmr):={
+TVZ(L,F,FF,nom,nomv,f,ftt,trigo,nmr):={
nl:=size(L);
nf:=size(FF);
Ff:=NULL;IMIN:=NULL;IMAX:=NULL;
@@ -382,7 +423,32 @@ for(k:=0;k<nf;k++){
Z:=concat(Z,FF[k]);
}
+S:=[];
+
+
+if(trigo==t){
+all_trig_solutions:=1;
+reset_solve_counter(-1,-1);
+SS:=resoudre(factor(simplifier(fp(x))),x);
+ns:=size(SS);
+for(k:=0;k<ns;k++){
+m:=0;
+while(evalf(simplifier(subst(SS[k],n_1=m)))<=evalf(L[nl-1])){
+S:=concat(S,simplifier(subst(SS[k],n_1=m)));m:=m+1;
+};m:=-1;
+while(evalf(subst(SS[k],n_1=m))>=L[0]){
+S:=concat(S,simplifier(subst(SS[k],n_1=m)));m:=m-1;
+}
+}
+}else{
S:=resoudre(fp(x),x);
+}
+
+
+
+
+
+
si size(S)>0 alors pour j de 0 jusque size(S)-1 faire
for(k:=0;k<nf;k++){
kk:=(evalf(S[j])>=evalf(L[0])) and (evalf(S[j])<=evalf(L[nl-1]));
@@ -584,10 +650,22 @@ 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])}}};
+
+
+
+
+
+
+S:=NULL;
+if(L==[-infinity,+infinity]){j:=[seq(-100+k,k=0..200)]minus F;for k in j do S:=S,fsolve(fp(x),x,k/10,newton_solver);end_for}
+else{if(L[0]==-infinity){j:=[seq(k,k=100..floor(L[1]))] minus F;for k in j do S:=S,fsolve(fp(x),x,k/10,newton_solver);end_for}
+else{if(L[1]==+infinity){j:=[seq(k,k=floor(L[0])..100)] minus F;for k in j do S:=S,fsolve(fp(x),x,k/10,newton_solver);end_for;}
+else{ j:=[seq(k,k=floor(z[0])..floor(z[nz-1]))] minus F;for k in j do S:=S,fsolve(fp(x),x,k/10,newton_solver);end_for; }}};
+
+
+
+
+
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]))}};
@@ -746,12 +824,32 @@ fclose(sortie);
\begin{VerbatimOut}{XcasTVI.cxx}
-TVI(L,F,nom,nomv,f,ftt,ao,nmr):={
+TVI(L,F,nom,nomv,f,ftt,ao,trigo,nmr):={
nl:=size(L);
f:=unapply(f,x);
fp:=fonction_derivee(f);
Z:=concat(L,F);
+S:=[];
+
+
+if(trigo==t){
+all_trig_solutions:=1;
+reset_solve_counter(-1,-1);
+SS:=resoudre(factor(simplifier(fp(x))),x);
+ns:=size(SS);
+for(k:=0;k<ns;k++){
+m:=0;
+while(evalf(simplifier(subst(SS[k],n_1=m)))<=evalf(L[nl-1])){
+S:=concat(S,simplifier(subst(SS[k],n_1=m)));m:=m+1;
+};m:=-1;
+while(evalf(subst(SS[k],n_1=m))>=L[0]){
+S:=concat(S,simplifier(subst(SS[k],n_1=m)));m:=m-1;
+}
+}
+}else{
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]))};
@@ -963,10 +1061,24 @@ 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])}}};
+
+
+
+
+
+S:=NULL;
+if(L==[-infinity,+infinity]){j:=[seq(-100+k,k=0..200)]minus F;for k in j do S:=S,fsolve(fp(x),x,k/10,newton_solver);end_for}
+else{if(L[0]==-infinity){j:=[seq(k,k=100..floor(L[1]))] minus F;for k in j do S:=S,fsolve(fp(x),x,k/10,newton_solver);end_for}
+else{if(L[1]==+infinity){j:=[seq(k,k=floor(L[0])..100)] minus F;for k in j do S:=S,fsolve(fp(x),x,k/10,newton_solver);end_for;}
+else{ j:=[seq(k,k=floor(z[0])..floor(z[nz-1]))] minus F;for k in j do S:=S,fsolve(fp(x),x,k/10,newton_solver);end_for; }}};
+
+
+
+
+
+
+
+
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]))}};
@@ -1186,8 +1298,6 @@ fclose(sortie);
\begin{VerbatimOut}{XcasTVP.cxx}
-
-
TVP(L,F,nom,nomv,ff,ftt,trigo,nmr):={
//local Z,LLL,FFF,nl,fp,f,S,d,t,ns,k,m,x,j,kk,nz,u,l0;
nl:=size(L);
@@ -1196,61 +1306,71 @@ S:=[];
f:=ff;
Z:=[];
LLL:=[];
+
+
+all_trig_solutions:=1;
+reset_solve_counter(-1,-1);
+
for(d:=0;d<=1;d++){
f:=subst(f,f[d]=unapply(f[d],t));
fp:=append(fp,fonction_derivee(f[d]));
LLL:=concat(L,F[d]);
Z:=LLL union Z;
+SS:=resoudre(factor(simplifier(fp[d](t))),t);
+ns:=size(SS);
-ns:=size(resoudre(factor(simplifier(fp[d](t))),t));
-reset_solve_counter(0);
for(k:=0;k<ns;k++){
-if(trigo==1){
-all_trig_solutions:=1;
-reset_solve_counter(-1,-1);m:=0;
-while(simplifier(subst(resoudre(factor(simplifier(fp[d](t))),t)[k],n_1=m))<=evalf(L[nl-1])){
-reset_solve_counter(-1,-1);
-S:=concat(S,simplifier(subst(resoudre(factor(simplifier(fp[d](t))),t)[k],n_1=m)));m:=m+1;
-reset_solve_counter(-1,-1);
+if(trigo==t){
+m:=0;
+while(evalf(simplifier(subst(SS[k],n_1=m)))<=evalf(L[nl-1])){
+
+S:=concat(S,simplifier(subst(SS[k],n_1=m)));m:=m+1;
+
};m:=-1;
-while(evalf(subst(resoudre(factor(simplifier(fp[d](t))),t)[k],n_1=m))>=L[0]){
-reset_solve_counter(-1,-1);
-S:=concat(S,simplifier(subst(resoudre(factor(simplifier(fp[d](t))),t)[k],n_1=m)));m:=m-1;
-reset_solve_counter(-1,-1);
+while(evalf(subst(SS[k],n_1=m))>=L[0]){
+
+S:=concat(S,simplifier(subst(SS[k],n_1=m)));m:=m-1;
+
}
}else{
-S:=concat(S,resoudre(factor(simplifier(fp[d](x))),x));
+S:=concat(S,SS);
}
}
- si size(S)>0 alors pour j de 0 jusque size(S)-1 faire
+
+
+ si size(S)>0 alors pour j de 0 jusque size(S)-1 faire
qq:=member(simplifier(S[j]),Z)==0;
kk:=(evalf(S[j])>=evalf(L[0])) and (evalf(S[j])<=evalf(L[nl-1]));
if(kk==1){if(qq==1){Z:=append(Z,simplifier(S[j]))}};
fpour
fsi;
-
-Z:=sort(Z);
+Z:=sort(Z);
nz:=size(Z);
-
- tantque simplifier(Z[0])==simplifier(Z[1]) faire Z:=Z[1..nz-1];nz:=size(Z);
+ tantque evalf(Z[0])==evalf(Z[1]) faire Z:=Z[1..nz-1];nz:=size(Z);
ftantque;
+
+
+
nz:=size(Z);
u:=1;
tantque (u<nz-2) and (nz>2) faire
- tantque Z[u]==Z[u+1] faire
+ tantque evalf(Z[u])==evalf(Z[u+1]) faire
Z:=augment(Z[0..u-1],Z[u+1..nz-1]);nz:=size(Z);
ftantque;
u:=u+1;
ftantque;
- };
-Z:=sort(Z);
+ };
+
+Z:=sort(Z);
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;
@@ -1263,14 +1383,15 @@ for(d:=0;d<=1;d++){
FFF[d]:=concat(F[d],[-infinity,+infinity]);
k0:= evalf(limite(f[d](x),x=Z[0],1))> evalf(limite(f[d](x),x=Z[1],-1));
kz:=evalf(limite(f[d](x),x=Z[nz-1],-1))> evalf(limite(f[d](x),x=Z[nz-2],1));
-
+//}
+//$
lsi[d]:=lsic+nom[d]+"'("+nomv+")}$ etex);"+if(member(Z[0],FFF[d])==0){"valBarre(btex $"+latex(simplifier(fp[d](Z[0])))+"$ etex);"}else{if(Z[0]==-infinity){" "}else{"nonDefBarre;
"}}+
if(Z[0]==-infinity){if(sign(evalf(fp[d](if(Z[1]==+infinity){0}else{Z[1]-10^(-5)})))==1){"plus;"}else{"moins;"}}else{if(member(Z[0],F[d])==0){
if(sign(fp[d](Z[0]+10^(-5)))==1){"plus;"}else{"moins;"}}else{
if(sign(fp[d]((Z[0]+10^(-5))))==1){"plus;"}else{"moins;"} }}
-
-if(nz>2){ for(r:=1; r<=nz-2;r++){ ksp:=evalf(fp[d](Z[r]+0.01))>0;
+
+if(nz>2){ for(r:=1; r<=nz-2;r++){ ksp:=evalf(fp[d](Z[r]+0.01))>0;
lsp[d]:=lsp[d]+if(member(Z[r],F[d])==0){"valBarre(btex $"+latex(simplifier(fp[d](Z[r])))+"$ etex);"}else{"nonDefBarre;"}+
if(ksp==1){"plus;"}else{"moins;"}
}; }
@@ -1298,15 +1419,17 @@ lsf[d]:=if(member(Z[nz-1],FFF[d])==0){"valBarre(btex $"+latex(simplifier(fp[d](Z
for(d:=0;d<=1;d++){
K0[d]:= evalf(limite(f[d](x),x=Z[0],1))> evalf(limite(f[d](x),x=Z[1],-1));
Kz[d]:=evalf(limite(f[d](x),x,Z[nz-1],-1))> evalf(limite(f[d](x),x,Z[nz-2],1));
+//{
+//$
lm0[d]:=limite(f[d](x),x,Z[0],1)==-infinity;
li[d]:=lvic+nom[d]+"}$ etex);"+
if(member(Z[0],F[d])==0){"valPos(btex $"+if(lm0[d]==1){"-\\infty"}else{latex(simplifier(limite(f[d](x),x,Z[0],1)))}+"$ etex,"}
- else{"nonDefBarre;limDroite(btex $"+if(lm0[d]==1){"-\\infty"}else{latex(simplifier(limite(f[d](x),x,Z[0],1)))}+"$ etex,"}+
+ else{"nonDefBarre;limDroite(btex $"+if(lm0[d]==1){"-\\infty"}else{latex(simplifier(limite(f[d](x),x,Z[0],1)))}+"$ etex,"}+
if(K0[d]==1){"1"}else{"0"}+
");";
-
+
if(nz>2){ for(r:=1; r<=nz-2;r++){ krm[d]:=evalf(limite(f[d](x),x=Z[r-1],1))< evalf(limite(f[d](x),x=Z[r],-1));
- krp[d]:=evalf(limite(f[d](x),x=Z[r],1))> evalf(limite(f[d](x),x,Z[r+1],-1)) ;
+ krp[d]:=evalf(limite(f[d](x),x=Z[r],1))> evalf(limite(f[d](x),x,Z[r+1],-1)) ;
lmrm[d]:=limite(f[d](x),x,Z[r],-1)==-infinity;lmrp[d]:=limite(f[d](x),x,Z[r],1)==-infinity;
lp[d]:=lp[d]+if(member(Z[r],F[d])){
"limGauche(btex
@@ -1318,9 +1441,9 @@ lm0[d]:=limite(f[d](x),x,Z[0],1)==-infinity;
}; }
lnz[d]:=limite(f[d](x),x=Z[nz-1],-1)==-infinity;
- lf[d]:=if(member(Z[nz-1],F[d])==0){"valPos(btex $"+if(lnz[d]==1){"-\\infty"}else{latex(simplifier(limite(f[d](x),x,Z[nz-1],-1)))}+"$ etex,"}else{"nonDefBarre;limGauche(btex $"+if(lnz[d]==1){"-\\infty"}else{latex(simplifier(limite(f[d](x),x,Z[nz-1],-1)))}+"$ etex,"}+
+ lf[d]:=if(member(Z[nz-1],F[d])==0){"valPos(btex $"+if(lnz[d]==1){"-\\infty"}else{latex(simplifier(limite(f[d](x),x,Z[nz-1],-1)))}+"$ etex,"}else{"nonDefBarre;limGauche(btex $"+if(lnz[d]==1){"-\\infty"}else{latex(simplifier(limite(f[d](x),x,Z[nz-1],-1)))}+"$ etex,"}+
if(Kz[d]==1){"1);"}else{"0);
-"};
+"};
@@ -1403,8 +1526,6 @@ fprint(sortie,Unquoted,MetaLfc);
fclose(sortie);
}:;
-
-
\end{VerbatimOut}
@@ -1420,22 +1541,58 @@ fclose(sortie);
\begin{VerbatimOut}{XcasTabSignL.cxx}
-TS(nomf,L,D,nmr):={
+TS(nomf,L,D,trigo,nmr):={
L:=apply(f->unapply(f,x),L)
n:=size(L);
Z:=NULL;
-
+nl:=size(L);
+S:=[];
mini:=D[0]; maxi:=D[1];
pour k de 0 jusque n-1 faire
- S:=resoudre(L[k](x),x);
+
+
+
+
+if(trigo==t){
+all_trig_solutions:=1;
+reset_solve_counter(-1,-1);
+SS:=resoudre(factor(simplifier(L[k](x))),x);
+ns:=size(SS);
+for(j:=0;j<ns;j++){
+m:=0;
+while(evalf(simplifier(subst(SS[j],n_1=m)))<=evalf(maxi)){
+S:=concat(S,simplifier(subst(SS[j],n_1=m)));m:=m+1;
+};m:=-1;
+while(evalf(subst(SS[j],n_1=m))>=evalf(mini)){
+S:=concat(S,simplifier(subst(SS[j],n_1=m)));m:=m-1;
+}
+}
+
+}else{
+S:=resoudre(L[k](x),x);
+}
+
+
+
+
si size(S)>0 alors pour j de 0 jusque size(S)-1 faire
if(S[j]>mini and S[j]<maxi){Z:=Z,simplifier(S[j]);}
fpour;
fsi;
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;
fsi;
@@ -1537,7 +1694,7 @@ fclose(sortie);
\begin{VerbatimOut}{XcasTabSignQ.cxx}
-TSq(nomf,L,Fo,D,nmr):={
+TSq(nomf,L,Fo,D,trigo,nmr):={
L:=apply(f->unapply(f,x),L);
Fo:=apply(f->unapply(f,x),Fo);
L:=concat(L,Fo);
@@ -1546,10 +1703,36 @@ Z:=NULL;
m:=size(Fo);
F:=NULL;FF:=NULL;
mini:=D[0]; maxi:=D[1];
-
+S:=[];
+SF:=[];
pour k de 0 jusque n-1 faire
- S:=resoudre(L[k](x),x);
+
+
+
+if(trigo==t){
+all_trig_solutions:=1;
+reset_solve_counter(-1,-1);
+SS:=resoudre(factor(simplifier(L[k](x))),x);
+ns:=size(SS);
+for(j:=0;j<ns;j++){
+mm:=0;
+while(evalf(simplifier(subst(SS[j],n_1=mm)))<=evalf(maxi)){
+S:=concat(S,simplifier(subst(SS[j],n_1=mm)));mm:=mm+1;
+};mm:=-1;
+while(evalf(subst(SS[j],n_1=mm))>=evalf(mini)){
+S:=concat(S,simplifier(subst(SS[j],n_1=mm)));mm:=mm-1;
+}
+}
+
+}else{
+S:=resoudre(L[k](x),x);
+}
+
+
+
+
+
si size(S)>0 alors pour j de 0 jusque size(S)-1 faire
if(S[j]>mini and S[j]<maxi){Z:=Z,simplifier(S[j]);}
fpour;
@@ -1558,7 +1741,28 @@ fpour;
pour k de 0 jusque m-1 faire
- SF:=resoudre(Fo[k](x),x);
+
+
+
+if(trigo==1){
+all_trig_solutions:=1;
+reset_solve_counter(-1,-1);
+SSF:=resoudre(factor(simplifier(Fo[k](x))),x);
+nsf:=size(SSF);
+for(j:=0;j<nsf;j++){
+mm:=0;
+while(evalf(simplifier(subst(SSF[j],n_1=mm)))<=evalf(maxi)){
+SF:=concat(SF,simplifier(subst(SSF[j],n_1=mm)));mm:=mm+1;
+};mm:=-1;
+while(evalf(subst(SSF[j],n_1=mm))>=evalf(mini)){
+SF:=concat(SF,simplifier(subst(SSF[j],n_1=mm)));mm:=mm-1;
+}
+}
+
+}else{
+SF:=resoudre(Fo[j](x),x);
+}
+
si size(SF)>0 alors pour j de 0 jusque size(SF)-1 faire
FF:=FF,simplifier(SF[j]);
if(SF[j]>mini and SF[j]<maxi){F:=F,simplifier(SF[j]);}
@@ -1756,7 +1960,7 @@ fclose(sortie);
-%%
+%%$
%% Code giac/Xcas pour les Tableaux de Signes d'expression ne contenant
%% qu'un seul terme
@@ -1764,11 +1968,38 @@ fclose(sortie);
\begin{VerbatimOut}{XcasTSc.cxx}
-TSc(g,D,nmr):={
+TSc(g,D,trigo,nmr):={
f:=unapply(g,x);
Z:=NULL;
mini:=D[0]; maxi:=D[1];lm:=" ";
+
+S:=[];
+
+
+
+if(trigo==t){
+all_trig_solutions:=1;
+reset_solve_counter(-1,-1);
+SS:=resoudre(factor(simplifier(f(x))),x);
+ns:=size(SS);
+for(j:=0;j<ns;j++){
+m:=0;
+while(evalf(simplifier(subst(SS[j],n_1=m)))<=evalf(maxi)){
+S:=concat(S,simplifier(subst(SS[j],n_1=m)));m:=m+1;
+};m:=-1;
+while(evalf(subst(SS[j],n_1=m))>=evalf(mini)){
+S:=concat(S,simplifier(subst(SS[j],n_1=m)));m:=m-1;
+}
+}
+
+}else{
S:=resoudre(f(x),x);
+}
+
+
+
+
+
if(size(S)==0){
l0:="val(btex $"+latex(D[0])+"$ etex);val(btex $"+latex(D[1])+"$ etex);";
li:=if(mini!=-infinity and f(mini)==0){"
@@ -1856,14 +2087,16 @@ fclose(sortie);
-%%
+%%$
%%
%% traitement des fichiers produits par giac/xcas
%%
%%
+% pour l'échelle des tableaux taper \ech{facteur de réduction}
-
+\newcommand\echelle{1}
+\newcommand\ech[1]{\renewcommand\echelle{#1}}
\newcommand{\dresse}[1]{%
@@ -1872,24 +2105,25 @@ fclose(sortie);
% exporter le source mp
% puis lancer metapost pour creer
% l'image du tableau
- \immediate\write18{\cat XCasmpfc.mp >> \Tableaux.Tab.mp}
- \immediate\write18{\cat enteteMP.cfg >> \Tableaux.Tab#1.mp}
- \immediate\write18{\cat XCasmpfc.mp >> \Tableaux.Tab#1.mp}
- \immediate\write18{\cat queue.mp >> \Tableaux.Tab#1.mp}
- \immediate\write18{mpost -jobname=\Tableaux.Tab \Tableaux.Tab#1.mp}
- \immediate\write18{\rem \Tableaux.Tab#1.mp}
+ \immediate\write18{\cat XCasmpfc.mp >> \nomtravail.Tab.mp}
+ \immediate\write18{\cat enteteMP.cfg >> \nomtravail.Tab#1.mp}
+ \immediate\write18{\cat XCasmpfc.mp >> \nomtravail.Tab#1.mp}
+ \immediate\write18{\cat queue.mp >> \nomtravail.Tab#1.mp}
+ \immediate\write18{mpost -jobname=\nomtravail.Tab \nomtravail.Tab#1.mp}
+ \immediate\write18{\rem \nomtravail.Tab#1.mp}
}%
{% sinon, si le tableau est absent, alerte.
- \IfFileExists{\Tableaux.Tab.\theTVn}{}{%
+ \IfFileExists{\nomtravail.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
+ tableaux, soit le fichier \nomtravail.Tab.mp, soit disposer de
XCas.}}}
\begin{center}
- \includegraphics{\Tableaux.Tab.\theTVn}
+ \includegraphics[scale=\echelle]{\nomtravail.Tab.\theTVn}
\end{center}
-\stepcounter{TVn}}
+\stepcounter{TVn}
+}
%%
@@ -1900,34 +2134,34 @@ fclose(sortie);
\newcommand{\dressetoile}[1]{%
-\IfFileExists{\Tableaux.Tab.\theTVn}{% Test sur l'existence du tableau
+\IfFileExists{\nomtravail.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 >> \nomtravail.Tab.mp}}
% Si non, lancement des operations de fabrication
{\executGiacmp{XCas#1.giac}%
\immediate\write18{\editeur XCasmpfc.mp }
% Modification avec l'editeur choisi
-\immediate\write18{\cat XCasmpfc.mp >> \Tableaux.Tab.mp}
+\immediate\write18{\cat XCasmpfc.mp >> \nomtravail.Tab.mp}
\immediate\write18{\cp XCasmpfc.mp TSav-\theTVn.mp} % Sauvegarde du
% source mp sur le disque pour une
% inclusion ulterieure dans Tableaux.mp.
-\immediate\write18{\cat enteteMP.cfg >> \Tableaux.Tab#1.mp}
-\immediate\write18{\cat XCasmpfc.mp >> \Tableaux.Tab#1.mp}} % Inclusion du
+\immediate\write18{\cat enteteMP.cfg >> \nomtravail.Tab#1.mp}
+\immediate\write18{\cat XCasmpfc.mp >> \nomtravail.Tab#1.mp}} % Inclusion du
% source dans le
% fichier
% Tableaux
-\immediate\write18{\cat queue.mp >> \Tableaux.Tab#1.mp}
-\immediate\write18{mpost -jobname=\Tableaux.Tab \Tableaux.Tab#1.mp}% Reconstitution des tableaux
+\immediate\write18{\cat queue.mp >> \nomtravail.Tab#1.mp}
+\immediate\write18{mpost -jobname=\nomtravail.Tab \nomtravail.Tab#1.mp}% Reconstitution des tableaux
% et creation du dernier. L'option
% pallie l'absence de end en fin de
% fichier
-\immediate\write18{\rem \Tableaux.Tab#1.mp}
+\immediate\write18{\rem \nomtravail.Tab#1.mp}
\begin{center}
- \includegraphics{\Tableaux.Tab.\theTVn}
+ \includegraphics[scale=\echelle]{\nomtravail.Tab.\theTVn}
\end{center}
-
+\ech{1}
\setcounter{TVn}{\theTVnbis} % Restauration du compteur TVn
}
@@ -2182,7 +2416,7 @@ read("XCasTVIapp.user");
%% pour nettoyer les fichiers auxiliaires
-\AtEndDocument{\immediate\write18{\cat queue.mp >> \Tableaux.Tab.mp}
+\AtEndDocument{\immediate\write18{\cat queue.mp >> \nomtravail.Tab.mp}
}