diff options
author | Karl Berry <karl@freefriends.org> | 2008-10-10 23:15:06 +0000 |
---|---|---|
committer | Karl Berry <karl@freefriends.org> | 2008-10-10 23:15:06 +0000 |
commit | 41977cc6e6769af289a96d6846be398bdd94d133 (patch) | |
tree | e05fceb93f97d08ebc333e21ddc1f1f27c39200e /Master/texmf-dist/tex/latex | |
parent | a4e7b650b36655b60114b5bcf614496a9dfcfc31 (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')
-rw-r--r-- | Master/texmf-dist/tex/latex/tablor/tablor.sty | 418 |
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} } |