From e0c6872cf40896c7be36b11dcc744620f10adf1d Mon Sep 17 00:00:00 2001 From: Norbert Preining Date: Mon, 2 Sep 2019 13:46:59 +0900 Subject: Initial commit --- macros/latex/contrib/tablor/Figures/TSav-105.mp | 22 + macros/latex/contrib/tablor/Figures/capture.eps | 1509 +++++++++ macros/latex/contrib/tablor/Figures/tablor_Tab.0 | 168 + macros/latex/contrib/tablor/Figures/tablor_Tab.1 | 168 + macros/latex/contrib/tablor/Figures/tablor_Tab.10 | 94 + macros/latex/contrib/tablor/Figures/tablor_Tab.105 | 184 ++ macros/latex/contrib/tablor/Figures/tablor_Tab.11 | 106 + macros/latex/contrib/tablor/Figures/tablor_Tab.12 | 203 ++ macros/latex/contrib/tablor/Figures/tablor_Tab.13 | 358 +++ macros/latex/contrib/tablor/Figures/tablor_Tab.14 | 207 ++ macros/latex/contrib/tablor/Figures/tablor_Tab.15 | 207 ++ macros/latex/contrib/tablor/Figures/tablor_Tab.16 | 233 ++ macros/latex/contrib/tablor/Figures/tablor_Tab.17 | 233 ++ macros/latex/contrib/tablor/Figures/tablor_Tab.18 | 169 + macros/latex/contrib/tablor/Figures/tablor_Tab.19 | 126 + macros/latex/contrib/tablor/Figures/tablor_Tab.2 | 87 + macros/latex/contrib/tablor/Figures/tablor_Tab.20 | 102 + macros/latex/contrib/tablor/Figures/tablor_Tab.21 | 362 +++ macros/latex/contrib/tablor/Figures/tablor_Tab.22 | 341 ++ macros/latex/contrib/tablor/Figures/tablor_Tab.23 | 155 + macros/latex/contrib/tablor/Figures/tablor_Tab.24 | 332 ++ macros/latex/contrib/tablor/Figures/tablor_Tab.25 | 122 + macros/latex/contrib/tablor/Figures/tablor_Tab.26 | 286 ++ macros/latex/contrib/tablor/Figures/tablor_Tab.27 | 200 ++ macros/latex/contrib/tablor/Figures/tablor_Tab.28 | 78 + macros/latex/contrib/tablor/Figures/tablor_Tab.29 | 93 + macros/latex/contrib/tablor/Figures/tablor_Tab.3 | 146 + macros/latex/contrib/tablor/Figures/tablor_Tab.30 | 108 + macros/latex/contrib/tablor/Figures/tablor_Tab.31 | 156 + macros/latex/contrib/tablor/Figures/tablor_Tab.32 | 138 + macros/latex/contrib/tablor/Figures/tablor_Tab.33 | 115 + macros/latex/contrib/tablor/Figures/tablor_Tab.35 | 88 + macros/latex/contrib/tablor/Figures/tablor_Tab.36 | 156 + macros/latex/contrib/tablor/Figures/tablor_Tab.37 | 111 + macros/latex/contrib/tablor/Figures/tablor_Tab.38 | 137 + macros/latex/contrib/tablor/Figures/tablor_Tab.39 | 143 + macros/latex/contrib/tablor/Figures/tablor_Tab.4 | 73 + macros/latex/contrib/tablor/Figures/tablor_Tab.40 | 161 + macros/latex/contrib/tablor/Figures/tablor_Tab.41 | 162 + macros/latex/contrib/tablor/Figures/tablor_Tab.42 | 114 + macros/latex/contrib/tablor/Figures/tablor_Tab.43 | 323 ++ macros/latex/contrib/tablor/Figures/tablor_Tab.44 | 144 + macros/latex/contrib/tablor/Figures/tablor_Tab.45 | 123 + macros/latex/contrib/tablor/Figures/tablor_Tab.47 | 128 + macros/latex/contrib/tablor/Figures/tablor_Tab.48 | 109 + macros/latex/contrib/tablor/Figures/tablor_Tab.49 | 176 + macros/latex/contrib/tablor/Figures/tablor_Tab.5 | 108 + macros/latex/contrib/tablor/Figures/tablor_Tab.50 | 206 ++ macros/latex/contrib/tablor/Figures/tablor_Tab.51 | 71 + macros/latex/contrib/tablor/Figures/tablor_Tab.52 | 261 ++ macros/latex/contrib/tablor/Figures/tablor_Tab.53 | 206 ++ macros/latex/contrib/tablor/Figures/tablor_Tab.54 | 362 +++ macros/latex/contrib/tablor/Figures/tablor_Tab.55 | 330 ++ macros/latex/contrib/tablor/Figures/tablor_Tab.56 | 352 ++ macros/latex/contrib/tablor/Figures/tablor_Tab.57 | 221 ++ macros/latex/contrib/tablor/Figures/tablor_Tab.6 | 69 + macros/latex/contrib/tablor/Figures/tablor_Tab.7 | 168 + macros/latex/contrib/tablor/Figures/tablor_Tab.8 | 165 + macros/latex/contrib/tablor/Figures/tablor_Tab.9 | 84 + macros/latex/contrib/tablor/Figures/tablor_Tab.mp | 727 +++++ macros/latex/contrib/tablor/README | 27 + macros/latex/contrib/tablor/README-fr.txt | 28 + macros/latex/contrib/tablor/auto/tablor-xetex.el | 51 + macros/latex/contrib/tablor/auto/tablor.el | 40 + macros/latex/contrib/tablor/tablor-xetex.sty | 3374 ++++++++++++++++++++ macros/latex/contrib/tablor/tablor.cfg | 113 + macros/latex/contrib/tablor/tablor.html | 3321 +++++++++++++++++++ macros/latex/contrib/tablor/tablor.pdf | Bin 0 -> 390139 bytes macros/latex/contrib/tablor/tablor.sty | 3245 +++++++++++++++++++ macros/latex/contrib/tablor/tablor.tex | 2404 ++++++++++++++ 70 files changed, 24889 insertions(+) create mode 100644 macros/latex/contrib/tablor/Figures/TSav-105.mp create mode 100644 macros/latex/contrib/tablor/Figures/capture.eps create mode 100644 macros/latex/contrib/tablor/Figures/tablor_Tab.0 create mode 100644 macros/latex/contrib/tablor/Figures/tablor_Tab.1 create mode 100644 macros/latex/contrib/tablor/Figures/tablor_Tab.10 create mode 100644 macros/latex/contrib/tablor/Figures/tablor_Tab.105 create mode 100644 macros/latex/contrib/tablor/Figures/tablor_Tab.11 create mode 100644 macros/latex/contrib/tablor/Figures/tablor_Tab.12 create mode 100644 macros/latex/contrib/tablor/Figures/tablor_Tab.13 create mode 100644 macros/latex/contrib/tablor/Figures/tablor_Tab.14 create mode 100644 macros/latex/contrib/tablor/Figures/tablor_Tab.15 create mode 100644 macros/latex/contrib/tablor/Figures/tablor_Tab.16 create mode 100644 macros/latex/contrib/tablor/Figures/tablor_Tab.17 create mode 100644 macros/latex/contrib/tablor/Figures/tablor_Tab.18 create mode 100644 macros/latex/contrib/tablor/Figures/tablor_Tab.19 create mode 100644 macros/latex/contrib/tablor/Figures/tablor_Tab.2 create mode 100644 macros/latex/contrib/tablor/Figures/tablor_Tab.20 create mode 100644 macros/latex/contrib/tablor/Figures/tablor_Tab.21 create mode 100644 macros/latex/contrib/tablor/Figures/tablor_Tab.22 create mode 100644 macros/latex/contrib/tablor/Figures/tablor_Tab.23 create mode 100644 macros/latex/contrib/tablor/Figures/tablor_Tab.24 create mode 100644 macros/latex/contrib/tablor/Figures/tablor_Tab.25 create mode 100644 macros/latex/contrib/tablor/Figures/tablor_Tab.26 create mode 100644 macros/latex/contrib/tablor/Figures/tablor_Tab.27 create mode 100644 macros/latex/contrib/tablor/Figures/tablor_Tab.28 create mode 100644 macros/latex/contrib/tablor/Figures/tablor_Tab.29 create mode 100644 macros/latex/contrib/tablor/Figures/tablor_Tab.3 create mode 100644 macros/latex/contrib/tablor/Figures/tablor_Tab.30 create mode 100644 macros/latex/contrib/tablor/Figures/tablor_Tab.31 create mode 100644 macros/latex/contrib/tablor/Figures/tablor_Tab.32 create mode 100644 macros/latex/contrib/tablor/Figures/tablor_Tab.33 create mode 100644 macros/latex/contrib/tablor/Figures/tablor_Tab.35 create mode 100644 macros/latex/contrib/tablor/Figures/tablor_Tab.36 create mode 100644 macros/latex/contrib/tablor/Figures/tablor_Tab.37 create mode 100644 macros/latex/contrib/tablor/Figures/tablor_Tab.38 create mode 100644 macros/latex/contrib/tablor/Figures/tablor_Tab.39 create mode 100644 macros/latex/contrib/tablor/Figures/tablor_Tab.4 create mode 100644 macros/latex/contrib/tablor/Figures/tablor_Tab.40 create mode 100644 macros/latex/contrib/tablor/Figures/tablor_Tab.41 create mode 100644 macros/latex/contrib/tablor/Figures/tablor_Tab.42 create mode 100644 macros/latex/contrib/tablor/Figures/tablor_Tab.43 create mode 100644 macros/latex/contrib/tablor/Figures/tablor_Tab.44 create mode 100644 macros/latex/contrib/tablor/Figures/tablor_Tab.45 create mode 100644 macros/latex/contrib/tablor/Figures/tablor_Tab.47 create mode 100644 macros/latex/contrib/tablor/Figures/tablor_Tab.48 create mode 100644 macros/latex/contrib/tablor/Figures/tablor_Tab.49 create mode 100644 macros/latex/contrib/tablor/Figures/tablor_Tab.5 create mode 100644 macros/latex/contrib/tablor/Figures/tablor_Tab.50 create mode 100644 macros/latex/contrib/tablor/Figures/tablor_Tab.51 create mode 100644 macros/latex/contrib/tablor/Figures/tablor_Tab.52 create mode 100644 macros/latex/contrib/tablor/Figures/tablor_Tab.53 create mode 100644 macros/latex/contrib/tablor/Figures/tablor_Tab.54 create mode 100644 macros/latex/contrib/tablor/Figures/tablor_Tab.55 create mode 100644 macros/latex/contrib/tablor/Figures/tablor_Tab.56 create mode 100644 macros/latex/contrib/tablor/Figures/tablor_Tab.57 create mode 100644 macros/latex/contrib/tablor/Figures/tablor_Tab.6 create mode 100644 macros/latex/contrib/tablor/Figures/tablor_Tab.7 create mode 100644 macros/latex/contrib/tablor/Figures/tablor_Tab.8 create mode 100644 macros/latex/contrib/tablor/Figures/tablor_Tab.9 create mode 100644 macros/latex/contrib/tablor/Figures/tablor_Tab.mp create mode 100644 macros/latex/contrib/tablor/README create mode 100644 macros/latex/contrib/tablor/README-fr.txt create mode 100644 macros/latex/contrib/tablor/auto/tablor-xetex.el create mode 100644 macros/latex/contrib/tablor/auto/tablor.el create mode 100644 macros/latex/contrib/tablor/tablor-xetex.sty create mode 100644 macros/latex/contrib/tablor/tablor.cfg create mode 100644 macros/latex/contrib/tablor/tablor.html create mode 100644 macros/latex/contrib/tablor/tablor.pdf create mode 100644 macros/latex/contrib/tablor/tablor.sty create mode 100644 macros/latex/contrib/tablor/tablor.tex (limited to 'macros/latex/contrib/tablor') diff --git a/macros/latex/contrib/tablor/Figures/TSav-105.mp b/macros/latex/contrib/tablor/Figures/TSav-105.mp new file mode 100644 index 0000000000..0f84f2a3c0 --- /dev/null +++ b/macros/latex/contrib/tablor/Figures/TSav-105.mp @@ -0,0 +1,22 @@ + beginTableau(105) +newLigneVariables(btex $ {x}$ etex); + val(btex $-50$ etex);val(btex $-\frac{2}{3}$ etex); +val(btex $-\frac{\sqrt{5}}{5}$ etex); +val(btex $\frac{\sqrt{5}}{5}$ etex); +val(btex $50$ etex); +newLigneSignes(btex $\hbox{ Signe de }\atop{\displaystyle 3 x+2}$ etex); + moins; + valBarre(btex 0 etex);plus;barre; + plus;barre;plus; + +newLigneSignes(btex $\hbox{ Signe de }\atop{\displaystyle 5 x^{2}-1}$ etex); + plus;barre; + plus; + valBarre(btex 0 etex);moins;valBarre(btex 0 etex);plus; + +newLigneSignes(btex $\hbox{ Signe de }\atop{\displaystyle F(x)}$ etex); + moins;valBarre(btex 0 etex); plus;valBarre(btex 0 etex);moins;valBarre(btex 0 etex);plus; + +endTableau; + + \ No newline at end of file diff --git a/macros/latex/contrib/tablor/Figures/capture.eps b/macros/latex/contrib/tablor/Figures/capture.eps new file mode 100644 index 0000000000..7cf5b460c5 --- /dev/null +++ b/macros/latex/contrib/tablor/Figures/capture.eps @@ -0,0 +1,1509 @@ +%!PS-Adobe-1.0 EPSF-3.0 +%%BoundingBox: 0 1 1384 842 +%%Creator: KDE 3.5.5 +%%CreationDate: sam fv 2 19:51:19 2008 +%%Orientation: Portrait +%%Pages: 1 +%%DocumentFonts: + +%%EndComments +%%BeginProlog +% Prolog copyright 1994-2005 Trolltech. You may copy this prolog in any way +% that is directly related to this document. For other use of this prolog, +% see your licensing agreement for Qt. +/d/def load def/D{bind d}bind d/d2{dup dup}D/B{0 d2}D/W{255 d2}D/ED{exch d}D +/D0{0 ED}D/LT{lineto}D/MT{moveto}D/S{stroke}D/F{setfont}D/SW{setlinewidth}D +/CP{closepath}D/RL{rlineto}D/NP{newpath}D/CM{currentmatrix}D/SM{setmatrix}D +/TR{translate}D/SD{setdash}D/SC{aload pop setrgbcolor}D/CR{currentfile read +pop}D/i{index}D/bs{bitshift}D/scs{setcolorspace}D/DB{dict dup begin}D/DE{end +d}D/ie{ifelse}D/sp{astore pop}D/BSt 0 d/LWi 1 d/PSt 1 d/Cx 0 d/Cy 0 d/WFi +false d/OMo false d/BCol[1 1 1]d/PCol[0 0 0]d/BkCol[1 1 1]d/BDArr[0.94 0.88 +0.63 0.50 0.37 0.12 0.06]d/defM matrix d/nS 0 d/GPS{PSt 1 ge PSt 5 le and{{ +LArr PSt 1 sub 2 mul get}{LArr PSt 2 mul 1 sub get}ie}{[]}ie}D/QS{PSt 0 ne{ +gsave LWi SW true GPS 0 SD S OMo PSt 1 ne and{BkCol SC false GPS dup 0 get +SD S}if grestore}if}D/r28{{CR dup 32 gt{exit}if pop}loop 3{CR}repeat 0 4{7 +bs exch dup 128 gt{84 sub}if 42 sub 127 and add}repeat}D/rA 0 d/rL 0 d/rB{rL +0 eq{/rA r28 d/rL 28 d}if dup rL gt{rA exch rL sub rL exch/rA 0 d/rL 0 d rB +exch bs add}{dup rA 16#fffffff 3 -1 roll bs not and exch dup rL exch sub/rL +ED neg rA exch bs/rA ED}ie}D/uc{/rL 0 d 0{dup 2 i length ge{exit}if 1 rB 1 +eq{3 rB dup 3 ge{1 add dup rB 1 i 5 ge{1 i 6 ge{1 i 7 ge{1 i 8 ge{128 add}if +64 add}if 32 add}if 16 add}if 3 add exch pop}if 3 add exch 10 rB 1 add{dup 3 +i lt{dup}{2 i}ie 4 i 3 i 3 i sub 2 i getinterval 5 i 4 i 3 -1 roll +putinterval dup 4 -1 roll add 3 1 roll 4 -1 roll exch sub dup 0 eq{exit}if 3 +1 roll}loop pop pop}{3 rB 1 add{2 copy 8 rB put 1 add}repeat}ie}loop pop}D +/sl D0/QCIgray D0/QCIcolor D0/QCIindex D0/QCI{/colorimage where{pop false 3 +colorimage}{exec/QCIcolor ED/QCIgray QCIcolor length 3 idiv string d 0 1 +QCIcolor length 3 idiv 1 sub{/QCIindex ED/x QCIindex 3 mul d QCIgray +QCIindex QCIcolor x get 0.30 mul QCIcolor x 1 add get 0.59 mul QCIcolor x 2 +add get 0.11 mul add add cvi put}for QCIgray image}ie}D/di{gsave TR 1 i 1 eq +{false eq{pop true 3 1 roll 4 i 4 i false 4 i 4 i imagemask BkCol SC +imagemask}{pop false 3 1 roll imagemask}ie}{dup false ne{/languagelevel +where{pop languagelevel 3 ge}{false}ie}{false}ie{/ma ED 8 eq{/dc[0 1]d +/DeviceGray}{/dc[0 1 0 1 0 1]d/DeviceRGB}ie scs/im ED/mt ED/h ED/w ED/id 7 +DB/ImageType 1 d/Width w d/Height h d/ImageMatrix mt d/DataSource im d +/BitsPerComponent 8 d/Decode dc d DE/md 7 DB/ImageType 1 d/Width w d/Height +h d/ImageMatrix mt d/DataSource ma d/BitsPerComponent 1 d/Decode[0 1]d DE 4 +DB/ImageType 3 d/DataDict id d/MaskDict md d/InterleaveType 3 d end image}{ +pop 8 4 1 roll 8 eq{image}{QCI}ie}ie}ie grestore}d/BF{gsave BSt 1 eq{BCol SC +WFi{fill}{eofill}ie}if BSt 2 ge BSt 8 le and{BDArr BSt 2 sub get/sc ED BCol{ +1. exch sub sc mul 1. exch sub}forall 3 array astore SC WFi{fill}{eofill}ie} +if BSt 9 ge BSt 14 le and{WFi{clip}{eoclip}ie defM SM pathbbox 3 i 3 i TR 4 +2 roll 3 2 roll exch sub/h ED sub/w ED OMo{NP 0 0 MT 0 h RL w 0 RL 0 h neg +RL CP BkCol SC fill}if BCol SC 0.3 SW NP BSt 9 eq BSt 11 eq or{0 4 h{dup 0 +exch MT w exch LT}for}if BSt 10 eq BSt 11 eq or{0 4 w{dup 0 MT h LT}for}if +BSt 12 eq BSt 14 eq or{w h gt{0 6 w h add{dup 0 MT h sub h LT}for}{0 6 w h +add{dup 0 exch MT w sub w exch LT}for}ie}if BSt 13 eq BSt 14 eq or{w h gt{0 +6 w h add{dup h MT h sub 0 LT}for}{0 6 w h add{dup w exch MT w sub 0 exch LT +}for}ie}if S}if BSt 24 eq{}if grestore}D/mat matrix d/ang1 D0/ang2 D0/w D0/h +D0/x D0/y D0/ARC{/ang2 ED/ang1 ED/h ED/w ED/y ED/x ED mat CM pop x w 2 div +add y h 2 div add TR 1 h w div neg scale ang2 0 ge{0 0 w 2 div ang1 ang1 +ang2 add arc}{0 0 w 2 div ang1 ang1 ang2 add arcn}ie mat SM}D/C D0/P{NP MT +0.5 0.5 rmoveto 0 -1 RL -1 0 RL 0 1 RL CP fill}D/M{/Cy ED/Cx ED}D/L{NP Cx Cy +MT/Cy ED/Cx ED Cx Cy LT QS}D/DL{NP MT LT QS}D/HL{1 i DL}D/VL{2 i exch DL}D/R +{/h ED/w ED/y ED/x ED NP x y MT 0 h RL w 0 RL 0 h neg RL CP BF QS}D/ACR{/h +ED/w ED/y ED/x ED x y MT 0 h RL w 0 RL 0 h neg RL CP}D/xr D0/yr D0/rx D0/ry +D0/rx2 D0/ry2 D0/RR{/yr ED/xr ED/h ED/w ED/y ED/x ED xr 0 le yr 0 le or{x y +w h R}{xr 100 ge yr 100 ge or{x y w h E}{/rx xr w mul 200 div d/ry yr h mul +200 div d/rx2 rx 2 mul d/ry2 ry 2 mul d NP x rx add y MT x y rx2 ry2 180 -90 +x y h add ry2 sub rx2 ry2 270 -90 x w add rx2 sub y h add ry2 sub rx2 ry2 0 +-90 x w add rx2 sub y rx2 ry2 90 -90 ARC ARC ARC ARC CP BF QS}ie}ie}D/E{/h +ED/w ED/y ED/x ED mat CM pop x w 2 div add y h 2 div add TR 1 h w div scale +NP 0 0 w 2 div 0 360 arc mat SM BF QS}D/A{16 div exch 16 div exch NP ARC QS} +D/PIE{/ang2 ED/ang1 ED/h ED/w ED/y ED/x ED NP x w 2 div add y h 2 div add MT +x y w h ang1 16 div ang2 16 div ARC CP BF QS}D/CH{16 div exch 16 div exch NP +ARC CP BF QS}D/BZ{curveto QS}D/CRGB{255 div 3 1 roll 255 div 3 1 roll 255 +div 3 1 roll}D/BC{CRGB BkCol sp}D/BR{CRGB BCol sp/BSt ED}D/WB{1 W BR}D/NB{0 +B BR}D/PE{setlinejoin setlinecap CRGB PCol sp/LWi ED/PSt ED LWi 0 eq{0.25 +/LWi ED}if PCol SC}D/P1{1 0 5 2 roll 0 0 PE}D/ST{defM SM concat}D/MF{true +exch true exch{exch pop exch pop dup 0 get dup findfont dup/FontName get 3 +-1 roll eq{exit}if}forall exch dup 1 get/fxscale ED 2 get/fslant ED exch +/fencoding ED[fxscale 0 fslant 1 0 0]makefont fencoding false eq{}{dup +maxlength dict begin{1 i/FID ne{def}{pop pop}ifelse}forall/Encoding +fencoding d currentdict end}ie definefont pop}D/MFEmb{findfont dup length +dict begin{1 i/FID ne{d}{pop pop}ifelse}forall/Encoding ED currentdict end +definefont pop}D/DF{findfont/fs 3 -1 roll d[fs 0 0 fs -1 mul 0 0]makefont d} +D/ty 0 d/Y{/ty ED}D/Tl{gsave SW NP 1 i exch MT 1 i 0 RL S grestore}D/XYT{ty +MT/xyshow where{pop pop xyshow}{exch pop 1 i dup length 2 div exch +stringwidth pop 3 -1 roll exch sub exch div exch 0 exch ashow}ie}D/AT{ty MT +1 i dup length 2 div exch stringwidth pop 3 -1 roll exch sub exch div exch 0 +exch ashow}D/QI{/C save d pageinit/Cx 0 d/Cy 0 d/OMo false d}D/QP{C restore +showpage}D/SPD{/setpagedevice where{1 DB 3 1 roll d end setpagedevice}{pop +pop}ie}D/SV{BSt LWi PSt Cx Cy WFi OMo BCol PCol BkCol/nS nS 1 add d gsave}D +/RS{nS 0 gt{grestore/BkCol ED/PCol ED/BCol ED/OMo ED/WFi ED/Cy ED/Cx ED/PSt +ED/LWi ED/BSt ED/nS nS 1 sub d}if}D/CLSTART{/clipTmp matrix CM d defM SM NP} +D/CLEND{clip NP clipTmp SM}D/CLO{grestore gsave defM SM}D + +/LArr[ [] [] [ 10.000 3.000 ] [ 3.000 10.000 ] [ 3.000 3.000 ] [ 3.000 3.000 ] [ 5.000 3.000 3.000 3.000 ] [ 3.000 5.000 3.000 3.000 ] [ 5.000 3.000 3.000 3.000 3.000 ] [ 3.000 5.000 3.000 3.000 3.000 3.000 ] ] d +/pageinit { +% 210*297mm (portrait) +0 842 translate 1 -1 scale/defM matrix CM d } d +%%EndProlog +%%BeginSetup +%%EndSetup +%%Page: 1 1 +%%BeginPageSetup +QI +%%EndPageSetup +[1 0 0 1 0 0]ST +CLSTART +0 0 1384 841 ACR +CLEND +B P1 +NB +W BC +/sl 65048 string uc +*1III +III +XݼI/,8*+ŷ.JGN4-JVG5B.IFB@IWE?/ڰ +XHK8-F.ƿP̷*A.=˵E6Q>+FEVL+Q8FHNSX@F=/KX +?9G2,?S8FO2A4SFIW*O9W18HM,5R@>:9N-7C+,, +;۶61߶F>-8J,/SMN@3/23-F>JT98KGF*S2SL +,J>J=8*A89SQFMȶ2Q:GFP-XĹ+*=-A3޳ +7V57:NGHT*>H5OH03>BA*:78I?.H+Ų82-žH +EʻV+X6S4<*3J@/J@Ƹ6CM6⹰Z2 +:A84:J2.2X33FF3Z=׵/W/پSSN,3CB +˷>X6N/1N*<DZ,Q@ +XM0W:?F.һ1:0-R-<588KV.I.AR4P8J< +.;@2ʴ>CO:,2<...KLRRKXWOֻL,̱P@ +-3ݿFYN?5BU7/0COI>88N@/?YG::KLP +ȿE8;8L=75B0L:NF@WVTDD9Z9.TM+87B+A:XY +߻ȶ414XG+7IXJ4.5@Z> +Ⱦ<70;OJQ**2*?2-3޳GFF:?H<Dϳ5:C9O,.űV.IB +¸:>NHEQ;WN/A5QJFO638J1 +1+.282=ݽZN?*?+1B0/8,Cо51=0AI,8?8FMƶ443F;A53R +BXL.M+?QF9պP+<Ǿ@BSHUB3,ڿö-MGXQV +I*UY,=+DT18ELXQ/3O5UHG7˾>Q<ڽV0>׺?SU=F+6FQN:/M.:N;>L4QO5=:GN +160DA8>O5:VN3-Է5Q.83FL>6;= +V.75N;ж8SN154R+Ṯ-FG1SL/5=VN.I+63 +ݿNDRN;ŸBXJ޷M.AV61Q;:=FL=0Mö1S4+;15 +;->߿M+>GF.CU=FɱB8AFVK0I711XPJ954S.TXGXö;QI;M6E7E2NǼFLX +91*F;OFOYN;M.SJVS2*-**F*B7R1RFJ;O62EB2*:5*T030<,54X*> +*JVKK+?M...,2=1+*O?Uز**6*AYغ3ʿ+:*JSPC>F-9 +A1*P5б+*-3BS4Z?<8BYN>Q8--=UVP<*:J;*2= +FL-J0X66->K0²3<8޿*7I˳.2R-R4B.:J87*IOM-+M,=2ϯп- +0QV86.BPBø*;S:+P//>5..6K.S*-+*O7C6*K/<73HQ*A** +BJ.JBJ2*ҷ+IF>R+*E-*P82JVBSERG:J3V +֯NNWXIT״4ּVױWݻEA3EA0WGGVC1=X +4A+*YX;I86EWׯ۹AYܺ۸WUڷ5* +EAY?@̺ϹEYFA<:*::*19F**H99@2>B72,21޽P7DXD +N5AXƯ2RB<.:*-1/XJFR+*ҷHHFJŰR:JAH +*J+*..ֺ5,B2ٵYIIH9־Z¶+*صܿB+ݽ*6޽ +.WK>**K-***/6BZ62>.*08-.3DZK*:K2=H:E-1-1=XRLüL +17DNYER+۱2GBZ.*,Hξķ*A4,/.-7*6龼0M42.:,62;09.C< +8˸6H+/:0=Iհ.2*Z685+*3*JJR*R5Q5L0*3-C*0L +8NN*NFJ17<6*0P06J**ŵYI?9QE.D>SOHTY4 +ٷ7MVװŻ1-AYUصU/6BZ+0AWׯ-*ٹɵWIE@UQ8OLU +YV1*TSٴT?Wհ7DWװG5Y˻1QO̺߿1*5AXNJ2J¾ٵ +ݽPܻH*252AB82+*.?CI/*θ۶*-2FR*12,G*K=X+ +R8O6@G9O,+ްE6Z*8޼07EU6C/-W@WD7ڷ*=< +Y6BE/+ػ-AXڶٵگ@E07ٴG-,*ױG@>*.***N7ٳ+1:*+J5 +OV*Z*ƴKS5C*0Jض*E10կWٳ,*L2L6Zٴط5C:ü6:, +=8-UXܻGUXF2A8:,AA9HWڵ@<<,-*.ڵ;EZQ +K;3.PF4ٳ--R:6@WE޿EOK޻5F4A26JүEM2@* +;VZ8N9.BB+4<06ƿ>@ZJK5P272YB2R1D2,LPNٵï*XMSھ=AVҶ./1 ++*,=,+12M/*6K?/X޷*GMX2+5JEFSְ1F +EF1YIֺYJɵ.ݽKɵٵYܺ,+ܼ* +1<1Y2UZGRALM-GJI޶>57?@*/>ǰO1-+> +2LA3ױJDQٸ7ݿZ-5X@Wװ߸Ӵ/EVص۹/?U8?T +PPTWVQFܲ3PKMRCRJ8G03RM4LM0FRN/VC빶ܽ +8,J۷8*ZۻG**10F:*7Eص71**/*J/*صGX=V+*25*B0;+KG +V5B*+Ľ,-4,T@WZ۸ø*:@*7*YGWD*,Z*:ݽQY-3:C +.*F:?5PAUVBZXUղ?ձK37ACZ6AY/9Z޼,@VBDAXٲ4 +-0*VZ/U:?2:L*?UԶ**2@XM/-4Wں54-P+0L+*,߳U94-. +*+/SXN*շZ*ٳUY9;ǴZL=AC?@D@7DֳSEʷOPش +K*7ٳS5IPBUN1NAY+532@;ذVVװ?NгXYTSSW,P +J+BJ:;?V*J/DOڴ4+JB:,֯4*L-JD:< +,TԶ*װ1@AY7=0/3.,2Y,4ųְ,:CC5R+?1+B;UC94<5ƴPJ>Wٳ+DOTRI:56ݾPF +F-A8GU19GZ=.+Zڿ5WBDߴWMZԴԸPKEY޻Wٴ*Z/Mױ+2 +S.P6JMJ65@>SPSR/*S5:ݹKX۹76:O@@Y +>TT@/*@W֯TIG4>OPTOWV/+*PC0TY4CO7GFCPF +ZڷQGNB6*B?@LEݻܻ˹ֱI**G0*ݴ*+*۸ +R*TDB+DS@MFBRCUNDӷ*FL*4?TJ翶S-.,46NU++ +HӻGQTSVL3P+ +:TJJ;4U22;JLDS>JA*;/T-D62.L@*1?VVT,XشXۺ+-0 +AZ>B*C/E655@B/ٰ߾4*1OR8?NWID:.:V׸8G3J7 +=Q>7*PLO0*:+>HJ9M2R3+PKF.C-A?+*J*T1433G2DE2*,5 +7B?FOVD9*>PTABSZ?T>P.S,@Xڰ7 +*Xܼ@WVٸ5T@WO:T5K*֯+ø?Z*/CZLAY;+ZT +5Wټ422ݸD?TֿND.J7.WN?O@DմDүO@V.+BMJM.*B5G +592C+5@6CB:AXڸ?07>Y,L37+@VOOO6*B.޸M>SN: +M:OR>Vۻ/UYVM27M9K>MSW?VIEUV@GC=IǸ +QѴTVHSDYNSNQL0J63L;Q>SNBC4M.CKNǰ* +3T=ֵ׻֯ݴ븳RG.UPOQմ7Eֱ56:6.*1*FM +װAR.8G**Z*,;M4?T>==ֱHJ6?4-*.PVN>1OLR:EWRK2CN>G4QZ +:*@/.*2PL=NDB*SR-*4?UT<4TUZú1+Wټ@XUְ +5AVVRMUڳ.1:*>J-D/*O.342PUY2:J,/D.27ͶN8CL: +KF*?,8L0?TR3RRVL,YNL6/.64SV߸4432F +2WDQ:X,UZV4?T2޿>*?5@V,;4U+@=N8H*RZTO4SH +BBZLZ3MBTNRK5V,=B@Wۼ/U,4J-W,JӸ5T +?V:,ZTLT/**ʲ1,.9ICNAFٱ۴LVE,Q2-Q +:߿0;CNFMHȳ?UQ<ٲN?MD˸UTGSBSBLB:J+>J17TR=Xݼ+5A0Z*Y.17***/M-RXP:K*33IP*8G.8GB* +K.M3Z0+=2B:6**4K,-:JS@Ǹ3S+RƹPO=RRT>L,GSF/TH: +J9*L,B,CI=R008G=Q.O-R*=R+I:++?4NK8ƾ +9>J,,XJ/.I++@LJϿ-QFC:23N¶IQH;N,6M4B:+B3 +S5G:>G*R+J4?4IDTW2>SL6OXN*,/T.* +S;KGG,H2?3P-;NZ.0?W8N>OTW4G-,D8ʾT-3ZLB +=QAN<.=QJ,?XJT450BSJ@O4**XQñ3ET*RձXN*OXֿ1N/;L +2?T@+5GJRD;+<:SC5WP=GD69K9O@S63MŶZݼ.@?PVJ +0;5?PLL/5@ϱ;;H+I@۸WXD?WK9*KڷC +WP3ڳOHزD˸,*QWD9966I*D+*6C6*-BBZC=֯ +P޾*ӯP*ַ*+*QQ8;G6**Vװ,+L*HʹABG51**07 +6FMQM6K,0Q*I*=>5ZEISOXLH@1޽0VOF3KNS:ETRK:K8G.;L* +.JOV/R@VJSNGKO>*Z3-2* +ZN,.B;+S*:=0.R1JS5*X01TVN/5а/:ƲB=R*ٲLOȰ+O.T +/E:F*:<.*CR6SZ*82DJ2=BJ=18E.>1H*J:S><= +4*F3-.2J><*LNZ*EU7NF8G.=M+C޻=:MQP*@* +-.2J1þI+NKM+LQ4=8GB5˸G<*N3XL,FH +I1:K,1P2BH,=3A.3DSBڼ+CBZJ0;*Q:KK>5YUPK8**5*ڱECCK@S +DMS@XزCC>+8AM@FVFX63C.2:K2;K*;*NJJ.=K3>Tغ>7*Ƴ4+ٴس7EݴEY617*R*0*J: +.JJ?+1޿8N6BFU*QJ,Lĺ3GGNTVP6AZǷ7G +IAHE6C*?4ANL=3;@S:PֲOҾQ?UVTROH.4>S*4 +@WڶQtR;/>RF33N7T?K;L2;QI: +3/B-JSV3/*R*>QTOʾF<4ZX*.LL+B3-N>JB8CM2;Q>RT3 +NR0A24=NP7=SL+*BPEB=->P6B,P*85:E,C޾30 +KPOʷ+G0G.2CY/:DT?+CM2K=46+MB*;B**C: +QI,*,-*ET?Z,:03RF6TQT->O6ίT++M*:N*U6űXۺ.094+EQ*=* +L1M+6GVSPS<0/=99I37<>HH8ڵA.Y*1Fݼ +?R;SXE8G>W-*G0GDC;-M1U@GP*D92-4ڱ;E +6װF.ZPGQʶYC+20DM;;*;V޲ֿ**2,IB +8GF/6B,*AL>,GP,G,-ZJ*ݽ-+*<-.871N<0V68S-FI1 +KI.EٱP-8K+CܶIӲQD-JE2=TV+;>AZNOB +.+*ݰ@WZLزC3Xڲ,XO4?WضFJJ*S8*XC,OA-1FLJ־, +29LNR:J.?4* +4?L2L:J.+4=258KD>2J3W.BW +JN3;V2*6+@*C= +0P*85D-BY07C-.>5A*:P**S=N*CBXKMPA;+Y*1.06C32*-H3>:0M21Z +0JCJSϯ=T*=Q+I6D38*B**ZP*B*ر2R*?0E۹ +,-,.B*=į*;*Z7KȲ;*EBM90/,AGIQXڷE +J+-0>:߽Yܺ/2>?XIPK8,M@W˱M-JA亴ZVMP˸ +?A+IB*:+C-7;,-O6B*ڶ;06:KM07E8HK0 +8*N7,***2,I.ݽZݼ6Ƚ,*:,*13,/4.+2*X*.F-;* +H68BFF0,4380IP:B72CUJWBP1ܱV۰-žDտ-;SZ3 +-RVVR<4?/5@WڶO?AZڶ30Z޶?,80BZܲ/3LZܾ;MZ +*K.Q6BXֶ+/6AX¯CWN3*RFL?-+>UZSLNVF:N>*F3-J +SN3/B3*Q,T2>TL,3<3F2*SM6*M>*3;.;<*B.35*4.?**;,*:˯0B0DPS*DP˷-,B5;1*D+X*,0*Z=,0 +NAXԲ*VCW*VL.5@7A+*R*J*ZTL3/JCZS=6:*:4*3E +.IDZQ.*+Q4XFJʴ6CZ.* +6+*,**Z2*Z.6C*07EBE֯M7E+į*,*F8H2;LK4I+*2;4? +T.63L3=T5+7J7,D5:-=*4׶*CD +M>L<;4>Z6K>9GTZĶ7.;J=V<9MG+LB7F*5/ +=M6K2;LNBSXN*B3KQ:CA*R.JE1QPU***,R*R*+ +N:KF<*JB3:Q´>+,N:JR7L**B.8*K>:ROʷ +-;O6E*P0B0QV5AZ=BDCZ2MUֲC:SO=T4P.2:@,Z2;NB:,J +30:N>2EP+0.6CMQN-19G+:T7>H=<ڿ=4ZJCYCW**P +P6LJ+7FC,DK.?1*,5V?H6,U*VسѵM޿-G.62,=Q8EVV ++/6Z޾+-ASBAGKZ2.D+.5+*8M7FƯ-2>*ET+7G,*19H*1 +8E;ޯF޹M:K8IF.*:K>NM;YZC/0-;+/5*>M06*1:IJQTV32:Sʷ=M,?+PҶ +,F;?:*2+.;NFJB*T,5*P.;NC+Q3>RB;>*N.*3-+I* +@RE92A3*JP6*SP8G.RK*Q*-2S-+Qƾ=<ַ=4*+2DPUV +B7/D4T=4ZJ޿C8+*+*C̾C>4*V+ַ-HK/5@ +;ʺ.J6*GVBZ>MR0/4,-,ڵE4HJ9IE919A:J +ܺ15VBLKGHWزGCF*AGKAYװAI07ZZM +7M0M,-گY.F,د@N56C2*JCZ26*CޯD--2G +M8*7;.-19IK2;H>2=+*XL2=Pϱ-15?T6F:4+VC*8 +3215AYE1XEX9K1:;HJٷ-JVܼ<8DAS-SZY +ߺ+0C,N6C+*0DK=@ίP3+C-*3?22:Z9C*XDZKݯ6CWضVֲ ++0CB6E.1AYܾ3/D0D::Q2JK.TA*-ԹI6KM*S2QtR; +L6?6;L2I/T=O:OLXMFP4?24Ը.UBK*3*LG +KM061/?O.;:K;I28EO1;-*O:*?LO>6*:C3*O00BXL+*E1M*LD +0:5?V,.>M29IG2;QJK.3T*Q.:MFCT.29K0KJB*;NN*2CM +IB*YOɸM8WOKڷ-6OXW +GGYFװI.9EжK*JF>59۹ݾ+-88AWSOŹ6C +2*20B,B1ZEP:.*ֿ-;*MƿǾ*-:KKY>۹*.YH**H9HA +;ܺ.J*U0*M,+SO5@BPT֯*:G2U+2>TWR +,>15L/5@Yʿ=7EEKPBES=D*4F޷MF<1*J=>,D +ESP8ED߱1߯P2µ08GWί=7E-+=PB8G=Q5< +>2:J,71:K,K6GIL +G5SʺGS1FQ9K4?7CTRIH0DAUF;,2:*7*+;-9+M; +M*+,--06Z޺/,Z߾4.3EBJ6B,5@AUH*U0*M,+S:TZLO +:L.3F*,;P4BNN?ճ5S,3;PDFڷ-QF*V7G,,* +6Cη-Q2=DC?2,޲;M6E0B.0CM7DH06BYܺ+ٷ=?W+4 +P2CַQ9,*G-R:19J23,3:L6L6C>O +D4=NF1O>SABSFϸRûøTL7S46W89I0W>M>SN6/-7E +F7CZRL29LN:LߴT+*HN?1>F,.>OR:+4>+-TTRPޱ;M08G.25:KL*F9K.0MMR*0ST;8-8T3S.DS4?AK> +3BJT;C32@U,1.;=,/J+<@,.,*9I0,J13/T,+Z. +206CXN׶+M-3?NR1:,*8+<=*:I>:L.*FF*T2=J*++J.: +GB+S?PM+O-3S4D9J.3TT:9NRTB8K7.+.>QH@9I混1J̯NS<׹FGM8K8WDJGBM;G +FC;EAPV޿+ܺXٳܻEXUXٰ8+5?38F,O06-*FM6D +;Ʋ;T*63*7Z*;J29BI:N*;8+N+RL8K4XX,:KXD6CD +8?TRB*+-**SH4>O@4O4SSZEVKLPP678IRX.CN5SPK2SUBO.8E/4GR߿2,O?WC3=0/J-GMBB:M8G+*P>:32 +AYCCҷ=S.IRK*-J2M7-06AWC?TBC2NS= +SCQIK/38E>SN8OD6Q7CL:5-1EPWD-3<>BJ +췸ɵIݾ/5@62ٵW/NPVC07DCK0MHI1*2- +EF;I5E6C3/10:*AYܯ*Xز55VQWNV7 +2ĺ;*JMJBJ7XZXB82=2.ZE;V:B.+N>27DLڲXھ+=P4CZ>д6D +ʷ23,*HC*JW:8M5S.4?SEX+RAL.A,7GðT?O/F-P7 +D=EF50E+-AV*+ZP:J*CKPE1-Z=4:V32 +808G9L07<>H,-R9=O8K:G.3R̺=QR +UٶT7@A0;4CS=Ϸ27>SP=RL3<<.29G?07E +U3U,G>TJ,O4,O3>SN3WS<<29;XM5@ +T:++07F9J:,3=.4>X/ǯ,,K071.Wڶ071ʹޯ06B,N8-: +M-:KLԿ-:L,O:4;+R/2*@.2:F18B:,B*AK6G0=NM/26=*+* +BLM6:2@FE;HM2;L.X0;HTRKOWD6DW@P0WزZ?AB.?0 +W*****/1-9KBN2:L.:HXM2<.3;MZ+MK>RLG,,7F0;7CC/ ++=700-L,PگJFN76?6+GQ9IQ*ֿ-=7E¶D>1PE +M:LNKZR=TR:J2..S<>O@KD?ULQBLTT> +RKA=SӲN׶MPG>>WܹU+QC>3=SQPLOJE=C +>SN3=T0*F>SJ3NN3=RA3O5,/>*аYR+,.29H18 +DVο-16,2=P2;2*Wֶ*18DV.*5@XBZ:>XF*;-06+,.7C2-/18 +5M.M19-:9/.LZJ*S:J29H;J:J=P4CDD27< +Q9H9IM18VE,+FS7-Q06BZL3*2L*,+,4D3N2BIY2; +L8WN8?4I-,*9Iƿ=*@QE8+˾S,MOJVNTV3K4/5B9I8ݽ +:XRƯL2A=MT;.G޼U1EٳOݾ*MGGEQ +8FSM۽8Գ1UVز97AVI0*,*VC*8װAM9@FZ+ ++1AYܻGYܹɵYYݻOX۸;:IV.߯Ŷ>AA.*.9J2+ +M18:*6V963?:B:.**:/*4@GM5;7KJ;MRB,Q0**R*8 +M18M:4-/4?JEC.?INR@WBEƯP8-8G4G+.9 +H1S=*.9F-/8F,K.XH.+4N2.DX0Kְ-D;-.1E3* ++.RJ+7T*;N2J3@OL2;MSPHOT>R:NL˰?S;A, +?WزYٰOTU7XX6KNS=>M,KZHK05Q06?R>CJ5 +߸:MJSL:=S.7;K-=*N3=OJǰõO?Qt.KJ2CZJKL.0-*.+*T/5BV2* +6D*+,2;.3=LG3:LJCZLJ;*J8:ZPZ+MⶲL:+2NRO2BP28BVRLB +*Z+M7;9-*.KRK.Jֿ206B8HK**B*:8F6Ͼ0,S33;LNZľJJ; +@MRBM:7@1=̺=IGZK-,A3/7LKI*IZ=QC* +޴3-PBϻPR-Q7AXܾ+17F+/>C.PG3K6CT2;Y>33ոB;<=F5<+FT,Y+BJBZ*OYXJZ*0 +4*8>J,3/1A68JL׶23S-N6SP6+K-Y,,-**J-P+<ƾV ++ŶR68JL;IG-N63N/J8SJBJE*OYXJZ*04*8>J<3*8B +.,*N?598DJ4QEVPJ/++.Y,,**J-P+<Ǿ>0R1U-3:*3F +BF=3VCJBJK*OYXJ**8,N+<Ǿ>0R1UNHN/W-N.N ++3+DL.Y,,*:*Q4:.N*Ÿ:LN3QT6DJ0:GN +-9;=ڱVH@U8LC+L.Ʊ*PZ/<ξK2:J*/N?*FYLL¶Y-R +Z4Jڼ.M*3N@Q*H2N*5I0ED=6W,+ZP+ +кX*P.C1N75.***I*M4,A>-3E-N<;X=Q3/WT=C;E7XXK5ZDXAUXȹK8.R+H946=ٿND**1+J3,EL +BJU*@W8JOJͯ,TGG6/R,-GN::LF2,/OZ*++OMJL: +۾*ǵ7N-,J+:80Kï9W3X>IJW*90J޿JIZ1Qļ4*< +G-+P0,XKFEζ+-CJW7<2T/0SD3<ǸJ01VAPPD8O*88 +8;;.ZQܽOA.BX97޾=F.=A7=G>R4Y;R*:C1 +VAOA6DFM1ѱ67N,U<+T/J4G;TM/2YQ.?L49;*-,2+8. +A:J8=-3*,:TR@CVLE5M8GHFAZ*+I/0QLG*JHM +:*.GCEF0?A?WCHF17Eܴ8X1-LO49ZH@=>Ƕ/X˲R +MFH@,X97F>:67XFM,X7O;P95,*K* +YFZ@Z++GC+4J޴S?:>/2ԾL/JܽQ**Z3K*;*C+FL +F=11:*4F;+=?;*8.3+UKGTS5MIQ-*23KJ.CE20? +VK,:67XFM,,X7GP95,QG+ز3Ʊ*L=5*Q+-, +*SK*ڼI<*V9*+,1.:,*VN11=8N+.:AIMJ***+RFUѻ, +ZSIRED*UJ*1W:ڿR2V߷¹:IO-6JR:O*= ++;-DWO8GM:Q328LSK0ZĴB5867XFM,X +7PO5,*=-*-3>:+.1Q:6:.:0F,*,/P,**ZDFZJF++B=* ++.Z8BN+O4K5>M8B+JVܱK983F*6IHKP0, +K+GڲM<391*=UZ۰GBM:-1FX+*/,8VM̹4 +8L46Ų=F.Nź;/DϽK*% +d +1384 47[1 0 0 1 0 0]sl 8 false 0 94 di +/sl 65048 string uc +*=-*.NT?:9+***=202,:>0,S*ZJ78JP:۾*˵1.*.,: +8G*7CF4F2R>1ǵT8NIFA+8ӾT4*.HR-CZJ +PJQBX1SZ5M+YN߿GF4*3J<:21,*1FZ4F湵,+.LQ3/..E?N +*ŰU=C20?18?8+6F;F-,8Z2*G>.ŰRD۲* +K-28Eȶ88V06Ų=-MA8ϽU***Z +-V8G*ECZ:*̺@>/17R/4=51CD;T131GQ41SUC@KD +UG߿MRGGYX޷4ʶHX-8B/M8C4+ONISL0JV*-WJSS>5ܶA8*A-I嶵 +369Eȶ6XZN?J,6Ų=-MMAA*ձM3OշM**,*E4 +:*3ײ۸*6,XN8X+,GR9OK-F*?F22IR-DM;ݽAV,@N޳+T +,ES11.41Z1GP3JDB>B.L82D+-ٹ@+PG84/-2DWYJZON +JCFEԶ.41Z:9-YPܶA?U.2޾Z*0,.L*R@VFıQ-W==+;V1 +/F5ձɷM/-X/,NZʵƴBɱZG8L009QDA2F.S +1Z=<**95I*C.?گ/G3-GCN***.MI +QFBڷWEӽ4F=H>QL;K6*PR6Ϻ,-P +****5;16ݵ>ڸ-*>XJH-K׵H6*I-ٽXK<ӷU͵1=8L +0Q5:;F4HKBX8H:1*DS=PH>9P;3F4Sܺ +U=9YKG2-J1N.CKE9VA-G1;7**HC*BJ ++-VLNA?UF*/8ղ۽A8INJJRT0ICIC*6X>.>S:=J?0=4M:Ļ +D11䵽:U2SHM4F1F03/P۸11=1111X;UEB +I:H9B+*=-*-Y:A/IB-Mٵ1IA-.8,BU>Y; ++7K?-3-AرDZRG1BJZ+7Q8G2LE6F5HJ÷V׹XD +HVڸװV7ZQ@R1L빵GFVW8-,?ҹE +9VUF?T0F1AXF8WPĹ?H-WU9*1+12:0@80MU6@>:J6W=99J219ԹAöӹ96 +1T6FL9O.GQ8CH1QK˷1KN-P****5˱3۸N +9MS=@FǴ⳶X42F2W޾D +?9Q>PLM@ʼ5?3ŶUۼG8ݾUQ-0VQ71ڷG +*59WYH+빱Fر-A;G1׹XFW̷SU +WY궿8S1۱AXӷ8=PV>Q9ܷOZX*-L +*5/NO6?*MBVRK9OHG99VHX6۶96J +9F:.C²,WH1F:2KR1IZ,*Q0*0XJF +RIݻGHڵ502F-*3GR8SڸUد?:D8߿+׹ +WG2TJO*?DMFE9IC0ݻ/XR+,F*, +F-=0*I+@5>Mȴ9E>YLMG.;,104 +HA9иEE2G4141EӸO-UQ>Z2UTEʼZH;=9Ҹ +PSܹ1*:0L7J<0HJDIT?B8IIڷ/1䵽:UE@6J +.1F0Hﻹ0з潹1V>**۵HZ0B@9+0823@I3**HC*BJ +,.W+9XPCB6:0*?WWFI߿=ڵP7UJ1۴ +GU6=1*G-;SJU2PV@Y/Ŷ;?EYJ;1,ٴYG- +Oذ-YX68-M?PN549=/*8DHM?WM +7-*JK9XĻDQ/̷PUGSӷZU0XEC@VJ +QYG3-/+ZXS9*A+,:0?I4BQK94<ڴS +-I9@AM;>IBIGEMIM*3RI߿ܻT +58+=***Z/*XٽIػ߹ر+,*޷YеR +H?W/.>19=,SP.V˸6:VBQIM352FP +/Lܺ߰;?/US=R31M@XQ9Rٷ=8ͻų +½VFMSYY*/žLFPDĸE52G43޳1U +TUB/*TNKM589SAX6޻T0Z< +7>HGWY+<032ZG9H02ٴ1AMDDC*PG@8Nݹ +/F8۵0*,I2ZXRI࿵XɰXK7RX1**++ +B-P9Rٷ=@˹سUSDڹU7LӰW9 +.ܹLFü@FW?龸E5243/P1S?VTHW/;е +WE7; +*I:J40HLH1A4=S1AAIZ,*Q0*0JX>5Z*UܹQ:ȹ, +6:1*@DְOOM89@,V1۸8ڴ?5?4౽DACI +XDU?QM3CQMX-OVDϹٽEֿZO<+- +M-۹0*5U>SWK8ðF߻=E5243 +/HLO??QX۹YE-XζϱսIIIXZż* +HR03I.1J<۴=031K:彾>1E8TԳƽQJT9*U +A*61C,*>IF+QK/9B+*=-*-֯:O++˹ʰ;7@>I.C7 +8ݽ0I8?ڻ;MѿG1FY/3HZJQ۶;,/?9CJHWM@8HMP +V?MF0BB=DGV.BUGMӽWD6P*0Rٷ=1@ +۵MϿDڹյ739ݱ0FP3F1ݷPEWBN4XGȼ +YIPF?T@I99ٽIUQFIYUB3M +TA6*IIL5=03WQ80XQԿ,۵޷IIG.UJQEں޻ +N3=1@.K***6࿿T*9A9U*߽88ܽ澸8ֲ@6TI93Ŷ3-2Y2GVU3F +ѸGڹQ+HVS;ż۽>ǹWEJYQ71ѳ8W +׹-XRA1@VQU@=6ϱFGAIPSR@I9?F +@FXT̾;?XF+1,.IX+U*:0JϵN>GR8 +FY7AUG1SBUA5C.F1F0OCUUR*89.M2 +91FG8ǺF:06-ͳ0+NTRN9,L>B+BJ?-.W+9WXF +/C<7FŷF3I7ٶCBܺ4Y+Pۺ7/UT@Y:H-. +Vڶ0ZضAF5QN++XF@ZL.XPRRTH +,=N6--Mۻۿ0D64*W-T޿8G8; +U@UMM0=/CN?<׹EO-W-B?,TGԯ +Pس@T9*AYż*+A9ݾ0?HX38޷R/;޻Xٰ3 +TѶ?SҰYپU;-X15B+,9*@9016YURN9,*Q0*0JX2H.XIQHձFETȲ.86 +AUHQ?F2վ4MAZ*=ITN:RUAR2ͿI@VFG +S9=8FSU?WD7EU.<Ѽ׳CRSYVϸ.92+FO91 +̹9LTG5C:R18=8J9V5W8FĻ-7 +V9J:9-8F@OA>CO;4**HC*BJ +G-K+,۵ܳD7S:J3HTKSد69ܯ= +?3/C9458ֱOFS-9½TH=S7TԯFT/8 +ONX۱>Qt;I.5;9IFٷ0Dͷ粲Lݵ̻+ +MHݹ7ĻZܴTWQ25KJ*UFO918DRI31T>OGMVױ +Z޸縳M11C/9*1ȿRH߷XWرR=DC:R/JRY +948LOѰ15@UQQWD?H-I̷8P;TVH/Z +U0-57NM8XQ1**++C5,966X8Xٳ.1K +9⻹1Ỹݲ5>9+U5رRU6WDXJK-VK9EB䯲< +FP:*X;./ѹCA.VιJ2X׿A;+L +-4/O<91*2LMHݵ/H澻ٰD7P25W׶X޷IQ-B޻Pհ +XHR/506B5@UP3XLX*9*1BG4R9+3+. +;PJX1/QUŹIHU׵>I:@X/IRA;Tۻ +?QOSGYʶTWYWI8WY۶/LTKXQ@I:A-:0ز+1? +>߱<:زԷ̹;JNQL̻ڵ74D4+2TLX5ӽNZ +IA-57N*UYSQKN9,*Q0*0RJFSNC=R-6޿ +OӵTZ?6κ,XD+3ṷYXZ>XY5/ +9*D:JH=09>FJUEC/M࿹TŽJ@8β1+ +ȶN4NZ.F*J7V-INW****K6;16ݵXY758; +QڱCLM499뾵;R28Z;T?1R3D?Qս +M7JTT@AD*RUUԯ/HH*H۹*Y*A38:G +I@@VVWհXس4UT۴DGH6J+ +9@C18 +U:ZN9A*A.CE04@MH**/.A+3K2T* +;**+*SG+*Y+1:+6>,J3+N:Yܵ*F=5JJ.Q/KRS,*滾7**4, +*P+4**,8O*K**J2J4*3**.KX3//V*7S1***HC*BJ֯-V3BC>5**B ++,-G5**X/Z<ƸB03*HԵ:*U9>B6TYBZ.IAH,R߿V< +*??/+1*,J,+.RжO2CLP4K8Y޻>S*+W3QRN1*28. +*7˱;۸1O.**JPI/9F1K1*᳿***=-*-:213+**1-Q+VI +ؾW:CNF+*VT,+W+Uǵ@*0-@*-.UXڶ +WٰZ**ۿA***K:*0JP+,U1Q*:H.=NK8XBN<*N3 +R˱I=JR53?**1?+DM,XKHU5@.=8<Գ*:K8C26F?MSK +2R0QZTA0N-535C,J*/6..A57=*VJ*4ױSZBZ/IA +H,JQJF0*J**0,:*=@PB?N5;**.**Q2*W**+ +*SF7.L-Y2<*:K2N +>=T+*0+BJY-žCC.**ε4JD/2,W7**.*Z?/.*18*NX6KO +72O*-,.GźZA2/:*7.RT+J*JP.*IMEL0;Z>?E +5:-I+O*-K.*:I;6O>PK9PB8F*ƺ:JUIET++<03*HSXUPNQ+Uǵ@*0G,3 +0O*Q5U2*JNZ>WLIJ<ǶD;8:+****A4J.4?4-** +5*AR+LCJUDĵ04ARC:,*8LP:=T+*4;HB,BJY-L=-Q+ ++ܻD@WE:+N,B*A21-*8T>;,0߾*-3-嶯3*C.ܷ߷,* +TرZ3?E5:-Y=湴NSA**7@.H2***XRJ +Z0FVU>12**2P**/*>-ñ+?,Q,J0̳ID6:̵/,C8*<;+ +DM.J**+>@XϹ1-,Y*K,=,;-16Z/*0JïA8G8O7239P*0XK14 +@7=*VJZ=Z3;E5:-I+C*+պ0*NOտ*=. +7Y2Ĺ5=OȲXGUIPK-***X6JN/-N?1X+J4*08NZ2/6* +?->*.,676+RFC:>89.*:̵6C8*Vм/BJ֯-.WG*J*E/J +7*0J¾J-1,*AI:8*N.<0Q1X,޾JNĺ0**J=U+*;3:*.+HE9>* +*S.Iп*52V*:**6,6+FL*,1J*+Z*C//-,JRB+5-?:LFE-* +ռV*KY2:*U2*LG*****ۼ7G,*+*8I=N>C,* +./I*+U*Z-*51W:;ٵIEFߵ6GI-U3-ַ.G*QD3DFQ***F +1<>+ͳJ*X:OZNBPV0*B*N3Q*C5+*5.**0,0+4,854 +-,*,*Z60?..:*X;˿H2UI@AH2DKGDLG*>1E +*-:A2AA=ݳ1*Z*Qƾ*R,1F-2-:*W**@?+2ZҺ=R-+/:D+S@O**A +EM4*JNZθ>O4+J>O4.JC2A0**K:*VX2*:**4:*.-*:߻76Y +Y6J+FL@/6B*貽=VG2H3FMTȾR1*2.*״7ðO+* +*:1*6*ZN1.-Ӽ*;ýF+*VT,6W1QZA;Lӽ8.XG* +,*޼3.*9X3Ľٳ1GKöʳ**,61Ǿ1,QJ*+6XK+J +@*:7*J;*+:MC,X9Q**ܿ*H8CZ-RF1,-TNGϼ-**MOI*6:տFM޻1Z1****UI*Z-F9.+:OM8,* +GIP+IZIM6NQ+HV./@B@W-Lر**MYF2*տ*,=.793P +2*-C/**,-,4Z?*B0̿0*3+*D<5-2R/TM+BJױ-.W9,**0Y +*Z@6+*+NX9ĸ0N-Q9G<5Y,*6.Q/KR,J:***U +1,*<:*3X6J,,KA@-***6*6:׿M66/**6*K/<7** +Q?*JOG<5X,*2.Q/.=C-J3U۾*,*@<*41W,/D?KV* +6:׿M6X/**6*KWB.V/-HJC*,*J=YIY8****Z0L +ٴ:D=*:ݽ*;70**޾0L,*9I*Q0*4J +6>=7ú31-**ξ0ZPH;ZVƽI*=-*/⹵:0ٵ430EL-+*HC +*RJ۷-ֻR2S@QI9 +d +1384 47[1 0 0 1 0 0]sl 8 false 0 188 di +/sl 65048 string uc +*=-*0E:0ٽ=*:7ú31-**ξ0ZPH;ZVƽI*=-*/N:0ٵ430E +L-+*HC*RJٵ-ֻR2S@QI9*+,ػE2EZ˰;L+**6*>׿BH +3P+NP*VA4.VDO/L9I*Q0*4J6Q25Q+ݽV<ҵ=*3WV: +7;70**ξZ0ZOJ04.F/,Y@5ZIN+*6*>:׿BH;A +4ARޱ1B:*2G*J<ӿ-W7<2TZ-,:7;70 +**ξ0Z/C*336@ٴX2FM?۽1TոDY*7?8UB +**1AA/=F2*;19Z*=-*/>:0Q/Z8.**@Y32*8-+R.:Q+**BRJ*4 +BSB߿*20ݽ0-*HC*RJױ-ֻPUJ8JM,E9.**:ۻ<5N--+*-/*1- +K+LO.1,J.EMD6**J+7C5>* +9R,E/**5YF;=.38.2-ŲB*+,ػE2=AY:*MJA2J +M2H8J+;.@9V,2*/1,UQN.+Z-+:7;70**ξ0Z@MH4׹ +P,PU4E/.GGYVJ.,*P8A8QN.1Z-+:7;70**ξ +0ZO4W0:O=F+5޼̹=*@*ܽIEJ/*S*0JF23.;H6**A:1=F +:*;19ZAC,E2յ5Z,;19Z*=-*/E:0Y@.L9I*Q0*4J +6W3ZIN+*6*>ٿBSQ.E>5=91**J+7LLPI;**Q0 +*4ƴJ6>=7ú31-**ξ0ZPH;ZVƽI*=-*/>E:0ٵ430EL +-+*HC*RJٱ-ֻR2S@QI9*:E*U86PEJ+7LLPI;***JX۸ +Z*UD8*/:030/Mܽ,+*8**4*D+4ZJ0/X3FVP-83IL0>K< +6+/E:0ٵ530ݽ*.-*8*ڸ,,XX72FK14/SJ,7.+ڸ-T1E;7ZJ +ڷ-+*-޽NB***UA:,PJHF17Fò+X/*N.:B:ڿB13* +***52+=:980X໴FLUH99 +5<*46SH.P8,X8J+7KI-*+*UXJ/˾:=F5=* +46Q޷R6A;/*4RJ6TSYPH**8*ڸ,,XX.-:7>5<*46S +H.RX=X8J+7KI-*+*UXJ/FMF.P.:ZK,J9/*J,-XR/+Zʹ+/*.0B?+UJܻ +B/ALJ:6б15Rθ1*62J6TQ***8S6G*@GЯN*> +:3翹UB+CN414ƿW޻Q*G07.F?+LUJ8;41:42=HDZ0= +31**+7K.**;/XCX2*E2:V.0*=+9EKBG/Q,J2C/*C9 +K-HN*,6U*3A,K:1,L+H.,+*HC*ZJس-RG+**N+U5,* +1,.-+:NP2P1WK.*1-+**..1F,SϷV18Ͽ:?2J71-A:4JJH2:M.0 +I*9L*Q0*6RJ6TQ***8S6GN*BI2:3FC+R18׿Q0̳+:R++ +J2QS-RR*B?޾C-K>R-M*0:0ӽ=***>JU㶵DZ<*L9 +.RAQ:N*Ƽ-JH8.*Q0KZ,3;Kֹ=4AO:4*J2MFUI*9L +*Q0*62J6TQ***8S6GN*2F2TO*APJ0B/1>J:8.*KZ<,3 +;K=2ﹹ8NJA,,.;-+ϱO-K>2**+H7K.**;/XC0.Q9 +,HKS.Q=9*+*-,WD2Y2*X0XC0.RJN*D>оĶ.7+̶ ++/<@6:@J*;2*4*课M8NJA00B2:3ȶ.PSMD** +HC*ZJO-R+6G@S0**޾H0-*CX19*=-*0·:0ӽH* +ܽ޴-*HC*ZJ?-R+6G1E*+*-B2Y9*ݽ*-*HC*ZJ--R ++6GYEE*+*-@2Y9*+*6*B:SB*JLJ5˵FJJ07-/9 +D+*6*B:KB*+*UA;Ͷ6G6.8޳?;.**޾.+*+:R8- +5N:/?;.**޾.,*.@;>*+շ-65*I=+JB9 +,MQ13VRUKPJ2A@98HZ/=:7DƸTZ2+3KA/*== +3:M>*UIAS*9<*V69HP5,0@J3*KSUQX +0:F7,Y*Q0*6J6TQ*JL+W9W0<>T=-,WL-ZװJ*ZF +/:3۾,;IM+6.+**N,*Z5+.Y6.G5**+O4K.*>յ@J +K;-+>B*H:JI/-16J2:**..3F:*H8*IR*/*9Ƽ, +*HC*ZJV,R7+*;0ԯQ,,,1B2,.QDZ*K,1Z4, +7JYAV/96+BEB*XUT-JIQMSYT+,*/-*ȺK +R92*/8C.FETY*Q0*62JJ6TI*JR+ڻ9X:*45:**X +B*F/5I+*AVJ0-1P+87JC1Y*Q0*6TJ6TI*:W*CH +1EK.*TTY-,8麯IBQt4@JOIBL.4/*Qӿ +G5**+S,K-*AN+*CLŴ,8KU:-*ABR5=K;+>/;9@JX.2/ +J*=.Q4/=:.5ƻ++B:9EB*J77**+R+K1* +*Q0*6.4J6T*:MU0**޾Z*-*C*=-*0N3:0ӽH* +-*HC*ZJ*R+6GYEE*+*-?52Y9*+*6*B:B*J +77**++1K1**Q0*62LJ6TI*޹J޿QFJU@3J:HJ +QO+JYT*=-*0J:0ӽ9*B5?QQ6AFJUOF*׽/O,U +Ṵ+,+*6*B:*B*JT++E1YH8,E-,Y7/4810** +.-,*W/.4IIXB,NX1.+7U-*+2F;G-2Է12X +J+%%% +d +1384 47[1 0 0 1 0 0]sl 8 false 0 282 di +/sl 65048 string uc +*=-*0.H:0ӽ=*ιK+-*>;Y7Q.,*M㽻* +MQdzM-7*=T95**+1K.*=456:M?F3.A@1/55*,Y +F-5:U?1,M-+6=9*6HJ6TQ*ZZ,,EQH +YP0AݽN,/8V52+*7M24,VVɼ//**޾-,*׹/. +*BоPGOJVI::.:,J24V*B4ZYAA*+*-82 +4*N-A:J̹-87HHK+8MYY*H::.:,JBܽ0ݽ, +*HC*ZJ+RW+,,Q1¾I2/Q797*-,,?= +9WI1X*=-*09H:0ӽ9*JN=AFJ̹ߵO*>ٹ>7ر< +AҰ0.:1<:UH<15**+31K-*V=3.X- +AP4AG/<3F=D;LTU=-ATKï1.;/,L2ޱ0:* +Q0*6J6T*:MU0**޾<0.-*C*=-*0>J:0ӽH*ӽ- +*HC*ZJ41,R+6GYEE*+*-B:2Y9*+*6*B:+B*J77 +*B*J4HƯ;<8-GMB19E,B8Y9*+*3-G5N-C@L;< +R1H72LJ6T11**+J//K3IV޽0>:H:0-*C +*J*:ݽQ,F:MVB+EθB83*R=*R6G0D1V1,/N* +*Z+ݾ8Qݽ-**J:*H*24N*?,O,<.H3>:ER;X=86?L4FS8 +G>/.06B:0ӽ<*B,+E=6UFްA9C2,/;5**4V.X:*TAV0 +**P+80޿2F93C=N2*>8B2M:.JR+RG<*ֿ- ++E=SFްA9C26/*LJ=;G+EBJ+J,1/<0.3?8F: +ٯ54-̵M@-6M0K6J+D/K.*B4+F*C7;9-ZH*E57D +,3C/,K**FH-QK,B87R<-ҲJ*OG,CFHKLY +:-4,L**50OZKW?N*,*1>YB6*4:D1IڱC*ݽ-R-D*1P18Q +=ڳ4X182BB1R+JEGB21,6WJ6TK*G=7:MG4F: +SMѵEA=CM/P*+F5I?=HZEW9K-YMY +45,5I0FL9H::,**R2+*,575,EBPŽ4+Uһ0 +++*B-D*+-O*>L/8I5WMö@1Q@X182B?.Q=58N65C +*-L62Y2*ս**08/@2JF4G9*D2R3Z** +++B+ַJ8͸/Q1AYZ7.EM+C1ްS***,V5F25:P-- ++UJ1*B*:ݽA-M=+/8DJ03+*K47;B?B߾ +-+*DQR**-MM+4GZI395K2?B+20:V-*14*Q- +=X*9:2VCG67OI?O5E2J6B++K***+M4*Q4J6,5+ +.2+N0OAZEJ1*B*:ݽA-M=+/8DJ03+*K47;B?B +߾.-+*;>**+U/*A<*5J2?2+*+8N,AV4* +޿.Aۼ,5@PѺ*9J*1̾Ƿ*L.J-Ժ*N/>6*+-L3* +7J7*FBMG*3FW-2*8BJ,5߾:,.+E+UR +Q*.R-/:BQ+޿:2E/:2-;B<:+:F*6R*,BIG*I +-Q::1,B*9,B+**,-=,*9;8;S+/*1=,I7>F +65.,+823FN,,T6*6F2,2+*85K:,M,/E2;:-*AA8,-1DJ< +9.Z*I.Z,*0>M.02Z2YKV,,*+@QJ1**+W2K/**3.7 +IWUIIۻVݷI>մDW,1*L*>*H.G3;+>E2; +Qپ*㴸U@ڿ2**J8>>?B-N2+FF1Q@@WHYQ9* ++*-:24**=2:MGEF*W,BKY8*=-*0 +G:0ӽH*ӽ-*HC*ZJ+R+6GYEE*Z/*JݽBFR02QZ-Q,ZJ+ +R+6GYEE*Z1*:ݽY68GF;?@3Q09H:0-*C*8*JBFQ +5I4A5-θ*:MU0*+*7ƽ;M;30.G:0ӽH*ӽṱ* +00L+,E2:-0.8GBF־Q158@XB.FϾٹ,,<9+FN¹=,ڽ,I7 +ڹJ6TK*Z4QDJ̹-S9Z83,H,FB98,8F*=*3-AT0**8> +.F2M3*AP+8@FW-+1.:FAV,<,3SH-**ڹJ6T1A.**0* +ZV7-VM,*:Y:FE3*+>*Mۿ?U?-**14R,T*JC-J0Z1 +Bѿ-,L8.F96IQFN+1KA.**0*ZP7-VM,*:YSFE3*+ +-7:+314J=G7ܽC:J*ݽ-*20,>-S***BFٵ,1082QF3 +H:SG>33Q;ǹZJ,,R/+**+EMF9/*V8ZJB*QE*10>踴J +P-C092+45J77R3J**514ZB+9,M1-<0.,> +L4F.=BJJ++-*.:8ҾȻME9PJ޳82B8CYF6,K52:*A62 ++88FDUX2B8++5E+HF=S7C7U2޾*L.5,*/*5>I +*CǺQ-+*-520FL9HWS+HS.9I8׷KIE:@ ++U5B-2*޿>*:*BW83JZ,F񲳸?VXI=DOJF*,V* +?,X?O;U7E/-+7*LE2<*@V.XG-+W6,YP*WD˾D ++NN3S-ZJ/E,R/+*Q5۵@.*C3,+*-520:Yݶ+;ղ:6P@*81X +ھ1CYZJ+3O672MQ,J澿E**418>Z*޶:J<46*@ʾ4:*F8=+AEK1 +ܿ7:Ǻ,PT=+WLN:.J6ν<++AJM-*H<0:*-/B6**00B, +-T,./-+JP68+IS0<8.ʶ4=+,*K973.+:C>IϾ*WA0*0*C +>/2MMGR6GSI-,31,B-;+O.8**J<,RG?*4XJ6G:D +S3*+ڶD/,+޽I.AMK77*A1:<0:*4-/ +*+*-L*..J=D*-8/VǾ-20B*.*FIJU/ +/--*ڿ=@*P0X=񯶴-A.V1̵?=:AC,8OFٷ1ÿ+N4K +/*L52:MU:0ӽ9*IJ:/AFJ̹4 +UEYP691.@IYW:+EI>7.I0 +JXN7J**6V4A6@B+SAIǿ+,GMDG,NW@J.8ïZW* +4WH8H0+*.*@46RJ6TI*ޱEJ:?QFJ̹B2.NE·336RJ6T*:MU0*0*;.3C4 +6.,WZY<7*0T:0ӽH*ӽ-*-*66C/F4?AV18*-L4>2Y9* ++*1+*I*M4R2+*6//35KLĺ+:+2F5V<ѹTS8QJW/ +CZJI,R+6GYEE*:*Q4:.F־.*1.:L;T+-FSUI9A-8;,N +A:1L68BAB*JI*QDJ̹-S9Z38,>.E/+ +06*8>J,3/3,,82JX:;MHӾ-0+1BA:1FEݶEҾ+.3KA +.*A++E=6UX*6;9.*X?J;*THJKE/*2*=/N,8/5Fƾ +-,V;NA=+>;952.R+,SN0öN+A41F,0>M:0ӽ9*2췾6G0.T +I<=+4*+¼,531RA*K*>J<3*AV**Q23J*+NA=*L*5; +-B8Oǰ813

MZ.:**5OZKWG +LI-XJ+׵Y*+,OPH>*IH?2J*N+ZMGA+1. +18H6:,+/HI7.+O-4B:4B*.-,IͶ6GRNѿ* +/.-819H>*Ҽ9KZM72ZLY*?W/6 ++2**,E01JS:I7IRF5J;MLGS0+* +8,N+<Ǿ-,ŸX,828F*3CK.53+BN0N85F,0ZK:0ӽ +9*->LJ*,+5AXJ?7.:7+=5A+Y562ZJZW?L3M +-*2DZ0:6U9**VS*,Y5*AF+4JS6:0DY+G*K* +>J<3*AV3L,82JZ**6+8B>.936;,F.@:0ۻű޾,4.+* +S>-,QS@1@:6RK,-:Q*NI8HMMYB5@W1/HB@5: ++M*N9Ƕ-2Iǰ8+Y1.+**..E+,-+/8߿8>24-6,* +8,***>8/8+FE.;+1.1XH6+P*35=?Wö-QG̿ +FZJ,3,R*R4JQ+UOO*90>9YAV4*0*+XY9 +<:Y-I9/+*FƾEZ+.J5BCQ9J+HHS*>0ںY+585 +-*F.*O2A8JB5B*J>I/:?*C?S9NR44AJNI +/+IQ*:HJJ-N1,ϼF*.+.ͽC1:*J68B*9,2+*2IʳۻY ++PPڱ+*1+J3,-C-,J,7-9F:0,ZN7JE*<+J*1K*;*4 +192,,C>FZ**AV*K*Y޽.+3K-*8GF/17 +PUCAG?:ټ++Y=Wɼ5N1/X-1+ +7R53-2;**޿RISTZ޿1S*W,ܾR;;QI9*+*-,>2Y +2*>T98+N-0WSOY0YEG/F,䰼IG8;J, +GHYR7EBZ530H?J***1K:L+1HP+YS<2*3Q5,ME.I+ +*Q0*6RTJ6T*:MGEFSH-VKV1+QºJ=RR+*HC*ZJ,R+ +6GAU+@3:FHN+4L5;9:V6>PD**6*B۹B*J*MR40 +@AS::LN->*5-3P?*4*J0/H<޾,10-*C*J*:ݽI +F-O+;X6K1**+J4+CGKTRF޾2A0-*C*4*J +098ZJ5-R+6GYEE*Z**I*M4,018JS>6A*0.:0ӽH*ӽ +-*0*Q4,8/3Fǿ7/JZ;,B:ĿB*J77*B*:ݽIS3>*PN0 +;A-5޾2=0+5*/X6G0E9M4::4*I*=7+8@F.* +-L+R9+۸K3CJ;33,*J/T,6O+ +6IR@BMO-*R/9>7,S׿5*V0*.K7D9EFDӶ5J.8>ø +:>8128OT5K0QJ3IBW829G35*+*5J+91R:6;KH**B*:ݽIS +3>*D,G;:/*0@X:0ӽ>*HGN6GRNYMY1?/PWW8@JP +7/ɵXQMѵT͵+1ؽ88/9GH߽߸Ҹ** +5C608428ZC.ӿ/-F,=<+1YXAZ1SWN87D +;+32*+ZEJKO1*;Y6;KH**B*:ݽIS3>*PN0;A-G1޾/ +,*T=4:MG4FZE0.MA8Vǻ@4*Y5W:,2K*C +>,-T*.J.KF3:G,205G10108T,8.Z1<0L4+** +7ǾA18A?+@<0N7I,1,J9GQD/*/?G*º>1G +ENSY<+*+*,/*1Q*/FFC0BC+5K.*E4:MG4FTP޴ּ +>J,HWI1߼4J3I1-,*-/**5@V5F/ƼRK*I-0-.Q*;Y6;*+**6*BݾB +*,.QK=*NM>+YZ+S@SE+9E,M +,+G62:*+5OA?OFF-9-4+*6->,+ǾA18AI7 +98KT5R8IFRJH3+;ݰE+XF7:FL5Ӵ;Q*+**6*B:B*J +++U-R93/RRI:9T:L/*ٻ+:F+2,M,Q*J +F=Xү-O31*F-,-4CC9-**P,0,F¹E4ɹL< +MC+Z?40*T>/**LI:*B,8SF**+*-LB22*696G +2HY-/ʽN6/-ΰ9,ƻFYҾN=4JPUU:0A-6*J563ƹK1,,+O: +VHRE*X9+Z1*FU/***,A<:GM/;XL1SWN47D= +*0+J-,X*U3RJB:<92XW6+R>O<***+;@6K.*U6:MGEF +?YRR*7F:O+,0B.ۿFYEڶ61:-/9IE4V>D> +-*SU59+-F,K5T:9***޾.-0E,*K=?07 +6?,F:I4J5D//?++ACZ798EARBJ.** +91082YLV+C8DZ0EӶ*1*.8/KNV>D><+<-6N +2Y6-***ZA:=FC4856+5K1*ڱ=AW71޿ +-**ų.85C**>O:V7H83JGA**=-*0X:0ӽH*7S24V;1::Z0̾ +D读S.*,.-M<5*%% +d +1384 47[1 0 0 1 0 0]sl 8 false 0 376 di +/sl 65048 string uc +*=-*0@W:0ӽH*.*:F.>R*8O85+MмH9**6*BְB*JB5 +VW**HC*ZJ,R+6GYEE*+*-L@2Y9*+*6*B:ٲB*J +77**+O5K1**Q0*62WJ6T*:MU0**޾/+*H- +1.-淵*Q,H/*ICFJQ2+*>.O9Ϲ-**޾/+*Y0XS +-淵*Q4F/*ICFJK+*ް0+RLL3I:E*Q0*6WJ6TI*:6Z,6X6G0 +NO*M=-I**ZC*LIR1P8*+*-UA21*./*58:M+FIR*H +G@RH:G?-J*//5.8.+R6:+.+C**AJKEKB+T7/4G=޻Z*EM20* +55B199F4-**85ETW+@ +YU*1ݿEM20*GY9FW?O07Z/EU0+9+*6*B: +B*JED:*C3,+1M+<+72ξ;+MJ2*F6:=,208޿ +4*=,,۷4RR3Z*+*FRZK?Y++@+J/-NM +I*BܻB*ڷH*CޯV-*1.WQ=ƾJ;:.BJE3.J +Qt*1LS*N8 +IE;*+*-عA21**58:MIET1*6WJ6TI +**/;N-AFJ̹OJI3Y05@:,2I,1*P*+2ʱ8ZR4J-.=+4 +:1S*ZH:.:,P+N/Q+XN*PPQ>IE;*+*-L@21*N*58:M +*TԶ=,M,*5<:0ݾ*9O*Q0*6J6TI*5òFU:8Y6GFVɸ +KQ6Y1.Z,+*-6W>IPU+A+IF1Q +CðOZ-1P+8TUL.-<׾I**Q0*6RJ6TK*4D:JQ@S +-I-1R+:O6<3U2**=Y+<*+*-+LSJ**8*AU0GO0**޾P/+*9LQж-,QX*9.K +9K1W2I*=-*0?U:0ӽ:*Zػ>J57:MG4FJ+,.G*I?FXHQ +T;*-?24*UTA:J̹>52**T+춾U=-*HC*ZJL,RW+ND,, +,QV+++*SE89IQ+*6*B:DB*JI3ZQDJ̹>1Y +8:;-*HC*ZJ9K,R/+JͲ6GFO6,?YF+B:K.+:YU1ARL@.TN11D*Q0*6R +XJ6T=***T+T*L5>:MW/B:K:/,,2-+;<:AV*=-*0V:0 +ӽ3****S*/4޻TB146H4FJ*XNZ+.8.+R>R/@6,< +F65EHM0;E:7*MAV*=-*0V:0ӽ3****LS*/4޻ +UF?*-K*FV;E*50+0V8/;9/<͵KμC+= +Y*Q0*6RJ6T=***T+J./4޻>PT=-,WL4NJF,2F2,*11-.Y +B1N76;-:V09T*1X=JC+LY*Q0*62VJ6T=***T+J./ +4޻><5-,>2ZNJ-2F2,*1-N.1:0-***,K*ڶ1źA. +03:5/**޾H/E+**4JTH/:WJ+C41,.Q,+3** +-O*.4*ǷE261ź*1-2,96,7XUJYƾD +4JJ,2FR,RP*<+J*޵P8,-792B-*N*K/;F*PP>MA9*+*-4 +=2.**T*II/S,/UHDYK??24޿+I<,*HC*ZJG,R*N.BZ޲ +5޻DB346H4?*R,3IY-R,RP*>/;IC=1,Q1O4QN +*GY:F*I+YڱR*6J6T*:MW+/A.O.Z+Q;7,** +޾Z.-*C.I?ĽH;J3+3*GMLE/**+>3K1*W3ΰW, +EMݽ,*HC*ZJQK24;Q:1OO71E**7 +,2XQ+.:AP*?4FMZS1RTX0+/TA0+6***޾K.***Q=Z +0J:LJ,1:>ܾ*V823,,N+*:4*߸NJUU>0.1-X=8:V6 +,轶X*S*,Y-ֿ9- +-*+*-4;2.**3J̹TII7/F4FP,:+*>Y6XNZM,Կ +2,OZK9JBV2@M,TB146Ǽ3QY-L8+?FKDU:79Ƹ +ѶG:QIS97ZDI6Ƚ4ٹ.+7*7GQ7>R;98O:0J +ѹN39+K*,ZS*Y3Q,*XNDS;NH*D1*6J6T=***XQ*I+ +Z/4YX@I=*޳>+IEF**7׼3F:*HW ++,5FNW69HP5U/EF7Q=V.;*@IC3.J/+1 +Z*ϾE;Q/OB䳴N-NEL*D,;8*/1I2 +R=N,ܽ+<*Q0*6NJ6T=***XQ*I+ܿ*AU623UF*;4S> +IE4:*F.**QN*H+A2C6=R+R<*6Q,J:RE:/:,ׯC<*ڷ +,Y6.=@4,N*84R,P/0*.*C*ƸQ:0ӽ3***=9G*S*W9 +A1.:9B1PA9.;+*DM,5.HG:.2**,L3J=S +,F-Ͷ1>01K2YZ.;*+-ٶ;M±O.NJ;+6OV*+4@: +,J*I/:71=+EI3:G;R1VZؾW.B6LR*T?ER-M=NYRV.V +;*Q0*6QJ6T=***XQ*I+BFI419WT:0ӽ3***=9G*X65G@J/Z:*. +X-ٿ;51::1,*.J3+KHGί8JC<*ڸ,䲵BZ0*AUBų +JQZ0U>JCIT322,:,1ؾ-ؼ:*;,Ѱ+2/32F54J8M* +ɹ,.Q +P4Cֺ5L2***滳+<*;-/B:NBP****E*+8TUSZ +*7.>*7/9:CAƾZL8JM3XNS.麯߶IQNK/0 +ƾIH3ڹ3.=*+ENJX..,.1Ǻ<+<*-JL +D*->2 +Y9*QͰW,EMETX*+TQ78*Z*J*=+H8,ZJV,R+6GYEE*Z +*J*=+XJS*0T:0ӽH*ӽ-*0*XQ4,8CK*0T:0ӽH*ӽ +-*0*XQ4**3-.I*BRB*J77*B*:HS-3,CR*-,?2Y9* ++*-*L=/:+PF-6/ZJZ,R+6GYEE*Z*J*=+H8,ZJX,R* ++@+*4-Wܷ+CX5-9BJJ,*̯*1R4?* +*21*I1JU/H>RQJM92۵KNH30.*T*9.G<.V, +OM;*2OHE긲SYC:+6**1*P,8.:Mֹ/,IMJE<++8Y3V1**-:I-/N1.6*.2 +J޳8C8JVEH:PGS.QJ3,.9S*FX:;²KM:B4.VUU,*4+,/ +TJ*Z2-,>2;4X3+HG:A.QNN?DOL=VHN +U>˱6MJ<+Z7ܸ*C/C7J=9ǾK+1N +:,JI4<++3L2M12RQ+.S*1*+7̾K-J1.*߿FSEL9Y=8J0G2*T:J*;MXP +ATY2*:MP7**+*-?2.**=2J,Z*K;-+.B82,**22M=R +A*,2B.L*/*H*-LN0+3X/:,*-13**,?>:R +KU߿,OV*-;*,S*X>;FV+I35,071>2>FR5CNC2/5 +/,HIRRC:8I<5KIJո114+XFHڿ-8=ںL646*2T5C?+8 +>3G3N5X7/H*I5+93D+ODJ?-M*0V:0ӽ3***1 +6XU4/C12IZ*+KZ0:*KC9>I/:>3*4οTعZ-0*. +*L==.>;VGLDVM;I<+*SC2C51,+L=JD06A* +1ZB8F--+1F2QHUX*T5+3ING5N>>0.TQ +=5G*RGA-**A*J<+8*H=1*;Y*3FT0:5U5-3HL0O,5E޾/ +E+**4U6/C1ո**:-:*C9F/5J,6XPV;67 +G+*>2.67O<5==>G*,.?L2926779.*G--.Lѵ8K +=06A*J2-P1F⿸HF*E/=*Z7>*632TQ,*EB1Qۻ5 +:-8.*0;6;.Q=5G*+ۿC>1Y1**X*N,8G3;޾M:,L81 +8;S:-H+*?2.**T*G4U9O6=O+91+麯 +NW+1NU-+2,H:8GU-,;GRW,887O<5CǾ3B5 +̾긺2KĹM.18*3YZLYO9Z7ڰ=;+VMO@018JG/8 +,3๴0NTH*F091ռH8/3RYK.-F.WNL +9F8W5**V*J3,<>B2.J-ML4EW+-T?2Y-*XN7 +.*AXJJP*D+S4L.59޽I.AJFLJ+AP,MU9+L/BN9+-1JZ +<+;V/7N3/=49->NCHC>:WPI;-@ +4M:YԿ.I7LGM=-AI8/FR-,-*QI2@;36ȶT? +8ϱF7L9IAN0KA?Q>HKFNY2G>LLDGAR,*0:ݽI7 ++3C,5>,U:EUV-@1:R. +XN+G6PBJDL-+L2<:1Ͼ¸:N,:GH.I6;5OM5+E+* ++0,XW޿-FT*3C//*QLV2LG.F=/9ZJX78.1->B8L,5VX?,-T? +2Y9*09*W<񻱸R*+J+L8,;J5帱+3:D1ܵ +߻6-ү;E*ƹ@1-0*0*C3FM*3CS/FZ=/-Q.*8޿0FL5=73Q +0FG3MP,62J6T*:M鿴,6+,6ZU2*ǹ2ο?.RAR +1,*+*U0+0JLĺT+168-X7J2++ڰ=-*ǹ7>AE77UF00C +E?޾ذ/-*C:YK1@*/*YCG0FF*3C.FZ=/-V*,T*ߴFM3 +A5-F˹:,0?U:0ӽH*ӽ-*X*+8.3M*3C.A*L. +83KF:5ʶ:+QZREUBFEMI2QZ;KHFO6@=<,0.?T:0ӽH*ӽ-*X* ++K,;9L1F*2-82++537R6/N115=MN3R+->2 +Y9*+*A*J*P:+N1;-XN1:-,3Q+,:.*XLO;,-; +QN0<36:.+7O4K1**0**E2,13JLĺ*=*J/8>J. +++Fƾ-Ӷ,QD*3Fؾ=.8޷,Fŷ8/1<+?4K+*0B1*4,XH2 +=5F*:0*IZ>/**G*M9A-SW*CX31**+?4K+**4 +,=IU5A:MO߷*49.F<.**G*M9A-*?H,*HC*ZJM,R +***+52:MO߷/,IMS:0ӽ3***O**Q,H1/F*UE<2*UW*Q*693 +C-2׺ɹ@*+*-T>2.**=12*:*C7W0<>*+C17ZZ +*޶4J:6:J**22̱=X1,2B.L*/*H*-LN*2 +3=.8B6+VHKAG5**+/?4K,**/EXJ6GB5VFP +*:*K:8I/:3>3**,O<:RKU+߿,OV+*-;*6F.VHKAGU +.:ݽQ-.߰:ϼN=*J4Ķ36J6T=***XWN,,12IZ452--6* +1+28JS*KHMJ.VDEJ-W1I0*L@:׹/*V+*SJDK6N9 +޷4CF޾8/E+**,NW@A:J̹ε8-.-+6I*1+OHS*-.2UJ +H7+9G-*;Q,***Ҵ::V0<ʴ1;F޾N*;JҾ +1W3.Q3FZ:ZG+JXFCU+*0*Q4X,828F׾6005 +:BN;:;J6-<:*0NM:0ӽH*ӽ-*0*Q4X,828F׾6005 +:B+׶*Q9;LNA?*8K޾FX.-*C**N+5*R7J*1QX5 +2EV@5=ѯ12;X33YZG:KX1:QZJ23,R+6GYEE*Z*J +*10*1*FɶH18IF==JJ6,.7L;K+,03̽, +-82Y9*+*-*=/A+1.1V?IFF5=K@J:V*:O@+R;QZJ ++R+6GYEE***I*E3R2K*1QP+T/߿-FUME.*8CG5F44S?L8 ++.THRX+ZJ+R+6GYEE*2*B1>K4G޾-**-V-*BJE ++>FA0*IZ>/**7,2X,RR-B*Tθ*5RJT-DQ-/FT0 +63**HX8.<4+0WPж4+-͹/*;*YJ9RJ>0+1K+ +**V*A/B*/1,8JL,*0+ͳ+־Z?8*G޾ +CQ*IJ-1?/NA2@㿾LQ;IDڼֹ5Q88M.05**/*+ +/,2:B:BP***F*D2E5:MO߷/,IM.@T1X:EN*AZ<1,=C5==1:CGQZ2*JF +A***+1K,**-Tʽ+K>OMUU*.0/B*FRZN +J*J*,X1*+S3*4-<=+*R*J>*>2-,>2;θ* +R3+HG*5CB0C*F>LѲSN-2L-Z:W7вU*9ǾP<> +Pڸı-+M-2̰=ָ+*A?73H<981*62HJ6T=***8B*DA@ܽIXP ++WI-Gմ-.X*8J-:2/0I/? +8̽+ιL,VF>*6W2/.:S-I=5F8>YWV04+U@8 +=EC7G1+*+2:3N0ZJ+R****J55Z9G@-I4J2XI+9 +E*+>NN:,JT6.:3/,RװI=7*R-T2:,/2JZ9+AM*IK*1 +:.J2׽->@A:.7L+.:**20.KEZ7+C;+CB>*BG>Q4H +74HJKSY2*:GZ2ݰBK7**@9*5,.,BδBP***, +ϻ,F־:*CX64C2JJ3:**FI>:N:,JX*9.:K6/BZ5AL.>˾ +9.:,*JM+,+A4XP=XF8>IV0*U@8=5F?Q ++NR*-*A64+*2-C޳BK./+,=M-K<+0AP,XL4C83ZJ+R +***R/:LTIؾ:*CX@Ƿ*K*J+*Y=R<2+*.NJ*/,R- +/.++XJ**NJ*YC5I2+BBϰJ*G>1/*B-4-NBQ2Z,5XK+1K4* +?Z6*2T5C?+8>/X3NAL*6N0*иӲ0U@8=5F5Ż+%% +d +1384 47[1 0 0 1 0 0]sl 8 false 0 517 di +/sl 65048 string uc +*+*2LYJ7-5H-/4*,+X/3FؿO7-.N3EM޾;-E+**J+* ++4A*D,1,*7K*++>:N:,JT:0K*UZ6+YZ*3Z: +***,/*J*RHBJNWL/V,*CY*W97=FLK-2/-+1FJHǽ.BI4H߾ +=<*LE:QI+L3/V7+VFPV8Y.X2?Pޯ9+:L +:*ݽYL6XK4C=.0C:0ӽ3***AJ̹ε8-.-+6I*1+OHS*- +?QQ90*RBV>**G*,*:*66:2,E**K>8:8IEGB-B* +TNL98*,*T,>+>*632TQ,*E31Q+.3*ZݰB篷 +;**8*2?,,B2FHH6X.,OGN3EM޾?-E+**,1EK +<*1*NNKTQY*TTQӿ*Q*ﳴ92,-D2 +R.B,->TT0XC3*K?4:J0N޿6S*1YEGI +GEEGFEٶ/*<,չ38N+<ξ5=?+H.@ +G-?7=TTX/.-T62Y-*XF71F*C/*8->2@H2*GY*-2Y./L +.:H,4?I@-09=*O,N4M+2+7.>,3L+FQW>-I +-*,,1T?X/27829,8FQJ*S=ZJݶ+R+6GA5YWQ* +-2ڰ,;W3RJLGB-9CXCFCFT+=3P +*:/?FE33=80CKFB-,8H+;,.K1**-*:LHSM3*Ÿ +*L*348:/?FE33D-,8H+-K1**-*:LH +SM3*Ÿ*LM*D=-*3XRGǾ̶1SLNN++ڽű޾*,-*C +*+*2LG>.FMG1=X,CGQ-*<:GǾK;:5QJ*3 +BLʾB*J773?4J+*27**O+:41XJK+ERM=P,XK@4*-*PJ0P-1< +J48.Tζ12:XJ:++ڲU2+/6RCJ6T*:MU0*VA*R=G9Z +J,,R+6GYEE*Z*:LC6¼+K2K+*0B1*8N+SF+CX45-9B +JJ,*8B*.FD.5GGWAU4A*J+Tɯ:ݽQ-6RNJ6T7*ZQG0J,XB +,B*/1,8JL,*8B*.FDڶY*ZYڱ+*6*B:HBP***ڱ5/ +:MO߷/,IMIK+C,.0 +ǹX1Nξ-ZBWX<2+UIED/.*;+53,7G<3=C +Y*Q0*6TJ6T=***8B*Q5۵@.J+C7W0<>*+C17ZZ*޶4J< +T<2+:P0,,+VC30*W+߾53,7G<3LCY*>+J4ɳ15R +@C-0?U:0ӽ3***@JT4++EC>:6:J**22̱=X1,2B.L*/*H +*-LN*23=6*8B3:N/,*.*TƵ5O/;ϳԾ+4K +,**/4XJ6GB5VFP*:*K:8I/:3>3**,O<:RKU+߿, +OV-5*X;G<3,9Y4M*Tƴ5KDN8W/6RUJ6T=***XW2,,1 +2IZ452--6*1+28JS*KHMJ.VDEJ-WQ<.EOFѾF@5QT@*B:FBP***,IJ:/ARJ̹ε35L-RIS4 +2>+SAIHWH:3*--6*8B3: +N2IM,*-*23,O*Q:N/Y6++FRB-,/*-<=M* +ZKй.438L5C*-:2Y9*8<-.FFN+@4JNG+ED-/2 +-J**X1G9>3F=M/:VKöE?G/*6RHJ6T*:ML+39:*.:+R +*+AV0**8>J6++,G:*2:8G/F..7F4-AH/RF@YN+CE0K1* +6++FRB-,/*D**Q>/81گ>4;ò3ZJ+R+6GY +EE-**14:0*X+8J-Q4K0׶.15T0N:*-72Y9*K* +ݽ-*:2Z,:*+޿8ڹI.@0M=6Q,XIGOFH*0NG:0ӽH*ӽ- +*HC*ZJ,,R+6GYEE*+*-ȶ;2Y9*+*6*B:>BD**5*޿. +1F5B*1,>**2JX5JM+T8*RT+0WPR*/T8-I?L +8F>1GGWAUS+*HC*ZJ?W,R*GB-3ܺ8=A:MO߷*49.F<. +**7,I,NC+TBIDڼ64J1-6FAM>*-W@/U35@*+ +*-3=2.**T*+G4F,9J;3N=*XLQ>PFJ*36:BJұD/:1+ +5G*DQ;NW+ND8O0+J7N0ܽ6**6*BABP***,2SVϾ6GAİ.Y +3V1**-:I-/N1.6*.2J޳8C8JVEH:PG+JQJ3HD**/*,:7 +EL87JLR4;5TA66.Q+Dz*5:Q.9ǽFZ?Z.޾. +E+**4.-,Iξ6GPP+WI-Gմ-,/õRJ*1C+K**::FQ:8>I/:>3*5- ++.2M+08+:?O=:-+<**R*ܲ³2:JI,MZ1:Ȼ1R +YN*>-00N3YA1V0X**V*-<2.**T*>:,/õ +QDZ-:1+2,*S*JJ.*:R<++,6?FX4J78>:V1.2-+*;++ҽXQ +M.++H+J0帾1,*=7J<2/L*W߻*޹+0O +:0ӽ3****QS*KX/48;>A:10B*9,:F*<2*S7״YP +0+NV**+2>*2P-+J*;3?:G-RC*C=8BK=G>7M*J,/10ո**:-: +**4JA*=+4=ѹC1-ٵ>6JԽ4S*8J+BDI2*002PVQV8. +*RGJG.ZZ8N3C5Ư*/0J+8O;-K.޾T.E+**4F +=J+CPV2I8M3XNS*K*<θGDYAS齺K??=J +=*D1M+V+7.>,O6鼿+4?XM-Z/3F+K?HU +0<;*IοL* +IBKNBJ=2,AG>9Z3F+***T?Ӳ+F+N-A<ڰ* +/0J+8O;-K.޾F.-*CX@M*+51:ڷ/L2<:1Ͼ¸*I6+@4J +N6?A* +d +1384 47[1 0 0 1 0 0]sl 8 false 0 564 di +/sl 65048 string uc +0X**8..*ZA*6RJ6T*JM.*-<*,;J5ȯ1ѿGG4J +޶6?AB*,R-:*<>-H9/ZJ7G,R+6G14.2T9+I6*۸++F2 +M3+,B;B*J7+UAD-/>+6/;*-T<2Y9*S۸,**J> ++.FʾQ*6J6T*:MU0**޾V.-*C*=-*0O:0ӽH* +ӽ-*HC*ZJB,R+6GYEE*+*-C=2Y-*6Z8*>.:/R/SX6* +-+S4**E,USAJM+6/2L@:J85?W**6QJ6T7*ZQG0-KTA:J +*?I2N,33**E,SA:P>.JXL*JEMɿ9/JһJX ++-H6:*B,.L*Nǿ*@J*?U0+J5JF,N*+,R*37>,:Ӻ92 +P5˲,9L;M=-*6*L1+-T@2.**E3:*CX64C2KJ +2:**..3Y-Q+.6O,;*,J*K9R+ٶ;M*±O.N0*JA8*U*+ڵ08 +:B2J<01/PD1AV*J*:PG05BڵBP***F*GE>:M?@I, +ICQ9I.J2Y-Q+,O,;*J..B4ZT*ξZ3G:**G+S+AJ3.BJS +19UA7YOɹTZ+J+*6.FD5=-Q+,ZJ,R***,+9M> +:MGEQMSYJR96Z+I.JX-Q+.6O,;*E*7Ͼ5*:75F +о595QV0=7Oɹ@*Z*J*<,;-A.޾/E+**+69Ͼ6G +JT1G671:31,B*9,:ɺ+*1I3:ԾH3IHEJ-ݻM>,*Q/̺B +JS*2TʾؽX4=769/**-*L=/@+O++U*0W:0ӽ3***A8J0 +,-:F<*1*NNKTQY*TTQӿ*Q* +92X**-V+AHZ6>JGHSETR2;52I2@H2*GY*-2Y./L.:H,4 +?I@-09=*O,N4AD**ۿK,޾59B0R4JW+T1:+ӹFB*NM<޿5J +3ڱ5۸>.F-+O/*BֱB*J@=HJ*F/.X+>1A>P ++@4JN6?**-*L=/D+ŸF-H4/ZJX,R+6GA5;1O*RNP2,4,G +޹>FZ+*0*XQ4,8޷0>4޾ִ/-*CXI+N9Y*+*U,F˾ +G*/+B:UB*J7/Z**H*3R7J*Z

2Y9*+**J+,BMB*J77*R**5*8V +T*0NS:0ӽH*ӽ-*HC*ZJJ,R+6GYEE*+*-44?2Y-*6Z8*>.+ +F:OJAXJ:LJ41=B23+-U4*0+.*O+R:+,,F-ݵ>JQDJ +,MWSE*4T-*;N:WK9*-+F:4շUL69 +λTE24SF*/684I5,:V,F-=3M +YFϿ4R+8RMJ=Z;+CN=A>5X޸DJU-1@:;SG-ӸJ*OY۸;,: +-ϻ,;L0TN./SHYC:FJU3@/7V/*Q0*62VJ6T=* +**T+.-*D5>:MOƹS@*4*,P5⺿*;ѳ3G+>**TŶ+K9T0J73,CN,5KSEF5;PQ02Ƕ޿/NNTQ*X86W/2P+X:;GFDH7V;0*Q0*62WJ6T=***T+./ +*5>:MGE,OGD19*H*DE5-5S:ƾٳZAI>: +ᰯ0JB14682B*?4+SU4-<=M踽SG3;TX;,WFM81.2 +?-O/117Z+*4*;5R=B;G.**B4T.3X.5F0MMHY +BA=6L2*1:O6=B5*,0PL.?QC8ZC9IHQZ?<**W-PZJS;VMNH5ᲯK.= +ED/QXK6߽;ĶԷ73*IY@>2ٵ=1ҰͲV97@F: +*@40RY5705N:KK;.1Y>DTYYB3FU-B0Z;.̽ +V/T*ܳZJ/-880-2Eͯ/NNTMM8?2?9FB,=2J +.MQ?GMù<*ARJ̹>/T=-,WLW41JL4/Zټ1PL8M,*ٳ +K-RO>>/>*N6Z7̾?ICKF,OMRP@6.B/* +@J*W6@A*3K*105XZ6OWY6:*;0J*N:P10;/*.; +.Jɸ,7ŶJ8;V.+KY2;AF3J/*=Z2/-8U?B,@< +4I5;GP +FUPJ+Rڵ>,7.N4:LX+I*0*ȳQ/73 +RU22*B,2:4J2>>³2:JJ;D28Q8L2:M5L/:B +R<=,ڷHIռR<86L3RZW*F +UUQJ9++:9CGMغB׾YR+*=-*0S:0ӽ3****S*/4 +83Ҷ*9301UGT?Q4BP1+YDZ/? +4//S-/.++XEHX*Կ-3*3T9.*9782FG=X:7 +K4*XN:F:*,-DLݸMF:HúC>F5L/.T19GKG5F +5I0NNT2XX*WF4-:I,HM2+<۳F4EU*6G- +X.N;;G+/*82N/,°5R02+W4K,**J?*>R:7J+C+BF +/AH9VN4,J*>93014JIRFS4FBI12+,2CV=ִYP +50+NV79.FD/Z;1ɳL97ZJS*RF=*LGB +A2,:*P;MFU-=Z*@V߱X2?4L3IU.1:/3ECZ0- +A<;S77UӸUJBJ>N*B:,NOҹ>*8=/*4HAV*8Q+X9R.A޻000=78 +.R/ANA2JCEO.+2Tܶ=0:Q8˾G:T0?͹9.1+IٴP>@:1R</0ο*,*H4,GM +4308*9H-JHS@YO0麯NW+=JI32׻J +GE4:L1>ZLV3RAUV6߿*6EM@+;꼼L.ֶS +ս5ݱص5X:KK:F3Uٶ>8-1XKE5:,WGLMLCK* +3.5P5:HX +R*MQ:.FƻF=UA3:S69/2AYD-LIM0R6CJ26F*JF, +;@FPGKۻK/FM+3/7D. +5K*PZ6-/,R+6䯾EQ65M-A<;S-?3VF18,I+* +FEFQ4°XPGGQ0.:AIG>9;9C=S.N,X7NVA, +XR*0NH:0ӽH*޻GO+J*5/:Ƴ +L81:F7V⺼NFC4*Q0*6RAJ6T*:MOHȳ-46>2T +,7VMP97.RCKF/26EI5TW4@Mճ;**6*B:IB*J +2**+<0K1**Q0*6RQJ6T*:MU0% +d +1384 47[1 0 0 1 0 0]sl 8 false 0 611 di +/sl 65048 string uc +*=-*0NZ:0ӽH**0**޾L0-*C*=-*0.:0ӽH*ӽ +-*HC*ZJ۹-R*+@+-3XF*T=A:MBXY-0D*Q0*6ƶJ6T7*ZQG0: +ַF̳ݶ+CXDտ-**޾A1E+**4JF/:FAJ+CXDտ-**޾ +A1E+**4J::I/:+J+CXE9,MQ,*.J+;B@3<Լ6+˽P+- +FACW=-*0ڷ:0ӽ3****,+S*K/4>ᲯNJ3J˾G/ +8Z?V?<1Z* +F63R+:;O,*J*5J.A6JV+O=>*+S8K,**+-Qӽ?34> +麯NY4A.L,U*GNJ6VJ1M,YS<2*3QϿENOS2;V* +5B,?5ܽ+U*62J6T*:M=S-L<ٺG;AVWL+*HC*ZJ-R ++6GNC92BK3/**+8K1*ڴZ8>B<<.P1,82׵ǾI@/2+37M̽+0L +,-ⷳ5@JIC*MAS5ܽ+U**6*B׿BP*1D4*4M0Xξ6GN3B +,1.PY7:+K4*;IM*ֺ-16JT6.:3Y*C*=-*0:0ӽ2*8 +-,2<ۿ5?:M=S*F+>+3H3J2**J33+,J*K9LAGO=-*0> +:0ӽ1*T-4Q+N5AVJP.Q+,-R,2+*+BP1Wʸ-N> +V?<1Z*F63R+:;O,*J*5J.A6JV+O=>*+7K+*O=3-8F +:Y6GNY>I5M,DRK2@JMY+QZJPRǾB*GN8.N:*< +3M-J:L+./AZ.KU:AA,ʷK+B:B*JP1NLX +,**޾Թ1-*CXEǰPI:ZF3C<4*+*-8H2Y9*N۲=P-K* +Q0*62J6T*:MU0**޾1-*C*=-*0:0ӽH*ӽ- +*HC*ZJ-R+6GYEE*+*-DH2Y9*+*6*B:B*J77 +**+Q9K+*@?41V4Z÷*207Ϳ08*+*-DH2,*B*J5*P*O*,,*G<*2C +/-G*J*/A,+*HC*ZJ-R**3/**TJP.Q+:6-R,R=+ +A+S* +**L*Z*>.=IT*9+-*,R:JAGO=-*0:0ӽ0*TH**, +N>=*I*1-*IB.,*GZ,JTO=>*+I9K ++*>4D**F*CXEEY2.ZIQ+N¯AB5 +G2,ԹROHYOA5Jݰ0**+I9K+*A:+Iо5B:M=SNRZ>NJ6VJ1M,YS +<2*3QϿENOS2;V*5B,?5ܽ+U*6J6T*:M=S-L +<ٺG;AVWL+*HC*ZJ-R+6GNC92BK3/**+I9K1*ڴ+D6AտI-7F*=-*0:0 +ӽ4*208Q6GNS1J;=+O*,:2ʻ.3VRUIľI=+޳8 +@R+*-G2Y/*NQ@=JPԴ19;+O*,M@B+ƾ*HX/AQ +08B*X?OY*C*=-*0۹:0ӽ3*K*ڴ+3 +H3J2**J33+,J*K9LAGO=-*0۹:0ӽ1*T˾:*CXE>?PZVL1* +8TU/A,+*HC*ZJ-RW*/N*<,JPRǾB*GN8.N:*< +3M-J:L+./AZ.KU:AA,ʷ++BB*JP1NL +X,**޾Ա1-*CXEǰPI:ZF3C<4*+*-G2Y9*N۲=P +-K*Q0*6ƸJ6T*:MU0**޾Y1-*C*=-*0>۸:0ӽH* +-*HC*ZJ-R+6GYEE*+*-HG2Y9*+*6*B:B*J +77**+K8K+*@?41F3޹J޿QZJZC56-D:0ӽ/*Z*TAO*9ȯ,07Cߺ+9̵׷+, +CZNN725FJK.UA6*BB@*J޷9.:*S/.D6A5Y:GN +/⺿;;2P+?,/:3O4*+*-G2Y/*·->Jɶ++ڴ+ +3Y-LZ*нG<:I,8:35N67FZ*9-I-2ž?RMU392 +U1NSANL*G/:/G;5PP7.9QF55C1999ΰR05R޾3:A4 +*޾ع1U+*/.ιK+ڴ+S***./+,:-,R99¾*58*N;,4+Z68BDC2J< +?3;,1װI=Ƕ,Q+N-AF3S-*Z0,:4,?QJX*@Z/ +=V*N6*B:BL*,VF*CXE<>I/9J3J*I0J06.: +G:.2**,8O9J/TA1,R:Q:42EH-ٶ;E:/,0X7= +0<=+-+-/Z1A4MͶ*@Zܽ/N-%% +d +1384 47[1 0 0 1 0 0]sl 8 false 0 705 di +/sl 65048 string uc +*=-*0:0ӽ1*T*׹/.<*2*Q+,-R,2+*+BP1/<@I, +ICQJ48Z+1GC51R+*?2::*ıHME<;@,BX7=0,=̷*Z +++ܽ-6*B:BD*XU-N-A:JP.Q+F6-+ZB*.P +=O.9B/.+++*B0,416JT12+-YP++0:0ӽH*ӽ=*.*? +2FƾKL1H1FH>R7O+I9K1*?*A+*X<,1=B:MUPX+3*2*ֿ54U1I.FN;I+I9K ++*,J*F+0ֿ-,-?*A+*X2+,*J6++/G.1A+<3*0 +:0ӽ4*20+ZZ?-,?*A+*X7MA*,*<2G.N8,8JD*-.FG*>8K/F*0>ܺ:0ӽ0*THEҶ+ +518K7/F;->>+1X?CQFE8+6RJ6T5*JR+*3.ӽ +-*8*ڸ,,>:VAZJ-RW*-*=2:MU0**޾1*5* +3.ӽṹK+BB*J77**+99K1**Q0*6RJ6T +*:MU0**޾޽1-*9**Q0*6J6T*:ż*0**޾ڹ1 +I*O-*=-*/»:0ӽA=9**6*>BIʺ***ξI1+* ++,F2ݽT1*Q0*4RJ6TSYPH**HC*RJ߿-RQC***J+7K +I-*=-*/>:0ӽA=9**6*B:߿R13***+/Q80ݽ*R1* +Q0*22Jܽ*A9**6*6뿺AA:**6*6:?..***Z15WJ +2//****99=J2-3*% +d +1384 47[1 0 0 1 0 0]sl 8 false 0 752 di +/sl 58128 string uc +*=-*.G:ݽ*1*Q0*02JܽS52*Q0*0RJܽS52*Q0*02JܽS5 +2*Q0*0JܽS52*Q0*0ƺJܽS52*Q0*0RJ9LA:J4+Q2QXL+JF? +49**99I:*,:M*MMT8>:< +Z*º6A.JS5***Zܽ1ܽ@+B*U40N1:FS>3R8G +<ƻ4EG:J*.ڷXADLTƾXEW.+LMTB˼N*X +-Aݲ+*Q0*0RJ,8FB5*FͶH3G>7;λպJ-G**72*WU +߿,2;L+,Y-/3*DE:*28*Tӱ3*H@+Y/Z18͵ +/L*8GA@ѺH<*<>+UUKV-Q8޲ȯJ߾FHD*I<*;VUF///*AJVD +.*>A޿U?*L*/96+66+ʹ+X6-BݲA.-*,8B4.8JF +6=.*BI2U/M*L8Uն5,<2/@7QJ0޿/CX/@****8N.I@* +*:0C4:8J5;.28X/=* +21T=<2/1V,U9EYGQ0*0RJ.Q+*X,H4:۸+0>I*F +-VX:RH22JJS?*ƸF*@QN:4VD8M*6о2+L=-*-һ:ݴ.3< +6ZJ@**HC*BJ-=IBYIVPI?6*=-*-۹:ݴ2D3,G+* +*Z޽1POQ-***19A++***8A++***8A++* +*+80ݽ*R1*Q0*6RJM-I¸***޾1:I*O-*=-*/:0 +A=9**6*>:BNIʺ***ξص1:+*+,G2NݽT1*Q +0*42J6:BNIʺ***ξܽ1:+*+,49H2NݽT1*Q0*4 +ƺJ6x^2/(x^2-1). + + +You can download XCAS here: + + +http://www-fourier.ujf-grenoble.fr/%7Eparisse/giac.html + + +The non-french users need to comment out every + +" \usepackage[upright]{fourier} " + +Just put tablor.sty and tablor.cfg into /texmf/tex/latex/tablor/ diff --git a/macros/latex/contrib/tablor/README-fr.txt b/macros/latex/contrib/tablor/README-fr.txt new file mode 100644 index 0000000000..df70726545 --- /dev/null +++ b/macros/latex/contrib/tablor/README-fr.txt @@ -0,0 +1,28 @@ +L'extension tablor.sty permet de crer des tableaux de signes et de +variations depuis latex en utilisant XCAS pour les calculs et MetaPOST +pour les tableaux. + +On rentre par exemple: + +\begin{TV} TV([-10,+infinity],[-1,1],"g","t",x^2/(x^2-1),1,n,\tv) \end{TV} + +et on obtient le tableau de variation de x->x^2/(x^2-1). + +Les tableaux sont construits partir du fichier tableauVariation.mp de +Frdric Mazoit disponible l'adresse + +http://frederic.mazoit.free.fr/LaTeX_metapost/tableauVariations/ + +XCAS est tlchargeable l'adresse : + +http://www-fourier.ujf-grenoble.fr/%7Eparisse/giac_fr.html + + +Les appels giac ont t amliors grce Yves Delhaye : + +http://www.yvesdelhaye.be/?Generateur-d-interrogations-le + + +Il faut activer le shell-escape. + + diff --git a/macros/latex/contrib/tablor/auto/tablor-xetex.el b/macros/latex/contrib/tablor/auto/tablor-xetex.el new file mode 100644 index 0000000000..2c7fbf4252 --- /dev/null +++ b/macros/latex/contrib/tablor/auto/tablor-xetex.el @@ -0,0 +1,51 @@ +(TeX-add-style-hook "tablor-xetex" + (lambda () + (LaTeX-add-environments + "TSa" + "TSq" + "TS" + "TSc" + "TV" + "TVP" + "TVZ" + "TVapp" + "TVI" + "TVIex" + "TVIapp" + "TVPC" + "TVS") + (TeX-add-symbols + '("initablor" ["argument"] 0) + '("nettoyer" ["argument"] 0) + '("dressetoile" 2) + '("dresse" 2) + '("coultab" 1) + '("ech" 1) + '("executGiacmp" 1) + "rem" + "cat" + "cp" + "echod" + "echof" + "nomtravail" + "tv" + "tvbis" + "echelle" + "couleurtab") + (TeX-run-style-hooks + "pst-eps" + "graphicx" + "babel" + "frenchb" + "fontenc" + "T1" + "latex2e" + "art10" + "article" + "ifxetex" + "ifpdf" + "fancyvrb" + "ifthen" + "filecontents" + "tablor"))) + diff --git a/macros/latex/contrib/tablor/auto/tablor.el b/macros/latex/contrib/tablor/auto/tablor.el new file mode 100644 index 0000000000..e9cbdd4143 --- /dev/null +++ b/macros/latex/contrib/tablor/auto/tablor.el @@ -0,0 +1,40 @@ +(TeX-add-style-hook "tablor" + (lambda () + (LaTeX-add-environments + "TSa" + "TSq" + "TS" + "TSc" + "TV" + "TVP" + "TVZ" + "TVapp" + "TVI" + "TVIex" + "TVIapp" + "TVPC" + "TVS") + (TeX-add-symbols + '("initablor" ["argument"] 0) + '("nettoyer" ["argument"] 0) + '("dressetoile" 2) + '("dresse" 2) + '("coultab" 1) + '("ech" 1) + '("executGiacmp" 1) + "rem" + "cat" + "cp" + "echod" + "echof" + "nomtravail" + "tv" + "tvbis" + "echelle" + "couleurtab") + (TeX-run-style-hooks + "ifpdf" + "fancyvrb" + "ifthen" + "filecontents"))) + diff --git a/macros/latex/contrib/tablor/tablor-xetex.sty b/macros/latex/contrib/tablor/tablor-xetex.sty new file mode 100644 index 0000000000..2ef9eba220 --- /dev/null +++ b/macros/latex/contrib/tablor/tablor-xetex.sty @@ -0,0 +1,3374 @@ +% Last modified: + +\NeedsTeXFormat{LaTeX2e}[1995/12/01] +\ProvidesPackage{tablor-xetex}[06/10/2013 v4.07-g la machine a creer des +tableaux de signes et variations compatible xetex] + +% \copyleft Connan le Barbare (aka Guillaume Connan) \copyright +% This work may be distributed and/or mofified under the conditions +% or the LaTeX Project Public Licence, either v1.3 or (at your option) +% any later version. The latest version is in +% http://www.latex-project.org/lppl/ +% This work consists of the files tablor.sty, tablor-xetex.sty, tablor.cfg, tablor.tex, +% tablor.pdf and tablor.html + + +%% Cree 16 environnements : +%% tableau de signes de 2 facteurs affines +% \begin{TSa} +% TSa(-2,3,-1,5,\tv); +% \end{TSa} +% %%%%%% 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],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],n,\tv) +%%\end{TSq} +% un tableau de variation : +% +% pour les tableaux de signes à une seule ligne +% \begin{TSc} +% TSc((x+10)/((x-5)*(x-2)),[-10,5],[2,5],n,0) +% \end{TSc} +% +% +% \begin{TV} +% TV([0,+infinity],[0],"h","x",ln(x)-(ln(x))^2,1,n,\tv) +% \end{TV} +% +% tableau de variation avec liste de valeurs +% \begin{TVS} +% TVS([1,2,3,4],[-1,-infinity,+infinity,2,9],[2],"f","x",\tv) +% \end{TVS} +% +% tableau de variation avec zones interdites +% +% \begin{TVZ} +% 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,n,\tv) +%\end{TVI} +%%% +%%% +% tableau avec valeurs intermediares et racines exactes +%\begin{TVIex} +%TVIex([-1,+infinity],[-1],"f","x",x2/sqrt(x+1)-1,1,2,n,\tv) +%\end{TVIex} +%%% +% +% +% tableau de variations avec f' sans zero 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 zero formel +%\begin{TVIapp} +% TVIapp([0,+infinity],[0],"g","x",ln(x)-x*exp(2-x),1,0,\tv) +% \end{TVIapp} +% +% +%%% +% et leurs pendants etoiles qui permettent l'affichage intermediaire du +% fichier metapost pour le modifier +% +% +% 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,n,\tv) +% \end{TVP} +% +% +% \begin{TVP} +% TVP([0,pi/2],[[],[]],["x","y"],"t",[2*cos(t),sin(2*t)],1,t,\tv) +% \end{TVP} +% % +% % +% Fonctions prolongeables par continuité +% TVPC([intervalles d'étude],[valeurs prolongeables],[valeurs interdites pour f'],"g","t",e^(-1/x^2),1,n,\tv); +% \begin{TVPC} +% TVPC([-infinity,+infinity],[0],[0],"g","t",e^(-1/x^2),1,n,\tv); +% \end{TVPC} + + + + +%% extensions requises +%% Il faudra rajouter dans le preambule \usepackage{graphicx} si vous +%% ne l'avez pas de base + + +\RequirePackage{filecontents} +\RequirePackage{ifthen} +\RequirePackage{fancyvrb} +\RequirePackage{ifpdf} +\RequirePackage{ifxetex} +\fvset{gobble=0} + +% option xcas present + + +\newboolean{xcas}\setboolean{xcas}{false} +\DeclareOption{xcas}{\setboolean{xcas}{true}} + + +%% Initialisation du choix d'OS +\newboolean{windows}\setboolean{windows}{false} +\DeclareOption{windows}{\setboolean{windows}{true}} + +\ProcessOptions\relax + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% +% pour xelatex (ne marche que sur unix....) +% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + + +\ifxetex + +\begin{filecontents*}{convert-mp-pdf.sh} +#!/bin/sh +mpost -interaction=nonstopmode $1 ; + +cat>$1.tex<> + + +\immediate\write18{chmod 775 ./convert-mp-pdf.sh} + +\fi + + + +%% on configure tablor dans un fichier exterieur pour la plateforme +%% et l'editeur + +\IfFileExists{tablor.cfg}{\input{tablor.cfg}}%\typeout{pas de fichier tablor.cfg}} + + +%% Definit des commandes disque selon l'OS utilise +\ifthenelse{\boolean{windows}}% + {\newcommand{\rem}{DEL } \newcommand{\cat}{TYPE } + \newcommand{\cp}{COPY }\newcommand{\echod}{ECHO } + \newcommand{\echof}{}}% + {\newcommand{\rem}{rm }\newcommand{\cat}{cat } + \newcommand{\cp}{cp }\newcommand{\echod}{echo "} + \newcommand{\echof}{"}} + + + + + + + +%% pour ceux compilant via pdflatex + +\ifpdf +\DeclareGraphicsRule{*}{mps}{*}{} +\fi + +%% pour nettoyer les fichiers auxiliaires + +\AtEndDocument{\immediate\write18{\rem *.user XCas* Xcas* *.mpx} + } + + + + +%% Pour clore les fichiers metapost + + + \begin{VerbatimOut}{queue.mp} + + end + + \end{VerbatimOut} + + + +%% Nettoie les fichiers log dont le nom depend du choix de l'utilisateur +%% Par defaut, c'est le nom du fichier tex courant (\jobname) +%% Clôt le fichier metapost contenant le recapitulatif de tous les tableaux + + + +\newcommand{\nettoyer}[1][\jobname]% +{\immediate\write18{\rem #1_Tab.log queue.mp enteteMP.cfg session.tex config.cxx} +} + + + + +%% Donne comme prefixe aux tableaux le prefixe courant +%% Peut-être modifie par \initablor + +\newcommand{\nomtravail}{\jobname} + +%% initialise les compteurs + +\newcounter{TVn} +\newcommand{\tv}{\theTVn} + +\newcounter{TVnbis} +\newcommand{\tvbis}{\theTVnbis} + + + +%% permet de donner un prefixe aux tableaux produits (\jobname par defaut) +%% effectue quelques verifications : + + +\newcommand{\initablor}[1][\jobname]{% +\renewcommand{\nomtravail}{#1}% Arret du nom des tableaux +\setcounter{TVn}{0}% Initialisation du compteur de tableaux. +\ifthenelse{\boolean{xcas}}% Avec l'option XCas +{\IfFileExists{\nomtravail_Tab.mp}% Si Tableaux.mp est present... + {\immediate\write18{\rem \nomtravail_Tab.mp}}% le detruire + {}% + \immediate\write18{\cp enteteMP.cfg \nomtravail_Tab.mp}% Reconstituer l'entête de Tableaux.mp +} +{\IfFileExists{\nomtravail_Tab.mp}% Sans l'option XCas, si + % Tableaux.mp existe +{\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 ) +}}% + + + +%% commande pour lancer giac selon l'OS + +\makeatletter +\newcommand{\executGiacmp}[1]{% +\ifthenelse{\boolean{windows}}% +{\immediate\write18{giac #1 }}% +{\immediate\write18{giac <#1 }}} +\makeatother + + + + +%%% +% +%%% LES SCRIPTS GIAC/XCAS +% +%%% + + + + +%% +%% Code giac/Xcas pour les Tableaux de Variations +%% + + +\begin{VerbatimOut}{XcasTV.cxx} +TV(L,F,nom,nomv,f,ftt,trigo,nmr):={ +nl:=size(L); +f:=unapply(f,x); +fp:=function_diff(f); +Z:=concat(L,F); +S:=[]; + + +if(trigo==t){ +all_trig_solutions:=1; +reset_solve_counter(-1,-1); +SS:=solve(factor(simplify(fp(x))),x); +ns:=size(SS); +for(k:=0;k=L[0]){ +S:=concat(S,simplify(subst(SS[k],n_1=m)));m:=m-1; +} +} +}else{ +S:=solve(factor(simplify(fp(x))),x); +} + + + si size(S)>0 alors pour j de 0 jusque size(S)-1 faire + qq:=member(simplify(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,simplify(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,simplify(S[j]))}; + fpour + fsi; + + +Z:=sort([op(set[op(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; + + k0:= evalf(limit(f(x),x,Z[0],1))> evalf(limit(f(x),x,Z[1],-1)); + kz:=evalf(limit(f(x),x,Z[nz-1],-1))> evalf(limit(f(x),x,Z[nz-2],1)); + +lsi:=lsic+nom+"'("+nomv+")}$ etex);"+ + if(Z[0]==-infinity){if(sign(evalf(fp(if(Z[1]==+infinity){0}else{Z[1]-10^(-5)})))==1.0){"plus;"}else{"moins;"}}else{if(member(Z[0],F)==0){ + if(fp(Z[0])==0){"valBarre(btex 0 etex);"}else{" "}+ + if(evalf(sign(fp(Z[0]+10^(-5))))==1.0){"plus;"}else{"moins;"}}else{"nonDefBarre;"+ + if(evalf(sign(fp((Z[0]+10^(-5)))))==1.0){"plus;"}else{"moins;"} }} + +if(nz>2){ for(r:=1; r<=nz-2;r++){ ksp:=evalf(fp(Z[r]+0.1))>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{"nonDefBarre; +"} +lm0:=limit(f(x),x,Z[0],1)==-infinity; + li:=lvic+nom+"}$ etex);"+ + if(member(Z[0],F)==0){"valPos(btex $"+if(lm0==1){"-\\infty"}else{latex(simplify(limit(f(x),x,Z[0],1)))}+"$ etex,"} + else{"nonDefBarre;limDroite(btex $"+if(lm0==1){"-\\infty"}else{latex(simplify(limit(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(limit(f(x),x,Z[r-1],1))< evalf(limit(f(x),x,Z[r],-1)); + krp:=evalf(limit(f(x),x,Z[r],1))> evalf(limit(f(x),x,Z[r+1],-1)) ; + lmrm:=limit(f(x),x,Z[r],-1)==-infinity;lmrp:=limit(f(x),x,Z[r],1)==-infinity; + lp:=lp+if(member(Z[r],F)){ + "limGauche(btex + $"+if(lmrm==1){"-\\infty"}else{latex(simplify(limit(f(x),x,Z[r],-1)))}+"$ + etex,"+if(krm==1){"1);"}else{"0);"}+"nonDefBarre;limDroite(btex $"+if(lmrp==1){"-\\infty"}else{latex(simplify(limit(f(x),x,Z[r],1)))}+"$ etex,"+if(krp==1){"1);"}else{"0);"}} + else{"valPos(btex $"+latex(simplify(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:=limit(f(x),x,Z[nz-1],-1)==-infinity; + + + +lf:=if(member(Z[nz-1],F)==0){"valPos(btex $"+ + if(lnz==1){"-\\infty"}else{latex(simplify(limit(f(x),x,Z[nz-1],-1)))}+"$ etex,"+ + if(kz==1){"1);"}else{"0);"}} + else{"limGauche(btex $"+ + if(lnz==1){"-\\infty"}else{latex(simplify(limit(f(x),x,Z[nz-1],-1)))}+"$ etex,"+ + if(kz==1){"1);nonDefBarre;"}else{"0);nonDefBarre;"}}; + + + + + +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; + +";}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); + + + }:; + +\end{VerbatimOut} + + + + + + +%%%% + + +% +% +% TVPC : pour les fonctions prolongeables par continuité. +%% +%% + + + + +\begin{VerbatimOut}{XcasTVPC.cxx} +TVPC(L,F,FP,nom,nomv,f,ftt,trigo,nmr):={ +nl:=size(L); +f:=unapply(f,x); +fp:=function_diff(f); +Z:=concat(L,F); +Z:=concat(Z,FP); +S:=[]; + + +if(trigo==t){ +all_trig_solutions:=1; +reset_solve_counter(-1,-1); +SS:=solve(factor(simplify(fp(x))),x); +ns:=size(SS); +for(k:=0;k=L[0]){ +S:=concat(S,simplify(subst(SS[k],n_1=m)));m:=m-1; +} +} +}else{ +S:=solve(factor(simplify(fp(x))),x); +} + + + si size(S)>0 alors pour j de 0 jusque size(S)-1 faire + qq:=member(simplify(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,simplify(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,simplify(S[j]))}; + fpour + fsi; + + +Z:=sort([op(set[op(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; + + k0:= evalf(limit(f(x),x,Z[0],1))> evalf(limit(f(x),x,Z[1],-1)); + kz:=evalf(limit(f(x),x,Z[nz-1],-1))> evalf(limit(f(x),x,Z[nz-2],1)); + +lsi:=lsic+nom+"'("+nomv+")}$ etex);"+ + if(Z[0]==-infinity){if(sign(evalf(fp(if(Z[1]==+infinity){0}else{Z[1]-10^(-5)})))==1.0){"plus;"}else{"moins;"}}else{if(member(Z[0],FP)==0){ + if(fp(Z[0])==0){"valBarre(btex 0 etex);"}else{" "}+ + if(evalf(sign(fp(Z[0]+10^(-5))))==1.0){"plus;"}else{"moins;"}}else{"nonDefBarre;"+ + if(evalf(sign(fp((Z[0]+10^(-5)))))==1.0){"plus;"}else{"moins;"} }} + +if(nz>2){ for(r:=1; r<=nz-2;r++){ ksp:=evalf(fp(Z[r]+0.1))>0; + lsp:=lsp+if(member(Z[r],FP)==0){"valBarre(btex 0 etex);"}else{"nonDefBarre;"}+ + if(ksp==1){"plus;"}else{"moins;"} + }; } + +lsf:=if(member(Z[nz-1],FP)==0){""}else{"nonDefBarre; +"} +lm0:=limit(f(x),x,Z[0],1)==-infinity; + li:=lvic+nom+"}$ etex);"+ + if(member(Z[0],F)==0){"valPos(btex $"+if(lm0==1){"-\\infty"}else{latex(simplify(limit(f(x),x,Z[0],1)))}+"$ etex,"} + else{"limDroite(btex $"+if(lm0==1){"-\\infty"}else{latex(simplify(limit(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(limit(f(x),x,Z[r-1],1))< evalf(limit(f(x),x,Z[r],-1)); + krp:=evalf(limit(f(x),x,Z[r],1))> evalf(limit(f(x),x,Z[r+1],-1)) ; + lmrm:=limit(f(x),x,Z[r],-1)==-infinity;lmrp:=limit(f(x),x,Z[r],1)==-infinity; + lp:=lp+if(member(Z[r],F)){ + "valPos(btex + $"+if(lmrm==1){"-\\infty"}else{latex(simplify(limit(f(x),x,Z[r],-1)))}+"$ + etex,"+if(krm==1){"1);"}else{"0);"} } + else{"valPos(btex $"+latex(simplify(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:=limit(f(x),x,Z[nz-1],-1)==-infinity; + + + +lf:=if(member(Z[nz-1],F)==0){"valPos(btex $"+ + if(lnz==1){"-\\infty"}else{latex(simplify(limit(f(x),x,Z[nz-1],-1)))}+"$ etex,"+ + if(kz==1){"1);"}else{"0);"}} + else{"limGauche(btex $"+ + if(lnz==1){"-\\infty"}else{latex(simplify(limit(f(x),x,Z[nz-1],-1)))}+"$ etex,"+ + if(kz==1){"1);"}else{"0);"}}; + + + + + +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; + +";}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); + + + }:; + +\end{VerbatimOut} + + + + + + + + + + + + +%% +%% +%% TV avec une zone interdite : on rajoute comme argument la liste des intervalles interdits +%% par exemple, pour sqrt(x^2-1) : TVZ([-infinity,100],[],[[-1,1]],"f","x",sqrt(x^2-1),1,1) +%% + +\begin{VerbatimOut}{XcasTVZ.cxx} + + +TVZ(L,F,FF,nom,nomv,f,ftt,trigo,nmr):={ +nl:=size(L); +nf:=size(FF); + Ff:=NULL;IMIN:=NULL;IMAX:=NULL; +for(k:=0;kL[0]){Imin[k]:=FF[k][0];LL:=L}else{Imin[k]:=L[0];LL:=[L[1]]}; +if(FF[k][1]=L[0]){ +S:=concat(S,simplify(subst(SS[k],n_1=m)));m:=m-1; +} +} +}else{ +S:=solve(factor(simplify(fp(x))),x); +} + + + + + + + si size(S)>0 alors pour j de 0 jusque size(S)-1 faire + for(k:=0;k=evalf(L[0])) and (evalf(S[j])<=evalf(L[nl-1])); + kK:=(evalf(S[j])evalf(Imax[k])); + Kk:=(kk) and kK; + if(Kk==1){Z:=append(Z,simplify(S[j]))}; + } + fpour + fsi; + + +Z:=sort([op(set[op(Z)])]); + +nz:=size(Z); + +for(j:=0;jImin[j])and(Z[k] evalf(limit(f(x),x,Z[1],-1)); + kz:=evalf(limit(f(x),x,Z[nz-1],-1))> evalf(limit(f(x),x,Z[nz-2],1)); + +lsi:=lsic+nom+"'("+nomv+")}$ etex);"+ +if(member(Z[0],IMIN)!=0){if((member(Z[0],F)==0) and (fp(Z[0])!=undef)){"debutNonDef;"}else{"debutNonDefStrict;"}}else{if(Z[0]==-infinity){if(sign(evalf(fp(if(Z[1]==+infinity){0}else{Z[1]-10^(-5)})))==1.0){"plus;"}else{"moins;"}}else{if(member(Z[0],F)==0){ + if(fp(Z[0])==0){"valBarre(btex 0 etex);"}else{" "}+ + if(evalf(sign(fp(Z[0]+10^(-5))))==1.0){"plus;"}else{"moins;"}}else{"nonDefBarre;"+ + if(evalf(sign(fp((Z[0]+10^(-5)))))==1.0){"plus;"}else{"moins;"} }}} + + + + + + + + + +// modif 3 avril 2010 + +if(nz>2){ for(r:=1; r<=nz-2;r++){ + lsp:=lsp+ + if(member(Z[r],IMIN)!=0){ + if((member(Z[r],F)==0) and (fp(Z[r])!=undef)){"debutNonDef;"} + else{"debutNonDefStrict;"}} + else{if(member(Z[r],IMAX)!=0){if((member(Z[r],F)==0) and (fp(Z[r])!=undef)){"finNonDef;"} + else{"finNonDefStrict;"}+ + if(evalf(fp(Z[r]+0.01))>0){"plus;"} + else{"moins;"}} + else{if(member(Z[r],F)==0){"valBarre(btex 0 etex);"} + else{"nonDefBarre;"}+ + if(evalf(fp(Z[r]+0.01))>0){"plus;"} + else{"moins;"} + }} + }}; + +// fin modif + + + + + + + + +lsf:=if(member(Z[nz-1],IMAX)!=0){if((member(Z[nz-1],F)==0) and (fp(Z[nz-1])!=undef)){"finNonDef;"}else{"finNonDefStrict;"}}else{if(member(Z[nz-1],F)==0){""}else{"nonDefBarre; +"}} + + +lm0:=limit(f(x),x,Z[0],1)==-infinity; + li:=lvic +nom+"}$ etex);"+ + if(member(Z[0],F)==0){"valPos(btex $"+if(lm0==1){"-\\infty"}else{latex(simplify(limit(f(x),x,Z[0],1)))}+"$ etex,"} + else{"nonDefBarre;limDroite(btex $"+if(lm0==1){"-\\infty"}else{latex(simplify(limit(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(limit(f(x),x,Z[r-1],1))< evalf(limit(f(x),x,Z[r],-1)); + krp:=evalf(limit(f(x),x,Z[r],1))> evalf(limit(f(x),x,Z[r+1],-1)) ; + lmrm:=limit(f(x),x,Z[r],-1)==-infinity;lmrp:=limit(f(x),x,Z[r],1)==-infinity; + + lp:=lp+if(member(Z[r],IMIN)!=0){"limGauche(btex $"+if(lmrm==1){ + "-\\infty"}else{ + latex(simplify(limit(f(x),x,Z[r],-1)))} + +"$ etex,"+if(krm==1){ + "1);"}else{"0);"} + +if(member(Z[r],F)==0){"debutNonDef;"}else{"debutNonDefStrict;"} + }//fsi Zr=Imin + else{ + if (member(Z[r],IMAX)!=0){if(member(Z[r],F)==0){"finNonDef;"}else{"finNonDefStrict;"}+"limDroite(btex $"+if(lmrp==1){ + "-\\infty"}else{latex(simplify(limit(f(x),x,Z[r],1)))} + +"$ etex,"+if(krp==1){ + "1);"}else{"0);"} + }else{ + if(member(Z[r],F)){ + "limGauche(btex $"+if(lmrm==1){ + "-\\infty"}else{ + latex(simplify(limit(f(x),x,Z[r],-1)))} + +"$ etex,"+if(krm==1){ + "1);"}else{"0);"} + +"nonDefBarre;limDroite(btex $"+if(lmrp==1){ + "-\\infty"}else{latex(simplify(limit(f(x),x,Z[r],1)))} + +"$ etex,"+if(krp==1){ + "1);"}else{"0);"} + }//fsi (member Zr F) + else{"valPos(btex$"+latex(simplify(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);"}//felse(krp) + }//felse(valpos) + }//felse(member Zr F) + } //felse(Zr=Imax) + }//felse(Zr=Imin) + };//ffor + }//fsi nz + +lnz:=limit(f(x),x,Z[nz-1],-1)==-infinity; + + + +lf:=if(member(Z[nz-1],F)==0){"valPos(btex $"+ + if(lnz==1){"-\\infty"}else{latex(simplify(limit(f(x),x,Z[nz-1],-1)))}+"$ etex,"+ + if(kz==1){"1);"}else{"0);"}} + else{"limGauche(btex $"+ + if(lnz==1){"-\\infty"}else{latex(simplify(limit(f(x),x,Z[nz-1],-1)))}+"$ etex,"+ + if(kz==1){"1);nonDefBarre;"}else{"0);nonDefBarre;"}}; + + + + + +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; + +";}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); + + } +:; + + +\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:=function_diff(f); +z0:=concat(L,F);z:=sort(z0); +nz:=size(z); + + + + + + +S:=op(fsolve(fp(x),x)); + + + +if(L==[-infinity,+infinity]){j:=[seq(-50+2*k,k=0..50)]minus F; + for k in j do for(m:=-5;m<=5;m++){S:=S,resoudre_numerique(fp(y),y,k+m*0.1,k+(m+1)*0.1,bisection_solver)};end_for} +else{if(L[0]==-infinity){j:=[seq(2*k,k=-25..0.5*floor(L[1]))] minus F; + for k in j do for(m:=-5;m<=5;m++){ S:=S,resoudre_numerique(fp(y),y,k+m*0.1,k+(m+1)*0.1,bisection_solver)};end_for} +else{if(L[1]==+infinity){ +j:=[seq(2*k,k=floor(0.5*L[0])..0.5*50)] minus F; + for k in j do for(m:=-5;m<=5;m++){ S:=S,resoudre_numerique(fp(y),y,k+m*0.1,k+(m+1)*0.1,bisection_solver)};end_for +} +else{ j:=[seq(2*k,k=0.5*floor(z[0])..0.5*floor(z[nz-1]))] minus F; + for k in j do for(m:=-5;m<=5;m++){S:=S,resoudre_numerique(fp(y),y,k+m*0.1,k+(m+1)*0.1,bisection_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,simplify(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(limit(f(x),x,Z[1],-1)); + kz:=evalf(limit(f(x),x,Z[nz-1],-1))> evalf(limit(f(x),x,Z[nz-2],1)); + +lsi:=lsic+nom+"'("+nomv+")}$ etex);"+ + if(Z[0]==-infinity){if(sign(evalf(fp(if(Z[1]==+infinity){0}else{Z[1]-10^(-5)})))==1.0){"plus;"}else{"moins;"}}else{if(member(Z[0],F)==0){ + if(fp(Z[0])==0){"valBarre(btex 0 etex);"}else{" "}+ + if(evalf(sign(fp(Z[0]+10^(-5))))==1.0){"plus;"}else{"moins;"}}else{"nonDefBarre;"+ + if(evalf(sign(fp((Z[0]+10^(-5)))))==1.0){"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{"nonDefBarre; +"} +lm0:=limit(f(x),x,Z[0],1)==-infinity; + li:=lvic+nom+"}$ etex);"+ + if(member(Z[0],F)==0){"valPos(btex $"+if(lm0==1){"-\\infty"}else{latex(simplify(limit(f(x),x,Z[0],1)))}+"$ etex,"} + else{"nonDefBarre;limDroite(btex $"+if(lm0==1){"-\\infty"}else{latex(simplify(limit(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(limit(f(x),x,Z[r-1],1))< evalf(limit(f(x),x,Z[r],-1)); + krp:=evalf(limit(f(x),x,Z[r],1))> evalf(limit(f(x),x,Z[r+1],-1)) ; + lmrm:=limit(f(x),x,Z[r],-1)==-infinity;lmrp:=limit(f(x),x,Z[r],1)==-infinity; + lp:=lp+if(member(Z[r],F)){ + "limGauche(btex $"+if(lmrm==1){"-\\infty"}else{latex(simplify(limit(f(x),x,Z[r],-1)))}+"$ etex,"+if(krm==1){"1);"}else{"0);"}+"nonDefBarre;limDroite(btex $"+if(lmrp==1){"-\\infty"}else{latex(simplify(limit(f(x),x,Z[r],1)))}+"$ etex,"+if(krp==1){"1);"}else{"0);"}} + else{"valPos(btex $"+latex(simplify(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:=limit(f(x),x,Z[nz-1],-1)==-infinity; + + +lf:=if(member(Z[nz-1],F)==0){"valPos(btex $"+ + if(lnz==1){"-\\infty"}else{latex(simplify(limit(f(x),x,Z[nz-1],-1)))}+"$ etex,"+ + if(kz==1){"1);"}else{"0);"}} + else{"limGauche(btex $"+ + if(lnz==1){"-\\infty"}else{latex(simplify(limit(f(x),x,Z[nz-1],-1)))}+"$ etex,"+ + if(kz==1){"1);nonDefBarre;"}else{"0);nonDefBarre;"}}; + + + +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; + +";}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); + + + }:; + + + + + + + +\end{VerbatimOut} + + + + + + + +%% +%% Code giac/Xcas pour les Tableaux de Variations avec +%% Valeurs intermediaires +%% + + + + + +\begin{VerbatimOut}{XcasTVI.cxx} + + +TVI(L,F,nom,nomv,f,ftt,ao,trigo,nmr):={ +nl:=size(L); +f:=unapply(f,x); +fp:=function_diff(f); +Z:=concat(L,F); +S:=[]; + + +if(trigo==t){ +all_trig_solutions:=1; +reset_solve_counter(-1,-1); +SS:=solve(factor(simplify(fp(x))),x); +ns:=size(SS); +for(k:=0;k=L[0]){ +S:=concat(S,simplify(subst(SS[k],n_1=m)));m:=m-1; +} +} +}else{ +S:=solve(factor(simplify(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,simplify(S[j]))}; + fpour + fsi; + + +Z:=sort([op(set[op(Z)])]); + + + +nz:=size(Z); +l0:=" newLigneVariables(btex $"+nomv+"$ etex);";lp:=" "; lf:=" ";lsp:=" "; + + + +LI:=limit(f(x),x,Z[0],1); +LF:=limit(f(x),x,Z[nz-1],-1); +LP:=NULL; +PB:=1; +if(nz>2){ for(r:=1; + r<=nz-2;r++){LP:=LP,if(member(Z[r],F)){limit(f(x),x,Z[r],-1),limit(f(x),x,Z[r],1)}else{f(Z[r])}; +if(member(Z[r],F)){PB:=PB,0,1}else{PB:=PB,1}; +} +}; +if(nz>2){ LL:=[LI,LP,LF]; PB:=[PB,1]}else{LL:=[LI,LF];PB:=[1,1]}; + +NL:=size(LL); +A:=NULL;aa:=1; +kk:=0; + + + +if(NL==nz){for(k:=0;knz +if(NL>nz){for(k:=0;k evalf(limit(f(x),x,Z[1],-1)); + kz:=evalf(limit(f(x),x,Z[nz-1],-1))> evalf(limit(f(x),x,Z[nz-2],1)); + +lsi:=lsic+nom+"'("+nomv+")}$ etex);"+ + if(Z[0]==-infinity){if(evalf(sign(fp(if(Z[1]==+infinity){0}else{Z[1]-10^(-5)})))==1.0){"plus;"}else{"moins;"}}else{if(member(Z[0],F)==0){ + if(fp(Z[0])==0){"valBarre(btex 0 etex);"}else{" "}+ + if(evalf(sign(fp((Z[0]+10^(-3)))))==1.0){"plus;"}else{"moins;"}}else{"nonDefBarre;"+ + if(evalf(sign(fp(10^(-3)+Z[0])))==1.0){"plus;"}else{"moins;"} }}+if(TestS==0){"valBarre(btex$ + $ etex);"+ +if(evalf(sign(fp(10^(-3)+ifte(Z[0]==-infinity,ifte(Z[1]==+infinity,ifte(member(0,F)==0,0,0.01),ifte(member(Z[1]-1,F)==0,Z[1]-1,Z[1]-1.1)),Z[0]))))==1.0){"plus;"}else{"moins;"}}else{" "}; + + + + + +if(nz>2){rr:=1; if(nz==NL){for(r:=1; r<=NL-2;r++){ TestS:=(evalf(sign(LL[r]-ao))==evalf(sign(LL[r+1]-ao))) or (evalf(sign(LL[r]-ao))==0.0)or (evalf(sign(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:=(evalf(sign(LL[r]-ao))==evalf(sign(LL[r+1]-ao))) or (evalf(sign(LL[r]-ao))==0.0)or (evalf(sign(LL[r+1]-ao))==0.0); + + if(PB[r]==1){if(TestS==0){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{"nonDefBarre;"} + + + +lm0:=limit(f(x),x,Z[0],1)==-infinity; + + + + +TestS:=(evalf(sign(LL[0]-ao))==evalf(sign(LL[1]-ao))) or (evalf(sign(LL[0]-ao))==0.0) or (evalf(sign(LL[1]-ao))==0.0); + + li:=lvic+nom+"}$ etex); +"+ if(member(Z[0],F)==0){"valPos(btex $"+if(lm0==1){"-\\infty"}else{latex(simplify(limit(f(x),x,Z[0],1)))}+"$ etex,"} + else{"nonDefBarre;limDroite(btex $"+if(lm0==1){"-\\infty"}else{latex(simplify(limit(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:=(evalf(sign(LL[r]-ao))==evalf(sign(LL[r+1]-ao))) or (evalf(sign(LL[r]-ao))==0.0)or (evalf(sign(LL[r+1]-ao))==0.0); + krm:=evalf(limit(f(x),x,Z[r-1],1))< evalf(limit(f(x),x,Z[r],-1)); + krp:=evalf(limit(f(x),x,Z[r],1))> evalf(limit(f(x),x,Z[r+1],-1)) ; + lmrm:=limit(f(x),x,Z[r],-1)==-infinity;lmrp:=limit(f(x),x,Z[r],1)==-infinity; + lp:=lp+if(member(Z[r],F)) { + "limGauche(btex $"+if(lmrm==1){"-\\infty"}else{latex(simplify(limit(f(x),x,Z[r],-1)))}+"$ etex,"+if(krm==1){"1);"}else{"0);"}+"nonDefBarre;limDroite(btex $"+if(lmrp==1){"-\\infty"}else{latex(simplify(limit(f(x),x,Z[r],1)))}+"$ etex,"+if(krp==1){"1);"}else{"0);"}} + else{"valPos(btex $"+latex(simplify(f(Z[r])))+"$ + etex,"+if(evalf(sign(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:=(evalf(sign(LL[r]-ao))==evalf(sign(LL[r+1]-ao))) or (evalf(sign(LL[r]-ao))==0.0)or (evalf(sign(LL[r+1]-ao))==0.0); + krm:=evalf(limit(f(x),x,Z[rr-1],1))< evalf(limit(f(x),x,Z[rr],-1)); + krp:=evalf(limit(f(x),x,Z[rr],1))> evalf(limit(f(x),x,Z[rr+1],-1)) ; + lmrm:=limit(f(x),x,Z[rr],-1)==-infinity;lmrp:=limit(f(x),x,Z[rr],1)==-infinity; TestL:=(abs(LL[r])==abs(LL[r+1])); + +if(PB[r]==1){if(TestS==0){lp:=lp+if(member(Z[rr],F)){ + "limGauche(btex $"+if(lmrm==1){"-\\infty"}else{latex(simplify(limit(f(x),x,Z[rr],-1)))}+"$ etex,"+if(krm==1){"1);"}else{"0);"}+"nonDefBarre;limDroite(btex $"+if(lmrp==1){"-\\infty"}else{latex(simplify(limit(f(x),x,Z[rr],1)))}+"$ etex,"+if(krp==1){"1);"}else{"0);"}} + else{"valPos(btex $"+latex(simplify(f(Z[rr])))+"$ + etex,"+if(evalf(sign(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; +}// testS==0 +else{lp:=lp+if(member(Z[rr],F)){ + "limGauche(btex $"+if(lmrm==1){"-\\infty"}else{latex(simplify(limit(f(x),x,Z[rr],-1)))}+"$ etex,"+if(krm==1){"1);"}else{"0);"}+"nonDefBarre;limDroite(btex $"+if(lmrp==1){"-\\infty"}else{latex(simplify(limit(f(x),x,Z[rr],1)))}+"$ etex,"+if(krp==1){"1);"}else{"0);"}} + else{"valPos(btex $"+latex(simplify(f(Z[rr])))+"$ + etex,"+if(evalf(sign(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 +}//PB[r]==1 +}//for nz2 + + + +lnz:=limit(f(x),x,Z[nz-1],-1)==-infinity; + + +lf:=if(member(Z[nz-1],F)==0){"valPos(btex $"+ + if(lnz==1){"-\\infty"}else{latex(simplify(limit(f(x),x,Z[nz-1],-1)))}+"$ etex,"+ + if(kz==1){"1);"}else{"0);"}} + else{"limGauche(btex $"+ + if(lnz==1){"-\\infty"}else{latex(simplify(limit(f(x),x,Z[nz-1],-1)))}+"$ etex,"+ + if(kz==1){"1);nonDefBarre;"}else{"0);nonDefBarre;"}}; + + + + + + + +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; + +";}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); + + + }:; + + + +\end{VerbatimOut} + + + +%% +% +% +% +% Pour avoir les racines sous forme exacte.... quand c'est possible ! +% +% +% +%%%%%%%%% + + +\begin{VerbatimOut}{XcasTVIex.cxx} + + + +TVIex(L,F,nom,nomv,f,ftt,ao,trigo,nmr):={ +nl:=size(L); +f:=unapply(f,x); +fp:=function_diff(f); +Z:=concat(L,F); +S:=[]; + +Sex:=NULL; +Zex:=solve(f(x)=ao); +Zex:=sort(Zex); +for(j:=0;j=evalf(L[0])) and (evalf(Zex[j])<=evalf(L[nl-1]))){Sex:=Sex,Zex[j]}; +}; +Sex:=[Sex]; + + + + + + + + +if(trigo==t){ +all_trig_solutions:=1; +reset_solve_counter(-1,-1); +SS:=solve(factor(simplify(fp(x))),x); +ns:=size(SS); +for(k:=0;k=L[0]){ +S:=concat(S,simplify(subst(SS[k],n_1=m)));m:=m-1; +} +} +}else{ +S:=solve(factor(simplify(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,simplify(S[j]))}; + fpour + fsi; + + + + Z:=sort([op(set[op(Z)])]); + + +nz:=size(Z); +l0:=" newLigneVariables(btex $"+nomv+"$ etex);";lp:=" "; lf:=" ";lsp:=" "; + + + +LI:=limit(f(x),x,Z[0],1); +LF:=limit(f(x),x,Z[nz-1],-1); +LP:=NULL; +PB:=1; +if(nz>2){ for(r:=1; + r<=nz-2;r++){LP:=LP,if(member(Z[r],F)){limit(f(x),x,Z[r],-1),limit(f(x),x,Z[r],1)}else{f(Z[r])}; +if(member(Z[r],F)){PB:=PB,0,1}else{PB:=PB,1}; +} +}; +if(nz>2){ LL:=[LI,LP,LF]; PB:=[PB,1]}else{LL:=[LI,LF];PB:=[1,1]}; + +NL:=size(LL); +A:=NULL;aa:=0; +kk:=0; + + + +if(NL==nz){for(k:=0;knz +if(NL>nz){for(k:=0;k evalf(limit(f(x),x,Z[1],-1)); + kz:=evalf(limit(f(x),x,Z[nz-1],-1))> evalf(limit(f(x),x,Z[nz-2],1)); + +lsi:=lsic+nom+"'("+nomv+")}$ etex);"+ + if(Z[0]==-infinity){if(evalf(sign(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^(-3))))==1){"plus;"}else{"moins;"}}else{"nonDefBarre;"+ + if(sign(fp(10^(-3)+Z[0]))==1){"plus;"}else{"moins;"} }}+if(TestS==0){"valBarre(btex$ + $ etex);"+ +if(evalf(sign(fp(10^(-3)+ifte(Z[0]==-infinity,ifte(Z[1]==+infinity,ifte(member(0,F)==0,0,0.01),ifte(member(Z[1]-1,F)==0,Z[1]-1,Z[1]-1.1)),Z[0]))))==1.0){"plus;"}else{"moins;"}}else{" "}; + + + + +if(nz>2){rr:=1; if(nz==NL){for(r:=1; r<=NL-2;r++){ TestS:=(evalf(sign(LL[r]-ao))==evalf(sign(LL[r+1]-ao))) or (evalf(sign(LL[r]-ao))==0.0)or (evalf(sign(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:=(evalf(sign(LL[r]-ao))==evalf(sign(LL[r+1]-ao))) or (evalf(sign(LL[r]-ao))==0.0)or (evalf(sign(LL[r+1]-ao))==0.0); + + if(PB[r]==1){if(TestS==0){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{"nonDefBarre;"} + + + +lm0:=limit(f(x),x,Z[0],1)==-infinity; + + + + +TestS:=(evalf(sign(LL[0]-ao))==evalf(sign(LL[1]-ao))) or (evalf(sign(LL[0]-ao))==0.0) or (evalf(sign(LL[1]-ao))==0.0); + + li:=lvic+nom+"}$ etex); +"+ if(member(Z[0],F)==0){"valPos(btex $"+if(lm0==1){"-\\infty"}else{latex(simplify(limit(f(x),x,Z[0],1)))}+"$ etex,"} + else{"nonDefBarre;limDroite(btex $"+if(lm0==1){"-\\infty"}else{latex(simplify(limit(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:=(evalf(sign(LL[r]-ao))==evalf(sign(LL[r+1]-ao))) or (evalf(sign(LL[r]-ao))==0.0)or (evalf(sign(LL[r+1]-ao))==0.0); + krm:=evalf(limit(f(x),x,Z[r-1],1))< evalf(limit(f(x),x,Z[r],-1)); + krp:=evalf(limit(f(x),x,Z[r],1))> evalf(limit(f(x),x,Z[r+1],-1)) ; + lmrm:=limit(f(x),x,Z[r],-1)==-infinity;lmrp:=limit(f(x),x,Z[r],1)==-infinity; + lp:=lp+if(member(Z[r],F)) { + "limGauche(btex $"+if(lmrm==1){"-\\infty"}else{latex(simplify(limit(f(x),x,Z[r],-1)))}+"$ etex,"+if(krm==1){"1);"}else{"0);"}+"nonDefBarre;limDroite(btex $"+if(lmrp==1){"-\\infty"}else{latex(simplify(limit(f(x),x,Z[r],1)))}+"$ etex,"+if(krp==1){"1);"}else{"0);"}} + else{"valPos(btex $"+latex(simplify(f(Z[r])))+"$ + etex,"+if(evalf(sign(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:=(evalf(sign(LL[r]-ao))==evalf(sign(LL[r+1]-ao))) or (evalf(sign(LL[r]-ao))==0.0)or (evalf(sign(LL[r+1]-ao))==0.0); + krm:=evalf(limit(f(x),x,Z[rr-1],1))< evalf(limit(f(x),x,Z[rr],-1)); + krp:=evalf(limit(f(x),x,Z[rr],1))> evalf(limit(f(x),x,Z[rr+1],-1)) ; + lmrm:=limit(f(x),x,Z[rr],-1)==-infinity;lmrp:=limit(f(x),x,Z[rr],1)==-infinity; TestL:=(abs(LL[r])==abs(LL[r+1])); + +if(PB[r]==1){if(TestS==0){lp:=lp+if(member(Z[rr],F)){ + "limGauche(btex $"+if(lmrm==1){"-\\infty"}else{latex(simplify(limit(f(x),x,Z[rr],-1)))}+"$ etex,"+if(krm==1){"1);"}else{"0);"}+"nonDefBarre;limDroite(btex $"+if(lmrp==1){"-\\infty"}else{latex(simplify(limit(f(x),x,Z[rr],1)))}+"$ etex,"+if(krp==1){"1);"}else{"0);"}} + else{"valPos(btex $"+latex(simplify(f(Z[rr])))+"$ + etex,"+if(evalf(sign(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; +}// testS==0 +else{lp:=lp+if(member(Z[rr],F)){ + "limGauche(btex $"+if(lmrm==1){"-\\infty"}else{latex(simplify(limit(f(x),x,Z[rr],-1)))}+"$ etex,"+if(krm==1){"1);"}else{"0);"}+"nonDefBarre;limDroite(btex $"+if(lmrp==1){"-\\infty"}else{latex(simplify(limit(f(x),x,Z[rr],1)))}+"$ etex,"+if(krp==1){"1);"}else{"0);"}} + else{"valPos(btex $"+latex(simplify(f(Z[rr])))+"$ + etex,"+if(evalf(sign(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 +}//PB[r]==1 +}//for nz2 + + + +lnz:=limit(f(x),x,Z[nz-1],-1)==-infinity; + + +lf:=if(member(Z[nz-1],F)==0){"valPos(btex $"+ + if(lnz==1){"-\\infty"}else{latex(simplify(limit(f(x),x,Z[nz-1],-1)))}+"$ etex,"+ + if(kz==1){"1);"}else{"0);"}} + else{"limGauche(btex $"+ + if(lnz==1){"-\\infty"}else{latex(simplify(limit(f(x),x,Z[nz-1],-1)))}+"$ etex,"+ + if(kz==1){"1);nonDefBarre;"}else{"0);nonDefBarre;"}}; + + + + + + + +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; + +";}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); + + + }:; + + +\end{VerbatimOut} + + + + + + + +%% +%% +%% Quand les solutions de f'(x)=0 ne sont pas formellement calculables +%% + + + + +\begin{VerbatimOut}{XcasTVIapp.cxx} + +TVIapp(L,F,nom,nomv,f,ftt,ao,nmr):={ + + +nl:=size(L); +f:=unapply(f,x); +fp:=function_diff(f); +z0:=concat(L,F);z:=sort(z0); +nz:=size(z); + + + + + + + +S:=op(fsolve(fp(x),x)); + + + + + +if(L==[-infinity,+infinity]){j:=[seq(-50+2*k,k=0..50)]minus F; + for k in j do for(m:=-5;m<=5;m++){S:=S,resoudre_numerique(fp(y),y,k+m*0.1,k+(m+1)*0.1,bisection_solver)};end_for} +else{if(L[0]==-infinity){j:=[seq(2*k,k=-25..0.5*floor(L[1]))] minus F; + for k in j do for(m:=-5;m<=5;m++){ S:=S,resoudre_numerique(fp(y),y,k+m*0.1,k+(m+1)*0.1,bisection_solver)};end_for} +else{if(L[1]==+infinity){ +j:=[seq(2*k,k=floor(0.5*L[0])..0.5*50)] minus F; + for k in j do for(m:=-5;m<=5;m++){ S:=S,resoudre_numerique(fp(y),y,k+m*0.1,k+(m+1)*0.1,bisection_solver)};end_for +} +else{ j:=[seq(2*k,k=0.5*floor(z[0])..0.5*floor(z[nz-1]))] minus F; + for k in j do for(m:=-5;m<=5;m++){S:=S,resoudre_numerique(fp(y),y,k+m*0.1,k+(m+1)*0.1,bisection_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,simplify(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;j2){ for(r:=1; + r<=nz-2;r++){LP:=LP,if(member(Z[r],F)){limit(f(x),x,Z[r],-1),limit(f(x),x,Z[r],1)}else{f(Z[r])}; +if(member(Z[r],F)){PB:=PB,0,1}else{PB:=PB,1}; +} +}; +if(nz>2){ LL:=[LI,LP,LF]; PB:=[PB,1]}else{LL:=[LI,LF];PB:=[1,1]}; + +NL:=size(LL); +A:=NULL;aa:=1; +kk:=0; + + +if(NL==nz){for(k:=0;knz +if(NL>nz){for(k:=0;k evalf(limit(f(x),x,Z[1],-1)); + kz:=evalf(limit(f(x),x,Z[nz-1],-1))> evalf(limit(f(x),x,Z[nz-2],1)); + +lsi:=lsic+nom+"'("+nomv+")}$ etex);"+ + if(Z[0]==-infinity){if(evalf(sign(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^(-3))))==1){"plus;"}else{"moins;"}}else{"nonDefBarre;"+ + if(sign(fp(10^(-3)+Z[0]))==1){"plus;"}else{"moins;"} }}+if(TestS==0){"valBarre(btex$ + $ etex);"+ + +if(evalf(sign(fp(10^(-3)+ifte(Z[0]==-infinity,ifte(Z[1]==+infinity,ifte(member(0,F)==0,0,0.01),ifte(member(Z[1]-1,F)==0,Z[1]-1,Z[1]-1.1)),Z[0]))))==1.0){"plus;"}else{"moins;"}}else{" "}; + + + +if(nz>2){rr:=1; if(nz==NL){for(r:=1; r<=NL-2;r++){ TestS:=(evalf(sign(LL[r]-ao))==evalf(sign(LL[r+1]-ao))) or (evalf(sign(LL[r]-ao))==0.0)or (evalf(sign(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:=(evalf(sign(LL[r]-ao))==evalf(sign(LL[r+1]-ao))) or (evalf(sign(LL[r]-ao))==0.0)or (evalf(sign(LL[r+1]-ao))==0.0); + + if(PB[r]==1){if(TestS==0){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{"nonDefBarre;"} + + + +lm0:=limit(f(x),x,Z[0],1)==-infinity; + + + + +TestS:=(evalf(sign(LL[0]-ao))==evalf(sign(LL[1]-ao))) or (evalf(sign(LL[0]-ao))==0.0) or (evalf(sign(LL[1]-ao))==0.0); + + li:=lvic+nom+"}$ etex); +"+ if(member(Z[0],F)==0){"valPos(btex $"+if(lm0==1){"-\\infty"}else{latex(simplify(limit(f(x),x,Z[0],1)))}+"$ etex,"} + else{"nonDefBarre;limDroite(btex $"+if(lm0==1){"-\\infty"}else{latex(simplify(limit(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:=(evalf(sign(LL[r]-ao))==evalf(sign(LL[r+1]-ao))) or (evalf(sign(LL[r]-ao))==0.0)or (evalf(sign(LL[r+1]-ao))==0.0); + krm:=evalf(limit(f(x),x,Z[r-1],1))< evalf(limit(f(x),x,Z[r],-1)); + krp:=evalf(limit(f(x),x,Z[r],1))> evalf(limit(f(x),x,Z[r+1],-1)) ; + lmrm:=limit(f(x),x,Z[r],-1)==-infinity;lmrp:=limit(f(x),x,Z[r],1)==-infinity; + lp:=lp+if(member(Z[r],F)) { + "limGauche(btex $"+if(lmrm==1){"-\\infty"}else{latex(simplify(limit(f(x),x,Z[r],-1)))}+"$ etex,"+if(krm==1){"1);"}else{"0);"}+"nonDefBarre;limDroite(btex $"+if(lmrp==1){"-\\infty"}else{latex(simplify(limit(f(x),x,Z[r],1)))}+"$ etex,"+if(krp==1){"1);"}else{"0);"}} + else{"valPos(btex $"+latex(simplify(f(Z[r])))+"$ + etex,"+if(evalf(sign(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:=(evalf(sign(LL[r]-ao))==evalf(sign(LL[r+1]-ao))) or (evalf(sign(LL[r]-ao))==0.0)or (evalf(sign(LL[r+1]-ao))==0.0); + krm:=evalf(limit(f(x),x,Z[rr-1],1))< evalf(limit(f(x),x,Z[rr],-1)); + krp:=evalf(limit(f(x),x,Z[rr],1))> evalf(limit(f(x),x,Z[rr+1],-1)) ; + lmrm:=limit(f(x),x,Z[rr],-1)==-infinity;lmrp:=limit(f(x),x,Z[rr],1)==-infinity; TestL:=(abs(LL[r])==abs(LL[r+1])); + +if(PB[r]==1){if(TestS==0){lp:=lp+if(member(Z[rr],F)){ + "limGauche(btex $"+if(lmrm==1){"-\\infty"}else{latex(simplify(limit(f(x),x,Z[rr],-1)))}+"$ etex,"+if(krm==1){"1);"}else{"0);"}+"nonDefBarre;limDroite(btex $"+if(lmrp==1){"-\\infty"}else{latex(simplify(limit(f(x),x,Z[rr],1)))}+"$ etex,"+if(krp==1){"1);"}else{"0);"}} + else{"valPos(btex $"+latex(simplify(f(Z[rr])))+"$ + etex,"+if(evalf(sign(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; +}// testS==0 +else{lp:=lp+if(member(Z[rr],F)){ + "limGauche(btex $"+if(lmrm==1){"-\\infty"}else{latex(simplify(limit(f(x),x,Z[rr],-1)))}+"$ etex,"+if(krm==1){"1);"}else{"0);"}+"nonDefBarre;limDroite(btex $"+if(lmrp==1){"-\\infty"}else{latex(simplify(limit(f(x),x,Z[rr],1)))}+"$ etex,"+if(krp==1){"1);"}else{"0);"}} + else{"valPos(btex $"+latex(simplify(f(Z[rr])))+"$ + etex,"+if(evalf(sign(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 +}//PB[r]==1 +}//for nz2 + + + +lnz:=limit(f(x),x,Z[nz-1],-1)==-infinity; + + +lf:=if(member(Z[nz-1],F)==0){"valPos(btex $"+ + if(lnz==1){"-\\infty"}else{latex(simplify(limit(f(x),x,Z[nz-1],-1)))}+"$ etex,"+ + if(kz==1){"1);"}else{"0);"}} + else{"limGauche(btex $"+ + if(lnz==1){"-\\infty"}else{latex(simplify(limit(f(x),x,Z[nz-1],-1)))}+"$ etex,"+ + if(kz==1){"1);nonDefBarre;"}else{"0);nonDefBarre;"}}; + + + + + + + +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; + +";}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); + + + }:; + + + + +\end{VerbatimOut} + + + + + + + +%% +%% Code giac/Xcas pour les Tableaux de variations de courbes parametrees +%% + + + + + + + +\begin{VerbatimOut}{XcasTVP.cxx} +TVP(L,F,nom,nomv,ff,ftt,trigo,nmr):={ + +nl:=size(L); +fp:=[]; +S:=[]; +f:=[unapply(ff[0],t),unapply(ff[1],t)]; +fp:=[function_diff(f[0]),function_diff(f[1])]; +Z:=[]; +LLL:=[]; + + +all_trig_solutions:=1; +reset_solve_counter(-1,-1); + +for(d:=0;d<=1;d++){ +LLL:=concat(L,F[d]); +Z:=LLL union Z; +SS:=solve(factor(simplify(fp[d](t))),t); +ns:=size(SS); + + +for(k:=0;k=L[0]){ + +S:=concat(S,simplify(subst(SS[k],n_1=m)));m:=m-1; + +} +}else{ +S:=concat(S,SS); +} +} + + + si size(S)>0 alors pour j de 0 jusque size(S)-1 faire + qq:=member(simplify(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,simplify(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; + + + + +nz:=size(Z); +u:=1; + tantque (u2) 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); +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; + + lsi:="",""; + +FFF:=[[],[]]; + +for(d:=0;d<=1;d++){ +FFF[d]:=concat(F[d],[-infinity,+infinity]); + k0:= evalf(limit(f[d](x),x=Z[0],1))> evalf(limit(f[d](x),x=Z[1],-1)); + kz:=evalf(limit(f[d](x),x=Z[nz-1],-1))> evalf(limit(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(simplify(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; + lsp[d]:=lsp[d]+if(member(Z[r],F[d])==0){"valBarre(btex $"+latex(simplify(fp[d](Z[r])))+"$ etex);"}else{"nonDefBarre;"}+ + if(ksp==1){"plus;"}else{"moins;"} + }; } + +lsf[d]:=if(member(Z[nz-1],FFF[d])==0){"valBarre(btex $"+latex(simplify(fp[d](Z[nz-1])))+"$ etex);"}else{if(Z[nz-1]==+infinity){" "}else{"nonDefBarre;"}} + + + + + } + + + + + + + + + + + + lm0:=1,2; li:=1,2; krm:=1,2; krp:=1,2; lmrm:=1,2; lmrp:=1,2; lp:="",""; lnz:=1,2; lf:=1,2; Kz:=1,2;K0:=1,2; + + +for(d:=0;d<=1;d++){ + K0[d]:= evalf(limit(f[d](x),x=Z[0],1))> evalf(limit(f[d](x),x=Z[1],-1)); + Kz[d]:=evalf(limit(f[d](x),x,Z[nz-1],-1))> evalf(limit(f[d](x),x,Z[nz-2],1)); +//{ +//$ +lm0[d]:=limit(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(simplify(limit(f[d](x),x,Z[0],1)))}+"$ etex,"} + else{"nonDefBarre;limDroite(btex $"+if(lm0[d]==1){"-\\infty"}else{latex(simplify(limit(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(limit(f[d](x),x=Z[r-1],1))< evalf(limit(f[d](x),x=Z[r],-1)); + krp[d]:=evalf(limit(f[d](x),x=Z[r],1))> evalf(limit(f[d](x),x,Z[r+1],-1)) ; + lmrm[d]:=limit(f[d](x),x,Z[r],-1)==-infinity;lmrp[d]:=limit(f[d](x),x,Z[r],1)==-infinity; + lp[d]:=lp[d]+if(member(Z[r],F[d])){ + "limGauche(btex + $"+if(lmrm[d]==1){"-\\infty"}else{latex(simplify(limit(f[d](x),x,Z[r],-1)))}+"$ + etex,"+if(krm[d]==1){"1);"}else{"0);"}+"nonDefBarre;limDroite(btex $"+if(lmrp[d]==1){"-\\infty"}else{latex(simplify(limit(f[d](x),x,Z[r],1)))}+"$ etex,"+if(krp[d]==1){"1);"}else{"0);"}} + else{"valPos(btex $"+latex(simplify(f[d](Z[r])))+"$ + etex,"+if(sign(evalf(fp[d](Z[r]-0.001)))==sign(evalf((fp[d](Z[r]+0.001))) )){"0.5);"}else{if(krp[d]==1){"1);"}else{"0); +"}}} + }; } + +lnz[d]:=limit(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(simplify(limit(f[d](x),x=Z[nz-1],-1)))}+"$ etex,"+ + if(Kz[d]==1){"1);"}else{"0);"}} + else{"limGauche(btex $"+ + if(lnz[d]==1){"-\\infty"}else{latex(simplify(limit(f[d](x),x=Z[nz-1],-1)))}+"$ etex,"+ + if(Kz[d]==1){"1);nonDefBarre;"}else{"0);nonDefBarre;"}}; + + + + + + +} + + + + + + + + +MetaLfc:=if(ftt==2){if(nz>2){" + +beginTableau("+nmr+")"+ + l0+lsi[0]+lsp[0]+lsf[0]+lsi[1]+lsp[1]+lsf[1]+" +endTableau; + +";}else{ +"beginTableau("+nmr+")"+ + l0+ +lsi[0]+lsf[0]+lsi[1]+lsf[1]+" +endTableau; + +"; +} +}else{ if(ftt==0){if(nz>2){"beginTableau("+nmr+")"+ + l0+ +li[0]+ +lp[0]+ +lf[0]+ +li[1]+ +lp[1]+ +lf[1] ++" +endTableau; + +";}else{"beginTableau("+nmr+")"+ + l0+ +li[0]+ +lf[0]+ +li[1]+ +lf[1] ++" +endTableau; + +";}}else{ +if(nz>2){"beginTableau("+nmr+")"+ + l0+ +lsi[0]+lsp[0]+lsf[0]+ +li[0]+ +lp[0]+ +lf[0]+ +lsi[1]+lsp[1]+lsf[1]+ +li[1]+ +lp[1]+ +lf[1] ++" +endTableau; + +";}else{"beginTableau("+nmr+")"+ + l0+ +lsi[0]+lsf[0]+ +li[0]+ +lf[0]+ +lsi[1]+lsf[1]+ +li[1]+ +lf[1] ++" +endTableau; + +";} +} +} + +sortie:=fopen("XCasmpfc.mp"); +fprint(sortie,Unquoted,MetaLfc); +fclose(sortie); + +}:; +\end{VerbatimOut} + + + + +%% +%% Code giac/Xcas pour les Tableaux de signes de produits +%% + + + + +\begin{VerbatimOut}{XcasTabSignL.cxx} + + +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 + + + + +if(trigo==t){ +all_trig_solutions:=1; +reset_solve_counter(-1,-1); +SS:=solve(factor(simplify(L[k](x))),x); +ns:=size(SS); +for(j:=0;j=evalf(mini)){ +S:=concat(S,simplify(subst(SS[j],n_1=m)));m:=m-1; +} +} + +}else{ +S:=solve(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]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;"}; + + +MetaLfc:=" beginTableau("+nmr+") +newLigneVariables(btex $ {x}$ etex); + "+l0+li+ lsic+nomf+"(x)}$ etex);"+ + if(mini!=-infinity and product(L[s](mini),s,0,n-1)==0){" + valBarre(btex 0 etex);"}else{" + "}+ lf+ + if(maxi!=+infinity and product(L[s](maxi),s,0,n-1)==0){" + valBarre(btex 0 etex);"}else{" + "}+" +endTableau; +" +; + +}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);"; + + +for(p:=0;p<=n-1;p++){lp:=""; + li:=li+lsic+latex(L[p](x))+"}$ etex);"+ + if(mini!=-infinity and L[p](mini)==0){" + valBarre(btex 0 etex);"}else{" + "}+ + if(L[p](Z[0]-0.01)>0){"plus;"}else{"moins;"}; + + for(r:=0; r<=nz-2;r++){ + lp:=lp+if(simplify(L[p](Z[r]))==0){" + valBarre(btex 0 etex);"}else{"barre; + "}+ + if(L[p]((Z[r]+Z[r+1])*.5)>0){"plus;"}else{"moins;"}}; + + li:=li+lp+ if(simplify(L[p](Z[nz-1]))==0){"valBarre(btex 0 etex);"}else{"barre;"}+ + if(L[p](Z[nz-1]+1.0)>0){"plus;"}else{"moins; + "}+if(maxi!=+infinity and L[p](maxi)==0){" + valBarre(btex 0 etex);"}else{" + "} + }; + + +pour t de 0 jusque nz-2 faire + lr:=lr+if(product(L[s]((Z[t]+Z[t+1])*.5),s,0,n-1)>0){"plus;"}else{"moins;"}+"valBarre(btex 0 etex);" + fpour + +MetaLfc:=" beginTableau("+nmr+") +newLigneVariables(btex $ {x}$ etex); + "+l0+ + li + + lsic+nomf+"(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);"+ + 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; + + "; +} +sortie:=fopen("XCasmpfc.mp"); +fprint(sortie,Unquoted,MetaLfc); +fclose(sortie); + + }:; + +\end{VerbatimOut} + + + + +%% +%% Code giac/Xcas pour les Tableaux de signes de quotients +%% + + + +\begin{VerbatimOut}{XcasTabSignQ.cxx} +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); +n:=size(L); +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 + + + +if(trigo==t){ +all_trig_solutions:=1; +reset_solve_counter(-1,-1); +SS:=solve(factor(simplify(L[k](x))),x); +ns:=size(SS); +for(j:=0;j=evalf(mini)){ +S:=concat(S,simplify(subst(SS[j],n_1=mm)));mm:=mm-1; +} +} + +}else{ +S:=concat(S,solve(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]=evalf(mini)){ +SF:=concat(SF,simplify(subst(SSF[j],n_1=mm)));mm:=mm-1; +} +} + +}else{ +SF:=concat(SF,solve(Fo[k](x),x)); +} + + si size(SF)>0 alors pour j de 0 jusque size(SF)-1 faire + FF:=FF,simplify(SF[j]); + if(SF[j]>mini and SF[j]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;"}; + + + + +MetaLfc:=" +beginTableau("+nmr+") +newLigneVariables(btex $ {x}$ etex); + "+l0+li+ + lsic+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+ + 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; + +" +; + + + + +}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);"; + + +for(p:=0;p<=n-1;p++){lp:=""; + li:=li+lsic+latex(L[p](x))+"}$ etex);"+ + if(mini!=-infinity and L[p](mini)==0){" valBarre(btex 0 etex);"}else{" "}+ + if(L[p](Z[0]-0.01)>0){"plus;"}else{"moins;"}; + + for(r:=0; r<=nz-2;r++){lp:=lp+if(simplify(L[p](Z[r]))==0){" valBarre(btex 0 etex);"}else{"barre;"}+ + if(L[p]((Z[r]+Z[r+1])*.5)>0){"plus;"}else{"moins;"}}; + + li:=li+lp+ if(simplify(L[p](Z[nz-1]))==0){"valBarre(btex 0 etex);"}else{"barre;"}+ + if(L[p](Z[nz-1]+1.0)>0){"plus;"}else{"moins; + "}+if(maxi!=+infinity and L[p](maxi)==0){"valBarre(btex 0 etex);"}else{" "} + + }; + + +pour t de 0 jusque nz-2 faire + lr:=lr+if(product(L[s]((Z[t]+Z[t+1])*.5),s,0,n-1)>0){"plus;"}else{"moins;"}+ + if(member(Z[t+1],FF)==0){"valBarre(btex 0 etex);"}else{ "nonDefBarre;"} + fpour + + + + +MetaLfc:=" +beginTableau("+nmr+") +newLigneVariables(btex $ {x}$ etex); + "+l0+ + li + + + lsic+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;"}+ + 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; + +" + + +} + + + + +sortie:=fopen("XCasmpfc.mp"); +fprint(sortie,Unquoted,MetaLfc); +fclose(sortie); + + + + + + }:; + +\end{VerbatimOut} + + + + +%% Code giac/Xcas pour les Tableaux de signes du produit +%% de 2 facteurs affines +%% + + + + +\begin{VerbatimOut}{XcasTabSigna.cxx} +TSa(a,b,c,d,nmr):={ +zA:=solve(a*x+b=0,x)[0]; +zB:=solve(c*x+d=0,x)[0]; +zmin:=min(zA,zB); +zmax:=max(zA,zB); + Meta:= " + beginTableau("+nmr+") + newLigneVariables(btex $ {x}$ etex); + val(btex $-\\infty$ etex);val(btex $"+latex(zmin)+"$ etex); +val(btex $"+latex(zmax)+"$etex); +val(btex $+\\infty$ etex); + "+lsic+if(a==1){"x+"}else{if(a==-1){"-x+"}else{a+"x+"}}+b+"}$ etex);" + + if(a>0){"moins;"}else{"plus;"}+ + if(zmin==zA){"valBarre(btex 0 etex);"}else{"barre;"}+ + if(zmin==zA){si a>0 alors "plus;"; sinon "moins;";fsi} + else{si a>0 alors "moins;"; sinon "plus;"; fsi}+ + if(zmin==zA){"barre;"}else{"valBarre(btex 0 etex);"}+ + if(a>0){"plus;"}else{"moins;"} + +lsic+if(c==1){"x+"}else{if(c==-1){"-x+"}else{c+"x+"}}+d+"}$ etex);" + + if(c>0){"moins"}else{"plus"}+";"+ + if(zmin==zB){"valBarre(btex 0 etex);"}else{"barre;"}+ + if(zmin==zB){si c>0 alors "plus;"; sinon "moins;";fsi} + else{si c>0 alors "moins;"; sinon "plus;"; fsi}+ + if(zmin==zB){"barre;"}else{"valBarre(btex 0 etex);"}+ + if(c>0){"plus;"}else{"moins;"} + + +lsic+"{("+if(a==1){"x+"}else{if(a==-1){"-x+"}else{a+"x+"}}+b+")("+if(c==1){"x+"}else{if(c==-1){"-x+"}else{c+"x+"}}+d+")}}$ etex);" + + si a*c>0 alors plus; sinon moins;fsi+";"+ + "valBarre(btex 0 etex);"+ + si a*c>0 alors moins; sinon plus;fsi+";"+ + "valBarre(btex 0 etex);"+ + si a*c>0 alors plus; sinon moins;fsi+";"+" +endTableau; +" +; + + + +sortie:=fopen("XCasmpfc.mp"); +fprint(sortie,Unquoted,Meta); +fclose(sortie); + + + }:; +\end{VerbatimOut} + + + + + + +%%$ +%% Code giac/Xcas pour les Tableaux de Signes d'expression ne contenant +%% qu'un seul terme + + + + +\begin{VerbatimOut}{XcasTSc.cxx} +TSc(g,D,F,trigo,nmr):={ +f:=unapply(g,x); +mini:=D[0]; maxi:=D[1];lm:=" "; +Z:=mini,maxi; +S:=[]; + + + +if(trigo==t){ +all_trig_solutions:=1; +reset_solve_counter(-1,-1); +SS:=solve(factor(simplify(f(x))),x); +ns:=size(SS); +for(j:=0;j=evalf(mini)){ +S:=concat(S,simplify(subst(SS[j],n_1=m)));m:=m-1; +} +} + +}else{ +S:=solve(f(x),x); +} + + + + + +if(size(S)==0 and size(F)==0){ +l0:="val(btex $"+latex(D[0])+"$ etex);val(btex $"+latex(D[1])+"$ etex);"; +li:=if(member(mini,F)!=0){"nonDefBarre;"}else{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.3145274774464545777744)>0){"plus;"}else{"moins;"}}; +lf:=if(member(maxi,F)!=0){"nonDefBarre;"}else{if(maxi!=+infinity and f(maxi)==0){" + valBarre(btex 0 etex);"}else{" + "}}; +}else{ +if(size(S!=0)){pour j de 0 jusque size(S)-1 faire + if(S[j]>mini and S[j]0){"plus;"}else{"moins;"}; +lf:=if(maxi!=+infinity and f(maxi)==0){" + valBarre(btex 0 etex);"}else{if(member(maxi,F)==0){" + "}else{"nonDefBarre;"} + }; + +}else{ +l0:="val(btex $"+latex(Z[0])+"$ etex);";li:=" "; +pour m de 1 jusque nz-1 faire l0:=l0+"val(btex $"+latex(Z[m])+"$ etex); +"; +fpour; + + +li:= if(mini!=-infinity and f(mini)==0){" + valBarre(btex 0 etex);"}else{if(member(mini,F)==0){" + "}else{"nonDefBarre;"} + } + +lm:=if(nz>2){for(r:=0; r0){"plus;"}else{"moins;"} +}else{if(f((Z[r]+Z[r+1])*.5)>0){"plus;"}else{"moins;"}} ++ + if(member(Z[r+1],F)==0){"valBarre(btex 0 etex);"}else{"nonDefBarre;"} + }}else{" "}; + +lf:=if(f(Z[nz-2]+0.1)>0){"plus;"}else{"moins;"}+if(maxi!=+infinity and f(maxi)==0){"valBarre(btex 0 etex);"}else{if(member(maxi,F)==0){" + "}else{"nonDefBarre;"} + }; +} +}; + + + + +MetaLfc:=" + +beginTableau("+nmr+") +newLigneVariables(btex $\\displaystyle {x}$ etex); + "+l0+lsic+latex(f(x))+"}$ etex);"+ + li+lm+lf + +" +endTableau; + +" +; + + + + +sortie:=fopen("XCasmpfc.mp"); +fprint(sortie,Unquoted,MetaLfc); +fclose(sortie); + }:; + + +\end{VerbatimOut} + + + + + + + + + +%%$ + + + + + + + + +%%%% +%%% +%%% Pour des tableaux de variations simples sans fonctions +%%% +%%% + + + +\begin{VerbatimOut}{XcasTVS.cxx} +TVS(La,Lo,F,nomf,nomv,nmr):={ + +na:=size(La); +f:=F; +if(member(La[0],F)){f:=f[1..size(f)-1]}; +if(member(La[na-1],F)){f:=f[0..size(f)-2]}; +Z:=sort(concat(La,f)); +Zo:=sort([op(set[op(Z)])]); +nz:=size(Z); +nzo:=size(Zo); + + +k0:= evalf(Lo[0])> evalf(Lo[1]); +kz:=evalf(Lo[nz-1])> evalf(Lo[nz-2]); + + +l0:=" newLigneVariables(btex $"+nomv+"$ etex);";lp:=" "; lf:=" "; + for(m:=0;m<=nzo-1;m++){l0:=l0+"val(btex $"+latex(Zo[m])+"$ etex);"} + +li:=lvic+nomf+"}$ etex);"+ + if(member(Z[0],F)==0){"valPos(btex $"+latex(Lo[0])+"$ etex,"} + else{"nonDefBarre;limDroite(btex $"+latex(Lo[0])+"$ etex,"}+ + if(k0==1){"1"}else{"0"}+ + ");"; + + if(nz>2){ for(r:=1; r<=nz-2;r++){ + krm:=evalf(Lo[r-1])< evalf(Lo[r]); + krp:=evalf(Lo[r])> evalf(Lo[r+1]) ; + + lp:=lp+if(Z[r]==Z[r+1]){ + "limGauche(btex$"+latex(Lo[r])+"$etex,"+ + if(krm==1){"1);"} + else{"0);"} + }// fin if zr=zr+1 + else{ + if(Z[r]==Z[r-1]){ + "nonDefBarre;limDroite(btex$"+latex(Lo[r])+"$etex,"+ + if(krp==1){"1);"} + else{"0);"} + }//fin if zr=zr-1 + else{ + "valPos(btex $"+latex(Lo[r])+"$etex,"+ + if(krp==1){"1);"}else{"0);"} +}//fin else zr=zr-1 +}//fin else zr=zr+1 +}//fin for +}//fin de if nz>2 + + + +lf:=if(member(Z[nz-1],F)==0){"valPos(btex $"+latex(Lo[nz-1])+"$ etex,"+ + if(kz==1){"1);"}else{"0);"}} + else{"limGauche(btex $"+latex(Lo[nz-1])+"$ etex,"+ + if(kz==1){"1);nonDefBarre;"}else{"0);nonDefBarre;"}}; + + +MetaLfc:= + + if(nz>2){"beginTableau("+nmr+")"+ + l0+ +li+ +lp+ +lf ++" +endTableau; + +";}else{"beginTableau("+nmr+")"+ + l0+ +li+ +lf ++" +endTableau; + +";} + +//return(MetaLfc); + +sortie:=fopen("XCasmpfc.mp"); +fprint(sortie,Unquoted,MetaLfc); +fclose(sortie); + + +}:; + +\end{VerbatimOut} + +%%$ + + + + + + + + + + + + + + + + + +%% +%% 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\couleurtab{black} +\newcommand\coultab[1]{\renewcommand\couleurtab{#1}} + +\newcommand{\dresse}[2]{% + + + +\ifxetex + + + +\ifthenelse{\boolean{xcas}}{% Avec l'option "XCas present" + \executGiacmp{XCas#2.giac}% reconstituer le tableau + % exporter le source mp + % puis lancer metapost pour creer + % l'image du tableau + \immediate\write18{\cat XCasmpfc.mp >> \nomtravail_Tab.mp} + \immediate\write18{\cat enteteMP.cfg >> \nomtravail_Tab#2.mp} +\immediate\write18{\echod def beginTableau(expr c) =\echof >> \nomtravail_Tab#2.mp} + \immediate\write18{\echod begingroup\echof >> \nomtravail_Tab#2.mp} + \immediate\write18{\echod charcode:=c;\echof >> \nomtravail_Tab#2.mp} + \immediate\write18{\echod clearxy; clearit; clearpen;\echof >> \nomtravail_Tab#2.mp} + \immediate\write18{\echod pickup defaultpen;\echof >> \nomtravail_Tab#2.mp} + \immediate\write18{\echod drawoptions(withcolor(#1));\echof >> \nomtravail_Tab#2.mp} + \immediate\write18{\echod initTableau;\echof >> \nomtravail_Tab#2.mp} + \immediate\write18{\echod enddef;\echof >> \nomtravail_Tab#2.mp} + \immediate\write18{\cat XCasmpfc.mp >> \nomtravail_Tab#2.mp} + \immediate\write18{\cat queue.mp >> \nomtravail_Tab#2.mp} + \immediate\write18{./convert-mp-pdf.sh \nomtravail_Tab#2 \theTVn} + \immediate\write18{\cp \nomtravail_Tab#2.pdf \nomtravail_Tab\theTVn.pdf} + \immediate\write18{\rem \nomtravail_Tab#2.mp} + }% + {% sinon, si le tableau est absent, alerte. + \IfFileExists{\nomtravail_Tab.\theTVn}{}{% + \PackageError{tablor}{Tableau absent non + reconstituable.}{Pour compiler il faut, soit les fichiers de + tableaux, soit le fichier \nomtravail_Tab.mp, soit disposer de + XCas.}}} + +\begin{center} + \includegraphics[scale=\echelle]{\nomtravail_Tab\theTVn.pdf} +\end{center} +\stepcounter{TVn} + + + +\else +\ifthenelse{\boolean{xcas}}{% Avec l'option "XCas present" + \executGiacmp{XCas#2.giac}% reconstituer le tableau + % exporter le source mp + % puis lancer metapost pour creer + % l'image du tableau + \immediate\write18{\cat XCasmpfc.mp >> \nomtravail_Tab.mp} + \immediate\write18{\cat enteteMP.cfg >> \nomtravail_Tab#2.mp} + \immediate\write18{\echod def beginTableau(expr c) =\echof >> \nomtravail_Tab#2.mp} + \immediate\write18{\echod begingroup\echof >> \nomtravail_Tab#2.mp} + \immediate\write18{\echod charcode:=c;\echof >> \nomtravail_Tab#2.mp} + \immediate\write18{\echod clearxy; clearit; clearpen;\echof >> \nomtravail_Tab#2.mp} + \immediate\write18{\echod pickup defaultpen;\echof >> \nomtravail_Tab#2.mp} + \immediate\write18{\echod drawoptions(withcolor(#1));\echof >> \nomtravail_Tab#2.mp} + \immediate\write18{\echod initTableau;\echof >> \nomtravail_Tab#2.mp} + \immediate\write18{\echod enddef;\echof >> \nomtravail_Tab#2.mp} + \immediate\write18{\cat XCasmpfc.mp >> \nomtravail_Tab#2.mp} + \immediate\write18{\cat queue.mp >> \nomtravail_Tab#2.mp} + \immediate\write18{mpost -jobname=\nomtravail_Tab \nomtravail_Tab#2.mp} + \immediate\write18{\rem \nomtravail_Tab#2.mp} + }% + {% sinon, si le tableau est absent, alerte. + \IfFileExists{\nomtravail_Tab.\theTVn}{}{% + \PackageError{tablor}{Tableau absent non + reconstituable.}{Pour compiler il faut, soit les fichiers de + tableaux, soit le fichier \nomtravail_Tab.mp, soit disposer de + XCas.}}} + +\begin{center} + \includegraphics[scale=\echelle]{\nomtravail_Tab.\theTVn} +\end{center} +\stepcounter{TVn} + +\fi + +} + + +%% +%% traitement des fichiers produits par giac/xcas avec possibilite +%% de modifier le fichier metapost (environnement etoile)) +%% + + + +\newcommand{\dressetoile}[2]{% + + + +\ifxetex + +\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 >> \nomtravail_Tab.mp}} +% Si non, lancement des operations de fabrication +{\executGiacmp{XCas#2.giac}% +\immediate\write18{\editeur XCasmpfc.mp } + + % Modification avec l'editeur choisi +\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 >> \nomtravail_Tab#2.mp} +\immediate\write18{\echod def beginTableau(expr c) =\echof >> \nomtravail_Tab#2.mp} + \immediate\write18{\echod begingroup\echof >> \nomtravail_Tab#2.mp} + \immediate\write18{\echod charcode:=c;\echof >> \nomtravail_Tab#2.mp} + \immediate\write18{\echod clearxy; clearit; clearpen;\echof >> \nomtravail_Tab#2.mp} + \immediate\write18{\echod pickup defaultpen;\echof >> \nomtravail_Tab#2.mp} + \immediate\write18{\echod drawoptions(withcolor(#1));\echof >> \nomtravail_Tab#2.mp} + \immediate\write18{\echod initTableau;\echof >> \nomtravail_Tab#2.mp} + \immediate\write18{\echod enddef;\echof >> \nomtravail_Tab#2.mp} +\immediate\write18{\cat XCasmpfc.mp >> \nomtravail_Tab#2.mp}} % Inclusion du + % source dans le + % fichier + % Tableaux +\immediate\write18{\cat queue.mp >> \nomtravail_Tab#2.mp} + \immediate\write18{./convert-mp-pdf.sh \nomtravail_Tab#1 \theTVn} + \immediate\write18{\cp \nomtravail_Tab#2.pdf \nomtravail_Tab\theTVn.pdf}% Reconstitution des tableaux + % et creation du dernier. L'option + % pallie l'absence de end en fin de + % fichier +\immediate\write18{\rem \nomtravail_Tab#2.mp} + +\begin{center} + \includegraphics[scale=\echelle]{\nomtravail_Tab\theTVn.pdf} +\end{center} +\ech{1} +\setcounter{TVn}{\theTVnbis} % Restauration du compteur TVn + + +\else + +\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 >> \nomtravail_Tab.mp}} +% Si non, lancement des operations de fabrication +{\executGiacmp{XCas#2.giac}% +\immediate\write18{\editeur XCasmpfc.mp } + + % Modification avec l'editeur choisi +\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 >> \nomtravail_Tab#2.mp} + \immediate\write18{\echod def beginTableau(expr c) =\echof >> \nomtravail_Tab#2.mp} + \immediate\write18{\echod begingroup\echof >> \nomtravail_Tab#2.mp} + \immediate\write18{\echod charcode:=c;\echof >> \nomtravail_Tab#2.mp} + \immediate\write18{\echod clearxy; clearit; clearpen;\echof >> \nomtravail_Tab#2.mp} + \immediate\write18{\echod pickup defaultpen;\echof >> \nomtravail_Tab#2.mp} + \immediate\write18{\echod drawoptions(withcolor(#1));\echof >> \nomtravail_Tab#2.mp} + \immediate\write18{\echod initTableau;\echof >> \nomtravail_Tab#2.mp} + \immediate\write18{\echod enddef;\echof >> \nomtravail_Tab#2.mp} +\immediate\write18{\cat XCasmpfc.mp >> \nomtravail_Tab#2.mp}} % Inclusion du + % source dans le + % fichier + % Tableaux +\immediate\write18{\cat queue.mp >> \nomtravail_Tab#2.mp} +\immediate\write18{mpost -jobname=\nomtravail_Tab \nomtravail_Tab#2.mp}% Reconstitution des tableaux + % et creation du dernier. L'option + % pallie l'absence de end en fin de + % fichier +\immediate\write18{\rem \nomtravail_Tab#2.mp} + +\begin{center} + \includegraphics[scale=\echelle]{\nomtravail_Tab.\theTVn} +\end{center} +\ech{1} +\setcounter{TVn}{\theTVnbis} % Restauration du compteur TVn + + +\fi + +} + + + + + + + +%% +%% +%%% +%%% +%%% les "giac" qui permettent d'executer la commande rentree dans le fichier tex +%%% suivis des environnements qui permettront la saisie du code giac/xcas +%%% Les versions etoilees permettent de modifier le code metapost produit initialement +%%% + + + + +\begin{VerbatimOut}{XCasa.giac} +maple_mode(0); +approx_mode:=0; +read("config.cxx"); +read("XcasTabSigna.cxx"); +read("XCasa.user"); +\end{VerbatimOut} + +\newenvironment{TSa} +{\VerbatimEnvironment\begin{VerbatimOut}[commandchars=\\??]{XCasa.user}} +{\end{VerbatimOut} + \dresse{\couleurtab}{a} +} + + + + + + + + + +\begin{VerbatimOut}{XCasQ.giac} +maple_mode(0); +approx_mode:=0; +read("config.cxx"); +read("XcasTabSignQ.cxx"); +read("XCasQ.user"); +\end{VerbatimOut} + +\newenvironment{TSq}% +{\VerbatimEnvironment\begin{VerbatimOut}[commandchars=\\??]{XCasQ.user}} +{\end{VerbatimOut}\dresse{\couleurtab}{Q}} + + + +\newenvironment{TSq*}[1]% +{\setcounter{TVnbis}{\theTVn} +\setcounter{TVn}{#1} +\VerbatimEnvironment\begin{VerbatimOut}[commandchars=\\??]{XCasQ.user}} +{\end{VerbatimOut}\dressetoile{\couleurtab}{Q}} + + +\begin{VerbatimOut}{XCasL.giac} +maple_mode(0); +approx_mode:=0; +read("config.cxx"); +read("XcasTabSignL.cxx"); +read("XCasL.user"); +\end{VerbatimOut} + +\newenvironment{TS}% +{\VerbatimEnvironment\begin{VerbatimOut}[commandchars=\\??]{XCasL.user}} +{\end{VerbatimOut}\dresse{\couleurtab}{L}} + + +\newenvironment{TS*}[1] +{\setcounter{TVnbis}{\theTVn} +\setcounter{TVn}{#1} +\VerbatimEnvironment\begin{VerbatimOut}[commandchars=\\??]{XCasL.user}} +{\end{VerbatimOut}\dressetoile{\couleurtab}{L}} + + +\begin{VerbatimOut}{XCasTSc.giac} +maple_mode(0); +approx_mode:=0; +read("config.cxx"); +read("XcasTSc.cxx"); +read("XCasTSc.user"); +\end{VerbatimOut} + + + + +\newenvironment{TSc*}[1]% +{\setcounter{TVnbis}{\theTVn} +\setcounter{TVn}{#1} +\VerbatimEnvironment\begin{VerbatimOut}[commandchars=\\??]{XCasTSc.user}} +{\end{VerbatimOut}\dressetoile{\couleurtab}{TSc}} + + +\newenvironment{TSc}% +{\VerbatimEnvironment\begin{VerbatimOut}[commandchars=\\??]{XCasTSc.user}} +{\end{VerbatimOut}\dresse{\couleurtab}{TSc}} + + +\begin{VerbatimOut}{XCasTV.giac} +maple_mode(0); +approx_mode:=0; +read("config.cxx"); +read("XcasTV.cxx"); +read("XCasTV.user"); +\end{VerbatimOut} + +\newenvironment{TV}% +{\VerbatimEnvironment\begin{VerbatimOut}[commandchars=\\??]{XCasTV.user}}% +{\end{VerbatimOut} +\dresse{\couleurtab}{TV}} + +\newenvironment{TV*}[1]{% +\setcounter{TVnbis}{\theTVn} +\setcounter{TVn}{#1} +\VerbatimEnvironment\begin{VerbatimOut}[commandchars=\\??]{XCasTV.user}}% +{\end{VerbatimOut}\dressetoile{\couleurtab}{TV}} + + + + + + + +\begin{VerbatimOut}{XCasTVP.giac} +maple_mode(0); +approx_mode:=0; +read("config.cxx"); +read("XcasTVP.cxx"); +read("XCasTVP.user"); +\end{VerbatimOut} + +\newenvironment{TVP}% +{\VerbatimEnvironment\begin{VerbatimOut}[commandchars=\\??]{XCasTVP.user}}% +{\end{VerbatimOut} +\dresse{\couleurtab}{TVP}} + +\newenvironment{TVP*}[1]{% +\setcounter{TVnbis}{\theTVn} +\setcounter{TVn}{#1} +\VerbatimEnvironment\begin{VerbatimOut}[commandchars=\\??]{XCasTVP.user}}% +{\end{VerbatimOut}\dressetoile{\couleurtab}{TVP}} + + + + + + + + + + +\begin{VerbatimOut}{XCasTVZ.giac} +maple_mode(0); +approx_mode:=0; +read("config.cxx"); +read("XcasTVZ.cxx"); +read("XCasTVZ.user"); +\end{VerbatimOut} + +\newenvironment{TVZ}% +{\VerbatimEnvironment\begin{VerbatimOut}[commandchars=\\??]{XCasTVZ.user}}% +{\end{VerbatimOut} +\dresse{\couleurtab}{TVZ}} + +\newenvironment{TVZ*}[1]{% +\setcounter{TVnbis}{\theTVn} +\setcounter{TVn}{#1} +\VerbatimEnvironment\begin{VerbatimOut}[commandchars=\\??]{XCasTVZ.user}}% +{\end{VerbatimOut}\dressetoile{\couleurtab}{TVZ}} + + + + + + + + + + +\begin{VerbatimOut}{XCasTVapp.giac} +maple_mode(0); +approx_mode:=0; +read("config.cxx"); +read("XcasTVapp.cxx"); +read("XCasTVapp.user"); +\end{VerbatimOut} + +\newenvironment{TVapp}% +{\VerbatimEnvironment\begin{VerbatimOut}[commandchars=\\??]{XCasTVapp.user}}% +{\end{VerbatimOut} +\dresse{\couleurtab}{TVapp}} + +\newenvironment{TVapp*}[1]{% +\setcounter{TVnbis}{\theTVn} +\setcounter{TVn}{#1} +\VerbatimEnvironment\begin{VerbatimOut}[commandchars=\\??]{XCasTVapp.user}}% +{\end{VerbatimOut}\dressetoile{\couleurtab}{TVapp}} + + + + + + + + + + + +\begin{VerbatimOut}{XCasTVI.giac} +maple_mode(0); +approx_mode:=0; +read("config.cxx"); +read("XcasTVI.cxx"); +read("XCasTVI.user"); +\end{VerbatimOut} + +\newenvironment{TVI}% +{\VerbatimEnvironment\begin{VerbatimOut}[commandchars=\\??]{XCasTVI.user}}% +{\end{VerbatimOut}\dresse{\couleurtab}{TVI}} + + +\newenvironment{TVI*}[1]% +{\setcounter{TVnbis}{\theTVn} +\setcounter{TVn}{#1} +\VerbatimEnvironment\begin{VerbatimOut}[commandchars=\\??]{XCasTVI.user}}% +{\end{VerbatimOut}\dressetoile{\couleurtab}{TVI}} + + + + + +\begin{VerbatimOut}{XCasTVIex.giac} +maple_mode(0); +approx_mode:=0; +read("config.cxx"); +read("XcasTVIex.cxx"); +read("XCasTVIex.user"); +\end{VerbatimOut} + +\newenvironment{TVIex}% +{\VerbatimEnvironment\begin{VerbatimOut}[commandchars=\\??]{XCasTVIex.user}}% +{\end{VerbatimOut}\dresse{\couleurtab}{TVIex}} + + +\newenvironment{TVIex*}[1]% +{\setcounter{TVnbis}{\theTVn} +\setcounter{TVn}{#1} +\VerbatimEnvironment\begin{VerbatimOut}[commandchars=\\??]{XCasTVIex.user}}% +{\end{VerbatimOut}\dressetoile{\couleurtab}{TVIex}} + + + + + +\begin{VerbatimOut}{XCasTVIapp.giac} +maple_mode(0); +approx_mode:=0; +read("config.cxx"); +read("XcasTVIapp.cxx"); +read("XCasTVIapp.user"); +\end{VerbatimOut} + +\newenvironment{TVIapp}% +{\VerbatimEnvironment\begin{VerbatimOut}[commandchars=\\??]{XCasTVIapp.user}}% +{\end{VerbatimOut}\dresse{\couleurtab}{TVIapp}} + + +\newenvironment{TVIapp*}[1]% +{\setcounter{TVnbis}{\theTVn} +\setcounter{TVn}{#1} +\VerbatimEnvironment\begin{VerbatimOut}[commandchars=\\??]{XCasTVIapp.user}}% +{\end{VerbatimOut}\dressetoile{\couleurtab}{TVIapp}} + + + +\begin{VerbatimOut}{XCasTVPC.giac} +maple_mode(0); +approx_mode:=0; +read("config.cxx"); +read("XcasTVPC.cxx"); +read("XCasTVPC.user"); +\end{VerbatimOut} + +\newenvironment{TVPC}% +{\VerbatimEnvironment\begin{VerbatimOut}[commandchars=\\??]{XCasTVPC.user}}% +{\end{VerbatimOut} +\dresse{\couleurtab}{TVPC}} + +\newenvironment{TVPC*}[1]{% +\setcounter{TVnbis}{\theTVn} +\setcounter{TVn}{#1} +\VerbatimEnvironment\begin{VerbatimOut}[commandchars=\\??]{XCasTVPC.user}}% +{\end{VerbatimOut}\dressetoile{\couleurtab}{TVPC}} + + + +\begin{VerbatimOut}{XCasTVS.giac} +maple_mode(0); +approx_mode:=0; +read("config.cxx"); +read("XcasTVS.cxx"); +read("XCasTVS.user"); +\end{VerbatimOut} + +\newenvironment{TVS}% +{\VerbatimEnvironment\begin{VerbatimOut}[commandchars=\\??]{XCasTVS.user}}% +{\end{VerbatimOut} +\dresse{\couleurtab}{TVS}} + +\newenvironment{TVS*}[1]{% +\setcounter{TVnbis}{\theTVn} +\setcounter{TVn}{#1} +\VerbatimEnvironment\begin{VerbatimOut}[commandchars=\\??]{XCasTVS.user}}% +{\end{VerbatimOut}\dressetoile{\couleurtab}{TVS}} + + + + + +%% pour nettoyer les fichiers auxiliaires + +\AtEndDocument{\immediate\write18{\cat queue.mp >> \nomtravail_Tab.mp} + } + + + + +%% +%% Zi end -> enjoy :) diff --git a/macros/latex/contrib/tablor/tablor.cfg b/macros/latex/contrib/tablor/tablor.cfg new file mode 100644 index 0000000000..82048c7197 --- /dev/null +++ b/macros/latex/contrib/tablor/tablor.cfg @@ -0,0 +1,113 @@ +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% Fichier de configuration de tablor.sty % +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + + +% La mise jour de ce fichier permet d'adapter certains paramtres du package tablor.sty +% au poste de travail et aux habitudes des utilisateurs. + + +%======================================== +% I - Configuration du prambule MetaPOST +%======================================== + +\begin{filecontents*}{enteteMP.cfg} +input tableauVariation; +verbatimtex +%&latex +\documentclass{article} +\usepackage[upright]{kpfonts}% ou mathpazo, lmodern, etc. ou rien ! +%\usepackage{amsmath} +\renewcommand\mbox[1]{ #1 } % pour les mbox intempestifs de xcas +\renewcommand\cdot{ } % idem pour les cdot +\begin{document} +\catcode`\@=0 % pour utiliser le @ +etex +\end{filecontents*} + + + +%================================= +% II - Dclaration de l'diteur utilis +% ================================ +% +% Remplacez "gedit" par la commande qui lance un autre editeur que votre diteur favori pour pouvoir modifier certains tableaux. +% Laissez une espace avant de fermer l'accolade. + +\newcommand{\editeur}{emacsclient -c } + + + + + + + + + + + +%================================= +%III - 1re colonne +%================================= +% +%permet de configurer les termes dans la premire colonne des +%tableaux : "signe de" ou "sign of" ou "" etc. +% + + + +\begin{VerbatimOut}{config.cxx} + +//reglage de epsilon : seuil du zero de giac +epsilon:=1e-100; + +// POUR LES TV, TVI,TVZ,TVapp,TSq,TSa +// pour la ligne signe +lsic:=" +newLigneSignes(btex $\\hbox{ Signe de }\\atop{\\displaystyle "; + +// POUR LES TV, TVI,TVZ,TVapp +// pour la ligne variation +lvic:=" +newLigneVariations(btex $\\hbox{ Variations de }\\atop{\\displaystyle "; + +\end{VerbatimOut} + + + +%% you may prefer + +% \begin{VerbatimOut}{config.cxx} + +% // FOR TV, TVI,TVZ,TVapp,TSq,TSa +% // for the signs +% lsic:=" +% newLigneSignes(btex $\\hbox{ Sign of }\\atop{\\displaystyle "; + +% // POUR LES TV, TVI,TVZ,TVapp +% // for the variations +% lvic:=" +% newLigneVariations(btex $\\hbox{ Variations of }\\atop{\\displaystyle "; + +%\end{VerbatimOut} + + + +%% ou si vous prfrez que ni signe ni variation n'apparaissent + + + +% \begin{VerbatimOut}{config.cxx} + +% // POUR LES TV, TVI,TVZ,TVapp,TSq,TSa +% // pour la ligne signe +% lsic:=" +% newLigneSignes(btex ${\\displaystyle "; + +% // POUR LES TV, TVI,TVZ,TVapp +% // pour la ligne variation +% lvic:=" +% newLigneVariations(btex ${\\displaystyle "; + +% \end{VerbatimOut} + diff --git a/macros/latex/contrib/tablor/tablor.html b/macros/latex/contrib/tablor/tablor.html new file mode 100644 index 0000000000..1d5c91754d --- /dev/null +++ b/macros/latex/contrib/tablor/tablor.html @@ -0,0 +1,3321 @@ + + + + + tablor.sty + + + +

+\NeedsTeXFormat{LaTeX2e}[1995/12/01]
+\ProvidesPackage{tablor}[09/05/2010 v4.07 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
+% or the LaTeX Project Public Licence, either v1.3 or (at your option)
+% any later version. The latest version is in
+%   http://www.latex-project.org/lppl/
+% This work consists of the files tablor.sty, tablor-xetex.sty,  tablor.cfg, tablor.tex,
+% tablor.pdf and tablor.html
+
+
+%% Cree 16 environnements :
+%% tableau de signes de 2 facteurs affines
+% \begin{TSa}
+% TSa(-2,3,-1,5,\tv);
+% \end{TSa}
+% %%%%%% 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],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],n,\tv)
+%%\end{TSq}
+% un tableau de variation :
+%
+% pour les tableaux de signes à une seule ligne
+% \begin{TSc}
+% TSc((x+10)/((x-5)*(x-2)),[-10,5],[2,5],n,0)
+% \end{TSc}
+%
+%
+% \begin{TV}
+% TV([0,+infinity],[0],"h","x",ln(x)-(ln(x))^2,1,n,\tv)
+% \end{TV}
+%
+% tableau de variation avec liste de valeurs
+% \begin{TVS}
+% TVS([1,2,3,4],[-1,-infinity,+infinity,2,9],[2],"f","x",\tv)
+% \end{TVS}
+%
+%
+% tableau de variation avec zones interdites
+%
+% \begin{TVZ}
+%   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,n,\tv)
+%\end{TVI}
+%%%
+% tableau avec valeurs intermediares et racines exactes
+%\begin{TVIex}
+%TVIex([-1,+infinity],[-1],"f","x",x2/sqrt(x+1)-1,1,2,n,\tv)
+%\end{TVIex}
+%%%
+%
+%
+% tableau de variations avec f' sans zero 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 zero formel
+%\begin{TVIapp}
+% TVIapp([0,+infinity],[0],"g","x",ln(x)-x*exp(2-x),1,0,\tv)
+% \end{TVIapp}
+%
+%
+%%%
+% et leurs pendants etoiles qui permettent l'affichage intermediaire du 
+% fichier metapost pour le modifier
+%
+%
+% 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,n,\tv)
+%  \end{TVP}
+%
+%
+% \begin{TVP}
+%  TVP([0,pi/2],[[],[]],["x","y"],"t",[2*cos(t),sin(2*t)],1,t,\tv)
+%  \end{TVP}
+% %
+
+% Fonctions prolongeables par continuité
+% TVP([intervalles d'étude],[valeurs prolongeables],[valeurs interdites pour f'],"g","t",e^(-1/x^2),1,n,\tv); 
+
+
+% \begin{TVPC}
+% TVPC([-infinity,+infinity],[0],[0],"g","t",e^(-1/x^2),1,n,\tv); 
+% \end{TVPC}
+
+
+
+
+
+%% extensions requises
+%% Il faudra rajouter dans le preambule \usepackage{graphicx} si vous 
+%% ne l'avez pas de base 
+
+
+\RequirePackage{filecontents}
+\RequirePackage{ifthen}
+\RequirePackage{fancyvrb}
+\RequirePackage{ifpdf}
+
+\fvset{gobble=0}
+
+% option xcas present 
+
+
+\newboolean{xcas}\setboolean{xcas}{false}
+\DeclareOption{xcas}{\setboolean{xcas}{true}}
+
+%% Initialisation du choix d'OS
+\newboolean{windows}\setboolean{windows}{false}
+\DeclareOption{windows}{\setboolean{windows}{true}}
+
+\ProcessOptions\relax
+
+
+
+%% on configure  tablor  dans un fichier exterieur pour la plateforme
+%% et l'editeur
+
+\IfFileExists{tablor.cfg}{\input{tablor.cfg}}%\typeout{pas de fichier tablor.cfg}}
+
+
+%% Definit des commandes disque selon l'OS utilise
+\ifthenelse{\boolean{windows}}%
+    {\newcommand{\rem}{DEL } \newcommand{\cat}{TYPE }
+      \newcommand{\cp}{COPY } \newcommand{\echod}{ECHO }
+         \newcommand{\echof}{ }}%
+    {\newcommand{\rem}{rm }\newcommand{\cat}{cat }
+      \newcommand{\cp}{cp } \newcommand{\echod}{echo "}
+        \newcommand{\echof}{"}}
+
+
+
+
+
+
+
+%% pour ceux compilant via pdflatex
+
+\ifpdf
+\DeclareGraphicsRule{*}{mps}{*}{}
+\fi
+
+%% pour nettoyer les fichiers auxiliaires
+
+\AtEndDocument{\immediate\write18{\rem *.user XCas* Xcas* *.mpx}
+                         }
+
+
+
+
+%% Pour clore les fichiers metapost 
+
+
+  \begin{VerbatimOut}{queue.mp}
+  
+  end
+
+  \end{VerbatimOut}
+
+
+
+%% Nettoie les fichiers log dont le nom depend du choix de l'utilisateur
+%% Par defaut, c'est le nom du fichier tex courant (\jobname)
+%% Clôt le fichier metapost contenant le recapitulatif de tous les tableaux
+
+
+
+\newcommand{\nettoyer}[1][\jobname]%
+{\immediate\write18{\rem #1.Tab.log  queue.mp enteteMP.cfg session.tex config.cxx}
+}
+
+
+
+
+%% Donne comme prefixe aux tableaux le prefixe courant
+%% Peut-être modifie par \initablor
+
+\newcommand{\nomtravail}{\jobname}
+
+%% initialise les compteurs
+
+\newcounter{TVn}
+\newcommand{\tv}{\theTVn}
+
+\newcounter{TVnbis}
+\newcommand{\tvbis}{\theTVnbis}
+
+
+
+%% permet de donner un prefixe aux tableaux produits (\jobname par defaut)
+%% effectue quelques verifications :
+
+
+\newcommand{\initablor}[1][\jobname]{%
+\renewcommand{\nomtravail}{#1}%     Arret du nom des tableaux
+\setcounter{TVn}{0}%     Initialisation du compteur de tableaux.
+\ifthenelse{\boolean{xcas}}%    Avec l'option XCas
+{\IfFileExists{\nomtravail_Tab.mp}%      Si Tableaux.mp est present...
+        {\immediate\write18{\rem \nomtravail_Tab.mp}}%  le detruire
+        {}%   
+ \immediate\write18{\cp  enteteMP.cfg \nomtravail_Tab.mp}% Reconstituer l'entête de Tableaux.mp
+} 
+{\IfFileExists{\nomtravail_Tab.mp}%      Sans l'option XCas, si
+                                %      Tableaux.mp existe
+{\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 )
+}}%
+
+
+
+%% commande pour lancer giac selon l'OS
+
+\makeatletter
+\newcommand{\executGiacmp}[1]{%
+\ifthenelse{\boolean{windows}}%
+{\immediate\write18{giac #1 }}%
+{\immediate\write18{giac  <#1 }}}
+\makeatother
+
+
+
+
+%%%
+%
+%%% LES SCRIPTS GIAC/XCAS
+%
+%%%
+
+
+
+
+%%
+%% Code giac/Xcas pour les Tableaux de Variations
+%%
+
+
+\begin{VerbatimOut}{XcasTV.cxx}
+TV(L,F,nom,nomv,f,ftt,trigo,nmr):={
+nl:=size(L);
+f:=unapply(f,x);
+fp:=function_diff(f);
+Z:=concat(L,F);
+S:=[];
+
+
+if(trigo==t){
+all_trig_solutions:=1;
+reset_solve_counter(-1,-1);
+SS:=solve(factor(simplify(fp(x))),x);
+ns:=size(SS);
+for(k:=0;k<ns;k++){
+m:=0;
+while(evalf(simplify(subst(SS[k],n_1=m)))<=evalf(L[nl-1])){
+S:=concat(S,simplify(subst(SS[k],n_1=m)));m:=m+1;
+};m:=-1;
+while(evalf(subst(SS[k],n_1=m))>=L[0]){
+S:=concat(S,simplify(subst(SS[k],n_1=m)));m:=m-1;
+}
+}
+}else{
+S:=solve(factor(simplify(fp(x))),x);
+}
+
+
+  si size(S)>0 alors   pour j de 0 jusque size(S)-1 faire
+                             qq:=member(simplify(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,simplify(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,simplify(S[j]))};
+                          fpour
+  fsi;
+
+
+Z:=sort([op(set[op(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; 
+
+       k0:= evalf(limit(f(x),x=Z[0],1))> evalf(limit(f(x),x=Z[1],-1));
+       kz:=evalf(limit(f(x),x=Z[nz-1],-1))> evalf(limit(f(x),x=Z[nz-2],1));
+                          
+lsi:=lsic+nom+"'("+nomv+")}$ etex);"+
+     if(Z[0]==-infinity){if(sign(evalf(fp(if(Z[1]==+infinity){0}else{Z[1]-10^(-5)})))==1.0){"plus;"}else{"moins;"}}else{if(member(Z[0],F)==0){
+                                                    if(fp(Z[0])==0){"valBarre(btex 0 etex);"}else{" "}+
+                                                    if(evalf(sign(fp(Z[0]+10^(-5))))==1.0){"plus;"}else{"moins;"}}else{"nonDefBarre;"+
+                                                         if(evalf(sign(fp((Z[0]+10^(-5)))))==1.0){"plus;"}else{"moins;"} }}
+ 
+if(nz>2){ for(r:=1; r<=nz-2;r++){      ksp:=evalf(fp(Z[r]+0.1))>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{"nonDefBarre;
+"}
+lm0:=limit(f(x),x=Z[0],1)==-infinity;
+     li:=lvic+nom+"}$ etex);"+
+           if(member(Z[0],F)==0){"valPos(btex $"+if(lm0==1){"-\\infty"}else{latex(simplify(limit(f(x),x=Z[0],1)))}+"$ etex,"}
+             else{"nonDefBarre;limDroite(btex $"+if(lm0==1){"-\\infty"}else{latex(simplify(limit(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(limit(f(x),x=Z[r-1],1))< evalf(limit(f(x),x=Z[r],-1));
+                                                 krp:=evalf(limit(f(x),x=Z[r],1))> evalf(limit(f(x),x=Z[r+1],-1)) ;  
+                         lmrm:=limit(f(x),x=Z[r],-1)==-infinity;lmrp:=limit(f(x),x=Z[r],1)==-infinity;
+                                                  lp:=lp+if(member(Z[r],F)){
+                                    "limGauche(btex
+                                    $"+if(lmrm==1){"-\\infty"}else{latex(simplify(limit(f(x),x=Z[r],-1)))}+"$
+                                    etex,"+if(krm==1){"1);"}else{"0);"}+"nonDefBarre;limDroite(btex $"+if(lmrp==1){"-\\infty"}else{latex(simplify(limit(f(x),x=Z[r],1)))}+"$ etex,"+if(krp==1){"1);"}else{"0);"}}
+                                          else{"valPos(btex          $"+latex(simplify(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:=limit(f(x),x=Z[nz-1],-1)==-infinity;
+                          
+
+
+lf:=if(member(Z[nz-1],F)==0){"valPos(btex $"+
+           if(lnz==1){"-\\infty"}else{latex(simplify(limit(f(x),x=Z[nz-1],-1)))}+"$ etex,"+
+             if(kz==1){"1);"}else{"0);"}}
+    else{"limGauche(btex $"+
+         if(lnz==1){"-\\infty"}else{latex(simplify(limit(f(x),x=Z[nz-1],-1)))}+"$ etex,"+ 
+           if(kz==1){"1);nonDefBarre;"}else{"0);nonDefBarre;"}};    
+    
+
+
+
+
+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;
+
+";}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);
+
+
+ }:;
+
+\end{VerbatimOut}
+
+
+
+
+
+
+%%%%
+
+
+%
+%
+%  TVPC : pour les fonctions prolongeables par continuité.
+%%
+%%
+
+
+
+
+\begin{VerbatimOut}{XcasTVPC.cxx}
+TVPC(L,F,FP,nom,nomv,f,ftt,trigo,nmr):={
+nl:=size(L);
+f:=unapply(f,x);
+fp:=function_diff(f);
+Z:=concat(L,F);
+Z:=concat(Z,FP);
+S:=[];
+
+
+if(trigo==t){
+all_trig_solutions:=1;
+reset_solve_counter(-1,-1);
+SS:=solve(factor(simplify(fp(x))),x);
+ns:=size(SS);
+for(k:=0;k<ns;k++){
+m:=0;
+while(evalf(simplify(subst(SS[k],n_1=m)))<=evalf(L[nl-1])){
+S:=concat(S,simplify(subst(SS[k],n_1=m)));m:=m+1;
+};m:=-1;
+while(evalf(subst(SS[k],n_1=m))>=L[0]){
+S:=concat(S,simplify(subst(SS[k],n_1=m)));m:=m-1;
+}
+}
+}else{
+S:=solve(factor(simplify(fp(x))),x);
+}
+
+
+  si size(S)>0 alors   pour j de 0 jusque size(S)-1 faire
+                             qq:=member(simplify(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,simplify(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,simplify(S[j]))};
+                          fpour
+  fsi;
+
+
+Z:=sort([op(set[op(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; 
+
+       k0:= evalf(limit(f(x),x=Z[0],1))> evalf(limit(f(x),x=Z[1],-1));
+       kz:=evalf(limit(f(x),x=Z[nz-1],-1))> evalf(limit(f(x),x=Z[nz-2],1));
+                          
+lsi:=lsic+nom+"'("+nomv+")}$ etex);"+
+     if(Z[0]==-infinity){if(sign(evalf(fp(if(Z[1]==+infinity){0}else{Z[1]-10^(-5)})))==1.0){"plus;"}else{"moins;"}}else{if(member(Z[0],FP)==0){
+                                                    if(fp(Z[0])==0){"valBarre(btex 0 etex);"}else{" "}+
+                                                    if(evalf(sign(fp(Z[0]+10^(-5))))==1.0){"plus;"}else{"moins;"}}else{"nonDefBarre;"+
+                                                         if(evalf(sign(fp((Z[0]+10^(-5)))))==1.0){"plus;"}else{"moins;"} }}
+ 
+if(nz>2){ for(r:=1; r<=nz-2;r++){      ksp:=evalf(fp(Z[r]+0.1))>0;                     
+                                               lsp:=lsp+if(member(Z[r],FP)==0){"valBarre(btex 0 etex);"}else{"nonDefBarre;"}+
+                                                if(ksp==1){"plus;"}else{"moins;"}
+                                                  }; }
+
+lsf:=if(member(Z[nz-1],FP)==0){""}else{"nonDefBarre;
+"}
+lm0:=limit(f(x),x=Z[0],1)==-infinity;
+     li:=lvic+nom+"}$ etex);"+
+           if(member(Z[0],F)==0){"valPos(btex $"+if(lm0==1){"-\\infty"}else{latex(simplify(limit(f(x),x=Z[0],1)))}+"$ etex,"}
+             else{"limDroite(btex $"+if(lm0==1){"-\\infty"}else{latex(simplify(limit(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(limit(f(x),x=Z[r-1],1))< evalf(limit(f(x),x=Z[r],-1));
+                                                 krp:=evalf(limit(f(x),x=Z[r],1))> evalf(limit(f(x),x=Z[r+1],-1)) ;  
+                         lmrm:=limit(f(x),x=Z[r],-1)==-infinity;lmrp:=limit(f(x),x=Z[r],1)==-infinity;
+                                                  lp:=lp+if(member(Z[r],F)){ 
+                                    "valPos(btex
+                                    $"+if(lmrm==1){"-\\infty"}else{latex(simplify(limit(f(x),x=Z[r],-1)))}+"$
+                                    etex,"+if(krm==1){"1);"}else{"0);"} }
+                                          else{"valPos(btex          $"+latex(simplify(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:=limit(f(x),x=Z[nz-1],-1)==-infinity;
+                          
+
+
+lf:=if(member(Z[nz-1],F)==0){"valPos(btex $"+
+           if(lnz==1){"-\\infty"}else{latex(simplify(limit(f(x),x=Z[nz-1],-1)))}+"$ etex,"+
+             if(kz==1){"1);"}else{"0);"}}
+    else{"limGauche(btex $"+
+         if(lnz==1){"-\\infty"}else{latex(simplify(limit(f(x),x=Z[nz-1],-1)))}+"$ etex,"+ 
+           if(kz==1){"1);"}else{"0);"}};    
+    
+
+
+
+
+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;
+
+";}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);
+
+
+ }:;
+
+\end{VerbatimOut}
+
+
+
+
+
+
+
+
+
+
+
+
+%%
+%%
+%% TV avec une zone interdite : on rajoute comme argument la liste des intervalles interdits
+%% par exemple, pour sqrt(x^2-1) : TVZ([-infinity,100],[],[[-1,1]],"f","x",sqrt(x^2-1),1,1)
+%%
+
+\begin{VerbatimOut}{XcasTVZ.cxx}
+
+
+TVZ(L,F,FF,nom,nomv,f,ftt,trigo,nmr):={
+nl:=size(L);
+nf:=size(FF);
+ Ff:=NULL;IMIN:=NULL;IMAX:=NULL;
+for(k:=0;k<nf;k++){
+if(FF[k][0]>L[0]){Imin[k]:=FF[k][0];LL:=L}else{Imin[k]:=L[0];LL:=[L[1]]};
+if(FF[k][1]<L[1]){Imax[k]:=FF[k][1];LL:=L}else{Imax[k]:=L[1];LL:=[L[0]]};
+ Ff:=Ff,[Imin[k],Imax[k]];
+ IMIN:=IMIN,Imin[k];
+ IMAX:=IMAX,Imax[k];
+ }
+ FF:=[Ff];
+ IMIN:=[IMIN];
+ IMAX:=[IMAX];
+ f:=unapply(f,x);
+fp:=function_diff(f);
+Z:=concat(LL,F);
+
+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:=solve(factor(simplify(fp(x))),x);
+ns:=size(SS);
+for(k:=0;k<ns;k++){
+m:=0;
+while(evalf(simplify(subst(SS[k],n_1=m)))<=evalf(L[nl-1])){
+S:=concat(S,simplify(subst(SS[k],n_1=m)));m:=m+1;
+};m:=-1;
+while(evalf(subst(SS[k],n_1=m))>=L[0]){
+S:=concat(S,simplify(subst(SS[k],n_1=m)));m:=m-1;
+}
+}
+}else{
+S:=solve(factor(simplify(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]));
+                             kK:=(evalf(S[j])<evalf(Imin[k])) or (evalf(S[j])>evalf(Imax[k]));
+                             Kk:=(kk) and kK;
+                          if(Kk==1){Z:=append(Z,simplify(S[j]))};
+                          }
+                        fpour
+  fsi;
+
+
+Z:=sort([op(set[op(Z)])]);
+
+nz:=size(Z);
+
+for(j:=0;j<nf;j++){
+ for(k:=1;k<nz;k++){
+   if ((Z[k]>Imin[j])and(Z[k]<Imax[j])){Z:=augment(Z[0..k-1],Z[k+1..nz-1]);nz:=nz-1;
+   }
+  }
+}
+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(limit(f(x),x=Z[0],1))> evalf(limit(f(x),x=Z[1],-1));
+       kz:=evalf(limit(f(x),x=Z[nz-1],-1))> evalf(limit(f(x),x=Z[nz-2],1));
+                          
+lsi:=lsic+nom+"'("+nomv+")}$ etex);"+
+if(member(Z[0],IMIN)!=0){if((member(Z[0],F)==0) and (fp(Z[0])!=undef)){"debutNonDef;"}else{"debutNonDefStrict;"}}else{if(Z[0]==-infinity){if(sign(evalf(fp(if(Z[1]==+infinity){0}else{Z[1]-10^(-5)})))==1.0){"plus;"}else{"moins;"}}else{if(member(Z[0],F)==0){
+                                                    if(fp(Z[0])==0){"valBarre(btex 0 etex);"}else{" "}+
+                                                    if(evalf(sign(fp(Z[0]+10^(-5))))==1.0){"plus;"}else{"moins;"}}else{"nonDefBarre;"+
+                                                         if(evalf(sign(fp((Z[0]+10^(-5)))))==1.0){"plus;"}else{"moins;"} }}}
+
+
+
+// modif 3 avril 2010
+
+if(nz>2){ for(r:=1; r<=nz-2;r++){ 
+             lsp:=lsp+
+              if(member(Z[r],IMIN)!=0){
+                if((member(Z[r],F)==0) and (fp(Z[r])!=undef)){"debutNonDef;"}
+                else{"debutNonDefStrict;"}}
+              else{if(member(Z[r],IMAX)!=0){if((member(Z[r],F)==0) and (fp(Z[r])!=undef)){"finNonDef;"}
+                                                else{"finNonDefStrict;"}+
+                                                if(evalf(fp(Z[r]+0.01))>0){"plus;"}
+                                                else{"moins;"}}
+                    else{if(member(Z[r],F)==0){"valBarre(btex 0 etex);"}
+                          else{"nonDefBarre;"}+
+                          if(evalf(fp(Z[r]+0.01))>0){"plus;"}
+                          else{"moins;"}
+                                                  }}
+                            }}; 
+
+// fin modif
+
+
+
+
+
+lsf:=if(member(Z[nz-1],IMAX)!=0){if((member(Z[nz-1],F)==0) and (fp(Z[nz-1])!=undef)){"finNonDef;"}else{"finNonDefStrict;"}}else{if(member(Z[nz-1],F)==0){""}else{"nonDefBarre;
+"}}
+
+
+lm0:=limit(f(x),x=Z[0],1)==-infinity;
+     li:=lvic  +nom+"}$ etex);"+
+           if(member(Z[0],F)==0){"valPos(btex $"+if(lm0==1){"-\\infty"}else{latex(simplify(limit(f(x),x=Z[0],1)))}+"$ etex,"}
+             else{"nonDefBarre;limDroite(btex $"+if(lm0==1){"-\\infty"}else{latex(simplify(limit(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(limit(f(x),x=Z[r-1],1))< evalf(limit(f(x),x=Z[r],-1));
+     krp:=evalf(limit(f(x),x=Z[r],1))> evalf(limit(f(x),x=Z[r+1],-1)) ;  
+     lmrm:=limit(f(x),x=Z[r],-1)==-infinity;lmrp:=limit(f(x),x=Z[r],1)==-infinity;
+
+     lp:=lp+if(member(Z[r],IMIN)!=0){"limGauche(btex $"+if(lmrm==1){
+             "-\\infty"}else{
+                latex(simplify(limit(f(x),x=Z[r],-1)))}
+         +"$ etex,"+if(krm==1){
+             "1);"}else{"0);"} 
+         +if(member(Z[r],F)==0){"debutNonDef;"}else{"debutNonDefStrict;"}
+       }//fsi Zr=Imin
+      else{
+        if (member(Z[r],IMAX)!=0){if(member(Z[r],F)==0){"finNonDef;"}else{"finNonDefStrict;"}+"limDroite(btex $"+if(lmrp==1){
+             "-\\infty"}else{latex(simplify(limit(f(x),x=Z[r],1)))}
+         +"$ etex,"+if(krp==1){
+             "1);"}else{"0);"}          
+       }else{
+          if(member(Z[r],F)){
+         "limGauche(btex $"+if(lmrm==1){
+             "-\\infty"}else{
+                latex(simplify(limit(f(x),x=Z[r],-1)))}
+         +"$ etex,"+if(krm==1){
+             "1);"}else{"0);"}
+         +"nonDefBarre;limDroite(btex $"+if(lmrp==1){
+             "-\\infty"}else{latex(simplify(limit(f(x),x=Z[r],1)))}
+         +"$ etex,"+if(krp==1){
+             "1);"}else{"0);"}
+         }//fsi (member Zr F)
+          else{"valPos(btex$"+latex(simplify(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);"}//felse(krp)
+                    }//felse(valpos)
+               }//felse(member Zr F)
+               } //felse(Zr=Imax)
+              }//felse(Zr=Imin)
+           };//ffor 
+         }//fsi nz
+
+lnz:=limit(f(x),x=Z[nz-1],-1)==-infinity;
+
+
+
+lf:=if(member(Z[nz-1],F)==0){"valPos(btex $"+
+           if(lnz==1){"-\\infty"}else{latex(simplify(limit(f(x),x=Z[nz-1],-1)))}+"$ etex,"+
+             if(kz==1){"1);"}else{"0);"}}
+    else{"limGauche(btex $"+
+         if(lnz==1){"-\\infty"}else{latex(simplify(limit(f(x),x=Z[nz-1],-1)))}+"$ etex,"+ 
+           if(kz==1){"1);nonDefBarre;"}else{"0);nonDefBarre;"}};    
+    
+
+
+    
+
+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;
+
+";}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);
+
+ }
+:;
+
+
+\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):={
+local  nl,fp,z0,z,nz,S,k,j,m,kk,kok,Z,l0,lp,lf,lsp,k0,kz,lsi,r,ksp,lsf,lm0,li,krm,krp,lmrm,lmrp,lnz;
+
+nl:=size(L);
+f:=unapply(f,x);
+fp:=function_diff(f);
+z0:=concat(L,F);z:=sort(z0);
+nz:=size(z);
+
+
+
+S:=NULL;
+
+
+
+if(L==[-infinity,+infinity]){j:=[seq(-50+2*k,k=0..50)]minus F;
+  for k in j do for(m:=-5;m<=5;m++){S:=S,resoudre_numerique(fp(y),y,k+m*0.1,k+(m+1)*0.1,bisection_solver)};end_for}
+else{if(L[0]==-infinity){j:=[seq(2*k,k=-25..0.5*floor(L[1]))] minus F;
+  for k in j do for(m:=-5;m<=5;m++){ S:=S,resoudre_numerique(fp(y),y,k+m*0.1,k+(m+1)*0.1,bisection_solver)};end_for}
+else{if(L[1]==+infinity){
+j:=[seq(2*k,k=floor(0.5*L[0])..0.5*50)] minus F;
+  for k in j do for(m:=-5;m<=5;m++){ S:=S,resoudre_numerique(fp(y),y,k+m*0.1,k+(m+1)*0.1,bisection_solver)};end_for
+}
+else{ j:=[seq(2*k,k=0.5*floor(z[0])..0.5*floor(z[nz-1]))] minus F;
+  for k in j do  for(m:=-5;m<=5;m++){S:=S,resoudre_numerique(fp(y),y,k+m*0.1,k+(m+1)*0.1,bisection_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,simplify(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(limit(f(x),x=Z[0],1))> evalf(limit(f(x),x=Z[1],-1));
+       kz:=evalf(limit(f(x),x=Z[nz-1],-1))> evalf(limit(f(x),x=Z[nz-2],1));
+                          
+lsi:=lsic+nom+"'("+nomv+")}$ etex);"+
+     if(Z[0]==-infinity){if(sign(evalf(fp(if(Z[1]==+infinity){0}else{Z[1]-10^(-5)})))==1.0){"plus;"}else{"moins;"}}else{if(member(Z[0],F)==0){
+                                                    if(fp(Z[0])==0){"valBarre(btex 0 etex);"}else{" "}+
+                                                    if(evalf(sign(fp(Z[0]+10^(-5))))==1.0){"plus;"}else{"moins;"}}else{"nonDefBarre;"+
+                                                         if(evalf(sign(fp((Z[0]+10^(-5)))))==1.0){"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{"nonDefBarre;
+"}
+lm0:=limit(f(x),x=Z[0],1)==-infinity;
+     li:=lvic+nom+"}$ etex);"+
+           if(member(Z[0],F)==0){"valPos(btex $"+if(lm0==1){"-\\infty"}else{latex(simplify(limit(f(x),x=Z[0],1)))}+"$ etex,"}
+             else{"nonDefBarre;limDroite(btex $"+if(lm0==1){"-\\infty"}else{latex(simplify(limit(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(limit(f(x),x=Z[r-1],1))< evalf(limit(f(x),x=Z[r],-1));
+                                                 krp:=evalf(limit(f(x),x=Z[r],1))> evalf(limit(f(x),x=Z[r+1],-1)) ;  
+                         lmrm:=limit(f(x),x=Z[r],-1)==-infinity;lmrp:=limit(f(x),x=Z[r],1)==-infinity;
+                                                  lp:=lp+if(member(Z[r],F)){
+                                    "limGauche(btex $"+if(lmrm==1){"-\\infty"}else{latex(simplify(limit(f(x),x=Z[r],-1)))}+"$ etex,"+if(krm==1){"1);"}else{"0);"}+"nonDefBarre;limDroite(btex $"+if(lmrp==1){"-\\infty"}else{latex(simplify(limit(f(x),x=Z[r],1)))}+"$ etex,"+if(krp==1){"1);"}else{"0);"}}
+                                          else{"valPos(btex          $"+latex(simplify(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:=limit(f(x),x=Z[nz-1],-1)==-infinity;
+ 
+
+lf:=if(member(Z[nz-1],F)==0){"valPos(btex $"+
+           if(lnz==1){"-\\infty"}else{latex(simplify(limit(f(x),x=Z[nz-1],-1)))}+"$ etex,"+
+             if(kz==1){"1);"}else{"0);"}}
+    else{"limGauche(btex $"+
+         if(lnz==1){"-\\infty"}else{latex(simplify(limit(f(x),x=Z[nz-1],-1)))}+"$ etex,"+ 
+           if(kz==1){"1);nonDefBarre;"}else{"0);nonDefBarre;"}};    
+    
+
+
+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;
+
+";}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);
+
+
+ }:;
+
+
+
+
+
+
+
+\end{VerbatimOut}
+
+
+
+
+
+
+
+%%
+%% Code giac/Xcas pour les Tableaux de Variations avec 
+%% Valeurs intermediaires
+%%
+
+
+
+
+
+\begin{VerbatimOut}{XcasTVI.cxx}
+
+
+TVI(L,F,nom,nomv,f,ftt,ao,trigo,nmr):={
+nl:=size(L);
+f:=unapply(f,x);
+fp:=function_diff(f);
+Z:=concat(L,F);
+S:=[];
+
+
+if(trigo==t){
+all_trig_solutions:=1;
+reset_solve_counter(-1,-1);
+SS:=solve(factor(simplify(fp(x))),x);
+ns:=size(SS);
+for(k:=0;k<ns;k++){
+m:=0;
+while(evalf(simplify(subst(SS[k],n_1=m)))<=evalf(L[nl-1])){
+S:=concat(S,simplify(subst(SS[k],n_1=m)));m:=m+1;
+};m:=-1;
+while(evalf(subst(SS[k],n_1=m))>=L[0]){
+S:=concat(S,simplify(subst(SS[k],n_1=m)));m:=m-1;
+}
+}
+}else{
+S:=solve(factor(simplify(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,simplify(S[j]))};
+                          fpour
+  fsi;
+
+
+Z:=sort([op(set[op(Z)])]);
+
+
+
+nz:=size(Z);
+l0:=" newLigneVariables(btex $"+nomv+"$ etex);";lp:=" "; lf:=" ";lsp:=" ";
+
+
+
+LI:=limit(f(x),x,Z[0],1);
+LF:=limit(f(x),x,Z[nz-1],-1);
+LP:=NULL;
+PB:=1;
+if(nz>2){                                                       for(r:=1;
+  r<=nz-2;r++){LP:=LP,if(member(Z[r],F)){limit(f(x),x,Z[r],-1),limit(f(x),x,Z[r],1)}else{f(Z[r])};
+if(member(Z[r],F)){PB:=PB,0,1}else{PB:=PB,1};
+}
+};
+if(nz>2){ LL:=[LI,LP,LF]; PB:=[PB,1]}else{LL:=[LI,LF];PB:=[1,1]};
+      
+NL:=size(LL);
+A:=NULL;aa:=1;
+kk:=0;
+
+
+
+if(NL==nz){for(k:=0;k<nz-1;k++){TestS:=(evalf(sign(LL[k]-ao))==evalf(sign(LL[k+1]-ao))) or (evalf(sign(LL[k]-ao))==0.0)or (evalf(sign(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);"};
+//chgmt NL->nz
+if(NL>nz){for(k:=0;k<NL-1;k++){TestS:=(evalf(sign(LL[k]-ao))==evalf(sign(LL[k+1]-ao))) or (evalf(sign(LL[k]-ao))==0.0)or (evalf(sign(LL[k+1]-ao))==0.0);
+  
+if(PB[k]==1){if(TestS==0){
+   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:=(evalf(sign(LL[0]-ao))==evalf(sign(LL[1]-ao))) or (evalf(sign(LL[0]-ao))==0.0) or (evalf(sign(LL[1]-ao))==0.0);
+       k0:= evalf(limit(f(x),x=Z[0],1))> evalf(limit(f(x),x=Z[1],-1));
+       kz:=evalf(limit(f(x),x=Z[nz-1],-1))> evalf(limit(f(x),x=Z[nz-2],1));
+                          
+lsi:=lsic+nom+"'("+nomv+")}$ etex);"+
+     if(Z[0]==-infinity){if(evalf(sign(fp(if(Z[1]==+infinity){0}else{Z[1]-10^(-5)})))==1.0){"plus;"}else{"moins;"}}else{if(member(Z[0],F)==0){
+                                                    if(fp(Z[0])==0){"valBarre(btex 0 etex);"}else{" "}+
+                                                    if(evalf(sign(fp((Z[0]+10^(-3)))))==1.0){"plus;"}else{"moins;"}}else{"nonDefBarre;"+
+                                                         if(evalf(sign(fp(10^(-3)+Z[0])))==1.0){"plus;"}else{"moins;"} }}+if(TestS==0){"valBarre(btex$
+                                                       $ etex);"+ 
+if(evalf(sign(fp(10^(-3)+ifte(Z[0]==-infinity,ifte(Z[1]==+infinity,ifte(member(0,F)==0,0,0.01),ifte(member(Z[1]-1,F)==0,Z[1]-1,Z[1]-1.1)),Z[0]))))==1.0){"plus;"}else{"moins;"}}else{" "}; 
+
+
+
+
+
+if(nz>2){rr:=1; if(nz==NL){for(r:=1; r<=NL-2;r++){ TestS:=(evalf(sign(LL[r]-ao))==evalf(sign(LL[r+1]-ao))) or (evalf(sign(LL[r]-ao))==0.0)or (evalf(sign(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:=(evalf(sign(LL[r]-ao))==evalf(sign(LL[r+1]-ao))) or (evalf(sign(LL[r]-ao))==0.0)or (evalf(sign(LL[r+1]-ao))==0.0);
+                                         
+                      if(PB[r]==1){if(TestS==0){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{"nonDefBarre;"}
+
+
+
+lm0:=limit(f(x),x=Z[0],1)==-infinity;
+
+
+
+
+TestS:=(evalf(sign(LL[0]-ao))==evalf(sign(LL[1]-ao))) or (evalf(sign(LL[0]-ao))==0.0) or (evalf(sign(LL[1]-ao))==0.0);
+
+     li:=lvic+nom+"}$ etex);
+"+  if(member(Z[0],F)==0){"valPos(btex $"+if(lm0==1){"-\\infty"}else{latex(simplify(limit(f(x),x=Z[0],1)))}+"$ etex,"}
+             else{"nonDefBarre;limDroite(btex $"+if(lm0==1){"-\\infty"}else{latex(simplify(limit(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:=(evalf(sign(LL[r]-ao))==evalf(sign(LL[r+1]-ao))) or (evalf(sign(LL[r]-ao))==0.0)or (evalf(sign(LL[r+1]-ao))==0.0); 
+                                                 krm:=evalf(limit(f(x),x=Z[r-1],1))< evalf(limit(f(x),x=Z[r],-1));
+                                                 krp:=evalf(limit(f(x),x=Z[r],1))> evalf(limit(f(x),x=Z[r+1],-1)) ;  
+                         lmrm:=limit(f(x),x=Z[r],-1)==-infinity;lmrp:=limit(f(x),x=Z[r],1)==-infinity;
+                                                  lp:=lp+if(member(Z[r],F)) {
+                                    "limGauche(btex $"+if(lmrm==1){"-\\infty"}else{latex(simplify(limit(f(x),x=Z[r],-1)))}+"$ etex,"+if(krm==1){"1);"}else{"0);"}+"nonDefBarre;limDroite(btex $"+if(lmrp==1){"-\\infty"}else{latex(simplify(limit(f(x),x=Z[r],1)))}+"$ etex,"+if(krp==1){"1);"}else{"0);"}}
+                                          else{"valPos(btex          $"+latex(simplify(f(Z[r])))+"$
+                                            etex,"+if(evalf(sign(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:=(evalf(sign(LL[r]-ao))==evalf(sign(LL[r+1]-ao))) or (evalf(sign(LL[r]-ao))==0.0)or (evalf(sign(LL[r+1]-ao))==0.0); 
+                                                 krm:=evalf(limit(f(x),x=Z[rr-1],1))< evalf(limit(f(x),x=Z[rr],-1));
+                                                 krp:=evalf(limit(f(x),x=Z[rr],1))> evalf(limit(f(x),x=Z[rr+1],-1)) ;  
+                         lmrm:=limit(f(x),x=Z[rr],-1)==-infinity;lmrp:=limit(f(x),x=Z[rr],1)==-infinity; TestL:=(abs(LL[r])==abs(LL[r+1]));
+                   
+if(PB[r]==1){if(TestS==0){lp:=lp+if(member(Z[rr],F)){
+                                    "limGauche(btex $"+if(lmrm==1){"-\\infty"}else{latex(simplify(limit(f(x),x=Z[rr],-1)))}+"$ etex,"+if(krm==1){"1);"}else{"0);"}+"nonDefBarre;limDroite(btex $"+if(lmrp==1){"-\\infty"}else{latex(simplify(limit(f(x),x=Z[rr],1)))}+"$ etex,"+if(krp==1){"1);"}else{"0);"}}
+                                          else{"valPos(btex          $"+latex(simplify(f(Z[rr])))+"$
+                                            etex,"+if(evalf(sign(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;
+}//  testS==0
+else{lp:=lp+if(member(Z[rr],F)){
+                                    "limGauche(btex $"+if(lmrm==1){"-\\infty"}else{latex(simplify(limit(f(x),x=Z[rr],-1)))}+"$ etex,"+if(krm==1){"1);"}else{"0);"}+"nonDefBarre;limDroite(btex $"+if(lmrp==1){"-\\infty"}else{latex(simplify(limit(f(x),x=Z[rr],1)))}+"$ etex,"+if(krp==1){"1);"}else{"0);"}}
+                                          else{"valPos(btex          $"+latex(simplify(f(Z[rr])))+"$
+                                            etex,"+if(evalf(sign(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
+}//PB[r]==1
+}//for nz<NL
+}// else nz<NL
+//if nz=NL
+};//if nz>2
+
+
+
+lnz:=limit(f(x),x=Z[nz-1],-1)==-infinity;
+
+
+lf:=if(member(Z[nz-1],F)==0){"valPos(btex $"+
+           if(lnz==1){"-\\infty"}else{latex(simplify(limit(f(x),x=Z[nz-1],-1)))}+"$ etex,"+
+             if(kz==1){"1);"}else{"0);"}}
+    else{"limGauche(btex $"+
+         if(lnz==1){"-\\infty"}else{latex(simplify(limit(f(x),x=Z[nz-1],-1)))}+"$ etex,"+ 
+           if(kz==1){"1);nonDefBarre;"}else{"0);nonDefBarre;"}};    
+
+
+
+
+
+
+
+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;
+
+";}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);
+
+
+ }:;
+
+
+
+\end{VerbatimOut}
+
+
+
+%%
+%
+%
+%
+% Pour avoir les racines sous forme exacte.... quand c'est possible !
+%
+%
+%
+%%%%%%%%%
+
+
+\begin{VerbatimOut}{XcasTVIex.cxx}
+
+
+
+TVIex(L,F,nom,nomv,f,ftt,ao,trigo,nmr):={
+nl:=size(L);
+f:=unapply(f,x);
+fp:=function_diff(f);
+Z:=concat(L,F);
+S:=[];
+
+Sex:=NULL;
+Zex:=solve(f(x)=ao);
+Zex:=sort(Zex);
+for(j:=0;j<size(Zex);j++){
+if((evalf(Zex[j])>=evalf(L[0])) and (evalf(Zex[j])<=evalf(L[nl-1]))){Sex:=Sex,Zex[j]};
+};
+Sex:=[Sex];
+
+
+
+
+
+
+
+
+if(trigo==t){
+all_trig_solutions:=1;
+reset_solve_counter(-1,-1);
+SS:=solve(factor(simplify(fp(x))),x);
+ns:=size(SS);
+for(k:=0;k<ns;k++){
+m:=0;
+while(evalf(simplify(subst(SS[k],n_1=m)))<=evalf(L[nl-1])){
+S:=concat(S,simplify(subst(SS[k],n_1=m)));m:=m+1;
+};m:=-1;
+while(evalf(subst(SS[k],n_1=m))>=L[0]){
+S:=concat(S,simplify(subst(SS[k],n_1=m)));m:=m-1;
+}
+}
+}else{
+S:=solve(factor(simplify(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,simplify(S[j]))};
+                          fpour
+  fsi;
+
+
+
+ Z:=sort([op(set[op(Z)])]);
+
+
+nz:=size(Z);
+l0:=" newLigneVariables(btex $"+nomv+"$ etex);";lp:=" "; lf:=" ";lsp:=" ";
+
+
+
+LI:=limit(f(x),x,Z[0],1);
+LF:=limit(f(x),x,Z[nz-1],-1);
+LP:=NULL;
+PB:=1;
+if(nz>2){                                                       for(r:=1;
+  r<=nz-2;r++){LP:=LP,if(member(Z[r],F)){limit(f(x),x,Z[r],-1),limit(f(x),x,Z[r],1)}else{f(Z[r])};
+if(member(Z[r],F)){PB:=PB,0,1}else{PB:=PB,1};
+}
+};
+if(nz>2){ LL:=[LI,LP,LF]; PB:=[PB,1]}else{LL:=[LI,LF];PB:=[1,1]};
+      
+NL:=size(LL);
+A:=NULL;aa:=0;
+kk:=0;
+
+
+
+if(NL==nz){for(k:=0;k<nz-1;k++){TestS:=(evalf(sign(LL[k]-ao))==evalf(sign(LL[k+1]-ao))) or (evalf(sign(LL[k]-ao))==0.0)or (evalf(sign(LL[k+1]-ao))==0.0);
+if(TestS==0){A:=A,aa;l0:=l0+"val(btex $"+latex(Z[k])+"$ etex);"+"val(btex $"+latex(simplify(Sex[aa]))+"$ etex);";aa:=aa+1;}else{l0:=l0+"val(btex $"+latex(Z[k])+"$ etex);"}}
+l0:=l0+"val(btex $"+latex(Z[nz-1])+"$ etex);"};
+//chgmt NL->nz
+if(NL>nz){for(k:=0;k<NL-1;k++){TestS:=(evalf(sign(LL[k]-ao))==evalf(sign(LL[k+1]-ao))) or (evalf(sign(LL[k]-ao))==0.0)or (evalf(sign(LL[k+1]-ao))==0.0);
+  
+if(PB[k]==1){if(TestS==0){
+   A:=A,aa;l0:=l0+"val(btex $"+latex(Z[kk])+"$ etex);"+"val(btex $"+latex(simplify(Sex[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:=(evalf(sign(LL[0]-ao))==evalf(sign(LL[1]-ao))) or (evalf(sign(LL[0]-ao))==0.0) or (evalf(sign(LL[1]-ao))==0.0);
+       k0:= evalf(limit(f(x),x=Z[0],1))> evalf(limit(f(x),x=Z[1],-1));
+       kz:=evalf(limit(f(x),x=Z[nz-1],-1))> evalf(limit(f(x),x=Z[nz-2],1));
+                          
+lsi:=lsic+nom+"'("+nomv+")}$ etex);"+
+     if(Z[0]==-infinity){if(evalf(sign(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^(-3))))==1){"plus;"}else{"moins;"}}else{"nonDefBarre;"+
+                                                         if(sign(fp(10^(-3)+Z[0]))==1){"plus;"}else{"moins;"} }}+if(TestS==0){"valBarre(btex$
+                                                       $ etex);"+
+if(evalf(sign(fp(10^(-3)+ifte(Z[0]==-infinity,ifte(Z[1]==+infinity,ifte(member(0,F)==0,0,0.01),ifte(member(Z[1]-1,F)==0,Z[1]-1,Z[1]-1.1)),Z[0]))))==1.0){"plus;"}else{"moins;"}}else{" "}; 
+
+
+
+
+if(nz>2){rr:=1; if(nz==NL){for(r:=1; r<=NL-2;r++){ TestS:=(evalf(sign(LL[r]-ao))==evalf(sign(LL[r+1]-ao))) or (evalf(sign(LL[r]-ao))==0.0)or (evalf(sign(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:=(evalf(sign(LL[r]-ao))==evalf(sign(LL[r+1]-ao))) or (evalf(sign(LL[r]-ao))==0.0)or (evalf(sign(LL[r+1]-ao))==0.0);
+                                         
+                      if(PB[r]==1){if(TestS==0){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{"nonDefBarre;"}
+
+
+
+lm0:=limit(f(x),x=Z[0],1)==-infinity;
+
+
+
+
+TestS:=(evalf(sign(LL[0]-ao))==evalf(sign(LL[1]-ao))) or (evalf(sign(LL[0]-ao))==0.0) or (evalf(sign(LL[1]-ao))==0.0);
+
+     li:=lvic+nom+"}$ etex);
+"+  if(member(Z[0],F)==0){"valPos(btex $"+if(lm0==1){"-\\infty"}else{latex(simplify(limit(f(x),x=Z[0],1)))}+"$ etex,"}
+             else{"nonDefBarre;limDroite(btex $"+if(lm0==1){"-\\infty"}else{latex(simplify(limit(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:=(evalf(sign(LL[r]-ao))==evalf(sign(LL[r+1]-ao))) or (evalf(sign(LL[r]-ao))==0.0)or (evalf(sign(LL[r+1]-ao))==0.0); 
+                                                 krm:=evalf(limit(f(x),x=Z[r-1],1))< evalf(limit(f(x),x=Z[r],-1));
+                                                 krp:=evalf(limit(f(x),x=Z[r],1))> evalf(limit(f(x),x=Z[r+1],-1)) ;  
+                         lmrm:=limit(f(x),x=Z[r],-1)==-infinity;lmrp:=limit(f(x),x=Z[r],1)==-infinity;
+                                                  lp:=lp+if(member(Z[r],F)) {
+                                    "limGauche(btex $"+if(lmrm==1){"-\\infty"}else{latex(simplify(limit(f(x),x=Z[r],-1)))}+"$ etex,"+if(krm==1){"1);"}else{"0);"}+"nonDefBarre;limDroite(btex $"+if(lmrp==1){"-\\infty"}else{latex(simplify(limit(f(x),x=Z[r],1)))}+"$ etex,"+if(krp==1){"1);"}else{"0);"}}
+                                          else{"valPos(btex          $"+latex(simplify(f(Z[r])))+"$
+                                            etex,"+if(evalf(sign(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:=(evalf(sign(LL[r]-ao))==evalf(sign(LL[r+1]-ao))) or (evalf(sign(LL[r]-ao))==0.0)or (evalf(sign(LL[r+1]-ao))==0.0); 
+                                                 krm:=evalf(limit(f(x),x=Z[rr-1],1))< evalf(limit(f(x),x=Z[rr],-1));
+                                                 krp:=evalf(limit(f(x),x=Z[rr],1))> evalf(limit(f(x),x=Z[rr+1],-1)) ;  
+                         lmrm:=limit(f(x),x=Z[rr],-1)==-infinity;lmrp:=limit(f(x),x=Z[rr],1)==-infinity; TestL:=(abs(LL[r])==abs(LL[r+1]));
+                   
+if(PB[r]==1){if(TestS==0){lp:=lp+if(member(Z[rr],F)){
+                                    "limGauche(btex $"+if(lmrm==1){"-\\infty"}else{latex(simplify(limit(f(x),x=Z[rr],-1)))}+"$ etex,"+if(krm==1){"1);"}else{"0);"}+"nonDefBarre;limDroite(btex $"+if(lmrp==1){"-\\infty"}else{latex(simplify(limit(f(x),x=Z[rr],1)))}+"$ etex,"+if(krp==1){"1);"}else{"0);"}}
+                                          else{"valPos(btex          $"+latex(simplify(f(Z[rr])))+"$
+                                            etex,"+if(evalf(sign(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;
+}//  testS==0
+else{lp:=lp+if(member(Z[rr],F)){
+                                    "limGauche(btex $"+if(lmrm==1){"-\\infty"}else{latex(simplify(limit(f(x),x=Z[rr],-1)))}+"$ etex,"+if(krm==1){"1);"}else{"0);"}+"nonDefBarre;limDroite(btex $"+if(lmrp==1){"-\\infty"}else{latex(simplify(limit(f(x),x=Z[rr],1)))}+"$ etex,"+if(krp==1){"1);"}else{"0);"}}
+                                          else{"valPos(btex          $"+latex(simplify(f(Z[rr])))+"$
+                                            etex,"+if(evalf(sign(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
+}//PB[r]==1
+}//for nz<NL
+}// else nz<NL
+//if nz=NL
+};//if nz>2
+
+
+
+lnz:=limit(f(x),x=Z[nz-1],-1)==-infinity;
+
+
+lf:=if(member(Z[nz-1],F)==0){"valPos(btex $"+
+           if(lnz==1){"-\\infty"}else{latex(simplify(limit(f(x),x=Z[nz-1],-1)))}+"$ etex,"+
+             if(kz==1){"1);"}else{"0);"}}
+    else{"limGauche(btex $"+
+         if(lnz==1){"-\\infty"}else{latex(simplify(limit(f(x),x=Z[nz-1],-1)))}+"$ etex,"+ 
+           if(kz==1){"1);nonDefBarre;"}else{"0);nonDefBarre;"}};    
+
+
+
+
+
+
+
+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;
+
+";}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);
+
+
+ }:;
+
+
+\end{VerbatimOut}
+
+
+
+
+
+
+
+%%
+%%
+%% Quand les solutions de f'(x)=0 ne sont pas formellement calculables
+%%
+
+
+
+
+\begin{VerbatimOut}{XcasTVIapp.cxx}
+
+TVIapp(L,F,nom,nomv,f,ftt,ao,nmr):={
+
+
+nl:=size(L);
+f:=unapply(f,x);
+fp:=function_diff(f);
+z0:=concat(L,F);z:=sort(z0);
+nz:=size(z);
+
+
+
+
+
+
+
+S:=op(fsolve(fp(x),x));
+
+
+
+
+if(L==[-infinity,+infinity]){j:=[seq(-50+2*k,k=0..50)]minus F;
+  for k in j do for(m:=-5;m<=5;m++){S:=S,resoudre_numerique(fp(y),y,k+m*0.1,k+(m+1)*0.1,bisection_solver)};end_for}
+else{if(L[0]==-infinity){j:=[seq(2*k,k=-25..0.5*floor(L[1]))] minus F;
+  for k in j do for(m:=-5;m<=5;m++){ S:=S,resoudre_numerique(fp(y),y,k+m*0.1,k+(m+1)*0.1,bisection_solver)};end_for}
+else{if(L[1]==+infinity){
+j:=[seq(2*k,k=floor(0.5*L[0])..0.5*50)] minus F;
+  for k in j do for(m:=-5;m<=5;m++){ S:=S,resoudre_numerique(fp(y),y,k+m*0.1,k+(m+1)*0.1,bisection_solver)};end_for
+}
+else{ j:=[seq(2*k,k=0.5*floor(z[0])..0.5*floor(z[nz-1]))] minus F;
+  for k in j do  for(m:=-5;m<=5;m++){S:=S,resoudre_numerique(fp(y),y,k+m*0.1,k+(m+1)*0.1,bisection_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,simplify(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:=" ";
+
+
+
+LI:=limit(f(x),x,Z[0],1);
+LF:=limit(f(x),x,Z[nz-1],-1);
+LP:=NULL;
+PB:=1;
+if(nz>2){                                                       for(r:=1;
+  r<=nz-2;r++){LP:=LP,if(member(Z[r],F)){limit(f(x),x,Z[r],-1),limit(f(x),x,Z[r],1)}else{f(Z[r])};
+if(member(Z[r],F)){PB:=PB,0,1}else{PB:=PB,1};
+}
+};
+if(nz>2){ LL:=[LI,LP,LF]; PB:=[PB,1]}else{LL:=[LI,LF];PB:=[1,1]};
+      
+NL:=size(LL);
+A:=NULL;aa:=1;
+kk:=0;
+
+
+if(NL==nz){for(k:=0;k<nz-1;k++){TestS:=(evalf(sign(LL[k]-ao))==evalf(sign(LL[k+1]-ao))) or (evalf(sign(LL[k]-ao))==0.0)or (evalf(sign(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);"};
+//chgmt NL->nz
+if(NL>nz){for(k:=0;k<NL-1;k++){TestS:=(evalf(sign(LL[k]-ao))==evalf(sign(LL[k+1]-ao))) or (evalf(sign(LL[k]-ao))==0.0)or (evalf(sign(LL[k+1]-ao))==0.0);
+  
+if(PB[k]==1){if(TestS==0){
+   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:=(evalf(sign(LL[0]-ao))==evalf(sign(LL[1]-ao))) or (evalf(sign(LL[0]-ao))==0.0) or (evalf(sign(LL[1]-ao))==0.0);
+       k0:= evalf(limit(f(x),x=Z[0],1))> evalf(limit(f(x),x=Z[1],-1));
+       kz:=evalf(limit(f(x),x=Z[nz-1],-1))> evalf(limit(f(x),x=Z[nz-2],1));
+                          
+lsi:=lsic+nom+"'("+nomv+")}$ etex);"+
+     if(Z[0]==-infinity){if(evalf(sign(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^(-3))))==1){"plus;"}else{"moins;"}}else{"nonDefBarre;"+
+                                                         if(sign(fp(10^(-3)+Z[0]))==1){"plus;"}else{"moins;"} }}+if(TestS==0){"valBarre(btex$
+                                                       $ etex);"+
+
+if(evalf(sign(fp(10^(-3)+ifte(Z[0]==-infinity,ifte(Z[1]==+infinity,ifte(member(0,F)==0,0,0.01),ifte(member(Z[1]-1,F)==0,Z[1]-1,Z[1]-1.1)),Z[0]))))==1.0){"plus;"}else{"moins;"}}else{" "}; 
+
+
+
+if(nz>2){rr:=1; if(nz==NL){for(r:=1; r<=NL-2;r++){ TestS:=(evalf(sign(LL[r]-ao))==evalf(sign(LL[r+1]-ao))) or (evalf(sign(LL[r]-ao))==0.0)or (evalf(sign(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:=(evalf(sign(LL[r]-ao))==evalf(sign(LL[r+1]-ao))) or (evalf(sign(LL[r]-ao))==0.0)or (evalf(sign(LL[r+1]-ao))==0.0);
+                                         
+                      if(PB[r]==1){if(TestS==0){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{"nonDefBarre;"}
+
+
+
+lm0:=limit(f(x),x=Z[0],1)==-infinity;
+
+
+
+
+TestS:=(evalf(sign(LL[0]-ao))==evalf(sign(LL[1]-ao))) or (evalf(sign(LL[0]-ao))==0.0) or (evalf(sign(LL[1]-ao))==0.0);
+
+     li:=lvic+nom+"}$ etex);
+"+  if(member(Z[0],F)==0){"valPos(btex $"+if(lm0==1){"-\\infty"}else{latex(simplify(limit(f(x),x=Z[0],1)))}+"$ etex,"}
+             else{"nonDefBarre;limDroite(btex $"+if(lm0==1){"-\\infty"}else{latex(simplify(limit(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:=(evalf(sign(LL[r]-ao))==evalf(sign(LL[r+1]-ao))) or (evalf(sign(LL[r]-ao))==0.0)or (evalf(sign(LL[r+1]-ao))==0.0); 
+                                                 krm:=evalf(limit(f(x),x=Z[r-1],1))< evalf(limit(f(x),x=Z[r],-1));
+                                                 krp:=evalf(limit(f(x),x=Z[r],1))> evalf(limit(f(x),x=Z[r+1],-1)) ;  
+                         lmrm:=limit(f(x),x=Z[r],-1)==-infinity;lmrp:=limit(f(x),x=Z[r],1)==-infinity;
+                                                  lp:=lp+if(member(Z[r],F)) {
+                                    "limGauche(btex $"+if(lmrm==1){"-\\infty"}else{latex(simplify(limit(f(x),x=Z[r],-1)))}+"$ etex,"+if(krm==1){"1);"}else{"0);"}+"nonDefBarre;limDroite(btex $"+if(lmrp==1){"-\\infty"}else{latex(simplify(limit(f(x),x=Z[r],1)))}+"$ etex,"+if(krp==1){"1);"}else{"0);"}}
+                                          else{"valPos(btex          $"+latex(simplify(f(Z[r])))+"$
+                                            etex,"+if(evalf(sign(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:=(evalf(sign(LL[r]-ao))==evalf(sign(LL[r+1]-ao))) or (evalf(sign(LL[r]-ao))==0.0)or (evalf(sign(LL[r+1]-ao))==0.0); 
+                                                 krm:=evalf(limit(f(x),x=Z[rr-1],1))< evalf(limit(f(x),x=Z[rr],-1));
+                                                 krp:=evalf(limit(f(x),x=Z[rr],1))> evalf(limit(f(x),x=Z[rr+1],-1)) ;  
+                         lmrm:=limit(f(x),x=Z[rr],-1)==-infinity;lmrp:=limit(f(x),x=Z[rr],1)==-infinity; TestL:=(abs(LL[r])==abs(LL[r+1]));
+                   
+if(PB[r]==1){if(TestS==0){lp:=lp+if(member(Z[rr],F)){
+                                    "limGauche(btex $"+if(lmrm==1){"-\\infty"}else{latex(simplify(limit(f(x),x=Z[rr],-1)))}+"$ etex,"+if(krm==1){"1);"}else{"0);"}+"nonDefBarre;limDroite(btex $"+if(lmrp==1){"-\\infty"}else{latex(simplify(limit(f(x),x=Z[rr],1)))}+"$ etex,"+if(krp==1){"1);"}else{"0);"}}
+                                          else{"valPos(btex          $"+latex(simplify(f(Z[rr])))+"$
+                                            etex,"+if(evalf(sign(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;
+}//  testS==0
+else{lp:=lp+if(member(Z[rr],F)){
+                                    "limGauche(btex $"+if(lmrm==1){"-\\infty"}else{latex(simplify(limit(f(x),x=Z[rr],-1)))}+"$ etex,"+if(krm==1){"1);"}else{"0);"}+"nonDefBarre;limDroite(btex $"+if(lmrp==1){"-\\infty"}else{latex(simplify(limit(f(x),x=Z[rr],1)))}+"$ etex,"+if(krp==1){"1);"}else{"0);"}}
+                                          else{"valPos(btex          $"+latex(simplify(f(Z[rr])))+"$
+                                            etex,"+if(evalf(sign(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
+}//PB[r]==1
+}//for nz<NL
+}// else nz<NL
+//if nz=NL
+};//if nz>2
+
+
+
+lnz:=limit(f(x),x=Z[nz-1],-1)==-infinity;
+
+
+lf:=if(member(Z[nz-1],F)==0){"valPos(btex $"+
+           if(lnz==1){"-\\infty"}else{latex(simplify(limit(f(x),x=Z[nz-1],-1)))}+"$ etex,"+
+             if(kz==1){"1);"}else{"0);"}}
+    else{"limGauche(btex $"+
+         if(lnz==1){"-\\infty"}else{latex(simplify(limit(f(x),x=Z[nz-1],-1)))}+"$ etex,"+ 
+           if(kz==1){"1);nonDefBarre;"}else{"0);nonDefBarre;"}};    
+
+
+
+
+
+
+
+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;
+
+";}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);
+
+
+ }:;
+
+
+
+
+\end{VerbatimOut}
+
+
+
+
+
+
+
+%%
+%% Code giac/Xcas pour les Tableaux de variations de courbes parametrees
+%%
+
+
+
+
+
+
+
+\begin{VerbatimOut}{XcasTVP.cxx}
+TVP(L,F,nom,nomv,ff,ftt,trigo,nmr):={
+
+nl:=size(L);
+fp:=[];
+S:=[];
+f:=[unapply(ff[0],t),unapply(ff[1],t)];
+fp:=[function_diff(f[0]),function_diff(f[1])];
+Z:=[];
+LLL:=[];
+
+
+all_trig_solutions:=1;
+reset_solve_counter(-1,-1);
+
+for(d:=0;d<=1;d++){
+LLL:=concat(L,F[d]);
+Z:=LLL union Z;
+SS:=solve(factor(simplify(fp[d](t))),t);
+ns:=size(SS);
+
+
+for(k:=0;k<ns;k++){
+if(trigo==t){
+m:=0;
+while(evalf(simplify(subst(SS[k],n_1=m)))<=evalf(L[nl-1])){
+
+S:=concat(S,simplify(subst(SS[k],n_1=m)));m:=m+1;
+
+};m:=-1;
+while(evalf(subst(SS[k],n_1=m))>=L[0]){
+
+S:=concat(S,simplify(subst(SS[k],n_1=m)));m:=m-1;
+
+}
+}else{
+S:=concat(S,SS);
+}
+}
+
+
+  si size(S)>0 alors   pour j de 0 jusque size(S)-1 faire
+                             qq:=member(simplify(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,simplify(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;
+
+
+
+
+nz:=size(Z);
+u:=1;
+ tantque (u<nz-2) and (nz>2) 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);
+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;
+
+ lsi:="","";
+
+FFF:=[[],[]];
+
+for(d:=0;d<=1;d++){
+FFF[d]:=concat(F[d],[-infinity,+infinity]);
+       k0:= evalf(limit(f[d](x),x=Z[0],1))> evalf(limit(f[d](x),x=Z[1],-1));
+       kz:=evalf(limit(f[d](x),x=Z[nz-1],-1))> evalf(limit(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(simplify(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;
+                                               lsp[d]:=lsp[d]+if(member(Z[r],F[d])==0){"valBarre(btex $"+latex(simplify(fp[d](Z[r])))+"$ etex);"}else{"nonDefBarre;"}+
+                                                if(ksp==1){"plus;"}else{"moins;"}
+                                                  }; }
+
+lsf[d]:=if(member(Z[nz-1],FFF[d])==0){"valBarre(btex $"+latex(simplify(fp[d](Z[nz-1])))+"$ etex);"}else{if(Z[nz-1]==+infinity){" "}else{"nonDefBarre;"}}
+
+
+
+
+ }
+
+
+
+
+
+
+
+
+
+
+
+ lm0:=1,2; li:=1,2; krm:=1,2; krp:=1,2; lmrm:=1,2; lmrp:=1,2; lp:="",""; lnz:=1,2; lf:=1,2; Kz:=1,2;K0:=1,2;
+
+
+for(d:=0;d<=1;d++){
+   K0[d]:= evalf(limit(f[d](x),x=Z[0],1))> evalf(limit(f[d](x),x=Z[1],-1));
+  Kz[d]:=evalf(limit(f[d](x),x,Z[nz-1],-1))> evalf(limit(f[d](x),x,Z[nz-2],1));
+//{
+//$
+lm0[d]:=limit(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(simplify(limit(f[d](x),x,Z[0],1)))}+"$ etex,"}
+             else{"nonDefBarre;limDroite(btex $"+if(lm0[d]==1){"-\\infty"}else{latex(simplify(limit(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(limit(f[d](x),x=Z[r-1],1))< evalf(limit(f[d](x),x=Z[r],-1));
+                                                 krp[d]:=evalf(limit(f[d](x),x=Z[r],1))> evalf(limit(f[d](x),x,Z[r+1],-1)) ;
+                         lmrm[d]:=limit(f[d](x),x,Z[r],-1)==-infinity;lmrp[d]:=limit(f[d](x),x,Z[r],1)==-infinity;
+                                                  lp[d]:=lp[d]+if(member(Z[r],F[d])){
+                                    "limGauche(btex
+                                    $"+if(lmrm[d]==1){"-\\infty"}else{latex(simplify(limit(f[d](x),x,Z[r],-1)))}+"$
+                                    etex,"+if(krm[d]==1){"1);"}else{"0);"}+"nonDefBarre;limDroite(btex $"+if(lmrp[d]==1){"-\\infty"}else{latex(simplify(limit(f[d](x),x,Z[r],1)))}+"$ etex,"+if(krp[d]==1){"1);"}else{"0);"}}
+                                          else{"valPos(btex          $"+latex(simplify(f[d](Z[r])))+"$
+                                            etex,"+if(sign(evalf(fp[d](Z[r]-0.001)))==sign(evalf((fp[d](Z[r]+0.001))) )){"0.5);"}else{if(krp[d]==1){"1);"}else{"0);
+"}}}
+                                                   }; }
+
+lnz[d]:=limit(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(simplify(limit(f[d](x),x=Z[nz-1],-1)))}+"$ etex,"+
+             if(Kz[d]==1){"1);"}else{"0);"}}
+    else{"limGauche(btex $"+
+         if(lnz[d]==1){"-\\infty"}else{latex(simplify(limit(f[d](x),x=Z[nz-1],-1)))}+"$ etex,"+ 
+           if(Kz[d]==1){"1);nonDefBarre;"}else{"0);nonDefBarre;"}};    
+    
+
+
+
+
+
+}
+
+
+
+
+
+
+
+
+MetaLfc:=if(ftt==2){if(nz>2){"
+
+beginTableau("+nmr+")"+
+        l0+lsi[0]+lsp[0]+lsf[0]+lsi[1]+lsp[1]+lsf[1]+"
+endTableau;
+
+";}else{
+"beginTableau("+nmr+")"+
+        l0+
+lsi[0]+lsf[0]+lsi[1]+lsf[1]+"
+endTableau;
+
+";
+}
+}else{ if(ftt==0){if(nz>2){"beginTableau("+nmr+")"+
+        l0+
+li[0]+
+lp[0]+
+lf[0]+
+li[1]+
+lp[1]+
+lf[1]
++"
+endTableau;
+
+";}else{"beginTableau("+nmr+")"+
+        l0+
+li[0]+
+lf[0]+
+li[1]+
+lf[1]
++"
+endTableau;
+
+";}}else{
+if(nz>2){"beginTableau("+nmr+")"+
+        l0+
+lsi[0]+lsp[0]+lsf[0]+
+li[0]+
+lp[0]+
+lf[0]+
+lsi[1]+lsp[1]+lsf[1]+
+li[1]+
+lp[1]+
+lf[1]
++"
+endTableau;
+
+";}else{"beginTableau("+nmr+")"+
+        l0+
+lsi[0]+lsf[0]+
+li[0]+
+lf[0]+
+lsi[1]+lsf[1]+
+li[1]+
+lf[1]
++"
+endTableau;
+
+";}
+}
+}
+
+sortie:=fopen("XCasmpfc.mp");
+fprint(sortie,Unquoted,MetaLfc);
+fclose(sortie);
+
+}:;
+\end{VerbatimOut}
+
+
+
+
+%%
+%% Code giac/Xcas pour les Tableaux de signes de produits
+%%
+
+
+
+
+\begin{VerbatimOut}{XcasTabSignL.cxx}
+
+
+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 
+
+
+
+
+if(trigo==t){
+all_trig_solutions:=1;
+reset_solve_counter(-1,-1);
+SS:=solve(factor(simplify(L[k](x))),x);
+ns:=size(SS);
+for(j:=0;j<ns;j++){
+m:=0;
+while(evalf(simplify(subst(SS[j],n_1=m)))<=evalf(maxi)){
+S:=concat(S,simplify(subst(SS[j],n_1=m)));m:=m+1;
+};m:=-1;
+while(evalf(subst(SS[j],n_1=m))>=evalf(mini)){
+S:=concat(S,simplify(subst(SS[j],n_1=m)));m:=m-1;
+}
+}
+
+}else{
+S:=solve(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,simplify(S[j]);}
+                      fpour;
+  fsi;
+fpour;
+
+
+
+
+
+Z:=sort(Z);
+nz:=size(Z);
+
+
+ Z:=sort([op(set[(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+lsic+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){"
+                                valBarre(btex 0 etex);"}else{"
+                              "}
+
+}
+           lf:=if(product(L[s]((mini+maxi)*.5),s,0,n-1)>0){"plus;"}else{"moins;"};
+
+
+MetaLfc:="    beginTableau("+nmr+")
+newLigneVariables(btex $ {x}$ etex);
+   "+l0+li+ lsic+nomf+"(x)}$ etex);"+
+               if(mini!=-infinity and product(L[s](mini),s,0,n-1)==0){"
+                                valBarre(btex 0 etex);"}else{"
+                              "}+  lf+
+                               if(maxi!=+infinity and product(L[s](maxi),s,0,n-1)==0){"
+                                valBarre(btex 0 etex);"}else{"
+                              "}+"
+endTableau;
+"
+;
+
+}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);";
+
+
+for(p:=0;p<=n-1;p++){lp:="";                                     
+     li:=li+lsic+latex(L[p](x))+"}$ etex);"+
+           if(mini!=-infinity and L[p](mini)==0){"
+                                valBarre(btex 0 etex);"}else{"
+                              "}+ 
+           if(L[p](Z[0]-0.01)>0){"plus;"}else{"moins;"};
+                               
+                           for(r:=0; r<=nz-2;r++){  
+                             lp:=lp+if(simplify(L[p](Z[r]))==0){"
+                                valBarre(btex 0 etex);"}else{"barre;
+                              "}+ 
+                             if(L[p]((Z[r]+Z[r+1])*.5)>0){"plus;"}else{"moins;"}};
+ 
+                li:=li+lp+ if(simplify(L[p](Z[nz-1]))==0){"valBarre(btex 0 etex);"}else{"barre;"}+ 
+                          if(L[p](Z[nz-1]+1.0)>0){"plus;"}else{"moins;
+    "}+if(maxi!=+infinity and L[p](maxi)==0){"
+                                valBarre(btex 0 etex);"}else{"
+                              "}
+    };  
+
+
+pour t de 0 jusque nz-2 faire 
+                           lr:=lr+if(product(L[s]((Z[t]+Z[t+1])*.5),s,0,n-1)>0){"plus;"}else{"moins;"}+"valBarre(btex 0 etex);"                    
+                         fpour
+
+MetaLfc:="  beginTableau("+nmr+")
+newLigneVariables(btex $ {x}$ etex);
+   "+l0+
+                     li
+                     + lsic+nomf+"(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);"+
+                         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;
+
+ ";
+}
+sortie:=fopen("XCasmpfc.mp");
+fprint(sortie,Unquoted,MetaLfc);
+fclose(sortie);
+
+ }:;
+
+\end{VerbatimOut}
+
+
+
+
+%%
+%% Code giac/Xcas pour les Tableaux de signes de quotients
+%%
+
+
+
+\begin{VerbatimOut}{XcasTabSignQ.cxx}
+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);
+n:=size(L);
+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 
+
+
+
+if(trigo==t){
+all_trig_solutions:=1;
+reset_solve_counter(-1,-1);
+SS:=solve(factor(simplify(L[k](x))),x);
+ns:=size(SS);
+for(j:=0;j<ns;j++){
+mm:=0;
+while(evalf(simplify(subst(SS[j],n_1=mm)))<=evalf(maxi)){
+S:=concat(S,simplify(subst(SS[j],n_1=mm)));mm:=mm+1;
+};mm:=-1;
+while(evalf(subst(SS[j],n_1=mm))>=evalf(mini)){
+S:=concat(S,simplify(subst(SS[j],n_1=mm)));mm:=mm-1;
+}
+}
+
+}else{
+S:=concat(S,solve(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,simplify(S[j]);}
+                      fpour;
+  fsi;
+fpour;
+
+
+pour k de 0 jusque m-1 faire 
+
+
+
+if(trigo==t){
+all_trig_solutions:=1;
+reset_solve_counter(-1,-1);
+SSF:=solve(factor(simplify(Fo[k](x))),x);
+nsf:=size(SSF);
+for(j:=0;j<nsf;j++){
+mm:=0;
+while(evalf(simplify(subst(SSF[j],n_1=mm)))<=evalf(maxi)){
+SF:=concat(SF,simplify(subst(SSF[j],n_1=mm)));mm:=mm+1;
+};mm:=-1;
+while(evalf(subst(SSF[j],n_1=mm))>=evalf(mini)){
+SF:=concat(SF,simplify(subst(SSF[j],n_1=mm)));mm:=mm-1;
+}
+}
+
+}else{
+SF:=concat(SF,solve(Fo[k](x),x));
+}
+
+  si size(SF)>0 alors pour j de 0 jusque size(SF)-1 faire 
+                          FF:=FF,simplify(SF[j]);
+                          if(SF[j]>mini and SF[j]<maxi){F:=F,simplify(SF[j]);}
+                      fpour;
+  fsi;
+fpour;
+
+
+
+Z:=[Z,F];
+
+
+Z:=sort([op(set[op(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+lsic+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){"
+                                valBarre(btex 0 etex);"}else{"
+                              "}
+
+}
+           lf:=if(product(L[s]((mini+maxi)*.5),s,0,n-1)>0){"plus;"}else{"moins;"};
+
+
+
+
+MetaLfc:=" 
+beginTableau("+nmr+")
+newLigneVariables(btex $ {x}$ etex);
+   "+l0+li+
+   lsic+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+
+              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;
+
+"
+;
+
+
+
+
+}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);";
+
+
+for(p:=0;p<=n-1;p++){lp:="";                                     
+     li:=li+lsic+latex(L[p](x))+"}$ etex);"+
+           if(mini!=-infinity and L[p](mini)==0){" valBarre(btex 0 etex);"}else{" "}+ 
+           if(L[p](Z[0]-0.01)>0){"plus;"}else{"moins;"};
+                               
+     for(r:=0; r<=nz-2;r++){lp:=lp+if(simplify(L[p](Z[r]))==0){" valBarre(btex 0 etex);"}else{"barre;"}+ 
+                             if(L[p]((Z[r]+Z[r+1])*.5)>0){"plus;"}else{"moins;"}};
+ 
+                li:=li+lp+ if(simplify(L[p](Z[nz-1]))==0){"valBarre(btex 0 etex);"}else{"barre;"}+ 
+                          if(L[p](Z[nz-1]+1.0)>0){"plus;"}else{"moins;
+    "}+if(maxi!=+infinity and L[p](maxi)==0){"valBarre(btex 0 etex);"}else{" "}
+                              
+    };  
+
+
+pour t de 0 jusque nz-2 faire 
+                           lr:=lr+if(product(L[s]((Z[t]+Z[t+1])*.5),s,0,n-1)>0){"plus;"}else{"moins;"}+
+                                      if(member(Z[t+1],FF)==0){"valBarre(btex 0 etex);"}else{ "nonDefBarre;"}                   
+                         fpour
+
+
+
+
+MetaLfc:="
+beginTableau("+nmr+")
+newLigneVariables(btex $ {x}$ etex);
+   "+l0+
+                     li
+                     +
+   lsic+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;"}+  
+                         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;
+
+"
+
+
+}
+
+
+
+
+sortie:=fopen("XCasmpfc.mp");
+fprint(sortie,Unquoted,MetaLfc);
+fclose(sortie);
+
+
+
+
+
+ }:;
+
+\end{VerbatimOut}
+
+
+
+
+%% Code giac/Xcas pour les Tableaux de signes du produit
+%% de 2 facteurs affines
+%%
+
+
+
+
+\begin{VerbatimOut}{XcasTabSigna.cxx}
+TSa(a,b,c,d,nmr):={
+zA:=solve(a*x+b=0,x)[0];
+zB:=solve(c*x+d=0,x)[0];
+zmin:=min(zA,zB);
+zmax:=max(zA,zB);
+  Meta:= " 
+          beginTableau("+nmr+")
+   newLigneVariables(btex $ {x}$ etex);
+   val(btex $-\\infty$ etex);val(btex $"+latex(zmin)+"$ etex);
+val(btex $"+latex(zmax)+"$etex);
+val(btex $+\\infty$ etex); 
+  "+lsic+if(a==1){"x+"}else{if(a==-1){"-x+"}else{a+"x+"}}+b+"}$ etex);"
+        +   if(a>0){"moins;"}else{"plus;"}+
+                                 if(zmin==zA){"valBarre(btex 0 etex);"}else{"barre;"}+
+                                 if(zmin==zA){si a>0 alors "plus;"; sinon "moins;";fsi}
+                                             else{si a>0 alors "moins;"; sinon "plus;"; fsi}+
+                                 if(zmin==zA){"barre;"}else{"valBarre(btex 0 etex);"}+
+                                 if(a>0){"plus;"}else{"moins;"}
+     +lsic+if(c==1){"x+"}else{if(c==-1){"-x+"}else{c+"x+"}}+d+"}$ etex);"
+        +     if(c>0){"moins"}else{"plus"}+";"+
+                                 if(zmin==zB){"valBarre(btex 0 etex);"}else{"barre;"}+
+                                 if(zmin==zB){si c>0 alors "plus;"; sinon "moins;";fsi}
+                                             else{si c>0 alors "moins;"; sinon "plus;"; fsi}+
+                                 if(zmin==zB){"barre;"}else{"valBarre(btex 0 etex);"}+
+                                 if(c>0){"plus;"}else{"moins;"}  
+     
+   +lsic+"{("+if(a==1){"x+"}else{if(a==-1){"-x+"}else{a+"x+"}}+b+")("+if(c==1){"x+"}else{if(c==-1){"-x+"}else{c+"x+"}}+d+")}}$ etex);"
+        +   si a*c>0 alors plus; sinon moins;fsi+";"+
+                                 "valBarre(btex 0 etex);"+
+                                 si a*c>0 alors moins; sinon plus;fsi+";"+
+                                 "valBarre(btex 0 etex);"+
+                                 si a*c>0 alors plus; sinon moins;fsi+";"+"
+endTableau;
+"
+;
+
+
+
+sortie:=fopen("XCasmpfc.mp");
+fprint(sortie,Unquoted,Meta);
+fclose(sortie);
+
+
+ }:;
+\end{VerbatimOut}
+
+
+
+
+
+
+%%$
+%% Code giac/Xcas pour les Tableaux de Signes d'expression ne contenant 
+%% qu'un seul terme
+
+
+
+
+\begin{VerbatimOut}{XcasTSc.cxx}
+
+TSc(g,D,F,trigo,nmr):={
+f:=unapply(g,x);
+mini:=D[0]; maxi:=D[1];lm:=" ";
+Z:=mini,maxi;
+S:=[];
+
+
+
+if(trigo==t){
+all_trig_solutions:=1;
+reset_solve_counter(-1,-1);
+SS:=solve(factor(simplify(f(x))),x);
+ns:=size(SS);
+for(j:=0;j<ns;j++){
+m:=0;
+while(evalf(simplify(subst(SS[j],n_1=m)))<=evalf(maxi)){
+S:=concat(S,simplify(subst(SS[j],n_1=m)));m:=m+1;
+};m:=-1;
+while(evalf(subst(SS[j],n_1=m))>=evalf(mini)){
+S:=concat(S,simplify(subst(SS[j],n_1=m)));m:=m-1;
+}
+}
+
+}else{
+S:=solve(f(x),x);
+}
+
+
+
+
+
+if(size(S)==0 and size(F)==0){
+l0:="val(btex $"+latex(D[0])+"$ etex);val(btex $"+latex(D[1])+"$ etex);";
+li:=if(member(mini,F)!=0){"nonDefBarre;"}else{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.3145274774464545777744)>0){"plus;"}else{"moins;"}};
+lf:=if(member(maxi,F)!=0){"nonDefBarre;"}else{if(maxi!=+infinity and f(maxi)==0){"
+                                valBarre(btex 0 etex);"}else{"
+                              "}};
+}else{
+if(size(S!=0)){pour j de 0 jusque size(S)-1 faire 
+                           if(S[j]>mini and S[j]<maxi){Z:=Z,simplify(S[j])};
+                      fpour}
+
+Z:=concat([Z],F);
+
+ Z:=sort([op(set[op(Z)])]);
+
+
+nz:=size(Z);
+l0:=" ";li:=" ";lr:=" "; 
+if(nz==2){l0:="val(btex $"+latex(D[0])+"$ etex);val(btex $"+latex(D[1])+"$ etex);";
+li:=if(mini!=-infinity and f(mini)==0){"
+                                valBarre(btex 0 etex);"}else{if(member(mini,F)==0){"
+                              "}else{"nonDefBarre;"}}+ 
+if(f((mini+maxi)*0.5)>0){"plus;"}else{"moins;"};
+lf:=if(maxi!=+infinity and f(maxi)==0){"
+                                valBarre(btex 0 etex);"}else{if(member(maxi,F)==0){"
+                              "}else{"nonDefBarre;"}
+                              };
+
+}else{
+l0:="val(btex $"+latex(Z[0])+"$ etex);";li:=" ";
+pour m de 1 jusque nz-1 faire l0:=l0+"val(btex $"+latex(Z[m])+"$ etex);
+";
+fpour; 
+
+                                     
+li:= if(mini!=-infinity and f(mini)==0){"
+                                valBarre(btex 0 etex);"}else{if(member(mini,F)==0){"
+                              "}else{"nonDefBarre;"}
+                              }                         
+
+lm:=if(nz>2){for(r:=0; r<nz-2;r++){lm:=lm+if(Z[r]==-infinity){
+if(f((Z[r+1]-1))>0){"plus;"}else{"moins;"}
+}else{if(f((Z[r]+Z[r+1])*.5)>0){"plus;"}else{"moins;"}}
++
+            if(member(Z[r+1],F)==0){"valBarre(btex 0 etex);"}else{"nonDefBarre;"} 
+                           }}else{" "}; 
+
+lf:=if(f(Z[nz-2]+0.1)>0){"plus;"}else{"moins;"}+if(maxi!=+infinity and f(maxi)==0){"valBarre(btex 0 etex);"}else{if(member(maxi,F)==0){"
+                              "}else{"nonDefBarre;"}
+                              };
+}
+};  
+
+
+
+
+MetaLfc:="
+
+beginTableau("+nmr+")
+newLigneVariables(btex $\\displaystyle  {x}$ etex);
+   "+l0+lsic+latex(f(x))+"}$ etex);"+
+                     li+lm+lf
+                     +"
+endTableau;
+
+"
+;
+
+
+
+
+sortie:=fopen("XCasmpfc.mp");
+fprint(sortie,Unquoted,MetaLfc);
+fclose(sortie);
+ }:;
+
+\end{VerbatimOut}
+
+
+
+
+
+
+
+%%$
+
+
+
+
+
+
+%%%%
+%%%
+%%% Pour des tableaux de variations simples sans fonctions
+%%%
+%%%
+
+
+
+\begin{VerbatimOut}{XcasTVS.cxx}
+TVS(La,Lo,F,nomf,nomv,nmr):={
+
+na:=size(La);
+f:=F;
+if(member(La[0],F)){f:=f[1..size(f)-1]};
+if(member(La[na-1],F)){f:=f[0..size(f)-2]};
+Z:=sort(concat(La,f));
+Zo:=sort([op(set[op(Z)])]);
+nz:=size(Z);
+nzo:=size(Zo);
+
+
+k0:= evalf(Lo[0])> evalf(Lo[1]);
+kz:=evalf(Lo[nz-1])> evalf(Lo[nz-2]);
+
+
+l0:=" newLigneVariables(btex $"+nomv+"$ etex);";lp:=" "; lf:=" ";
+  for(m:=0;m<=nzo-1;m++){l0:=l0+"val(btex $"+latex(Zo[m])+"$ etex);"}
+
+li:=lvic+nomf+"}$ etex);"+
+    if(member(Z[0],F)==0){"valPos(btex $"+latex(Lo[0])+"$ etex,"}
+    else{"nonDefBarre;limDroite(btex $"+latex(Lo[0])+"$ etex,"}+                               
+           if(k0==1){"1"}else{"0"}+
+                         ");";
+            
+    if(nz>2){ for(r:=1; r<=nz-2;r++){ 
+         krm:=evalf(Lo[r-1])< evalf(Lo[r]);
+         krp:=evalf(Lo[r])> evalf(Lo[r+1]) ;  
+         
+      lp:=lp+if(Z[r]==Z[r+1]){
+         "limGauche(btex$"+latex(Lo[r])+"$etex,"+
+              if(krm==1){"1);"}
+              else{"0);"}
+             }// fin if zr=zr+1
+             else{
+              if(Z[r]==Z[r-1]){
+         "nonDefBarre;limDroite(btex$"+latex(Lo[r])+"$etex,"+
+              if(krp==1){"1);"}
+              else{"0);"}
+             }//fin if zr=zr-1
+              else{
+              "valPos(btex $"+latex(Lo[r])+"$etex,"+
+              if(krp==1){"1);"}else{"0);"}
+}//fin else zr=zr-1
+}//fin else zr=zr+1
+}//fin for 
+}//fin de if nz>2
+                                                                      
+
+
+lf:=if(member(Z[nz-1],F)==0){"valPos(btex $"+latex(Lo[nz-1])+"$ etex,"+
+             if(kz==1){"1);"}else{"0);"}}
+    else{"limGauche(btex $"+latex(Lo[nz-1])+"$ etex,"+ 
+             if(kz==1){"1);nonDefBarre;"}else{"0);nonDefBarre;"}};    
+    
+
+MetaLfc:=
+
+ if(nz>2){"beginTableau("+nmr+")"+
+        l0+
+li+
+lp+
+lf
++"
+endTableau;
+
+";}else{"beginTableau("+nmr+")"+
+        l0+
+li+
+lf
++"
+endTableau;
+
+";}
+
+//return(MetaLfc);
+
+sortie:=fopen("XCasmpfc.mp");
+fprint(sortie,Unquoted,MetaLfc);
+fclose(sortie);
+
+
+}:;
+
+\end{VerbatimOut}
+
+%%$
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+%%
+%% 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\couleurtab{black}
+\newcommand\coultab[1]{\renewcommand\couleurtab{#1}}
+
+
+\newcommand{\dresse}[2]{%
+\ifthenelse{\boolean{xcas}}{%        Avec l'option "XCas present"
+         \executGiacmp{XCas#2.giac}% reconstituer le tableau
+                                   % exporter le source mp
+                                   % puis lancer metapost pour creer
+                                   % l'image du tableau
+         \immediate\write18{\cat XCasmpfc.mp >> \nomtravail_Tab.mp}
+         \immediate\write18{\cat enteteMP.cfg >> \nomtravail_Tab#2.mp}
+         \immediate\write18{\echod def beginTableau(expr c) =\echof >> \nomtravail_Tab#2.mp}
+         \immediate\write18{\echod begingroup\echof >> \nomtravail_Tab#2.mp}
+         \immediate\write18{\echod charcode:=c;\echof >> \nomtravail_Tab#2.mp}
+         \immediate\write18{\echod clearxy; clearit; clearpen;\echof >> \nomtravail_Tab#2.mp}
+         \immediate\write18{\echod pickup defaultpen;\echof >> \nomtravail_Tab#2.mp}
+         \immediate\write18{\echod drawoptions(withcolor(#1));\echof >> \nomtravail_Tab#2.mp}
+         \immediate\write18{\echod initTableau;\echof >> \nomtravail_Tab#2.mp}
+         \immediate\write18{\echod enddef;\echof >> \nomtravail_Tab#2.mp}
+         \immediate\write18{\cat XCasmpfc.mp >> \nomtravail_Tab#2.mp}
+         \immediate\write18{\cat queue.mp >> \nomtravail_Tab#2.mp}
+         \immediate\write18{mpost   -jobname=\nomtravail_Tab \nomtravail_Tab#2.mp}
+         \immediate\write18{\rem \nomtravail_Tab#2.mp}  
+           }%
+         {% sinon, si le tableau est absent, alerte.
+         \IfFileExists{\nomtravail_Tab.\theTVn}{}{% 
+         \PackageError{tablor}{Tableau absent non
+         reconstituable.}{Pour compiler il faut, soit les fichiers de
+         tableaux, soit le fichier \nomtravail_Tab.mp, soit disposer de
+         XCas.}}}
+                
+\begin{center}
+  \includegraphics[scale=\echelle]{\nomtravail_Tab.\theTVn}
+\end{center}
+\stepcounter{TVn}
+}
+
+
+%%
+%% traitement des fichiers produits par giac/xcas avec possibilite
+%% de modifier le fichier metapost (environnement etoile))
+%%
+
+
+
+\newcommand{\dressetoile}[2]{%
+\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 >> \nomtravail_Tab.mp}}
+% Si  non,  lancement des operations de fabrication 
+{\executGiacmp{XCas#2.giac}%
+\immediate\write18{\editeur  XCasmpfc.mp }
+
+  % Modification avec l'editeur choisi
+\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 >> \nomtravail_Tab#2.mp}
+ \immediate\write18{\echod def beginTableau(expr c) =\echof >> \nomtravail_Tab#2.mp}
+         \immediate\write18{\echod begingroup\echof >> \nomtravail_Tab#2.mp}
+         \immediate\write18{\echod charcode:=c;\echof >> \nomtravail_Tab#2.mp}
+         \immediate\write18{\echod clearxy; clearit; clearpen;\echof >> \nomtravail_Tab#2.mp}
+         \immediate\write18{\echod pickup defaultpen;\echof >> \nomtravail_Tab#2.mp}
+         \immediate\write18{\echod drawoptions(withcolor(#1));\echof >> \nomtravail_Tab#2.mp}
+         \immediate\write18{\echod initTableau;\echof >> \nomtravail_Tab#2.mp}
+         \immediate\write18{\echod enddef;\echof >> \nomtravail_Tab#2.mp}
+\immediate\write18{\cat XCasmpfc.mp >> \nomtravail_Tab#2.mp}} % Inclusion du
+                                                     % source dans le
+                                                     % fichier
+                                                     % Tableaux 
+\immediate\write18{\cat queue.mp >> \nomtravail_Tab#2.mp}
+\immediate\write18{mpost  -jobname=\nomtravail_Tab \nomtravail_Tab#2.mp}% Reconstitution des tableaux
+                                % et creation du dernier. L'option
+                                % pallie l'absence de end en fin de
+                                % fichier 
+\immediate\write18{\rem \nomtravail_Tab#2.mp}  
+
+\begin{center}
+  \includegraphics[scale=\echelle]{\nomtravail_Tab.\theTVn}
+\end{center}
+\ech{1}
+\setcounter{TVn}{\theTVnbis}    % Restauration du compteur TVn
+}
+
+
+
+
+
+
+
+%%
+%%
+%%%
+%%%
+%%% les "giac" qui permettent d'executer la commande rentree dans le fichier tex
+%%% suivis des environnements qui permettront la saisie du code giac/xcas
+%%% Les versions etoilees permettent de modifier le code metapost produit initialement
+%%%
+
+
+
+
+\begin{VerbatimOut}{XCasa.giac}
+maple_mode(0);
+approx_mode:=0;
+read("config.cxx");
+read("XcasTabSigna.cxx");
+read("XCasa.user");
+\end{VerbatimOut}
+
+\newenvironment{TSa}
+{\VerbatimEnvironment\begin{VerbatimOut}[commandchars=\\??]{XCasa.user}}
+{\end{VerbatimOut}
+          \dresse{\couleurtab}{a}
+}
+
+
+
+
+
+
+
+
+
+\begin{VerbatimOut}{XCasQ.giac}
+maple_mode(0);
+approx_mode:=0;
+read("config.cxx");
+read("XcasTabSignQ.cxx");
+read("XCasQ.user");
+\end{VerbatimOut}
+
+\newenvironment{TSq}%
+{\VerbatimEnvironment\begin{VerbatimOut}[commandchars=\\??]{XCasQ.user}}
+{\end{VerbatimOut}\dresse{\couleurtab}{Q}}
+
+
+
+\newenvironment{TSq*}[1]%
+{\setcounter{TVnbis}{\theTVn}
+\setcounter{TVn}{#1}
+\VerbatimEnvironment\begin{VerbatimOut}[commandchars=\\??]{XCasQ.user}}
+{\end{VerbatimOut}\dressetoile{\couleurtab}{Q}}
+
+
+\begin{VerbatimOut}{XCasL.giac}
+maple_mode(0);
+approx_mode:=0;
+read("config.cxx");
+read("XcasTabSignL.cxx");
+read("XCasL.user");
+\end{VerbatimOut}
+
+\newenvironment{TS}%
+{\VerbatimEnvironment\begin{VerbatimOut}[commandchars=\\??]{XCasL.user}}
+{\end{VerbatimOut}\dresse{\couleurtab}{L}}
+
+
+\newenvironment{TS*}[1]
+{\setcounter{TVnbis}{\theTVn}
+\setcounter{TVn}{#1}
+\VerbatimEnvironment\begin{VerbatimOut}[commandchars=\\??]{XCasL.user}}
+{\end{VerbatimOut}\dressetoile{\couleurtab}{L}}
+
+
+\begin{VerbatimOut}{XCasTSc.giac}
+maple_mode(0);
+approx_mode:=0;
+read("config.cxx");
+read("XcasTSc.cxx");
+read("XCasTSc.user");
+\end{VerbatimOut}
+
+
+
+
+\newenvironment{TSc*}[1]%
+{\setcounter{TVnbis}{\theTVn}
+\setcounter{TVn}{#1}
+\VerbatimEnvironment\begin{VerbatimOut}[commandchars=\\??]{XCasTSc.user}}
+{\end{VerbatimOut}\dressetoile{\couleurtab}{TSc}}
+
+
+\newenvironment{TSc}%
+{\VerbatimEnvironment\begin{VerbatimOut}[commandchars=\\??]{XCasTSc.user}}
+{\end{VerbatimOut}\dresse{\couleurtab}{TSc}}
+
+
+\begin{VerbatimOut}{XCasTV.giac}
+maple_mode(0);
+approx_mode:=0;
+read("config.cxx");
+read("XcasTV.cxx");
+read("XCasTV.user");
+\end{VerbatimOut}
+
+
+
+\newenvironment{TV}{% 
+\VerbatimEnvironment
+\begin{VerbatimOut}[commandchars=\\??]{XCasTV.user}}%
+{\end{VerbatimOut}
+\dresse{\couleurtab}{TV}}
+
+\newenvironment{TV*}[1]{%
+\setcounter{TVnbis}{\theTVn}
+\setcounter{TVn}{#1}
+\VerbatimEnvironment\begin{VerbatimOut}[commandchars=\\??]{XCasTV.user}}%
+{\end{VerbatimOut}\dressetoile{\couleurtab}{TV}}
+
+
+
+
+
+
+
+\begin{VerbatimOut}{XCasTVP.giac}
+maple_mode(0);
+approx_mode:=0;
+read("config.cxx");
+read("XcasTVP.cxx");
+read("XCasTVP.user");
+\end{VerbatimOut}
+
+\newenvironment{TVP}%
+{\VerbatimEnvironment\begin{VerbatimOut}[commandchars=\\??]{XCasTVP.user}}%
+{\end{VerbatimOut}
+\dresse{\couleurtab}{TVP}}
+
+\newenvironment{TVP*}[1]{%
+\setcounter{TVnbis}{\theTVn}
+\setcounter{TVn}{#1}
+\VerbatimEnvironment\begin{VerbatimOut}[commandchars=\\??]{XCasTVP.user}}%
+{\end{VerbatimOut}\dressetoile{\couleurtab}{TVP}}
+
+
+
+
+
+
+
+
+
+
+\begin{VerbatimOut}{XCasTVZ.giac}
+maple_mode(0);
+approx_mode:=0;
+read("config.cxx");
+read("XcasTVZ.cxx");
+read("XCasTVZ.user");
+\end{VerbatimOut}
+
+\newenvironment{TVZ}%
+{\VerbatimEnvironment\begin{VerbatimOut}[commandchars=\\??]{XCasTVZ.user}}%
+{\end{VerbatimOut}
+\dresse{\couleurtab}{TVZ}}
+
+\newenvironment{TVZ*}[1]{%
+\setcounter{TVnbis}{\theTVn}
+\setcounter{TVn}{#1}
+\VerbatimEnvironment\begin{VerbatimOut}[commandchars=\\??]{XCasTVZ.user}}%
+{\end{VerbatimOut}\dressetoile{\couleurtab}{TVZ}}
+
+
+
+
+
+
+
+
+\begin{VerbatimOut}{XCasTVapp.giac}
+maple_mode(0);
+approx_mode:=0;
+read("config.cxx");
+read("XcasTVapp.cxx");
+read("XCasTVapp.user");
+\end{VerbatimOut}
+
+\newenvironment{TVapp}%
+{\VerbatimEnvironment\begin{VerbatimOut}[commandchars=\\??]{XCasTVapp.user}}%
+{\end{VerbatimOut}
+\dresse{\couleurtab}{TVapp}}
+
+\newenvironment{TVapp*}[1]{%
+\setcounter{TVnbis}{\theTVn}
+\setcounter{TVn}{#1}
+\VerbatimEnvironment\begin{VerbatimOut}[commandchars=\\??]{XCasTVapp.user}}%
+{\end{VerbatimOut}\dressetoile{\couleurtab}{TVapp}}
+
+
+
+
+
+
+
+
+
+
+
+\begin{VerbatimOut}{XCasTVI.giac}
+maple_mode(0);
+approx_mode:=0;
+read("config.cxx");
+read("XcasTVI.cxx");
+read("XCasTVI.user");
+\end{VerbatimOut}
+
+\newenvironment{TVI}%
+{\VerbatimEnvironment\begin{VerbatimOut}[commandchars=\\??]{XCasTVI.user}}%
+{\end{VerbatimOut}\dresse{\couleurtab}{TVI}}
+
+
+\newenvironment{TVI*}[1]%
+{\setcounter{TVnbis}{\theTVn}
+\setcounter{TVn}{#1}
+\VerbatimEnvironment\begin{VerbatimOut}[commandchars=\\??]{XCasTVI.user}}%
+{\end{VerbatimOut}\dressetoile{\couleurtab}{TVI}}
+
+
+
+
+
+\begin{VerbatimOut}{XCasTVIex.giac}
+maple_mode(0);
+approx_mode:=0;
+read("config.cxx");
+read("XcasTVIex.cxx");
+read("XCasTVIex.user");
+\end{VerbatimOut}
+
+\newenvironment{TVIex}%
+{\VerbatimEnvironment\begin{VerbatimOut}[commandchars=\\??]{XCasTVIex.user}}%
+{\end{VerbatimOut}\dresse{\couleurtab}{TVIex}}
+
+
+\newenvironment{TVIex*}[1]%
+{\setcounter{TVnbis}{\theTVn}
+\setcounter{TVn}{#1}
+\VerbatimEnvironment\begin{VerbatimOut}[commandchars=\\??]{XCasTVIex.user}}%
+{\end{VerbatimOut}\dressetoile{\couleurtab}{TVIex}}
+
+
+
+
+
+
+
+
+
+\begin{VerbatimOut}{XCasTVIapp.giac}
+maple_mode(0);
+approx_mode:=0;
+read("config.cxx");
+read("XcasTVIapp.cxx");
+read("XCasTVIapp.user");
+\end{VerbatimOut}
+
+\newenvironment{TVIapp}%
+{\VerbatimEnvironment\begin{VerbatimOut}[commandchars=\\??]{XCasTVIapp.user}}%
+{\end{VerbatimOut}\dresse{\couleurtab}{TVIapp}}
+
+
+\newenvironment{TVIapp*}[1]%
+{\setcounter{TVnbis}{\theTVn}
+\setcounter{TVn}{#1}
+\VerbatimEnvironment\begin{VerbatimOut}[commandchars=\\??]{XCasTVIapp.user}}%
+{\end{VerbatimOut}\dressetoile{\couleurtab}{TVIapp}}
+
+
+
+
+
+\begin{VerbatimOut}{XCasTVPC.giac}
+maple_mode(0);
+approx_mode:=0;
+read("config.cxx");
+read("XcasTVPC.cxx");
+read("XCasTVPC.user");
+\end{VerbatimOut}
+
+\newenvironment{TVPC}%
+{\VerbatimEnvironment\begin{VerbatimOut}[commandchars=\\??]{XCasTVPC.user}}%
+{\end{VerbatimOut}
+\dresse{\couleurtab}{TVPC}}
+
+\newenvironment{TVPC*}[1]{%
+\setcounter{TVnbis}{\theTVn}
+\setcounter{TVn}{#1}
+\VerbatimEnvironment\begin{VerbatimOut}[commandchars=\\??]{XCasTVPC.user}}%
+{\end{VerbatimOut}\dressetoile{\couleurtab}{TVPC}}
+
+
+
+
+
+
+
+
+
+
+
+
+\begin{VerbatimOut}{XCasTVS.giac}
+maple_mode(0);
+approx_mode:=0;
+read("config.cxx");
+read("XcasTVS.cxx");
+read("XCasTVS.user");
+\end{VerbatimOut}
+
+\newenvironment{TVS}%
+{\VerbatimEnvironment\begin{VerbatimOut}[commandchars=\\??]{XCasTVS.user}}%
+{\end{VerbatimOut}
+\dresse{\couleurtab}{TVS}}
+
+\newenvironment{TVS*}[1]{%
+\setcounter{TVnbis}{\theTVn}
+\setcounter{TVn}{#1}
+\VerbatimEnvironment\begin{VerbatimOut}[commandchars=\\??]{XCasTVS.user}}%
+{\end{VerbatimOut}\dressetoile{\couleurtab}{TVS}}
+
+
+
+
+
+
+
+
+
+
+%% pour nettoyer les fichiers auxiliaires
+
+\AtEndDocument{\immediate\write18{\cat  queue.mp >> \nomtravail_Tab.mp}
+                         }
+
+
+
+
+%%
+%% Zi end -> enjoy :)
+
+ + diff --git a/macros/latex/contrib/tablor/tablor.pdf b/macros/latex/contrib/tablor/tablor.pdf new file mode 100644 index 0000000000..4577546d55 Binary files /dev/null and b/macros/latex/contrib/tablor/tablor.pdf differ diff --git a/macros/latex/contrib/tablor/tablor.sty b/macros/latex/contrib/tablor/tablor.sty new file mode 100644 index 0000000000..7a1dc82fe4 --- /dev/null +++ b/macros/latex/contrib/tablor/tablor.sty @@ -0,0 +1,3245 @@ +% Last modified: + + +\NeedsTeXFormat{LaTeX2e}[1995/12/01] +\ProvidesPackage{tablor}[06/10/2013 v4.07g 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 +% or the LaTeX Project Public Licence, either v1.3 or (at your option) +% any later version. The latest version is in +% http://www.latex-project.org/lppl/ +% This work consists of the files tablor.sty, tablor-xetex.sty, tablor.cfg, tablor.tex, +% tablor.pdf and tablor.html + + +%% Cree 16 environnements : +%% tableau de signes de 2 facteurs affines +% \begin{TSa} +% TSa(-2,3,-1,5,\tv); +% \end{TSa} +% %%%%%% 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],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],n,\tv) +%%\end{TSq} +% un tableau de variation : +% +% pour les tableaux de signes une seule ligne +% \begin{TSc} +% TSc((x+10)/((x-5)*(x-2)),[-10,5],[2,5],n,0) +% \end{TSc} +% +% +% \begin{TV} +% TV([0,+infinity],[0],"h","x",ln(x)-(ln(x))^2,1,n,\tv) +% \end{TV} +% +% tableau de variation avec liste de valeurs +% \begin{TVS} +% TVS([1,2,3,4],[-1,-infinity,+infinity,2,9],[2],"f","x",\tv) +% \end{TVS} +% +% +% tableau de variation avec zones interdites +% +% \begin{TVZ} +% 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,n,\tv) +%\end{TVI} +%%% +% tableau avec valeurs intermediares et racines exactes +%\begin{TVIex} +%TVIex([-1,+infinity],[-1],"f","x",x2/sqrt(x+1)-1,1,2,n,\tv) +%\end{TVIex} +%%% +% +% +% tableau de variations avec f' sans zero 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 zero formel +%\begin{TVIapp} +% TVIapp([0,+infinity],[0],"g","x",ln(x)-x*exp(2-x),1,0,\tv) +% \end{TVIapp} +% +% +%%% +% et leurs pendants etoiles qui permettent l'affichage intermediaire du +% fichier metapost pour le modifier +% +% +% 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,n,\tv) +% \end{TVP} +% +% +% \begin{TVP} +% TVP([0,pi/2],[[],[]],["x","y"],"t",[2*cos(t),sin(2*t)],1,t,\tv) +% \end{TVP} +% % + +% Fonctions prolongeables par continuit +% TVP([intervalles d'tude],[valeurs prolongeables],[valeurs interdites pour f'],"g","t",e^(-1/x^2),1,n,\tv); + + +% \begin{TVPC} +% TVPC([-infinity,+infinity],[0],[0],"g","t",e^(-1/x^2),1,n,\tv); +% \end{TVPC} + + + + + +%% extensions requises +%% Il faudra rajouter dans le preambule \usepackage{graphicx} si vous +%% ne l'avez pas de base + + +\RequirePackage{filecontents} +\RequirePackage{ifthen} +\RequirePackage{fancyvrb} +\RequirePackage{ifpdf} + +\fvset{gobble=0} + +% option xcas present + + +\newboolean{xcas}\setboolean{xcas}{false} +\DeclareOption{xcas}{\setboolean{xcas}{true}} + +%% Initialisation du choix d'OS +\newboolean{windows}\setboolean{windows}{false} +\DeclareOption{windows}{\setboolean{windows}{true}} + +\ProcessOptions\relax + + + +%% on configure tablor dans un fichier exterieur pour la plateforme +%% et l'editeur + +\IfFileExists{tablor.cfg}{\input{tablor.cfg}}%\typeout{pas de fichier tablor.cfg}} + + +%% Definit des commandes disque selon l'OS utilise +\ifthenelse{\boolean{windows}}% + {\newcommand{\rem}{DEL } \newcommand{\cat}{TYPE } + \newcommand{\cp}{COPY } \newcommand{\echod}{ECHO } + \newcommand{\echof}{ }}% + {\newcommand{\rem}{rm }\newcommand{\cat}{cat } + \newcommand{\cp}{cp } \newcommand{\echod}{echo "} + \newcommand{\echof}{"}} + + + + + + + +%% pour ceux compilant via pdflatex + +\ifpdf +\DeclareGraphicsRule{*}{mps}{*}{} +\fi + +%% pour nettoyer les fichiers auxiliaires + +\AtEndDocument{\immediate\write18{\rem *.user XCas* Xcas* *.mpx} + } + + + + +%% Pour clore les fichiers metapost + + + \begin{VerbatimOut}{queue.mp} + + end + + \end{VerbatimOut} + + + +%% Nettoie les fichiers log dont le nom depend du choix de l'utilisateur +%% Par defaut, c'est le nom du fichier tex courant (\jobname) +%% Clt le fichier metapost contenant le recapitulatif de tous les tableaux + + + +\newcommand{\nettoyer}[1][\jobname]% +{\immediate\write18{\rem #1.Tab.log queue.mp enteteMP.cfg session.tex config.cxx} +} + + + + +%% Donne comme prefixe aux tableaux le prefixe courant +%% Peut-tre modifie par \initablor + +\newcommand{\nomtravail}{\jobname} + +%% initialise les compteurs + +\newcounter{TVn} +\newcommand{\tv}{\theTVn} + +\newcounter{TVnbis} +\newcommand{\tvbis}{\theTVnbis} + + + +%% permet de donner un prefixe aux tableaux produits (\jobname par defaut) +%% effectue quelques verifications : + + +\newcommand{\initablor}[1][\jobname]{% +\renewcommand{\nomtravail}{#1}% Arret du nom des tableaux +\setcounter{TVn}{0}% Initialisation du compteur de tableaux. +\ifthenelse{\boolean{xcas}}% Avec l'option XCas +{\IfFileExists{\nomtravail_Tab.mp}% Si Tableaux.mp est present... + {\immediate\write18{\rem \nomtravail_Tab.mp}}% le detruire + {}% + \immediate\write18{\cp enteteMP.cfg \nomtravail_Tab.mp}% Reconstituer l'entte de Tableaux.mp +} +{\IfFileExists{\nomtravail_Tab.mp}% Sans l'option XCas, si + % Tableaux.mp existe +{\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 ) +}}% + + + +%% commande pour lancer giac selon l'OS + +\makeatletter +\newcommand{\executGiacmp}[1]{% +\ifthenelse{\boolean{windows}}% +{\immediate\write18{giac #1 }}% +{\immediate\write18{giac <#1 }}} +\makeatother + + + + +%%% +% +%%% LES SCRIPTS GIAC/XCAS +% +%%% + + + + +%% +%% Code giac/Xcas pour les Tableaux de Variations +%% + + +\begin{VerbatimOut}{XcasTV.cxx} +TV(L,F,nom,nomv,f,ftt,trigo,nmr):={ +nl:=size(L); +f:=unapply(f,x); +fp:=function_diff(f); +Z:=concat(L,F); +S:=[]; + + +if(trigo==t){ +all_trig_solutions:=1; +reset_solve_counter(-1,-1); +SS:=solve(factor(simplify(fp(x))),x); +ns:=size(SS); +for(k:=0;k=L[0]){ +S:=concat(S,simplify(subst(SS[k],n_1=m)));m:=m-1; +} +} +}else{ +S:=solve(factor(simplify(fp(x))),x); +} + + + si size(S)>0 alors pour j de 0 jusque size(S)-1 faire + qq:=member(simplify(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,simplify(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,simplify(S[j]))}; + fpour + fsi; + + +Z:=sort([op(set[op(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; + + k0:= evalf(limit(f(x),x,Z[0],1))> evalf(limit(f(x),x,Z[1],-1)); + kz:=evalf(limit(f(x),x,Z[nz-1],-1))> evalf(limit(f(x),x,Z[nz-2],1)); + +lsi:=lsic+nom+"'("+nomv+")}$ etex);"+ + if(Z[0]==-infinity){if(sign(evalf(fp(if(Z[1]==+infinity){0}else{Z[1]-10^(-5)})))==1.0){"plus;"}else{"moins;"}}else{if(member(Z[0],F)==0){ + if(fp(Z[0])==0){"valBarre(btex 0 etex);"}else{" "}+ + if(evalf(sign(fp(Z[0]+10^(-5))))==1.0){"plus;"}else{"moins;"}}else{"nonDefBarre;"+ + if(evalf(sign(fp((Z[0]+10^(-5)))))==1.0){"plus;"}else{"moins;"} }} + +if(nz>2){ for(r:=1; r<=nz-2;r++){ ksp:=evalf(fp(Z[r]+0.1))>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{"nonDefBarre; +"} +lm0:=limit(f(x),x,Z[0],1)==-infinity; + li:=lvic+nom+"}$ etex);"+ + if(member(Z[0],F)==0){"valPos(btex $"+if(lm0==1){"-\\infty"}else{latex(simplify(limit(f(x),x,Z[0],1)))}+"$ etex,"} + else{"nonDefBarre;limDroite(btex $"+if(lm0==1){"-\\infty"}else{latex(simplify(limit(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(limit(f(x),x,Z[r-1],1))< evalf(limit(f(x),x,Z[r],-1)); + krp:=evalf(limit(f(x),x,Z[r],1))> evalf(limit(f(x),x,Z[r+1],-1)) ; + lmrm:=limit(f(x),x,Z[r],-1)==-infinity;lmrp:=limit(f(x),x,Z[r],1)==-infinity; + lp:=lp+if(member(Z[r],F)){ + "limGauche(btex + $"+if(lmrm==1){"-\\infty"}else{latex(simplify(limit(f(x),x,Z[r],-1)))}+"$ + etex,"+if(krm==1){"1);"}else{"0);"}+"nonDefBarre;limDroite(btex $"+if(lmrp==1){"-\\infty"}else{latex(simplify(limit(f(x),x,Z[r],1)))}+"$ etex,"+if(krp==1){"1);"}else{"0);"}} + else{"valPos(btex $"+latex(simplify(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:=limit(f(x),x,Z[nz-1],-1)==-infinity; + + + +lf:=if(member(Z[nz-1],F)==0){"valPos(btex $"+ + if(lnz==1){"-\\infty"}else{latex(simplify(limit(f(x),x,Z[nz-1],-1)))}+"$ etex,"+ + if(kz==1){"1);"}else{"0);"}} + else{"limGauche(btex $"+ + if(lnz==1){"-\\infty"}else{latex(simplify(limit(f(x),x,Z[nz-1],-1)))}+"$ etex,"+ + if(kz==1){"1);nonDefBarre;"}else{"0);nonDefBarre;"}}; + + + + + +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; + +";}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); + + + }:; + +\end{VerbatimOut} + + + + + + +%%%% + + +% +% +% TVPC : pour les fonctions prolongeables par continuit. +%% +%% + + + + +\begin{VerbatimOut}{XcasTVPC.cxx} +TVPC(L,F,FP,nom,nomv,f,ftt,trigo,nmr):={ +nl:=size(L); +f:=unapply(f,x); +fp:=function_diff(f); +Z:=concat(L,F); +Z:=concat(Z,FP); +S:=[]; + + +if(trigo==t){ +all_trig_solutions:=1; +reset_solve_counter(-1,-1); +SS:=solve(factor(simplify(fp(x))),x); +ns:=size(SS); +for(k:=0;k=L[0]){ +S:=concat(S,simplify(subst(SS[k],n_1=m)));m:=m-1; +} +} +}else{ +S:=solve(factor(simplify(fp(x))),x); +} + + + si size(S)>0 alors pour j de 0 jusque size(S)-1 faire + qq:=member(simplify(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,simplify(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,simplify(S[j]))}; + fpour + fsi; + + +Z:=sort([op(set[op(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; + + k0:= evalf(limit(f(x),x,Z[0],1))> evalf(limit(f(x),x,Z[1],-1)); + kz:=evalf(limit(f(x),x,Z[nz-1],-1))> evalf(limit(f(x),x,Z[nz-2],1)); + +lsi:=lsic+nom+"'("+nomv+")}$ etex);"+ + if(Z[0]==-infinity){if(sign(evalf(fp(if(Z[1]==+infinity){0}else{Z[1]-10^(-5)})))==1.0){"plus;"}else{"moins;"}}else{if(member(Z[0],FP)==0){ + if(fp(Z[0])==0){"valBarre(btex 0 etex);"}else{" "}+ + if(evalf(sign(fp(Z[0]+10^(-5))))==1.0){"plus;"}else{"moins;"}}else{"nonDefBarre;"+ + if(evalf(sign(fp((Z[0]+10^(-5)))))==1.0){"plus;"}else{"moins;"} }} + +if(nz>2){ for(r:=1; r<=nz-2;r++){ ksp:=evalf(fp(Z[r]+0.1))>0; + lsp:=lsp+if(member(Z[r],FP)==0){"valBarre(btex 0 etex);"}else{"nonDefBarre;"}+ + if(ksp==1){"plus;"}else{"moins;"} + }; } + +lsf:=if(member(Z[nz-1],FP)==0){""}else{"nonDefBarre; +"} +lm0:=limit(f(x),x,Z[0],1)==-infinity; + li:=lvic+nom+"}$ etex);"+ + if(member(Z[0],F)==0){"valPos(btex $"+if(lm0==1){"-\\infty"}else{latex(simplify(limit(f(x),x,Z[0],1)))}+"$ etex,"} + else{"limDroite(btex $"+if(lm0==1){"-\\infty"}else{latex(simplify(limit(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(limit(f(x),x,Z[r-1],1))< evalf(limit(f(x),x,Z[r],-1)); + krp:=evalf(limit(f(x),x,Z[r],1))> evalf(limit(f(x),x,Z[r+1],-1)) ; + lmrm:=limit(f(x),x,Z[r],-1)==-infinity;lmrp:=limit(f(x),x,Z[r],1)==-infinity; + lp:=lp+if(member(Z[r],F)){ + "valPos(btex + $"+if(lmrm==1){"-\\infty"}else{latex(simplify(limit(f(x),x,Z[r],-1)))}+"$ + etex,"+if(krm==1){"1);"}else{"0);"} } + else{"valPos(btex $"+latex(simplify(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:=limit(f(x),x,Z[nz-1],-1)==-infinity; + + + +lf:=if(member(Z[nz-1],F)==0){"valPos(btex $"+ + if(lnz==1){"-\\infty"}else{latex(simplify(limit(f(x),x,Z[nz-1],-1)))}+"$ etex,"+ + if(kz==1){"1);"}else{"0);"}} + else{"limGauche(btex $"+ + if(lnz==1){"-\\infty"}else{latex(simplify(limit(f(x),x,Z[nz-1],-1)))}+"$ etex,"+ + if(kz==1){"1);"}else{"0);"}}; + + + + + +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; + +";}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); + + + }:; + +\end{VerbatimOut} + + + + + + + + + + + + +%% +%% +%% TV avec une zone interdite : on rajoute comme argument la liste des intervalles interdits +%% par exemple, pour sqrt(x^2-1) : TVZ([-infinity,100],[],[[-1,1]],"f","x",sqrt(x^2-1),1,1) +%% + +\begin{VerbatimOut}{XcasTVZ.cxx} + + +TVZ(L,F,FF,nom,nomv,f,ftt,trigo,nmr):={ +nl:=size(L); +nf:=size(FF); + Ff:=NULL;IMIN:=NULL;IMAX:=NULL; +for(k:=0;kL[0]){Imin[k]:=FF[k][0];LL:=L}else{Imin[k]:=L[0];LL:=[L[1]]}; +if(FF[k][1]=L[0]){ +S:=concat(S,simplify(subst(SS[k],n_1=m)));m:=m-1; +} +} +}else{ +S:=solve(factor(simplify(fp(x))),x); +} + + + + + + + si size(S)>0 alors pour j de 0 jusque size(S)-1 faire + for(k:=0;k=evalf(L[0])) and (evalf(S[j])<=evalf(L[nl-1])); + kK:=(evalf(S[j])evalf(Imax[k])); + Kk:=(kk) and kK; + if(Kk==1){Z:=append(Z,simplify(S[j]))}; + } + fpour + fsi; + + +Z:=sort([op(set[op(Z)])]); + +nz:=size(Z); + +for(j:=0;jImin[j])and(Z[k] evalf(limit(f(x),x,Z[1],-1)); + kz:=evalf(limit(f(x),x,Z[nz-1],-1))> evalf(limit(f(x),x,Z[nz-2],1)); + +lsi:=lsic+nom+"'("+nomv+")}$ etex);"+ +if(member(Z[0],IMIN)!=0){if((member(Z[0],F)==0) and (fp(Z[0])!=undef)){"debutNonDef;"}else{"debutNonDefStrict;"}}else{if(Z[0]==-infinity){if(sign(evalf(fp(if(Z[1]==+infinity){0}else{Z[1]-10^(-5)})))==1.0){"plus;"}else{"moins;"}}else{if(member(Z[0],F)==0){ + if(fp(Z[0])==0){"valBarre(btex 0 etex);"}else{" "}+ + if(evalf(sign(fp(Z[0]+10^(-5))))==1.0){"plus;"}else{"moins;"}}else{"nonDefBarre;"+ + if(evalf(sign(fp((Z[0]+10^(-5)))))==1.0){"plus;"}else{"moins;"} }}} + + + +// modif 3 avril 2010 + +if(nz>2){ for(r:=1; r<=nz-2;r++){ + lsp:=lsp+ + if(member(Z[r],IMIN)!=0){ + if((member(Z[r],F)==0) and (fp(Z[r])!=undef)){"debutNonDef;"} + else{"debutNonDefStrict;"}} + else{if(member(Z[r],IMAX)!=0){if((member(Z[r],F)==0) and (fp(Z[r])!=undef)){"finNonDef;"} + else{"finNonDefStrict;"}+ + if(evalf(fp(Z[r]+0.01))>0){"plus;"} + else{"moins;"}} + else{if(member(Z[r],F)==0){"valBarre(btex 0 etex);"} + else{"nonDefBarre;"}+ + if(evalf(fp(Z[r]+0.01))>0){"plus;"} + else{"moins;"} + }} + }}; + +// fin modif + + + + + +lsf:=if(member(Z[nz-1],IMAX)!=0){if((member(Z[nz-1],F)==0) and (fp(Z[nz-1])!=undef)){"finNonDef;"}else{"finNonDefStrict;"}}else{if(member(Z[nz-1],F)==0){""}else{"nonDefBarre; +"}} + + +lm0:=limit(f(x),x,Z[0],1)==-infinity; + li:=lvic +nom+"}$ etex);"+ + if(member(Z[0],F)==0){"valPos(btex $"+if(lm0==1){"-\\infty"}else{latex(simplify(limit(f(x),x,Z[0],1)))}+"$ etex,"} + else{"nonDefBarre;limDroite(btex $"+if(lm0==1){"-\\infty"}else{latex(simplify(limit(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(limit(f(x),x,Z[r-1],1))< evalf(limit(f(x),x,Z[r],-1)); + krp:=evalf(limit(f(x),x,Z[r],1))> evalf(limit(f(x),x,Z[r+1],-1)) ; + lmrm:=limit(f(x),x,Z[r],-1)==-infinity;lmrp:=limit(f(x),x,Z[r],1)==-infinity; + + lp:=lp+if(member(Z[r],IMIN)!=0){"limGauche(btex $"+if(lmrm==1){ + "-\\infty"}else{ + latex(simplify(limit(f(x),x,Z[r],-1)))} + +"$ etex,"+if(krm==1){ + "1);"}else{"0);"} + +if(member(Z[r],F)==0){"debutNonDef;"}else{"debutNonDefStrict;"} + }//fsi Zr=Imin + else{ + if (member(Z[r],IMAX)!=0){if(member(Z[r],F)==0){"finNonDef;"}else{"finNonDefStrict;"}+"limDroite(btex $"+if(lmrp==1){ + "-\\infty"}else{latex(simplify(limit(f(x),x,Z[r],1)))} + +"$ etex,"+if(krp==1){ + "1);"}else{"0);"} + }else{ + if(member(Z[r],F)){ + "limGauche(btex $"+if(lmrm==1){ + "-\\infty"}else{ + latex(simplify(limit(f(x),x,Z[r],-1)))} + +"$ etex,"+if(krm==1){ + "1);"}else{"0);"} + +"nonDefBarre;limDroite(btex $"+if(lmrp==1){ + "-\\infty"}else{latex(simplify(limit(f(x),x,Z[r],1)))} + +"$ etex,"+if(krp==1){ + "1);"}else{"0);"} + }//fsi (member Zr F) + else{"valPos(btex$"+latex(simplify(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);"}//felse(krp) + }//felse(valpos) + }//felse(member Zr F) + } //felse(Zr=Imax) + }//felse(Zr=Imin) + };//ffor + }//fsi nz + +lnz:=limit(f(x),x,Z[nz-1],-1)==-infinity; + + + +lf:=if(member(Z[nz-1],F)==0){"valPos(btex $"+ + if(lnz==1){"-\\infty"}else{latex(simplify(limit(f(x),x,Z[nz-1],-1)))}+"$ etex,"+ + if(kz==1){"1);"}else{"0);"}} + else{"limGauche(btex $"+ + if(lnz==1){"-\\infty"}else{latex(simplify(limit(f(x),x,Z[nz-1],-1)))}+"$ etex,"+ + if(kz==1){"1);nonDefBarre;"}else{"0);nonDefBarre;"}}; + + + + + +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; + +";}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); + + } +:; + + +\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):={ +local nl,fp,z0,z,nz,S,k,j,m,kk,kok,Z,l0,lp,lf,lsp,k0,kz,lsi,r,ksp,lsf,lm0,li,krm,krp,lmrm,lmrp,lnz; + +nl:=size(L); +f:=unapply(f,x); +fp:=function_diff(f); +z0:=concat(L,F);z:=sort(z0); +nz:=size(z); + + + +S:=NULL; + + + +if(L==[-infinity,+infinity]){j:=[seq(-50+2*k,k=0..50)]minus F; + for k in j do for(m:=-5;m<=5;m++){S:=S,resoudre_numerique(fp(y),y,k+m*0.1,k+(m+1)*0.1,bisection_solver)};end_for} +else{if(L[0]==-infinity){j:=[seq(2*k,k=-25..0.5*floor(L[1]))] minus F; + for k in j do for(m:=-5;m<=5;m++){ S:=S,resoudre_numerique(fp(y),y,k+m*0.1,k+(m+1)*0.1,bisection_solver)};end_for} +else{if(L[1]==+infinity){ +j:=[seq(2*k,k=floor(0.5*L[0])..0.5*50)] minus F; + for k in j do for(m:=-5;m<=5;m++){ S:=S,resoudre_numerique(fp(y),y,k+m*0.1,k+(m+1)*0.1,bisection_solver)};end_for +} +else{ j:=[seq(2*k,k=0.5*floor(z[0])..0.5*floor(z[nz-1]))] minus F; + for k in j do for(m:=-5;m<=5;m++){S:=S,resoudre_numerique(fp(y),y,k+m*0.1,k+(m+1)*0.1,bisection_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,simplify(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(limit(f(x),x,Z[1],-1)); + kz:=evalf(limit(f(x),x,Z[nz-1],-1))> evalf(limit(f(x),x,Z[nz-2],1)); + +lsi:=lsic+nom+"'("+nomv+")}$ etex);"+ + if(Z[0]==-infinity){if(sign(evalf(fp(if(Z[1]==+infinity){0}else{Z[1]-10^(-5)})))==1.0){"plus;"}else{"moins;"}}else{if(member(Z[0],F)==0){ + if(fp(Z[0])==0){"valBarre(btex 0 etex);"}else{" "}+ + if(evalf(sign(fp(Z[0]+10^(-5))))==1.0){"plus;"}else{"moins;"}}else{"nonDefBarre;"+ + if(evalf(sign(fp((Z[0]+10^(-5)))))==1.0){"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{"nonDefBarre; +"} +lm0:=limit(f(x),x,Z[0],1)==-infinity; + li:=lvic+nom+"}$ etex);"+ + if(member(Z[0],F)==0){"valPos(btex $"+if(lm0==1){"-\\infty"}else{latex(simplify(limit(f(x),x,Z[0],1)))}+"$ etex,"} + else{"nonDefBarre;limDroite(btex $"+if(lm0==1){"-\\infty"}else{latex(simplify(limit(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(limit(f(x),x,Z[r-1],1))< evalf(limit(f(x),x,Z[r],-1)); + krp:=evalf(limit(f(x),x,Z[r],1))> evalf(limit(f(x),x,Z[r+1],-1)) ; + lmrm:=limit(f(x),x,Z[r],-1)==-infinity;lmrp:=limit(f(x),x,Z[r],1)==-infinity; + lp:=lp+if(member(Z[r],F)){ + "limGauche(btex $"+if(lmrm==1){"-\\infty"}else{latex(simplify(limit(f(x),x,Z[r],-1)))}+"$ etex,"+if(krm==1){"1);"}else{"0);"}+"nonDefBarre;limDroite(btex $"+if(lmrp==1){"-\\infty"}else{latex(simplify(limit(f(x),x,Z[r],1)))}+"$ etex,"+if(krp==1){"1);"}else{"0);"}} + else{"valPos(btex $"+latex(simplify(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:=limit(f(x),x,Z[nz-1],-1)==-infinity; + + +lf:=if(member(Z[nz-1],F)==0){"valPos(btex $"+ + if(lnz==1){"-\\infty"}else{latex(simplify(limit(f(x),x,Z[nz-1],-1)))}+"$ etex,"+ + if(kz==1){"1);"}else{"0);"}} + else{"limGauche(btex $"+ + if(lnz==1){"-\\infty"}else{latex(simplify(limit(f(x),x,Z[nz-1],-1)))}+"$ etex,"+ + if(kz==1){"1);nonDefBarre;"}else{"0);nonDefBarre;"}}; + + + +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; + +";}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); + + + }:; + + + + + + + +\end{VerbatimOut} + + + + + + + +%% +%% Code giac/Xcas pour les Tableaux de Variations avec +%% Valeurs intermediaires +%% + + + + + +\begin{VerbatimOut}{XcasTVI.cxx} + + +TVI(L,F,nom,nomv,f,ftt,ao,trigo,nmr):={ +nl:=size(L); +f:=unapply(f,x); +fp:=function_diff(f); +Z:=concat(L,F); +S:=[]; + + +if(trigo==t){ +all_trig_solutions:=1; +reset_solve_counter(-1,-1); +SS:=solve(factor(simplify(fp(x))),x); +ns:=size(SS); +for(k:=0;k=L[0]){ +S:=concat(S,simplify(subst(SS[k],n_1=m)));m:=m-1; +} +} +}else{ +S:=solve(factor(simplify(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,simplify(S[j]))}; + fpour + fsi; + + +Z:=sort([op(set[op(Z)])]); + + + +nz:=size(Z); +l0:=" newLigneVariables(btex $"+nomv+"$ etex);";lp:=" "; lf:=" ";lsp:=" "; + + + +LI:=limit(f(x),x,Z[0],1); +LF:=limit(f(x),x,Z[nz-1],-1); +LP:=NULL; +PB:=1; +if(nz>2){ for(r:=1; + r<=nz-2;r++){LP:=LP,if(member(Z[r],F)){limit(f(x),x,Z[r],-1),limit(f(x),x,Z[r],1)}else{f(Z[r])}; +if(member(Z[r],F)){PB:=PB,0,1}else{PB:=PB,1}; +} +}; +if(nz>2){ LL:=[LI,LP,LF]; PB:=[PB,1]}else{LL:=[LI,LF];PB:=[1,1]}; + +NL:=size(LL); +A:=NULL;aa:=1; +kk:=0; + + + +if(NL==nz){for(k:=0;knz +if(NL>nz){for(k:=0;k evalf(limit(f(x),x,Z[1],-1)); + kz:=evalf(limit(f(x),x,Z[nz-1],-1))> evalf(limit(f(x),x,Z[nz-2],1)); + +lsi:=lsic+nom+"'("+nomv+")}$ etex);"+ + if(Z[0]==-infinity){if(evalf(sign(fp(if(Z[1]==+infinity){0}else{Z[1]-10^(-5)})))==1.0){"plus;"}else{"moins;"}}else{if(member(Z[0],F)==0){ + if(fp(Z[0])==0){"valBarre(btex 0 etex);"}else{" "}+ + if(evalf(sign(fp((Z[0]+10^(-3)))))==1.0){"plus;"}else{"moins;"}}else{"nonDefBarre;"+ + if(evalf(sign(fp(10^(-3)+Z[0])))==1.0){"plus;"}else{"moins;"} }}+if(TestS==0){"valBarre(btex$ + $ etex);"+ +if(evalf(sign(fp(10^(-3)+ifte(Z[0]==-infinity,ifte(Z[1]==+infinity,ifte(member(0,F)==0,0,0.01),ifte(member(Z[1]-1,F)==0,Z[1]-1,Z[1]-1.1)),Z[0]))))==1.0){"plus;"}else{"moins;"}}else{" "}; + + + + + +if(nz>2){rr:=1; if(nz==NL){for(r:=1; r<=NL-2;r++){ TestS:=(evalf(sign(LL[r]-ao))==evalf(sign(LL[r+1]-ao))) or (evalf(sign(LL[r]-ao))==0.0)or (evalf(sign(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:=(evalf(sign(LL[r]-ao))==evalf(sign(LL[r+1]-ao))) or (evalf(sign(LL[r]-ao))==0.0)or (evalf(sign(LL[r+1]-ao))==0.0); + + if(PB[r]==1){if(TestS==0){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{"nonDefBarre;"} + + + +lm0:=limit(f(x),x,Z[0],1)==-infinity; + + + + +TestS:=(evalf(sign(LL[0]-ao))==evalf(sign(LL[1]-ao))) or (evalf(sign(LL[0]-ao))==0.0) or (evalf(sign(LL[1]-ao))==0.0); + + li:=lvic+nom+"}$ etex); +"+ if(member(Z[0],F)==0){"valPos(btex $"+if(lm0==1){"-\\infty"}else{latex(simplify(limit(f(x),x,Z[0],1)))}+"$ etex,"} + else{"nonDefBarre;limDroite(btex $"+if(lm0==1){"-\\infty"}else{latex(simplify(limit(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:=(evalf(sign(LL[r]-ao))==evalf(sign(LL[r+1]-ao))) or (evalf(sign(LL[r]-ao))==0.0)or (evalf(sign(LL[r+1]-ao))==0.0); + krm:=evalf(limit(f(x),x,Z[r-1],1))< evalf(limit(f(x),x,Z[r],-1)); + krp:=evalf(limit(f(x),x,Z[r],1))> evalf(limit(f(x),x,Z[r+1],-1)) ; + lmrm:=limit(f(x),x,Z[r],-1)==-infinity;lmrp:=limit(f(x),x,Z[r],1)==-infinity; + lp:=lp+if(member(Z[r],F)) { + "limGauche(btex $"+if(lmrm==1){"-\\infty"}else{latex(simplify(limit(f(x),x,Z[r],-1)))}+"$ etex,"+if(krm==1){"1);"}else{"0);"}+"nonDefBarre;limDroite(btex $"+if(lmrp==1){"-\\infty"}else{latex(simplify(limit(f(x),x,Z[r],1)))}+"$ etex,"+if(krp==1){"1);"}else{"0);"}} + else{"valPos(btex $"+latex(simplify(f(Z[r])))+"$ + etex,"+if(evalf(sign(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:=(evalf(sign(LL[r]-ao))==evalf(sign(LL[r+1]-ao))) or (evalf(sign(LL[r]-ao))==0.0)or (evalf(sign(LL[r+1]-ao))==0.0); + krm:=evalf(limit(f(x),x,Z[rr-1],1))< evalf(limit(f(x),x,Z[rr],-1)); + krp:=evalf(limit(f(x),x,Z[rr],1))> evalf(limit(f(x),x,Z[rr+1],-1)) ; + lmrm:=limit(f(x),x,Z[rr],-1)==-infinity;lmrp:=limit(f(x),x,Z[rr],1)==-infinity; TestL:=(abs(LL[r])==abs(LL[r+1])); + +if(PB[r]==1){if(TestS==0){lp:=lp+if(member(Z[rr],F)){ + "limGauche(btex $"+if(lmrm==1){"-\\infty"}else{latex(simplify(limit(f(x),x,Z[rr],-1)))}+"$ etex,"+if(krm==1){"1);"}else{"0);"}+"nonDefBarre;limDroite(btex $"+if(lmrp==1){"-\\infty"}else{latex(simplify(limit(f(x),x,Z[rr],1)))}+"$ etex,"+if(krp==1){"1);"}else{"0);"}} + else{"valPos(btex $"+latex(simplify(f(Z[rr])))+"$ + etex,"+if(evalf(sign(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; +}// testS==0 +else{lp:=lp+if(member(Z[rr],F)){ + "limGauche(btex $"+if(lmrm==1){"-\\infty"}else{latex(simplify(limit(f(x),x,Z[rr],-1)))}+"$ etex,"+if(krm==1){"1);"}else{"0);"}+"nonDefBarre;limDroite(btex $"+if(lmrp==1){"-\\infty"}else{latex(simplify(limit(f(x),x,Z[rr],1)))}+"$ etex,"+if(krp==1){"1);"}else{"0);"}} + else{"valPos(btex $"+latex(simplify(f(Z[rr])))+"$ + etex,"+if(evalf(sign(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 +}//PB[r]==1 +}//for nz2 + + + +lnz:=limit(f(x),x,Z[nz-1],-1)==-infinity; + + +lf:=if(member(Z[nz-1],F)==0){"valPos(btex $"+ + if(lnz==1){"-\\infty"}else{latex(simplify(limit(f(x),x,Z[nz-1],-1)))}+"$ etex,"+ + if(kz==1){"1);"}else{"0);"}} + else{"limGauche(btex $"+ + if(lnz==1){"-\\infty"}else{latex(simplify(limit(f(x),x,Z[nz-1],-1)))}+"$ etex,"+ + if(kz==1){"1);nonDefBarre;"}else{"0);nonDefBarre;"}}; + + + + + + + +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; + +";}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); + + + }:; + + + +\end{VerbatimOut} + + + +%% +% +% +% +% Pour avoir les racines sous forme exacte.... quand c'est possible ! +% +% +% +%%%%%%%%% + + +\begin{VerbatimOut}{XcasTVIex.cxx} + + + +TVIex(L,F,nom,nomv,f,ftt,ao,trigo,nmr):={ +nl:=size(L); +f:=unapply(f,x); +fp:=function_diff(f); +Z:=concat(L,F); +S:=[]; + +Sex:=NULL; +Zex:=solve(f(x)=ao); +Zex:=sort(Zex); +for(j:=0;j=evalf(L[0])) and (evalf(Zex[j])<=evalf(L[nl-1]))){Sex:=Sex,Zex[j]}; +}; +Sex:=[Sex]; + + + + + + + + +if(trigo==t){ +all_trig_solutions:=1; +reset_solve_counter(-1,-1); +SS:=solve(factor(simplify(fp(x))),x); +ns:=size(SS); +for(k:=0;k=L[0]){ +S:=concat(S,simplify(subst(SS[k],n_1=m)));m:=m-1; +} +} +}else{ +S:=solve(factor(simplify(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,simplify(S[j]))}; + fpour + fsi; + + + + Z:=sort([op(set[op(Z)])]); + + +nz:=size(Z); +l0:=" newLigneVariables(btex $"+nomv+"$ etex);";lp:=" "; lf:=" ";lsp:=" "; + + + +LI:=limit(f(x),x,Z[0],1); +LF:=limit(f(x),x,Z[nz-1],-1); +LP:=NULL; +PB:=1; +if(nz>2){ for(r:=1; + r<=nz-2;r++){LP:=LP,if(member(Z[r],F)){limit(f(x),x,Z[r],-1),limit(f(x),x,Z[r],1)}else{f(Z[r])}; +if(member(Z[r],F)){PB:=PB,0,1}else{PB:=PB,1}; +} +}; +if(nz>2){ LL:=[LI,LP,LF]; PB:=[PB,1]}else{LL:=[LI,LF];PB:=[1,1]}; + +NL:=size(LL); +A:=NULL;aa:=0; +kk:=0; + + + +if(NL==nz){for(k:=0;knz +if(NL>nz){for(k:=0;k evalf(limit(f(x),x,Z[1],-1)); + kz:=evalf(limit(f(x),x,Z[nz-1],-1))> evalf(limit(f(x),x,Z[nz-2],1)); + +lsi:=lsic+nom+"'("+nomv+")}$ etex);"+ + if(Z[0]==-infinity){if(evalf(sign(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^(-3))))==1){"plus;"}else{"moins;"}}else{"nonDefBarre;"+ + if(sign(fp(10^(-3)+Z[0]))==1){"plus;"}else{"moins;"} }}+if(TestS==0){"valBarre(btex$ + $ etex);"+ +if(evalf(sign(fp(10^(-3)+ifte(Z[0]==-infinity,ifte(Z[1]==+infinity,ifte(member(0,F)==0,0,0.01),ifte(member(Z[1]-1,F)==0,Z[1]-1,Z[1]-1.1)),Z[0]))))==1.0){"plus;"}else{"moins;"}}else{" "}; + + + + +if(nz>2){rr:=1; if(nz==NL){for(r:=1; r<=NL-2;r++){ TestS:=(evalf(sign(LL[r]-ao))==evalf(sign(LL[r+1]-ao))) or (evalf(sign(LL[r]-ao))==0.0)or (evalf(sign(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:=(evalf(sign(LL[r]-ao))==evalf(sign(LL[r+1]-ao))) or (evalf(sign(LL[r]-ao))==0.0)or (evalf(sign(LL[r+1]-ao))==0.0); + + if(PB[r]==1){if(TestS==0){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{"nonDefBarre;"} + + + +lm0:=limit(f(x),x,Z[0],1)==-infinity; + + + + +TestS:=(evalf(sign(LL[0]-ao))==evalf(sign(LL[1]-ao))) or (evalf(sign(LL[0]-ao))==0.0) or (evalf(sign(LL[1]-ao))==0.0); + + li:=lvic+nom+"}$ etex); +"+ if(member(Z[0],F)==0){"valPos(btex $"+if(lm0==1){"-\\infty"}else{latex(simplify(limit(f(x),x,Z[0],1)))}+"$ etex,"} + else{"nonDefBarre;limDroite(btex $"+if(lm0==1){"-\\infty"}else{latex(simplify(limit(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:=(evalf(sign(LL[r]-ao))==evalf(sign(LL[r+1]-ao))) or (evalf(sign(LL[r]-ao))==0.0)or (evalf(sign(LL[r+1]-ao))==0.0); + krm:=evalf(limit(f(x),x,Z[r-1],1))< evalf(limit(f(x),x,Z[r],-1)); + krp:=evalf(limit(f(x),x,Z[r],1))> evalf(limit(f(x),x,Z[r+1],-1)) ; + lmrm:=limit(f(x),x,Z[r],-1)==-infinity;lmrp:=limit(f(x),x,Z[r],1)==-infinity; + lp:=lp+if(member(Z[r],F)) { + "limGauche(btex $"+if(lmrm==1){"-\\infty"}else{latex(simplify(limit(f(x),x,Z[r],-1)))}+"$ etex,"+if(krm==1){"1);"}else{"0);"}+"nonDefBarre;limDroite(btex $"+if(lmrp==1){"-\\infty"}else{latex(simplify(limit(f(x),x,Z[r],1)))}+"$ etex,"+if(krp==1){"1);"}else{"0);"}} + else{"valPos(btex $"+latex(simplify(f(Z[r])))+"$ + etex,"+if(evalf(sign(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:=(evalf(sign(LL[r]-ao))==evalf(sign(LL[r+1]-ao))) or (evalf(sign(LL[r]-ao))==0.0)or (evalf(sign(LL[r+1]-ao))==0.0); + krm:=evalf(limit(f(x),x,Z[rr-1],1))< evalf(limit(f(x),x,Z[rr],-1)); + krp:=evalf(limit(f(x),x,Z[rr],1))> evalf(limit(f(x),x,Z[rr+1],-1)) ; + lmrm:=limit(f(x),x,Z[rr],-1)==-infinity;lmrp:=limit(f(x),x,Z[rr],1)==-infinity; TestL:=(abs(LL[r])==abs(LL[r+1])); + +if(PB[r]==1){if(TestS==0){lp:=lp+if(member(Z[rr],F)){ + "limGauche(btex $"+if(lmrm==1){"-\\infty"}else{latex(simplify(limit(f(x),x,Z[rr],-1)))}+"$ etex,"+if(krm==1){"1);"}else{"0);"}+"nonDefBarre;limDroite(btex $"+if(lmrp==1){"-\\infty"}else{latex(simplify(limit(f(x),x,Z[rr],1)))}+"$ etex,"+if(krp==1){"1);"}else{"0);"}} + else{"valPos(btex $"+latex(simplify(f(Z[rr])))+"$ + etex,"+if(evalf(sign(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; +}// testS==0 +else{lp:=lp+if(member(Z[rr],F)){ + "limGauche(btex $"+if(lmrm==1){"-\\infty"}else{latex(simplify(limit(f(x),x,Z[rr],-1)))}+"$ etex,"+if(krm==1){"1);"}else{"0);"}+"nonDefBarre;limDroite(btex $"+if(lmrp==1){"-\\infty"}else{latex(simplify(limit(f(x),x,Z[rr],1)))}+"$ etex,"+if(krp==1){"1);"}else{"0);"}} + else{"valPos(btex $"+latex(simplify(f(Z[rr])))+"$ + etex,"+if(evalf(sign(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 +}//PB[r]==1 +}//for nz2 + + + +lnz:=limit(f(x),x,Z[nz-1],-1)==-infinity; + + +lf:=if(member(Z[nz-1],F)==0){"valPos(btex $"+ + if(lnz==1){"-\\infty"}else{latex(simplify(limit(f(x),x,Z[nz-1],-1)))}+"$ etex,"+ + if(kz==1){"1);"}else{"0);"}} + else{"limGauche(btex $"+ + if(lnz==1){"-\\infty"}else{latex(simplify(limit(f(x),x,Z[nz-1],-1)))}+"$ etex,"+ + if(kz==1){"1);nonDefBarre;"}else{"0);nonDefBarre;"}}; + + + + + + + +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; + +";}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); + + + }:; + + +\end{VerbatimOut} + + + + + + + +%% +%% +%% Quand les solutions de f'(x)=0 ne sont pas formellement calculables +%% + + + + +\begin{VerbatimOut}{XcasTVIapp.cxx} + +TVIapp(L,F,nom,nomv,f,ftt,ao,nmr):={ + + +nl:=size(L); +f:=unapply(f,x); +fp:=function_diff(f); +z0:=concat(L,F);z:=sort(z0); +nz:=size(z); + + + + + + + +S:=op(fsolve(fp(x),x)); + + + + +if(L==[-infinity,+infinity]){j:=[seq(-50+2*k,k=0..50)]minus F; + for k in j do for(m:=-5;m<=5;m++){S:=S,resoudre_numerique(fp(y),y,k+m*0.1,k+(m+1)*0.1,bisection_solver)};end_for} +else{if(L[0]==-infinity){j:=[seq(2*k,k=-25..0.5*floor(L[1]))] minus F; + for k in j do for(m:=-5;m<=5;m++){ S:=S,resoudre_numerique(fp(y),y,k+m*0.1,k+(m+1)*0.1,bisection_solver)};end_for} +else{if(L[1]==+infinity){ +j:=[seq(2*k,k=floor(0.5*L[0])..0.5*50)] minus F; + for k in j do for(m:=-5;m<=5;m++){ S:=S,resoudre_numerique(fp(y),y,k+m*0.1,k+(m+1)*0.1,bisection_solver)};end_for +} +else{ j:=[seq(2*k,k=0.5*floor(z[0])..0.5*floor(z[nz-1]))] minus F; + for k in j do for(m:=-5;m<=5;m++){S:=S,resoudre_numerique(fp(y),y,k+m*0.1,k+(m+1)*0.1,bisection_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,simplify(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;j2){ for(r:=1; + r<=nz-2;r++){LP:=LP,if(member(Z[r],F)){limit(f(x),x,Z[r],-1),limit(f(x),x,Z[r],1)}else{f(Z[r])}; +if(member(Z[r],F)){PB:=PB,0,1}else{PB:=PB,1}; +} +}; +if(nz>2){ LL:=[LI,LP,LF]; PB:=[PB,1]}else{LL:=[LI,LF];PB:=[1,1]}; + +NL:=size(LL); +A:=NULL;aa:=1; +kk:=0; + + +if(NL==nz){for(k:=0;knz +if(NL>nz){for(k:=0;k evalf(limit(f(x),x,Z[1],-1)); + kz:=evalf(limit(f(x),x,Z[nz-1],-1))> evalf(limit(f(x),x,Z[nz-2],1)); + +lsi:=lsic+nom+"'("+nomv+")}$ etex);"+ + if(Z[0]==-infinity){if(evalf(sign(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^(-3))))==1){"plus;"}else{"moins;"}}else{"nonDefBarre;"+ + if(sign(fp(10^(-3)+Z[0]))==1){"plus;"}else{"moins;"} }}+if(TestS==0){"valBarre(btex$ + $ etex);"+ + +if(evalf(sign(fp(10^(-3)+ifte(Z[0]==-infinity,ifte(Z[1]==+infinity,ifte(member(0,F)==0,0,0.01),ifte(member(Z[1]-1,F)==0,Z[1]-1,Z[1]-1.1)),Z[0]))))==1.0){"plus;"}else{"moins;"}}else{" "}; + + + +if(nz>2){rr:=1; if(nz==NL){for(r:=1; r<=NL-2;r++){ TestS:=(evalf(sign(LL[r]-ao))==evalf(sign(LL[r+1]-ao))) or (evalf(sign(LL[r]-ao))==0.0)or (evalf(sign(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:=(evalf(sign(LL[r]-ao))==evalf(sign(LL[r+1]-ao))) or (evalf(sign(LL[r]-ao))==0.0)or (evalf(sign(LL[r+1]-ao))==0.0); + + if(PB[r]==1){if(TestS==0){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{"nonDefBarre;"} + + + +lm0:=limit(f(x),x,Z[0],1)==-infinity; + + + + +TestS:=(evalf(sign(LL[0]-ao))==evalf(sign(LL[1]-ao))) or (evalf(sign(LL[0]-ao))==0.0) or (evalf(sign(LL[1]-ao))==0.0); + + li:=lvic+nom+"}$ etex); +"+ if(member(Z[0],F)==0){"valPos(btex $"+if(lm0==1){"-\\infty"}else{latex(simplify(limit(f(x),x,Z[0],1)))}+"$ etex,"} + else{"nonDefBarre;limDroite(btex $"+if(lm0==1){"-\\infty"}else{latex(simplify(limit(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:=(evalf(sign(LL[r]-ao))==evalf(sign(LL[r+1]-ao))) or (evalf(sign(LL[r]-ao))==0.0)or (evalf(sign(LL[r+1]-ao))==0.0); + krm:=evalf(limit(f(x),x,Z[r-1],1))< evalf(limit(f(x),x,Z[r],-1)); + krp:=evalf(limit(f(x),x,Z[r],1))> evalf(limit(f(x),x,Z[r+1],-1)) ; + lmrm:=limit(f(x),x,Z[r],-1)==-infinity;lmrp:=limit(f(x),x,Z[r],1)==-infinity; + lp:=lp+if(member(Z[r],F)) { + "limGauche(btex $"+if(lmrm==1){"-\\infty"}else{latex(simplify(limit(f(x),x,Z[r],-1)))}+"$ etex,"+if(krm==1){"1);"}else{"0);"}+"nonDefBarre;limDroite(btex $"+if(lmrp==1){"-\\infty"}else{latex(simplify(limit(f(x),x,Z[r],1)))}+"$ etex,"+if(krp==1){"1);"}else{"0);"}} + else{"valPos(btex $"+latex(simplify(f(Z[r])))+"$ + etex,"+if(evalf(sign(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:=(evalf(sign(LL[r]-ao))==evalf(sign(LL[r+1]-ao))) or (evalf(sign(LL[r]-ao))==0.0)or (evalf(sign(LL[r+1]-ao))==0.0); + krm:=evalf(limit(f(x),x,Z[rr-1],1))< evalf(limit(f(x),x,Z[rr],-1)); + krp:=evalf(limit(f(x),x,Z[rr],1))> evalf(limit(f(x),x,Z[rr+1],-1)) ; + lmrm:=limit(f(x),x,Z[rr],-1)==-infinity;lmrp:=limit(f(x),x,Z[rr],1)==-infinity; TestL:=(abs(LL[r])==abs(LL[r+1])); + +if(PB[r]==1){if(TestS==0){lp:=lp+if(member(Z[rr],F)){ + "limGauche(btex $"+if(lmrm==1){"-\\infty"}else{latex(simplify(limit(f(x),x,Z[rr],-1)))}+"$ etex,"+if(krm==1){"1);"}else{"0);"}+"nonDefBarre;limDroite(btex $"+if(lmrp==1){"-\\infty"}else{latex(simplify(limit(f(x),x,Z[rr],1)))}+"$ etex,"+if(krp==1){"1);"}else{"0);"}} + else{"valPos(btex $"+latex(simplify(f(Z[rr])))+"$ + etex,"+if(evalf(sign(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; +}// testS==0 +else{lp:=lp+if(member(Z[rr],F)){ + "limGauche(btex $"+if(lmrm==1){"-\\infty"}else{latex(simplify(limit(f(x),x,Z[rr],-1)))}+"$ etex,"+if(krm==1){"1);"}else{"0);"}+"nonDefBarre;limDroite(btex $"+if(lmrp==1){"-\\infty"}else{latex(simplify(limit(f(x),x,Z[rr],1)))}+"$ etex,"+if(krp==1){"1);"}else{"0);"}} + else{"valPos(btex $"+latex(simplify(f(Z[rr])))+"$ + etex,"+if(evalf(sign(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 +}//PB[r]==1 +}//for nz2 + + + +lnz:=limit(f(x),x,Z[nz-1],-1)==-infinity; + + +lf:=if(member(Z[nz-1],F)==0){"valPos(btex $"+ + if(lnz==1){"-\\infty"}else{latex(simplify(limit(f(x),x,Z[nz-1],-1)))}+"$ etex,"+ + if(kz==1){"1);"}else{"0);"}} + else{"limGauche(btex $"+ + if(lnz==1){"-\\infty"}else{latex(simplify(limit(f(x),x,Z[nz-1],-1)))}+"$ etex,"+ + if(kz==1){"1);nonDefBarre;"}else{"0);nonDefBarre;"}}; + + + + + + + +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; + +";}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); + + + }:; + + + + +\end{VerbatimOut} + + + + + + + +%% +%% Code giac/Xcas pour les Tableaux de variations de courbes parametrees +%% + + + + + + + +\begin{VerbatimOut}{XcasTVP.cxx} +TVP(L,F,nom,nomv,ff,ftt,trigo,nmr):={ + +nl:=size(L); +fp:=[]; +S:=[]; +f:=[unapply(ff[0],t),unapply(ff[1],t)]; +fp:=[function_diff(f[0]),function_diff(f[1])]; +Z:=[]; +LLL:=[]; + + +all_trig_solutions:=1; +reset_solve_counter(-1,-1); + +for(d:=0;d<=1;d++){ +LLL:=concat(L,F[d]); +Z:=LLL union Z; +SS:=solve(factor(simplify(fp[d](t))),t); +ns:=size(SS); + + +for(k:=0;k=L[0]){ + +S:=concat(S,simplify(subst(SS[k],n_1=m)));m:=m-1; + +} +}else{ +S:=concat(S,SS); +} +} + + + si size(S)>0 alors pour j de 0 jusque size(S)-1 faire + qq:=member(simplify(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,simplify(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; + + + + +nz:=size(Z); +u:=1; + tantque (u2) 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); +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; + + lsi:="",""; + +FFF:=[[],[]]; + +for(d:=0;d<=1;d++){ +FFF[d]:=concat(F[d],[-infinity,+infinity]); + k0:= evalf(limit(f[d](x),x=Z[0],1))> evalf(limit(f[d](x),x=Z[1],-1)); + kz:=evalf(limit(f[d](x),x=Z[nz-1],-1))> evalf(limit(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(simplify(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; + lsp[d]:=lsp[d]+if(member(Z[r],F[d])==0){"valBarre(btex $"+latex(simplify(fp[d](Z[r])))+"$ etex);"}else{"nonDefBarre;"}+ + if(ksp==1){"plus;"}else{"moins;"} + }; } + +lsf[d]:=if(member(Z[nz-1],FFF[d])==0){"valBarre(btex $"+latex(simplify(fp[d](Z[nz-1])))+"$ etex);"}else{if(Z[nz-1]==+infinity){" "}else{"nonDefBarre;"}} + + + + + } + + + + + + + + + + + + lm0:=1,2; li:=1,2; krm:=1,2; krp:=1,2; lmrm:=1,2; lmrp:=1,2; lp:="",""; lnz:=1,2; lf:=1,2; Kz:=1,2;K0:=1,2; + + +for(d:=0;d<=1;d++){ + K0[d]:= evalf(limit(f[d](x),x=Z[0],1))> evalf(limit(f[d](x),x=Z[1],-1)); + Kz[d]:=evalf(limit(f[d](x),x,Z[nz-1],-1))> evalf(limit(f[d](x),x,Z[nz-2],1)); +//{ +//$ +lm0[d]:=limit(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(simplify(limit(f[d](x),x,Z[0],1)))}+"$ etex,"} + else{"nonDefBarre;limDroite(btex $"+if(lm0[d]==1){"-\\infty"}else{latex(simplify(limit(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(limit(f[d](x),x=Z[r-1],1))< evalf(limit(f[d](x),x=Z[r],-1)); + krp[d]:=evalf(limit(f[d](x),x=Z[r],1))> evalf(limit(f[d](x),x,Z[r+1],-1)) ; + lmrm[d]:=limit(f[d](x),x,Z[r],-1)==-infinity;lmrp[d]:=limit(f[d](x),x,Z[r],1)==-infinity; + lp[d]:=lp[d]+if(member(Z[r],F[d])){ + "limGauche(btex + $"+if(lmrm[d]==1){"-\\infty"}else{latex(simplify(limit(f[d](x),x,Z[r],-1)))}+"$ + etex,"+if(krm[d]==1){"1);"}else{"0);"}+"nonDefBarre;limDroite(btex $"+if(lmrp[d]==1){"-\\infty"}else{latex(simplify(limit(f[d](x),x,Z[r],1)))}+"$ etex,"+if(krp[d]==1){"1);"}else{"0);"}} + else{"valPos(btex $"+latex(simplify(f[d](Z[r])))+"$ + etex,"+if(sign(evalf(fp[d](Z[r]-0.001)))==sign(evalf((fp[d](Z[r]+0.001))) )){"0.5);"}else{if(krp[d]==1){"1);"}else{"0); +"}}} + }; } + +lnz[d]:=limit(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(simplify(limit(f[d](x),x=Z[nz-1],-1)))}+"$ etex,"+ + if(Kz[d]==1){"1);"}else{"0);"}} + else{"limGauche(btex $"+ + if(lnz[d]==1){"-\\infty"}else{latex(simplify(limit(f[d](x),x=Z[nz-1],-1)))}+"$ etex,"+ + if(Kz[d]==1){"1);nonDefBarre;"}else{"0);nonDefBarre;"}}; + + + + + + +} + + + + + + + + +MetaLfc:=if(ftt==2){if(nz>2){" + +beginTableau("+nmr+")"+ + l0+lsi[0]+lsp[0]+lsf[0]+lsi[1]+lsp[1]+lsf[1]+" +endTableau; + +";}else{ +"beginTableau("+nmr+")"+ + l0+ +lsi[0]+lsf[0]+lsi[1]+lsf[1]+" +endTableau; + +"; +} +}else{ if(ftt==0){if(nz>2){"beginTableau("+nmr+")"+ + l0+ +li[0]+ +lp[0]+ +lf[0]+ +li[1]+ +lp[1]+ +lf[1] ++" +endTableau; + +";}else{"beginTableau("+nmr+")"+ + l0+ +li[0]+ +lf[0]+ +li[1]+ +lf[1] ++" +endTableau; + +";}}else{ +if(nz>2){"beginTableau("+nmr+")"+ + l0+ +lsi[0]+lsp[0]+lsf[0]+ +li[0]+ +lp[0]+ +lf[0]+ +lsi[1]+lsp[1]+lsf[1]+ +li[1]+ +lp[1]+ +lf[1] ++" +endTableau; + +";}else{"beginTableau("+nmr+")"+ + l0+ +lsi[0]+lsf[0]+ +li[0]+ +lf[0]+ +lsi[1]+lsf[1]+ +li[1]+ +lf[1] ++" +endTableau; + +";} +} +} + +sortie:=fopen("XCasmpfc.mp"); +fprint(sortie,Unquoted,MetaLfc); +fclose(sortie); + +}:; +\end{VerbatimOut} + + + + +%% +%% Code giac/Xcas pour les Tableaux de signes de produits +%% + + + + +\begin{VerbatimOut}{XcasTabSignL.cxx} + + +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 + + + + +if(trigo==t){ +all_trig_solutions:=1; +reset_solve_counter(-1,-1); +SS:=solve(factor(simplify(L[k](x))),x); +ns:=size(SS); +for(j:=0;j=evalf(mini)){ +S:=concat(S,simplify(subst(SS[j],n_1=m)));m:=m-1; +} +} + +}else{ +S:=solve(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]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;"}; + + +MetaLfc:=" beginTableau("+nmr+") +newLigneVariables(btex $ {x}$ etex); + "+l0+li+ lsic+nomf+"(x)}$ etex);"+ + if(mini!=-infinity and product(L[s](mini),s,0,n-1)==0){" + valBarre(btex 0 etex);"}else{" + "}+ lf+ + if(maxi!=+infinity and product(L[s](maxi),s,0,n-1)==0){" + valBarre(btex 0 etex);"}else{" + "}+" +endTableau; +" +; + +}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);"; + + +for(p:=0;p<=n-1;p++){lp:=""; + li:=li+lsic+latex(L[p](x))+"}$ etex);"+ + if(mini!=-infinity and L[p](mini)==0){" + valBarre(btex 0 etex);"}else{" + "}+ + if(L[p](Z[0]-0.01)>0){"plus;"}else{"moins;"}; + + for(r:=0; r<=nz-2;r++){ + lp:=lp+if(simplify(L[p](Z[r]))==0){" + valBarre(btex 0 etex);"}else{"barre; + "}+ + if(L[p]((Z[r]+Z[r+1])*.5)>0){"plus;"}else{"moins;"}}; + + li:=li+lp+ if(simplify(L[p](Z[nz-1]))==0){"valBarre(btex 0 etex);"}else{"barre;"}+ + if(L[p](Z[nz-1]+1.0)>0){"plus;"}else{"moins; + "}+if(maxi!=+infinity and L[p](maxi)==0){" + valBarre(btex 0 etex);"}else{" + "} + }; + + +pour t de 0 jusque nz-2 faire + lr:=lr+if(product(L[s]((Z[t]+Z[t+1])*.5),s,0,n-1)>0){"plus;"}else{"moins;"}+"valBarre(btex 0 etex);" + fpour + +MetaLfc:=" beginTableau("+nmr+") +newLigneVariables(btex $ {x}$ etex); + "+l0+ + li + + lsic+nomf+"(x)}$ etex);"+ + if(mini!=-infinity and product(L[s](mini),s,0,n-1)==0){" + valBarre(btex 0 etex);"}else{" + "}+ + if(product(L[s](evalf(Z[0])-0.01),s,0,n-1)>0){"plus;"}else{"moins;"}+"valBarre(btex 0 etex);"+ + lr+ + if(product(L[s](evalf(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; + + "; +} +sortie:=fopen("XCasmpfc.mp"); +fprint(sortie,Unquoted,MetaLfc); +fclose(sortie); + + }:; + +\end{VerbatimOut} + + + + +%% +%% Code giac/Xcas pour les Tableaux de signes de quotients +%% + + + +\begin{VerbatimOut}{XcasTabSignQ.cxx} +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); +n:=size(L); +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 + + + +if(trigo==t){ +all_trig_solutions:=1; +reset_solve_counter(-1,-1); +SS:=solve(factor(simplify(L[k](x))),x); +ns:=size(SS); +for(j:=0;j=evalf(mini)){ +S:=concat(S,simplify(subst(SS[j],n_1=mm)));mm:=mm-1; +} +} + +}else{ +S:=concat(S,solve(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]=evalf(mini)){ +SF:=concat(SF,simplify(subst(SSF[j],n_1=mm)));mm:=mm-1; +} +} + +}else{ +SF:=concat(SF,solve(Fo[k](x),x)); +} + + si size(SF)>0 alors pour j de 0 jusque size(SF)-1 faire + FF:=FF,simplify(SF[j]); + if(SF[j]>mini and SF[j]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;"}; + + + + +MetaLfc:=" +beginTableau("+nmr+") +newLigneVariables(btex $ {x}$ etex); + "+l0+li+ + lsic+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+ + 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; + +" +; + + + + +}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);"; + + +for(p:=0;p<=n-1;p++){lp:=""; + li:=li+lsic+latex(L[p](x))+"}$ etex);"+ + if(mini!=-infinity and L[p](mini)==0){" valBarre(btex 0 etex);"}else{" "}+ + if(L[p](Z[0]-0.01)>0){"plus;"}else{"moins;"}; + + for(r:=0; r<=nz-2;r++){lp:=lp+if(simplify(L[p](Z[r]))==0){" valBarre(btex 0 etex);"}else{"barre;"}+ + if(L[p]((Z[r]+Z[r+1])*.5)>0){"plus;"}else{"moins;"}}; + + li:=li+lp+ if(simplify(L[p](Z[nz-1]))==0){"valBarre(btex 0 etex);"}else{"barre;"}+ + if(L[p](evalf(Z[nz-1])+1.0)>0){"plus;"}else{"moins; + "}+if(maxi!=+infinity and L[p](maxi)==0){"valBarre(btex 0 etex);"}else{" "} + + }; + + +pour t de 0 jusque nz-2 faire + lr:=lr+if(product(L[s]((Z[t]+Z[t+1])*.5),s,0,n-1)>0){"plus;"}else{"moins;"}+ + if(member(Z[t+1],FF)==0){"valBarre(btex 0 etex);"}else{ "nonDefBarre;"} + fpour + + + + +MetaLfc:=" +beginTableau("+nmr+") +newLigneVariables(btex $ {x}$ etex); + "+l0+ + li + + + lsic+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;"}+ + if(product(L[s](evalf(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](evalf(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; + +" + + +} + + + + +sortie:=fopen("XCasmpfc.mp"); +fprint(sortie,Unquoted,MetaLfc); +fclose(sortie); + + + + + + }:; + +\end{VerbatimOut} + + + + +%% Code giac/Xcas pour les Tableaux de signes du produit +%% de 2 facteurs affines +%% + + + + +\begin{VerbatimOut}{XcasTabSigna.cxx} +TSa(a,b,c,d,nmr):={ +zA:=solve(a*x+b=0,x)[0]; +zB:=solve(c*x+d=0,x)[0]; +zmin:=min(zA,zB); +zmax:=max(zA,zB); + Meta:= " + beginTableau("+nmr+") + newLigneVariables(btex $ {x}$ etex); + val(btex $-\\infty$ etex);val(btex $"+latex(zmin)+"$ etex); +val(btex $"+latex(zmax)+"$etex); +val(btex $+\\infty$ etex); + "+lsic+if(a==1){"x+"}else{if(a==-1){"-x+"}else{a+"x+"}}+b+"}$ etex);" + + if(a>0){"moins;"}else{"plus;"}+ + if(zmin==zA){"valBarre(btex 0 etex);"}else{"barre;"}+ + if(zmin==zA){si a>0 alors "plus;"; sinon "moins;";fsi} + else{si a>0 alors "moins;"; sinon "plus;"; fsi}+ + if(zmin==zA){"barre;"}else{"valBarre(btex 0 etex);"}+ + if(a>0){"plus;"}else{"moins;"} + +lsic+if(c==1){"x+"}else{if(c==-1){"-x+"}else{c+"x+"}}+d+"}$ etex);" + + if(c>0){"moins"}else{"plus"}+";"+ + if(zmin==zB){"valBarre(btex 0 etex);"}else{"barre;"}+ + if(zmin==zB){si c>0 alors "plus;"; sinon "moins;";fsi} + else{si c>0 alors "moins;"; sinon "plus;"; fsi}+ + if(zmin==zB){"barre;"}else{"valBarre(btex 0 etex);"}+ + if(c>0){"plus;"}else{"moins;"} + + +lsic+"{("+if(a==1){"x+"}else{if(a==-1){"-x+"}else{a+"x+"}}+b+")("+if(c==1){"x+"}else{if(c==-1){"-x+"}else{c+"x+"}}+d+")}}$ etex);" + + si a*c>0 alors plus; sinon moins;fsi+";"+ + "valBarre(btex 0 etex);"+ + si a*c>0 alors moins; sinon plus;fsi+";"+ + "valBarre(btex 0 etex);"+ + si a*c>0 alors plus; sinon moins;fsi+";"+" +endTableau; +" +; + + + +sortie:=fopen("XCasmpfc.mp"); +fprint(sortie,Unquoted,Meta); +fclose(sortie); + + + }:; +\end{VerbatimOut} + + + + + + +%%$ +%% Code giac/Xcas pour les Tableaux de Signes d'expression ne contenant +%% qu'un seul terme + + + + +\begin{VerbatimOut}{XcasTSc.cxx} + +TSc(g,D,F,trigo,nmr):={ +f:=unapply(g,x); +mini:=D[0]; maxi:=D[1];lm:=" "; +Z:=mini,maxi; +S:=[]; + + + +if(trigo==t){ +all_trig_solutions:=1; +reset_solve_counter(-1,-1); +SS:=solve(factor(simplify(f(x))),x); +ns:=size(SS); +for(j:=0;j=evalf(mini)){ +S:=concat(S,simplify(subst(SS[j],n_1=m)));m:=m-1; +} +} + +}else{ +S:=solve(f(x),x); +} + + + + + +if(size(S)==0 and size(F)==0){ +l0:="val(btex $"+latex(D[0])+"$ etex);val(btex $"+latex(D[1])+"$ etex);"; +li:=if(member(mini,F)!=0){"nonDefBarre;"}else{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.3145274774464545777744)>0){"plus;"}else{"moins;"}}; +lf:=if(member(maxi,F)!=0){"nonDefBarre;"}else{if(maxi!=+infinity and f(maxi)==0){" + valBarre(btex 0 etex);"}else{" + "}}; +}else{ +if(size(S!=0)){pour j de 0 jusque size(S)-1 faire + if(S[j]>mini and S[j]0){"plus;"}else{"moins;"}; +lf:=if(maxi!=+infinity and f(maxi)==0){" + valBarre(btex 0 etex);"}else{if(member(maxi,F)==0){" + "}else{"nonDefBarre;"} + }; + +}else{ +l0:="val(btex $"+latex(Z[0])+"$ etex);";li:=" "; +pour m de 1 jusque nz-1 faire l0:=l0+"val(btex $"+latex(Z[m])+"$ etex); +"; +fpour; + + +li:= if(mini!=-infinity and f(mini)==0){" + valBarre(btex 0 etex);"}else{if(member(mini,F)==0){" + "}else{"nonDefBarre;"} + } + +lm:=if(nz>2){for(r:=0; r0){"plus;"}else{"moins;"} +}else{if(f((Z[r]+Z[r+1])*.5)>0){"plus;"}else{"moins;"}} ++ + if(member(Z[r+1],F)==0){"valBarre(btex 0 etex);"}else{"nonDefBarre;"} + }}else{" "}; + +lf:=if(f(Z[nz-2]+0.1)>0){"plus;"}else{"moins;"}+if(maxi!=+infinity and f(maxi)==0){"valBarre(btex 0 etex);"}else{if(member(maxi,F)==0){" + "}else{"nonDefBarre;"} + }; +} +}; + + + + +MetaLfc:=" + +beginTableau("+nmr+") +newLigneVariables(btex $\\displaystyle {x}$ etex); + "+l0+lsic+latex(f(x))+"}$ etex);"+ + li+lm+lf + +" +endTableau; + +" +; + + + + +sortie:=fopen("XCasmpfc.mp"); +fprint(sortie,Unquoted,MetaLfc); +fclose(sortie); + }:; + +\end{VerbatimOut} + + + + + + + +%%$ + + + + + + +%%%% +%%% +%%% Pour des tableaux de variations simples sans fonctions +%%% +%%% + + + +\begin{VerbatimOut}{XcasTVS.cxx} +TVS(La,Lo,F,nomf,nomv,nmr):={ + +na:=size(La); +f:=F; +if(member(La[0],F)){f:=f[1..size(f)-1]}; +if(member(La[na-1],F)){f:=f[0..size(f)-2]}; +Z:=sort(concat(La,f)); +Zo:=sort([op(set[op(Z)])]); +nz:=size(Z); +nzo:=size(Zo); + + +k0:= evalf(Lo[0])> evalf(Lo[1]); +kz:=evalf(Lo[nz-1])> evalf(Lo[nz-2]); + + +l0:=" newLigneVariables(btex $"+nomv+"$ etex);";lp:=" "; lf:=" "; + for(m:=0;m<=nzo-1;m++){l0:=l0+"val(btex $"+latex(Zo[m])+"$ etex);"} + +li:=lvic+nomf+"}$ etex);"+ + if(member(Z[0],F)==0){"valPos(btex $"+latex(Lo[0])+"$ etex,"} + else{"nonDefBarre;limDroite(btex $"+latex(Lo[0])+"$ etex,"}+ + if(k0==1){"1"}else{"0"}+ + ");"; + + if(nz>2){ for(r:=1; r<=nz-2;r++){ + krm:=evalf(Lo[r-1])< evalf(Lo[r]); + krp:=evalf(Lo[r])> evalf(Lo[r+1]) ; + + lp:=lp+if(Z[r]==Z[r+1]){ + "limGauche(btex$"+latex(Lo[r])+"$etex,"+ + if(krm==1){"1);"} + else{"0);"} + }// fin if zr=zr+1 + else{ + if(Z[r]==Z[r-1]){ + "nonDefBarre;limDroite(btex$"+latex(Lo[r])+"$etex,"+ + if(krp==1){"1);"} + else{"0);"} + }//fin if zr=zr-1 + else{ + "valPos(btex $"+latex(Lo[r])+"$etex,"+ + if(krp==1){"1);"}else{"0);"} +}//fin else zr=zr-1 +}//fin else zr=zr+1 +}//fin for +}//fin de if nz>2 + + + +lf:=if(member(Z[nz-1],F)==0){"valPos(btex $"+latex(Lo[nz-1])+"$ etex,"+ + if(kz==1){"1);"}else{"0);"}} + else{"limGauche(btex $"+latex(Lo[nz-1])+"$ etex,"+ + if(kz==1){"1);nonDefBarre;"}else{"0);nonDefBarre;"}}; + + +MetaLfc:= + + if(nz>2){"beginTableau("+nmr+")"+ + l0+ +li+ +lp+ +lf ++" +endTableau; + +";}else{"beginTableau("+nmr+")"+ + l0+ +li+ +lf ++" +endTableau; + +";} + +//return(MetaLfc); + +sortie:=fopen("XCasmpfc.mp"); +fprint(sortie,Unquoted,MetaLfc); +fclose(sortie); + + +}:; + +\end{VerbatimOut} + +%%$ + + + + + + + + + + + + + + + + + + + + + +%% +%% traitement des fichiers produits par giac/xcas +%% +%% + +% pour l'chelle des tableaux taper \ech{facteur de rduction} + +\newcommand\echelle{1} +\newcommand\ech[1]{\renewcommand\echelle{#1}} + + +\newcommand\couleurtab{black} +\newcommand\coultab[1]{\renewcommand\couleurtab{#1}} + + +\newcommand{\dresse}[2]{% +\ifthenelse{\boolean{xcas}}{% Avec l'option "XCas present" + \executGiacmp{XCas#2.giac}% reconstituer le tableau + % exporter le source mp + % puis lancer metapost pour creer + % l'image du tableau + \immediate\write18{\cat XCasmpfc.mp >> \nomtravail_Tab.mp} + \immediate\write18{\cat enteteMP.cfg >> \nomtravail_Tab#2.mp} + \immediate\write18{\echod def beginTableau(expr c) =\echof >> \nomtravail_Tab#2.mp} + \immediate\write18{\echod begingroup\echof >> \nomtravail_Tab#2.mp} + \immediate\write18{\echod charcode:=c;\echof >> \nomtravail_Tab#2.mp} + \immediate\write18{\echod clearxy; clearit; clearpen;\echof >> \nomtravail_Tab#2.mp} + \immediate\write18{\echod pickup defaultpen;\echof >> \nomtravail_Tab#2.mp} + \immediate\write18{\echod drawoptions(withcolor(#1));\echof >> \nomtravail_Tab#2.mp} + \immediate\write18{\echod initTableau;\echof >> \nomtravail_Tab#2.mp} + \immediate\write18{\echod enddef;\echof >> \nomtravail_Tab#2.mp} + \immediate\write18{\cat XCasmpfc.mp >> \nomtravail_Tab#2.mp} + \immediate\write18{\cat queue.mp >> \nomtravail_Tab#2.mp} + \immediate\write18{mpost -jobname=\nomtravail_Tab \nomtravail_Tab#2.mp} + \immediate\write18{\rem \nomtravail_Tab#2.mp} + }% + {% sinon, si le tableau est absent, alerte. + \IfFileExists{\nomtravail_Tab.\theTVn}{}{% + \PackageError{tablor}{Tableau absent non + reconstituable.}{Pour compiler il faut, soit les fichiers de + tableaux, soit le fichier \nomtravail_Tab.mp, soit disposer de + XCas.}}} + +\begin{center} + \includegraphics[scale=\echelle]{\nomtravail_Tab.\theTVn} +\end{center} +\stepcounter{TVn} +} + + +%% +%% traitement des fichiers produits par giac/xcas avec possibilite +%% de modifier le fichier metapost (environnement etoile)) +%% + + + +\newcommand{\dressetoile}[2]{% +\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 >> \nomtravail_Tab.mp}} +% Si non, lancement des operations de fabrication +{\executGiacmp{XCas#2.giac}% +\immediate\write18{\editeur XCasmpfc.mp } + + % Modification avec l'editeur choisi +\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 >> \nomtravail_Tab#2.mp} + \immediate\write18{\echod def beginTableau(expr c) =\echof >> \nomtravail_Tab#2.mp} + \immediate\write18{\echod begingroup\echof >> \nomtravail_Tab#2.mp} + \immediate\write18{\echod charcode:=c;\echof >> \nomtravail_Tab#2.mp} + \immediate\write18{\echod clearxy; clearit; clearpen;\echof >> \nomtravail_Tab#2.mp} + \immediate\write18{\echod pickup defaultpen;\echof >> \nomtravail_Tab#2.mp} + \immediate\write18{\echod drawoptions(withcolor(#1));\echof >> \nomtravail_Tab#2.mp} + \immediate\write18{\echod initTableau;\echof >> \nomtravail_Tab#2.mp} + \immediate\write18{\echod enddef;\echof >> \nomtravail_Tab#2.mp} +\immediate\write18{\cat XCasmpfc.mp >> \nomtravail_Tab#2.mp}} % Inclusion du + % source dans le + % fichier + % Tableaux +\immediate\write18{\cat queue.mp >> \nomtravail_Tab#2.mp} +\immediate\write18{mpost -jobname=\nomtravail_Tab \nomtravail_Tab#2.mp}% Reconstitution des tableaux + % et creation du dernier. L'option + % pallie l'absence de end en fin de + % fichier +\immediate\write18{\rem \nomtravail_Tab#2.mp} + +\begin{center} + \includegraphics[scale=\echelle]{\nomtravail_Tab.\theTVn} +\end{center} +\ech{1} +\setcounter{TVn}{\theTVnbis} % Restauration du compteur TVn +} + + + + + + + +%% +%% +%%% +%%% +%%% les "giac" qui permettent d'executer la commande rentree dans le fichier tex +%%% suivis des environnements qui permettront la saisie du code giac/xcas +%%% Les versions etoilees permettent de modifier le code metapost produit initialement +%%% + + + + +\begin{VerbatimOut}{XCasa.giac} +maple_mode(0); +approx_mode:=0; +read("config.cxx"); +read("XcasTabSigna.cxx"); +read("XCasa.user"); +\end{VerbatimOut} + +\newenvironment{TSa} +{\VerbatimEnvironment\begin{VerbatimOut}[commandchars=\\??]{XCasa.user}} +{\end{VerbatimOut} + \dresse{\couleurtab}{a} +} + + + + + + + + + +\begin{VerbatimOut}{XCasQ.giac} +maple_mode(0); +approx_mode:=0; +read("config.cxx"); +read("XcasTabSignQ.cxx"); +read("XCasQ.user"); +\end{VerbatimOut} + +\newenvironment{TSq}% +{\VerbatimEnvironment\begin{VerbatimOut}[commandchars=\\??]{XCasQ.user}} +{\end{VerbatimOut}\dresse{\couleurtab}{Q}} + + + +\newenvironment{TSq*}[1]% +{\setcounter{TVnbis}{\theTVn} +\setcounter{TVn}{#1} +\VerbatimEnvironment\begin{VerbatimOut}[commandchars=\\??]{XCasQ.user}} +{\end{VerbatimOut}\dressetoile{\couleurtab}{Q}} + + +\begin{VerbatimOut}{XCasL.giac} +maple_mode(0); +approx_mode:=0; +read("config.cxx"); +read("XcasTabSignL.cxx"); +read("XCasL.user"); +\end{VerbatimOut} + +\newenvironment{TS}% +{\VerbatimEnvironment\begin{VerbatimOut}[commandchars=\\??]{XCasL.user}} +{\end{VerbatimOut}\dresse{\couleurtab}{L}} + + +\newenvironment{TS*}[1] +{\setcounter{TVnbis}{\theTVn} +\setcounter{TVn}{#1} +\VerbatimEnvironment\begin{VerbatimOut}[commandchars=\\??]{XCasL.user}} +{\end{VerbatimOut}\dressetoile{\couleurtab}{L}} + + +\begin{VerbatimOut}{XCasTSc.giac} +maple_mode(0); +approx_mode:=0; +read("config.cxx"); +read("XcasTSc.cxx"); +read("XCasTSc.user"); +\end{VerbatimOut} + + + + +\newenvironment{TSc*}[1]% +{\setcounter{TVnbis}{\theTVn} +\setcounter{TVn}{#1} +\VerbatimEnvironment\begin{VerbatimOut}[commandchars=\\??]{XCasTSc.user}} +{\end{VerbatimOut}\dressetoile{\couleurtab}{TSc}} + + +\newenvironment{TSc}% +{\VerbatimEnvironment\begin{VerbatimOut}[commandchars=\\??]{XCasTSc.user}} +{\end{VerbatimOut}\dresse{\couleurtab}{TSc}} + + +\begin{VerbatimOut}{XCasTV.giac} +maple_mode(0); +approx_mode:=0; +read("config.cxx"); +read("XcasTV.cxx"); +read("XCasTV.user"); +\end{VerbatimOut} + + + +\newenvironment{TV}{% +\VerbatimEnvironment +\begin{VerbatimOut}[commandchars=\\??]{XCasTV.user}}% +{\end{VerbatimOut} +\dresse{\couleurtab}{TV}} + +\newenvironment{TV*}[1]{% +\setcounter{TVnbis}{\theTVn} +\setcounter{TVn}{#1} +\VerbatimEnvironment\begin{VerbatimOut}[commandchars=\\??]{XCasTV.user}}% +{\end{VerbatimOut}\dressetoile{\couleurtab}{TV}} + + + + + + + +\begin{VerbatimOut}{XCasTVP.giac} +maple_mode(0); +approx_mode:=0; +read("config.cxx"); +read("XcasTVP.cxx"); +read("XCasTVP.user"); +\end{VerbatimOut} + +\newenvironment{TVP}% +{\VerbatimEnvironment\begin{VerbatimOut}[commandchars=\\??]{XCasTVP.user}}% +{\end{VerbatimOut} +\dresse{\couleurtab}{TVP}} + +\newenvironment{TVP*}[1]{% +\setcounter{TVnbis}{\theTVn} +\setcounter{TVn}{#1} +\VerbatimEnvironment\begin{VerbatimOut}[commandchars=\\??]{XCasTVP.user}}% +{\end{VerbatimOut}\dressetoile{\couleurtab}{TVP}} + + + + + + + + + + +\begin{VerbatimOut}{XCasTVZ.giac} +maple_mode(0); +approx_mode:=0; +read("config.cxx"); +read("XcasTVZ.cxx"); +read("XCasTVZ.user"); +\end{VerbatimOut} + +\newenvironment{TVZ}% +{\VerbatimEnvironment\begin{VerbatimOut}[commandchars=\\??]{XCasTVZ.user}}% +{\end{VerbatimOut} +\dresse{\couleurtab}{TVZ}} + +\newenvironment{TVZ*}[1]{% +\setcounter{TVnbis}{\theTVn} +\setcounter{TVn}{#1} +\VerbatimEnvironment\begin{VerbatimOut}[commandchars=\\??]{XCasTVZ.user}}% +{\end{VerbatimOut}\dressetoile{\couleurtab}{TVZ}} + + + + + + + + +\begin{VerbatimOut}{XCasTVapp.giac} +maple_mode(0); +approx_mode:=0; +read("config.cxx"); +read("XcasTVapp.cxx"); +read("XCasTVapp.user"); +\end{VerbatimOut} + +\newenvironment{TVapp}% +{\VerbatimEnvironment\begin{VerbatimOut}[commandchars=\\??]{XCasTVapp.user}}% +{\end{VerbatimOut} +\dresse{\couleurtab}{TVapp}} + +\newenvironment{TVapp*}[1]{% +\setcounter{TVnbis}{\theTVn} +\setcounter{TVn}{#1} +\VerbatimEnvironment\begin{VerbatimOut}[commandchars=\\??]{XCasTVapp.user}}% +{\end{VerbatimOut}\dressetoile{\couleurtab}{TVapp}} + + + + + + + + + + + +\begin{VerbatimOut}{XCasTVI.giac} +maple_mode(0); +approx_mode:=0; +read("config.cxx"); +read("XcasTVI.cxx"); +read("XCasTVI.user"); +\end{VerbatimOut} + +\newenvironment{TVI}% +{\VerbatimEnvironment\begin{VerbatimOut}[commandchars=\\??]{XCasTVI.user}}% +{\end{VerbatimOut}\dresse{\couleurtab}{TVI}} + + +\newenvironment{TVI*}[1]% +{\setcounter{TVnbis}{\theTVn} +\setcounter{TVn}{#1} +\VerbatimEnvironment\begin{VerbatimOut}[commandchars=\\??]{XCasTVI.user}}% +{\end{VerbatimOut}\dressetoile{\couleurtab}{TVI}} + + + + + +\begin{VerbatimOut}{XCasTVIex.giac} +maple_mode(0); +approx_mode:=0; +read("config.cxx"); +read("XcasTVIex.cxx"); +read("XCasTVIex.user"); +\end{VerbatimOut} + +\newenvironment{TVIex}% +{\VerbatimEnvironment\begin{VerbatimOut}[commandchars=\\??]{XCasTVIex.user}}% +{\end{VerbatimOut}\dresse{\couleurtab}{TVIex}} + + +\newenvironment{TVIex*}[1]% +{\setcounter{TVnbis}{\theTVn} +\setcounter{TVn}{#1} +\VerbatimEnvironment\begin{VerbatimOut}[commandchars=\\??]{XCasTVIex.user}}% +{\end{VerbatimOut}\dressetoile{\couleurtab}{TVIex}} + + + + + + + + + +\begin{VerbatimOut}{XCasTVIapp.giac} +maple_mode(0); +approx_mode:=0; +read("config.cxx"); +read("XcasTVIapp.cxx"); +read("XCasTVIapp.user"); +\end{VerbatimOut} + +\newenvironment{TVIapp}% +{\VerbatimEnvironment\begin{VerbatimOut}[commandchars=\\??]{XCasTVIapp.user}}% +{\end{VerbatimOut}\dresse{\couleurtab}{TVIapp}} + + +\newenvironment{TVIapp*}[1]% +{\setcounter{TVnbis}{\theTVn} +\setcounter{TVn}{#1} +\VerbatimEnvironment\begin{VerbatimOut}[commandchars=\\??]{XCasTVIapp.user}}% +{\end{VerbatimOut}\dressetoile{\couleurtab}{TVIapp}} + + + + + +\begin{VerbatimOut}{XCasTVPC.giac} +maple_mode(0); +approx_mode:=0; +read("config.cxx"); +read("XcasTVPC.cxx"); +read("XCasTVPC.user"); +\end{VerbatimOut} + +\newenvironment{TVPC}% +{\VerbatimEnvironment\begin{VerbatimOut}[commandchars=\\??]{XCasTVPC.user}}% +{\end{VerbatimOut} +\dresse{\couleurtab}{TVPC}} + +\newenvironment{TVPC*}[1]{% +\setcounter{TVnbis}{\theTVn} +\setcounter{TVn}{#1} +\VerbatimEnvironment\begin{VerbatimOut}[commandchars=\\??]{XCasTVPC.user}}% +{\end{VerbatimOut}\dressetoile{\couleurtab}{TVPC}} + + + + + + + + + + + + +\begin{VerbatimOut}{XCasTVS.giac} +maple_mode(0); +approx_mode:=0; +read("config.cxx"); +read("XcasTVS.cxx"); +read("XCasTVS.user"); +\end{VerbatimOut} + +\newenvironment{TVS}% +{\VerbatimEnvironment\begin{VerbatimOut}[commandchars=\\??]{XCasTVS.user}}% +{\end{VerbatimOut} +\dresse{\couleurtab}{TVS}} + +\newenvironment{TVS*}[1]{% +\setcounter{TVnbis}{\theTVn} +\setcounter{TVn}{#1} +\VerbatimEnvironment\begin{VerbatimOut}[commandchars=\\??]{XCasTVS.user}}% +{\end{VerbatimOut}\dressetoile{\couleurtab}{TVS}} + + + + + + + + + + +%% pour nettoyer les fichiers auxiliaires + +\AtEndDocument{\immediate\write18{\cat queue.mp >> \nomtravail_Tab.mp} + } + + + + +%% +%% Zi end -> enjoy :) diff --git a/macros/latex/contrib/tablor/tablor.tex b/macros/latex/contrib/tablor/tablor.tex new file mode 100644 index 0000000000..70afb09205 --- /dev/null +++ b/macros/latex/contrib/tablor/tablor.tex @@ -0,0 +1,2404 @@ +% \copyleft Connan le Barbare (aka Guillaume Connan) \copyright +% This work may be distributed and/or mofified under the conditions +% or the LaTeX Project Public Licence, either v1.3 or (at your option) +% any later version. The latest version is in +% http://www.latex-project.org/lppl/ +% This work consists of the files tablor.sty, tablor-xetex.sty, tablor.cfg, tablor.tex, +% tablor.pdf and tablor.html + + + + +\documentclass[11pt]{article} +\usepackage{etex} +\usepackage[height=250mm,width=183mm]{geometry} +\usepackage[latin1]{inputenc} +\usepackage[T1]{fontenc} +\usepackage[french]{babel} +\usepackage[upright]{kpfonts} +\usepackage{bold-extra} +\usepackage[scaled=0.85]{luximono} +\usepackage[xcas]{tablor} +\usepackage{listings,keystroke} +\usepackage{graphicx,bclogo,amssymb,amsbsy,amsfonts,amstext,amscd,amsopn,amsxtra} +% bclogo est tlchargeable ici : http://melusine.eu.org/syracuse/wiki/doku.php/mc/bclogo + + +\usepackage{tocloft} +%ajoute de l'espace entre le +%numero de chapitre (chap) et le titre +%dans la table des matieres + +\addtolength{\cftsecnumwidth}{2em} +\addtolength{\cftsubsecnumwidth}{1em} + +% pour une TdM hyperactive... +\usepackage[dvips,colorlinks=true,linkcolor=blue]{hyperref} + +% quelques gris + +\usepackage{color} +\definecolor{0.9white}{rgb}{.9,.9,.9} +\definecolor{0.8white}{rgb}{.8,.8,.8} +\definecolor{0.2white}{rgb}{.2,.2,.2} +\definecolor{0.4white}{rgb}{.4,.4,.4} +\definecolor{0.6white}{rgb}{.6,.6,.6} +\definecolor{0.1white}{rgb}{.1,.1,.1} +\definecolor{bleu}{rgb}{0.4,0.2,1} \newrgbcolor{bleu}{0.4 0.2 1} +\definecolor{orange}{rgb}{0.589999,0.269997,0.080004} +\definecolor{rouge}{rgb}{1,0,0} \newrgbcolor{rouge}{1 0 0} +% style des listings + + +\newcommand\lat{\lstset{numbers=none,language=[LaTeX]{TeX},xleftmargin=10pt,% +keywordstyle =\color{bleu}\bfseries,basicstyle=\ttfamily\color{0.1white},commentstyle=\normalfont\scriptsize\slshape,breaklines=true,backgroundcolor=\color{green!20},frame=trBL,framerule=1pt,framesep=4pt,rulesep=1pt,showstringspaces=false,stringstyle=\slshape,captionpos=b} +} + + +\newcommand\xcas{\lstset{numbers=none,language=XCAS,xleftmargin=10pt,% +keywordstyle =\color{rouge!70!black}\bfseries,basicstyle=\ttfamily\color{0.1white},commentstyle=\normalfont\scriptsize\slshape,breaklines=true,backgroundcolor=\color{orange!20},frame=trBL,framerule=1pt,framesep=4pt,rulesep=1pt,showstringspaces=false,stringstyle=\slshape,captionpos=b} +} + + + +% petits environnements bclogo + + + +\newenvironment{DANGER}[1]{% +\begin{bclogo}[logo=\bctakecare,arrondi=0.1,couleur=0.9white]{#1}} +{\end{bclogo}} + +\newenvironment{Idee}[1]{% +\begin{bclogo}[logo=\bclampe,arrondi=0.1,couleur=0.9white]{#1}} +{\end{bclogo}} + + + +% style des sections +\usepackage{sectsty} + + +\sectionfont{\LARGE \color{0.2white}} +\subsectionfont{\color{0.4white}} +\renewcommand\thesection{\Roman{section} -} +\renewcommand\thesubsection{\alph{subsection}. } +\subsubsectionfont{\color{0.6white}} +\renewcommand\thesubsubsection{\roman{subsection}. } + +\graphicspath{{./figures/}} + + + +% titre + +\title{\texttt{tablor.sty} \\La machine crer des tableaux de signes et de variations } + +\author{Guillaume \textsc{Connan} \\ \href{http://tehessin.tuxfamily.org/}{http://tehessin.tuxfamily.org/}\\ +avec l'efficace participation de Jean-Michel \textsc{Boucart}\\ +Forum d'aide ~:~\href{http://gconnan.free.fr/punbb/upload/index.php}{http://gconnan.free.fr/punbb/upload/index.php}} + +\date{9 mai 2010 - Version 4.07} + + + + + + + + +%% +% +% Dbut du document +% +%% + + + + +\begin{document} + +\setlength{\parindent}{0mm} + +\maketitle + + +\vspace{1cm} + +\initablor + +\section{a sert quoi~?} + +Il s'agit d'obtenir rapidement un tableau de signe ou un tableau de variation en entrant un +minimum de commandes. + +\section{Nouveauts} + +\subsection{Changements depuis la version 3.00} + + +\begin{figure}[!h] + \begin{DANGER}{Attention~!} + partir de la version 4.03 de \texttt{tablor}, il est + ncessaire d'avoir la nouvelle version de + tableauVariation.mp (la 2.1 datant de dcembre 2008) mais + pour l'instant elle n'est pas prsente sur CTAN~! + Rcuprez plutt le fichier l'adresse + \href{http://download.tuxfamily.org/tehessinmath/les\_sources/tableauVariation.mp}{http://download.tuxfamily.org/tehessinmath/les\_sources/tableauVariation.mp}. + +Cela ne posera de problmes que si vous utilisez l'environnement TVZ. + \end{DANGER} + \end{figure} + + + +La version 4.01 n'est malheureusement plus compatible avec les versions +antrieures car une option supplmentaire a t ajoute pour traiter les +fonctions trigonomtriques. + +Une possibilit a de plus t ajoute pour rduire la taille des +tableaux. + +Les tableaux de signes courts (TSc) ont un argument de plus pour traiter +les valeurs interdites (version 4.01). + + +Une extension pour une compilation via Xe\TeX{} a t +cr~:~\verb+tablor-xetex.sty+ (version 4.01) ne fonctionnant que sous +unix. + + + +Un environnement TVPC a t cr pour traiter les fonctions +prolongeables par continuit (version 4.02). + + +Une possibilit a t ajoute pour donner un nom une fonction +ncessitant l'emploi d'une macro \LaTeX{} (version 4.02b). + + +Les frontires des zones interdites sont assorties de doubles +barres si ncessaire. (version 4.03) + + +Un nouvel environnement TVIex est cr pour avoir les racines des +valeurs intermdiaires sous forme exacte quand c'est possible.(version 4.04) + +Un bug dans tous les TVI est corrig.(Version 4.04). + +Un bug d une mise jour de XCAS (version 4.04-b compatible avec les +prcdentes). + +Des bugs dans TVapp et TVIapp corrigs (version 4.04-c... puis 4.04-d). + +Bug dans TVc (version 4.04-h) + +Nouvel environnement TVS pour des tableaux de variations de fonctions +dont on ne connait qu'une liste d'images (version 4.05). + + +Petites modifs dans le code pour s'adapter aux nouvelles versions de +MetaPOST et pour contrer certains bugs dus certaines configurations +personnelles de xcas (4.05-b). + + +Cration de l'option windows : on peu maintenant dclarer l'utilisation +de l'OS windows en option sans aller modifier le fichier tablor.cfg +(version 4.06). + + +Nouveau \verb+tablor.cfg+ : on peut rgler l'epsilon de XCAS qui fixe le +seuil du zro des flottants. Il est rgl $10^{-100}$ par +dfaut. Il faut une version rcente de XCAS, postrieure au 20 novembre +2009. (version tablor : 4.06-c) + + +Tableaux en couleurs ! Merci \texttt{fp} du forum +\href{http://forum.mathematex.net/latex-f6/tableau-de-variations-redige-en-bleu-t10826.html}{\texttt{mathematex}} +(version tablor : 4.07) + +\xcas +\begin{lstlisting}[caption={}] +//reglage de epsilon : seuil du zero de giac +epsilon:=1e-100; +\end{lstlisting} + +\subsection{Professor.sty} + + +\texttt{tablor.sty} a fait des petits... Grce une efficace +collaboration avec Denis \textsc{LE FUR}, vous disposez prsent de +toute une panoplie d'outils similaires pour tracer des courbes, des +histogrammes, des arbres de probabilits, des graphes probabilistes, des +lissages par moyennes mobiles et j'en passe et des meilleures... Allez +dcouvrir ces trsors sur +\href{http://mathsp.tuxfamily.org/spip.php?rubrique46}{http://mathsp.tuxfamily.org/spip.php?rubrique46}. + + + +\subsection{Plugin TeXmacs} + + +Emmanul Corcelle a crit un plugin pour que les utilisateurs de TeXmacs +puissent eux aussi profiter de \texttt{tablor} et +\texttt{professor}. Pour cela visitez le site \href{http://corcelle.wordpress.com/}{http://corcelle.wordpress.com/} + + + + +\section{Comment a marche~?} + +\subsection{Principe gnral} + +On entre une instruction qu'on envoie via \LaTeX{} \texttt{XCAS} qui effectue un certain nombre de +calculs (rsolution d'quations, calcul de limites). \texttt{XCAS} renvoie un rsultat sous la forme +d'un script \texttt{MetaPOST} qui est compil. Un tableau est cr et ensuite insr dans le document +\texttt{tex}. + + +\subsection{Rentrons dans les dtails} + +En utilisant un environnement \texttt{tablor}, de nombreux fichiers sont crs dans le rpertoire +courant puis effacs par la commande \texttt{nettoyer} si vous le souhaitez~: + +\begin{itemize} +\item des fichiers d'extension \texttt{.cxx}~:~il s'agit du fichier le plus important. C'est le + programme \texttt{XCAS} qui ~fabrique~ le tableau. Vous pouvez l'utilisez tel quel dans une + session \texttt{XCAS} ou \texttt{giac}. +\item des fichiers d'extension \texttt{.giac} qui regroupent des instructions lues et excutes par + \texttt{giac}. +Il est trs court~: + + +\xcas + +\begin{lstlisting} +maple_mode(0); // au cas o certains travailleraient en mode maple, mupad ou ti +read("config.cxx"); // pour configurer la 1re colonne (signe de ou sign of etc.) +read("XcasTV.cxx"); // giac charge le programme +read("XCasTV.user"); // giac lit les paramtres rentrs dans le source +tex et fabrique la vole le source MetaPOST. +\end{lstlisting} + +\item des fichiers d'extension \texttt{.user} qui sont crs par \LaTeX{} grce l'environnement + \texttt{VerbatimOut} de l'extension \texttt{fancyvrb} : il s'agit en fait de la commande qui se + trouve par exemple entre \verb+\begin{TV}+ et \verb+\end{TV}+. + + + +\end{itemize} + +\subsection{Code XCAS} + +Toutes les procdures suivent le mme principe~: + +\begin{itemize} +\item la plus grande partie s'occupe de crer les lignes du tableaux + l'aide de nombreux tests et boucles; +\item ensuite, on regroupe ces lignes dans une variable + \texttt{MetaLfc}; + +\item on exporte le tableau l'aide des trois dernires lignes~: + +\xcas + +\begin{lstlisting} +sortie:=fopen("XCasmpfc.mp"); // on cre un fichier XCasmpfc.mp +fprint(sortie,Unquoted,MetaLfc); // on y met MetaLfc +fclose(sortie); // on ferme XCasmpfc.mp +\end{lstlisting} + + + + +\lat +\end{itemize} + + + + +\begin{figure}[!h] + \begin{Idee}{Autres collaborations XCAS/\LaTeX{}} +On peut suivre ce mme principe pour crer d'autres associations de +vos outils prfrs. Voir par exemple~: + +\href{http://gconnan.free.fr/?page=53}{http://gconnan.free.fr/?page=53} + +et + +\href{http://melusine.eu.org/syracuse/giac/}{http://melusine.eu.org/syracuse/giac/} + \end{Idee} + \end{figure} + + + + + +\section{De quoi a-t-on besoin~?} + +\begin{figure}[!h] + \begin{Idee}{Conseils en lignes} + N'hsitez pas explorer la page suivante : + +\href{http://mathsp.tuxfamily.org/spip.php?article186}{http://mathsp.tuxfamily.org/spip.php?article186} + +surtout si vous tes sur XP :-) + +De nombreux problmes ont t rgls sur le forum~: \href{http://gconnan.free.fr/punbb/upload/index.php}{http://gconnan.free.fr/punbb/upload/index.php} + \end{Idee} + \end{figure} + + + \begin{figure}[!h] + \begin{Idee}{MikTeX et TeXLive} + \texttt{tablor} est prsent sur MikTeX et + TeXLive. \texttt{tableauVariation.mp} est sur + MikTeX mais la version n'est pas jour ( la date du 7 fvrier 2009). + \end{Idee} + \end{figure} + + +\begin{itemize} + +\item Il faut avoir install \texttt{XCAS}, logiciel multi-plateforme de calcul et de programmation~: + +\href{http://www-fourier.ujf-grenoble.fr/\%7Eparisse/giac\_fr.html}{http://www-fourier.ujf-grenoble.fr/\%7Eparisse/giac\_fr.html}~; + +\item il faut avoir le fichier de macros \texttt{MetaPOST} +\texttt{tableauVariation.mp} de Frdric Mazoit~: +\href{http://download.tuxfamily.org/tehessinmath/les\_sources/tableauVariation.mp}{http://download.tuxfamily.org/tehessinmath/les\_sources/tableauVariation.mp}~; + +Pour ceux qui sont gure habitus \texttt{MetaPOST}, cela ne pose aucun problme car les +scripts et compilations \texttt{MetaPOST} se font automatiquement. Il suffit de crer dans son +\texttt{texmf} personnel une arborescence du style~: \texttt{./texmfperso/metapost/tablor/} et d'y +placer \texttt{tableauVariation.mp} puis un \texttt{rehash}. C'est exactement la mme dmarche que +pour installer une nouvelle extension \LaTeX{}. + + +\item il faut tre en mode \texttt{shell-escape} pour autoriser + les sorties de la compilation \texttt{tex}. Pour \texttt{emacs}, on rajoute en + fin de fichier \verb+%%% LaTeX-command: "latex --shell-escape" ***+; pour les autres diteurs, il faut modifier + la commande de compilation. Sinon, on peut modifier le fichier \texttt{texmf.cnf} + pour que le mode soit automatis en modifiant la ligne + suivante~:~\texttt{shell-escape t} mais ce n'est pas recommand car il + faut activer le shell-escape le moins possible et toujours sous contrle~; + + + +\begin{figure}[!h] + \begin{Idee}{shell-escape sur KILE} + On peut crer une compilation en allant dans les menus de configuration, l'associer un raccourci clavier et hop, quand on veut une compil rapide c'est facile. + +On va dans \texttt{configuration>kile>outils>nouvel outil} + +On l'appelle par exemple shellEscape et on le base sur LateX + +Ensuite en commande on met \texttt{latex} (ou \texttt{pdflatex}) +et en option \verb+-shell-escape -interaction=nonstopmode '%source'+ +et on clique sur OK. + +Ensuite on va dans \texttt{configuration>raccourci clavier > rechercher sh}. +On tombe sur shellEscape. On clique sur personnaliser et on choisi un raccourci, par exemple +la touche windows et s (S-s en langage emacs...) + +Et voil : quand on veut compiler un document appelant tablor, on appuie sur windows+s. + \end{Idee} + \end{figure} + + + + + + +\begin{figure}[!h] + + \begin{Idee}{shell-escape sur TeXnicCenter} + Pour les utilisateurs de TeXnicCenter, observez cette +\href{http://img221.imageshack.us/img221/27/capture20080114215233hu7.png}{explication} du +paramtrage du \texttt{shell-escape}. On peut par exemple mettre~: + +\texttt{-enable-write18 --shell-escape --src -interaction=nonstopmode "\%Wm"}. + +Sur TeXmaker, c'est \texttt{latex -enable-write18 --shell-escape -interaction=nonstopmode \%.tex}. + +Pour faire comprendre \texttt{Microsoft Windows XP} o trouver \texttt{giac}, vous pouvez modifier le \texttt{path} en suivant +ces instructions~: + +Demarrer->Panneau de configuration->Systme onglet Avanc->Variable d'environnement. Il faut cliquer sur la ligne PATH puis sur le bouton modifier +et l il faut ajouter + +\begin{center} + \verb+;C:\repertoire_d'installation_de_xcas+ +\end{center} + + + +(Merci Gatan et Daniel). +\end{Idee} + + \end{figure} + + + +\item il faut avoir disposition les extensions \texttt{fancyvrb}, + \texttt{filecontents}, \texttt{ifthen} et \texttt{ifpdf}; + +\item pour ceux qui compilent avec \texttt{pdf\LaTeX{}}, il n'y a aucun problme et rien faire car \texttt{tablor} + contient dj ce qu'il faut pour s'adapter~: + \verb+\ifpdf \DeclareGraphicsRule{*}{mps}{*}{} \fi+ + +\item il faut installer le fichier \texttt{tablor.sty} dans son \texttt{texmf} personnel. Pour ceux + qui ont une version rcente de \texttt{MiKTeX} ou \texttt{TeXLive}, + \texttt{tablor} est dj install. Pour les + utilisateurs de \texttt{Unix}, vous devez savoir comment faire... Par commodit, vous pouvez en + profiter pour installer la version \texttt{Unix} de \emph{MiKTeX package manager}. J'ai fait un + petit script pour vous y aider ici : + + \href{http://gconnan.free.fr/?page=52}{http://gconnan.free.fr/?page=52} + +\item il faut installer le fichier de configuration + \texttt{tablor.cfg} dans le mme + rpertoire de \texttt{tablor.sty} ce qui est fait automatiquement + soit par dcompression d'une archive \texttt{tablor.zip} soit par + l'intermdiaire des distributions \texttt{MikTeX} et \texttt{TeXLive}. + + + +\end{itemize} + + + + + + +\begin{figure}[!h] + \begin{DANGER}{Conflit d'extensions} + L'extension \verb+fancybox+ rentre en conflit avec \verb+fancyvrb+ qu'utilise + \verb+tablor+ car elles dfinissent toutes deux diffremment l'environnement \verb+VerbatimOut+. + \end{DANGER} + \end{figure} + + + + \begin{DANGER}{Commandes cres} + Huit nouvelles commandes sont cres~:~\verb+\tv, \tvbis, \nettoyer, \initablor,+ + + \verb+ \dresse, \dressetoile, \executGiacmp+. + Attention aux conflits si de tels noms existent quelque part dans vos + fichiers personnels. + \end{DANGER} + + + + + +\section{Comment l'utiliser~?} + + + +\begin{figure}[!h] + \begin{Idee}{Faut-il savoir utiliser MetaPOST et XCAS~?} + Non~! Tous les appels ces logiciels se font sans aucune + intervention de l'utilisateur. + \end{Idee} + \end{figure} + + + +\subsection{Prambule} + +Les ECM donns en exemple ne dpendent pas du moteur de compilation~:~\texttt{\LaTeX{}+dvi+dvips} ou +\texttt{pdf\LaTeX{}} conviennent. + +Le prambule sera toujours sous Linux ou Mac~: + +\lat + +\begin{lstlisting} +\documentclass{article} +\usepackage{graphicx} +\usepackage[french]{babel} % or eunozer langouage +\usepackage[xcas]{tablor} % xcas en option : cf plus loin +\end{lstlisting} + +Le prambule sera toujours sous Windows~: + +\lat + +\begin{lstlisting} +\documentclass{article} +\usepackage{graphicx} +\usepackage[french]{babel} % or eunozer langouage +\usepackage[xcas,windows]{tablor} % xcas et windows en option : cf plus loin +\end{lstlisting} + + + +% \begin{figure}[!h] +% \begin{Idee} +% Les fontes utilises dans les tableaux sont \verb+[upright]{fourier}+. Il est tout +% fait possible d'utiliser d'autres fontes. Il suffit de modifier le fichier +% \texttt{tablor.sty} en remplaant partout o il apparat \verb+[upright]{fourier}+ par \verb+lmodern+ ou ce +% que vous voulez. Ce n'est pas trs pratique, mais cela vite de le mettre en option +% chaque utilisation et on utilise souvent la mme fonte dans ses documents. +% \end{Idee} +% \end{figure} + + + +\subsection{L'option xcas}\label{option} + + +On met \texttt{xcas} si l'on a install \texttt{giac/XCAS} sur son + ordinateur et on ne met rien si \texttt{giac/XCAS} n'est pas + install ou (et) que l'on a rcupr un + fichier \texttt{tex} avec les fichiers sources \texttt{MetaPOST}; Ainsi, \texttt{tablor} ne fera + pas appel \texttt{giac/XCAS} et se contentera de compiler les fichiers \texttt{MetaPOST}. + + + + +\subsection{L'option windows} + +Si vous utilisez encore Windows\textregistered, dclarez-le en option~:~ + +\begin{lstlisting} +\usepackage[xcas,windows]{tablor} +\end{lstlisting} + +Pour les utilisateurs de Linux et Mac, il n'y a rien dclarer... + +\subsection{Fichier de configuration \texttt{tablor.cfg}} + +\subsubsection*{Contenu} + +{\small + + +\begin{lstlisting} +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% Fichier de configuration de tablor.sty % +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + + +% La mise jour de ce fichier permet d'adapter certains paramtres du package tablor.sty +% au poste de travail et aux habitudes des utilisateurs. + + +%======================================== +% I - Configuration du prambule MetaPOST +%======================================== + +\begin{filecontents*}{enteteMP.cfg} +input tableauVariation; +verbatimtex +%&latex +\documentclass{article} +\usepackage[upright]{fourier} % ou mathpazo, lmodern, etc. ou rien ! +\usepackage{amsmath} +\renewcommand\mbox[1]{ #1 } % pour les mbox intempestifs de xcas +\renewcommand\cdot{ } % idem pour les cdot +\begin{document} +\catcode`\@=0 % pour utiliser le @ +etex +\end{filecontents*} + + + + +%================================= +% II - Dclaration de l'diteur utilis +% ================================ +% +% Remplacez "emacsclient -c" par la commande qui lance un autre editeur que +% votre diteur favori pour afficher les tableaux a modifier. +% Laissez une espace avant de fermer l'accolade. + +\newcommand{\editeur}{emacsclient -c } + + + + +%================================= +%III - 1ere colonne +%================================= +% +%permet de configurer les termes dans la premiere colonne des +%tableaux : "signe de" ou "sign of" ou "" etc. +% + + + +\begin{VerbatimOut}{config.cxx} + +//reglage de epsilon : seuil du zero de giac +epsilon:=1e-100; + +// POUR LES TV, TVI,TVZ,TVapp,TSq,TSa +// pour la ligne signe +lsic:=" +newLigneSignes(btex $\\hbox{ Signe de }\\atop{\\displaystyle "; + +// POUR LES TV, TVI,TVZ,TVapp +// pour la ligne variation +lvic:=" +newLigneVariations(btex $\\hbox{ Variations de }\\atop{\\displaystyle "; + +\end{VerbatimOut} + + + +%% you may prefer + +% \begin{VerbatimOut}{config.cxx} + +% // FOR TV, TVI,TVZ,TVapp,TSq,TSa +% // for the signs +% lsic:=" +% newLigneSignes(btex $\\hbox{ Sign of }\\atop{\\displaystyle "; + +% // POUR LES TV, TVI,TVZ,TVapp +% // for the variations +% lvic:=" +% newLigneVariations(btex $\\hbox{ Variations of }\\atop{\\displaystyle "; + +%\end{VerbatimOut} + + + +%% ou si vous prfrez que ni signe ni variation n'apparaissent + + + +% \begin{VerbatimOut}{config.cxx} + +% // POUR LES TV, TVI,TVZ,TVapp,TSq,TSa +% // pour la ligne signe +% lsic:=" +% newLigneSignes(btex ${\\displaystyle "; + +% // POUR LES TV, TVI,TVZ,TVapp +% // pour la ligne variation +% lvic:=" +% newLigneVariations(btex ${\\displaystyle "; + +% \end{VerbatimOut} + + + +\end{lstlisting} +} + + + +Vous le placerez dans la mme arborescence que \texttt{tablor.sty} et le modifierez si besoin est. + +\subsubsection*{Rle} + +\begin{itemize} +\item La premire partie permet de configurer le prambule \texttt{tex} qui sera utilis par +\texttt{MetaPOST} pour crer les tableaux. La ligne contenant +l'extension des fontes est en particulier optionnelle~:~vous pouvez la +modifier, voire la supprimer selon vos choix de fontes; + + +\item si vous utilisez \texttt{ Microsoft-Windows}, il faudra dcommenter la +ligne spcifie afin que les commandes \texttt{unix} soient remplaces +automatiquement par des commandes \texttt{dos}; + + +\item l'diteur sera appel dans certains cas pour modifier + l'aspect des tableaux dans les fichiers sources \texttt{MetaPOST}. Il faudra choisir un diteur + comme par exemple \texttt{emacs, xemacs, texmaker, vi, winshell, notepad, vim, kate, gedit, + textmate,texshop}, \texttt{kile}, etc. +Pour viter certains problmes, choisissez un autre diteur que celui +que vous utilisez pour \LaTeX{} afin que la fentre s'ouvre sans problme. + +Voir aussi le paragraphe~\ref{modif}; + +\item par dfaut, on voit apparatre dans la premire colonne des tableaux ~signe de ~ ou + ~variations de ~. Vous pouvez modifier ces rglages ici comme indiqu; deux exemples sont + donns~:~en anglais ou en n'crivant que les expressions. + +\item on peut rgler l'epsilon de XCAS qui fixe le +seuil du zro des flottants. Il est rgl $10^{-100}$ par dfaut. +\end{itemize} + + +\subsection{Initialisation de \texttt{tablor} et prfixe des tableaux}\label{prefix} + + +Les fichiers \texttt{MetaPOST} des tableaux sont regroups dans un fichier de suffixe +\texttt{\_Tab.mp}. Le prfixe est par dfaut celui du fichier \texttt{tex} appelant +\texttt{tablor}. Il est possible, pour des raisons de classement personnel, de modifier ce prfixe +la suite du \verb+\begin{document}+ en entrant~: + + \begin{lstlisting} +\initablor + \end{lstlisting} + +si l'on veut avoir comme prfixe le prfixe courant (obtenu par \verb+\jobname+) ou bien~: + + \begin{lstlisting} +\initablor[Waouh] + \end{lstlisting} + +si l'on veut que le fichier \texttt{MetaPOST} des tableaux s'appelle \verb+Waouh\_Tab.mp+ + +\medskip + +Si tout s'est bien pass, on doit supprimer les fichiers \texttt{log} de \texttt{MetaPOST} et clore le +fichier \texttt{\_Tab.mp} en entrant juste avant \verb+\end{document}+ la commande~: + +\begin{lstlisting} + \nettoyer +\end{lstlisting} + + +ou bien, selon les cas~: + +\begin{lstlisting} +\nettoyer[Waouh] + \end{lstlisting} + + + +\medskip + +\textbf{En rsum}, notre fichier \texttt{tex} aura cette ossature~: + + +\begin{lstlisting} +\documentclass{article} +\usepackage{graphicx} +\usepackage[french]{babel} % or eunozer langouage +\usepackage[xcas]{tablor} % options modifiables + +\begin{document} + +\initablor + +... + +\nettoyer + +\end{document} +\end{lstlisting} + + +\section{Facteur de rduction} + +Si vous trouvez le tableau trop grand, vous pouvez utilisez la commande +\verb+\ech{nombre}+ o \texttt{nombre} reprsente le coefficienr de +rduction ou d'agrandissement du tableau. + +Par exemple, comparez~: + + \begin{lstlisting} +\begin{TV} +TV([-10,+infinity],[-1,1],"g","t",x^2/(x^2-1),1,n,\tv) +\end{TV} + \end{lstlisting} + + \begin{center} + + +\begin{TV} +TV([-10,+infinity],[-1,1],"g","t",x^2/(x^2-1),1,n,\tv) +\end{TV} + +\end{center} + +et + + \begin{lstlisting} +\ech{0.7} +\begin{TV} +TV([-10,+infinity],[-1,1],"g","t",x^2/(x^2-1),1,n,\tv) +\end{TV} +\ech{1} + \end{lstlisting} + + \begin{center} + + \ech{0.7} +\begin{TV} +TV([-10,+infinity],[-1,1],"g","t",x^2/(x^2-1),1,n,\tv) +\end{TV} +\ech{1} + +\end{center} + +\begin{figure}[!h] + \begin{DANGER}{Remise l'chelle 1} + N'oubliez pas de remettre l'chelle 1 en entrant la + suite de l'environnement \verb+\ech{1}+ + \end{DANGER} + \end{figure} + + + +\section{Tableaux en couleur} + +Grce la trs efficace intervention de \texttt{fp} du forum +\href{http://forum.mathematex.net/latex-f6/tableau-de-variations-redige-en-bleu-t10826.html}{\texttt{mathematex}}, +on peut prsent avoir des tableaux en couleur. Cette couleur est noire +par dfaut. Si on veut gayer sa prsentation, on utilise la commande +\verb+\coultab{couleur}+ o \verb+couleur+ est le nom de la couleur +dsire selon les standards \textbf{MetaPOST}~: +\begin{itemize} +\item \verb+blue+, \verb+red+, \verb+green+, etc. +\item pour les gris : \verb+0.1white+, \verb+0.2white+, etc. +\item un code RGB : \verb+(0.4,0.2,1)+, etc. +\end{itemize} + +\begin{lstlisting}[caption={}] +\coultab{blue} +\begin{TV} +TV([0,2],[],"f","x",x^2,1,n,\tv) +\end{TV} +\end{lstlisting} + + +\coultab{blue} +\begin{center} + \begin{TV} + TV([0,2],[],"f","x",x^2,1,n,\tv) + \end{TV} + \end{center} +\coultab{black} + + + + + +\section{Nom des fonctions et commandes \LaTeX{}} + +Si vous voulez donner un nom de fonction ncessitant l'emploi d'une +commande \LaTeX{}, il faudra utiliser le caractre \verb+@+ au lieu de +\verb+\+. + +Par exemple, pour nommer une fonction $\varphi$, il faudra entrer +\verb+@varphi+~: + + +\begin{lstlisting} +\begin{TSq} +TSq("@varphi",[-45*x-27],[2-x],[-infinity,+infinity],n,\tv) +\end{TSq} +\end{lstlisting} + + +\begin{center} + +\begin{TSq} +TSq("@varphi",[-45*x-27],[2-x],[-infinity,+infinity],n,\tv) +\end{TSq} + +\end{center} + + + +\section{Utilisation du moteur Xe\LaTeX} + + +On peut prsent compiler via Xe\LaTeX{} en utilisant l'extension ddie +\verb+tablor-xetex.sty+ qui ne fonctionnera que dans un environnement +UNIX puisqu'elle utilise un script \texttt{shell} pour convertir les +sorties MetaPOST en \texttt{pdf} : + + +\begin{lstlisting} + +\ifxetex + +\begin{filecontents*}{convert-mp-pdf.sh} +#!/bin/sh +mpost -interaction nonstopmode $1 ; + +cat>$1.tex<> + + +\immediate\write18{chmod 775 ./convert-mp-pdf.sh} + +\fi + +\end{lstlisting} + + + +Il n'y a rien faire. Cette version peut mme tre utilise avec +pdf\LaTeX{} ou pdf\TeX{}~! + + + + +\section{Tableaux des variations} + +\subsection{Tableau standard} + +L'environnement s'appelle \texttt{TV}. On utilise une commande au format \texttt{XCAS}~: + + +\xcas + +\begin{lstlisting} +TV([borne inf,borne sup],[valeurs interdites],"nom fonction","nom variable",expression en fonction de x,lignes,trigo,\tv) +\end{lstlisting} + +\begin{itemize} + +\item \texttt{[borne inf,borne sup]} dsigne les bornes de l'ensemble de + dfinition. + +On note + $+\infty$~:~\texttt{+infinity} et $-\infty$~:~\texttt{-infinity}. N'oubliez pas + les crochets~! +\item \texttt{[valeurs interdites]} dsigne la liste des valeurs interdites~; +\item \texttt{"nom fonction"} dsigne la lettre reprsentant la fonction telle que vous voulez + qu'elle apparaisse : $f$, $g$, $\varphi$, etc. +\item \texttt{"nom variable"}~:~mme chose pour la variable, selon que vous voulez la dsigner par + $x$, $t$, etc. N'oubliez pas les guillemets~! +\item \texttt{expression en fonction de x} dsigne l'expression de la fonction. Attention~! Utilisez + ici toujours $x$ pour dsigner la variable~; +\item le paramtre \texttt{lignes} est remplacer par 1 si vous voulez voir apparatre une ligne + avec le signe de la drive, par 0 si vous ne voulez pas de cette ligne et par 2 si vous ne voulez + que le signe de la drive~; +\item le paramtre \texttt{trigo} est remplacer par \texttt{t} si la + fonction tudie est trigonomtrique et par tout autre symbole sinon~; +\item on termine par \verb+\tv+, une commande permettant de numroter les tableaux en interne. + +\end{itemize} + +\lat + +Voyons prsent quelques exemples. + +\begin{enumerate} +\item Le tableau de variation sans signe de la drive de la fonction $f~:~x\mapsto x^2$ sur $[-5;7]$. + + +On obtient~: + +\begin{TV} +TV([-5,7],[],"f","x",x^2,0,n,\tv); +\end{TV} + + +aprs avoir entr~: + +\begin{lstlisting} +\begin{TV} +TV([-5,7],[],"f","x",x^2,0,n,\tv) +\end{TV} +\end{lstlisting} + + + +\item Si on veut la mme fonction sur \textbf{R} avec le signe de la drive~: + + \begin{lstlisting} +\begin{TV} +TV([-infinity,+infinity],[],"f","x",x^2,1,n,\tv) +\end{TV} + \end{lstlisting} + +\begin{TV} +TV([-infinity,+infinity],[],"f","x",x^2,1,n,\tv) +\end{TV} + +\item Avec la mme fonction sur \textbf{R} avec uniquement le signe de la drive~: + + + + \begin{lstlisting} +\begin{TV} +TV([-infinity,+infinity],[],"f","x",x^2,2,n,\tv) +\end{TV} + \end{lstlisting} + +\begin{TV} +TV([-infinity,+infinity],[],"f","x",x^2,2,n,\tv) +\end{TV} + + + + +\item Voici ce que cela donne pour $g~:~t\mapsto \frac{t^2}{t^2-1}$ sur $[-10; +\infty[$~: + + \begin{lstlisting} +\begin{TV} +TV([-10,+infinity],[-1,1],"g","t",x^2/(x^2-1),1,n,\tv) +\end{TV} + \end{lstlisting} + + \begin{center} + + +\begin{TV} +TV([-10,+infinity],[-1,1],"g","t",x^2/(x^2-1),1,n,\tv) +\end{TV} + +\end{center} + + +\item Pour la fonction $x\mapsto \sin(x)+\frac{1}{2}$ on n'oublie pas le + paramtre \texttt{t}~: + + \begin{lstlisting} +\begin{TV} +TV([-pi,pi],[],"g","t",sin(x)+1/2,1,t,\tv) +\end{TV} + \end{lstlisting} + + \begin{center} +\begin{TV} +TV([-pi,pi],[],"g","t",sin(x)+1/2,1,t,\tv) +\end{TV} +\end{center} + + + + +\item Il y aura des problmes pour des quations $f'(x)=0$ que \texttt{XCAS} ne saurait pas rsoudre + de manire formelle. Il faudrait alors utiliser une rsolution numrique et remplacer + \texttt{resoudre} par \texttt{fsolve}. Mais dans les tudes demandes au Bac, l'tude des signes + de la drive est possible formellement. Dans les cas plus exotiques, on peut faire le tableau ~ + la main~. +\end{enumerate} + + + +\subsection{Tableaux dont on ne connat qu'une liste d'images} + +Au dbut du cours de Seconde, il peut tre utile de crer des tableaux +partir de liste d'images. + +On rentre la liste des abscisses, la liste des ordonnes avec +ventuellement les limites gauche et droite des valeurs interdites, +les valeurs interdites ventuelles, le nom de la fonction et le nom de +la variable. + +\subsubsection{Sans valeur interdite} + +\begin{lstlisting} +\begin{TVS} +TVS([1,2,3,4],[-1,5,2,9],[],"f","x",\tv) +\end{TVS} +\end{lstlisting} + +\begin{TVS} +TVS([1,2,3,4],[-1,5,2,9],[],"f","x",\tv) +\end{TVS} + +\subsubsection{Avec valeurs interdites} + + +\begin{lstlisting} + \begin{TVS} +TVS([1,2,3,4],[-1,-infinity,+infinity,2,9],[2],"f","x",\tv) +\end{TVS} +\end{lstlisting} + +\begin{TVS} +TVS([1,2,3,4],[-1,-infinity,+infinity,2,9],[2],"f","x",\tv) +\end{TVS} + + +\begin{lstlisting} + \begin{TVS} +TVS([1,2,3,4],[-1,-infinity,+infinity,2,+infinity],[1,2,4],"f","x",\tv) +\end{TVS} +\end{lstlisting} + + + +\begin{TVS} +TVS([1,2,3,4],[-1,-infinity,+infinity,2,+infinity],[1,2,4],"f","x",\tv) +\end{TVS} + +\subsection{Tableau de variation avec ~zone(s) interdite(s)~} + + +Pour certaines fonctions, tout un (ou plusieurs) intervalle(s) est(sont) exclu(s) de l'ensemble de dfinition. + +Par exemple, la fonction $x\mapsto \sqrt{x^2-1}$ est dfinie sur $]-\infty; -1]\cup[1; ++\infty[$. + +On utilise alors l'environnement \texttt{TVZ} (Z comme zone...). + + +\begin{lstlisting} +\begin{TVZ} + TVZ([-infinity,+infinity],[],[[-1,1]],"@varphi","x",sqrt(x^2-1),1,n,\tv) +\end{TVZ} +\end{lstlisting} + + +\begin{center} + \begin{TVZ} + TVZ([-infinity,+infinity],[],[[-1,1]],"@varphi","x",sqrt(x^2-1),1,n,\tv) +\end{TVZ} +\end{center} + + +\begin{figure}[!h] + \begin{DANGER}{Listes des intervalles interdits} + Le troisime argument est une liste d'intervalles : la liste des ~zones interdites~ + qui peut ventuellemnt se rduire un seul intervalle comme dans l'exemple prcdent. + \end{DANGER} + \end{figure} + +Voici un exemple comportant plusieurs zones interdites~:~$x\mapsto +\ln\big((x-5)^2-1\big)+\ln\big(x^2-1\big)$ + + +\begin{lstlisting} +\begin{TVZ} + TVZ([-infinity,+infinity],[-1,1,4,6],[[-1,1],[4,6]],"f","x",ln((x-5)^2-1)+ln(x^2-1),1,n,\tv) +\end{TVZ} +\end{lstlisting} + + + +\begin{center} + \begin{TVZ} + TVZ([-infinity,+infinity],[-1,1,4,6],[[-1,1],[4,6]],"f","x",ln((x-5)^2-1)+ln(x^2-1),1,n,\tv) +\end{TVZ} +\end{center} + + +\subsection{Tableau des variations avec thorme des valeurs intermdiaires} + +Si l'on veut mettre en vidence les solutions de l'quation $f(x)=a$, on utilise l'environnement +\texttt{TVI}. + +La syntaxe est~: + +\begin{lstlisting} +TVI([borne inf,borne sup],[valeurs interdites],"nom fonction","nom variable",expression en fonction de x,t,a,trigo,\tv) +\end{lstlisting} + +Les paramtres sont les mmes que pour \texttt{TV} mais on ajoute la valeur \texttt{a} bien sr. + + +Par exemple, pour $f~:~x\mapsto \frac{x^2}{x^2-1}$ et l'quation $f(x)=10$ on entre~: + +\begin{lstlisting} +\begin{TVI} +TVI([-10,+infinity],[-1,1],"f","x",x^2/(x^2-1),1,10,n,\tv) +\end{TVI} +\end{lstlisting} + + +et on obtient~: + +\ech{0.9} +\begin{TVI} +TVI([-10,+infinity],[-1,1],"f","x",x^2/(x^2-1),1,10,n,\tv) +\end{TVI} +\ech{1} + +Les solutions sont notes $\alpha_1$, $\alpha_2$, etc. + +Si l'quation est plutt $f(x)=-1$~: + + +\begin{lstlisting} +\begin{TVI} +TVI([-10,+infinity],[-1,1],"f","x",x^2/(x^2-1),1,-1,n,\tv) +\end{TVI} +\end{lstlisting} + + +et on obtient~: + +\begin{TVI} +TVI([-10,+infinity],[-1,1],"f","x",x^2/(x^2-1),1,-1,n,\tv) +\end{TVI} + + + + +\subsection{Tableau des variations avec thorme des valeurs + intermdiaires et racines sous forme exacte} + +Si l'on veut mettre en vidence les solutions de l'quation $f(x)=a$ et +qu'on veut faire apparatre les racines sous forme exacte et pas +seulement sous forme d'$\alpha_i$, on utilise l'environnement +\texttt{TVIex}. + +La syntaxe est la mme que \texttt{TVI}~: + +\begin{lstlisting} +TVIex([borne inf,borne sup],[valeurs interdites],"nom fonction","nom variable",expression en fonction de x,t,a,trigo,\tv) +\end{lstlisting} + +Les paramtres sont les mmes que pour \texttt{TV} mais on ajoute la valeur \texttt{a} bien sr. + + +Par exemple, pour $f~:~x\mapsto \frac{x^2}{x^2-1}$ et l'quation $f(x)=10$ on entre~: + +\begin{lstlisting} +\begin{TVIex} +TVIex([-10,+infinity],[-1,1],"f","x",x^2/(x^2-1),1,10,n,\tv) +\end{TVIex} +\end{lstlisting} + + +et on obtient~: + +\ech{0.9} +\begin{TVIex} +TVIex([-10,+infinity],[-1,1],"f","x",x^2/(x^2-1),1,10,n,\tv) +\end{TVIex} +\ech{1} + +Si l'quation est plutt $f(x)=-1$~: + + +\begin{lstlisting} +\begin{TVIex} +TVIex([-10,+infinity],[-1,1],"f","x",x^2/(x^2-1),1,-1,n,\tv) +\end{TVIex} +\end{lstlisting} + + +et on obtient~: + +\begin{TVIex} +TVIex([-10,+infinity],[-1,1],"f","x",x^2/(x^2-1),1,-1,n,\tv) +\end{TVIex} + +Avec une quation trigonomtrique~: + +\begin{lstlisting} +\begin{TVIex} +TVIex([-pi,pi],[],"@cos","x",cos(x),1,1/2,t,\tv) +\end{TVIex} +\end{lstlisting} + +\begin{TVIex} +TVIex([-pi,pi],[],"@cos","x",cos(x),1,1/2,t,\tv) +\end{TVIex} + + +\begin{figure}[!h] + \begin{DANGER}{Racines formelles non calculables} + XCAS peut ne pas pouvoir trouver une expression exacte des racines + et affichera un message barbare du style~: + +\texttt{Unable to isolate x in ...} + +Le tableau ne sera alors pas construit et vous aurez un message d'erreur. + \end{DANGER} + \end{figure} + + +\subsection{Tableaux de variations avec approximation des zros de la drive} + +Il n'est parfois pas possible d'obtenir une valeur formelle des zros de la drive. On est donc +amen rechercher une approximation numrique de ces zros. Cela est possible grce la commande +\texttt{fsolve} de \texttt{XCAS} utilise bon escient. On appelera les environnements \texttt{TVapp} et +\texttt{TVIapp} ainsi que leurs associs toils. + +Voyons sur un exemple. + +\subsubsection*{Exemple} + +On veut rsoudre l'quation $\ln(x)=\mathrm{e}^{-x}$ sur $]0,+\infty[$. + +Soit $g$ la fonction $x\mapsto x\ln(x)-e^{-x} $. + + +\begin{lstlisting} +\begin{TVapp} +TVapp([0,+infinity],[0],"g","x",x*ln(x)-exp(-x),1,\tv) +\end{TVapp} +\end{lstlisting} + + +\begin{center} +\begin{TVapp} +TVapp([0,+infinity],[0],"g","x",x*ln(x)-exp(-x),1,\tv) +\end{TVapp} +\end{center} + + +\begin{figure}[!h] + \begin{DANGER} + {TVapp et TVIapp ne sont pas infaillibles~!~!} + +Chercher \emph{toutes} les approximations des racines de la drives +c'est se lancer dans la thorie du tout c'est--dire concilier la + recherche de solutions approches pouvant tre extrmement proches +sur des intervalles pouvant tre extrmement tendus. Un concepteur +de logiciel de calcul formel s'y refuse. Je devais m'y coller par souci +d'efficacit. + Normalement, le code +devrait fonctionner pour \emph{la plupart} des cas tudis par des profs pas +trop sadiques. a ralentit lgrement la compilation. Le balayage se +fait avec une prcision de +0,1. C'est sr qu'on peut trouver de nombreux exemples qui ne +fonctionneront pas mais plus on veut resserrer les mailles du filet, +plus on passe de temps les tricoter sauf dans le cas des fonctions +polynomiales grce XCAS. + + Se pose aussi le problme des +images et des tests de signes et de leurs approximations. Par exemple + +\begin{lstlisting} +\begin{TVapp} +TVapp([0,+infinity],[0],"g","x",1/3*x^3-0.0015*x^2+2e-06*x,1,\tv) +\end{TVapp} +\end{lstlisting} + +renvoie un tableau curieux car les images des racines de la drives +sont de l'ordre de $10^{-10}$. + + +% \begin{TVapp} +% TVapp([0,+infinity],[0],"g","x",1/3*x^3-0.0015*x^2+2e-06*x,1,\tv) +% \end{TVapp} + +a peut s'arranger en donnant en argument supplmentaire le nombre de +chiffres affichs. Cela rendrait les diffrentes versions incompatibles +et le jeu n'en vaut pas forcment la chandelle. + \end{DANGER} + \end{figure} + + + + +\subsection{Tableaux de variations de fonctions prolongeables par continuit} + +On peut avoir prolonge une fonction par continuit et donc ne plus +avoir de double barre sur la ligne des variations mais toujours une sur +la ligne du signe de la drive. + +On entre trois listes~: +\begin{enumerate} +\item les bornes de l'intervalle d'tude, comme toujours~; +\item les valeurs o la fonction sera prolonge par continuit~; +\item les valeurs o la fonction n'est pas drivable. +\end{enumerate} + +Cela donne pour $x\mapsto {\rm e}^{-1/x^2}$~: + + +\begin{lstlisting} +\begin{TVPC} +TVPC([-infinity,+infinity],[0],[0],"g","t",e^(-1/x^2),1,n,\tv); +\end{TVPC} +\end{lstlisting} + + +\begin{TVPC} +TVPC([-infinity,+infinity],[0],[0],"g","t",e^(-1/x^2),1,n,\tv); +\end{TVPC} + + + +\subsection{Tableaux de variations et courbes paramtres} + +On peut obtenir le tableau de variations correspondant des courbes paramtres dfinies par un +systme du type~: + +\[\begin{cases} x=f(t) \\ + y=g(t) +\end{cases}\] + +La syntaxe est la suivante~: + +\begin{lstlisting} + \begin{TVP} +TVP(IE,VI,["x","y"],"t",[x(t),y(t)],a,trigo,n,\tv) + \end{TVP} +\end{lstlisting} + + +avec \texttt{IE} l'intervalle d'tude, \texttt{VI} la liste des listes de valeurs interdites +respectives pour les deux fonctions, \texttt{a} pour avoir un tableau complet ou partiel comme dans +les autres "TV", enfin \texttt{trigo} qui vaut \texttt{t} si interviennent des +fonctions trigonomtrqiues, autre chose +sinon. + + +\begin{figure}[!h] + \begin{DANGER}{Version de XCAS} + L'utilisation de TVP implique l'utilisation d'une version de XCAS d'une date postrieure au 14 juin + 2008 ! + \end{DANGER} + \end{figure} + + +\subsubsection{Cas des fonctions trigonomtriques} + +tudions par exemple sur $\left[0\ ;\ \frac{\pi}{2}\right]$ + + +\[ +\begin{cases} x(t)=\cos(3t) \\ + y(t)=\sin(4t) +\end{cases}\] + +\begin{lstlisting} + + \begin{TVP} + TVP([0,pi/2],[[],[]],["x","y"],"t",[cos(3*t),sin(4*t)],1,t,\tv) + \end{TVP} + +\end{lstlisting} + + \begin{TVP} + TVP([0,pi/2],[[],[]],["x","y"],"t",[cos(3*t),sin(4*t)],1,t,\tv) + \end{TVP} + + + +\subsubsection{Les autres cas} + + + +tudions par exemple sur $]-\infty\ ;\ +\infty[$ + + +\[ +\begin{cases} +x(t)=\frac{t^2}{(t+1)(t-2)} \\ +y(t)=\frac{t^2(t+2)}{t+1} +\end{cases} +\] + +\begin{lstlisting} +\begin{TVP} +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} +\end{lstlisting} + + + +\begin{TVP} +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} + + + +\section{Tableaux de signes} + + +\subsection{Cas du produit de deux facteurs affines} + +Pour tudier le signe de $(-2x+3)(-x+5)$ sur \textbf{R}, on entre~: + +\begin{lstlisting} +\begin{TSa} + TSa(-2,3,-1,5,\tv); +\end{TSa} +\end{lstlisting} + + +On obtient~: + +\begin{TSa} +TSa(-2,3,-1,5,\tv); +\end{TSa} + + +\subsection{Cas du produit d'un nombre quelconque de facteurs quelconques sur un intervalle quelconque} + + + + +\begin{figure}[!h] + \begin{DANGER}{Nouveaut partir de la version 2.08} +Par souci de cohrence avec l'environnement TSq, on doit rajouter maintenant en premier argument le +nom de la fonction produit dans l'environnement TS. + \end{DANGER} + \end{figure} + + + + + + + + +Certains cas pathologiques ne vont pas fonctionner, mais sinon, pour tudier le signe de +\[(-2x+3)(x^2-1)(x^2+1)(x-1)(x^2-2)\] on entre cette fois les expressions sous cette forme en +prcisant l'intervalle d'tude~: + +\begin{lstlisting} +\begin{TS} + TS("P",[-2*x+3,x^2-1,x^2+1,x-1,x^2-2],[-infinity,+infinity],n,\tv); +\end{TS} +\end{lstlisting} + +On obtient~: + + +\begin{TS} + TS("P",[-2*x+3,x^2-1,x^2+1,x-1,x^2-2],[-infinity,+infinity],n,\tv); +\end{TS} + + + +Ou bien, sur un intervalle born~: + +\begin{lstlisting} +\begin{TS} +TS("f",[x-10,x+10],[-15,10],n,\tv) +\end{TS} +\end{lstlisting} + + +\begin{TS} +TS("f",[x-10,x+10],[-15,10],n,\tv) +\end{TS} + + + +\subsection{Signe d'un quotient} + +On entre dans deux listes diffrentes les facteurs du numrateur et du dnominateur~: + + +\begin{lstlisting} +\begin{TSq} +TSq("nom du quotient",[liste des facteurs du numrateur],[liste des facteurs du dnominateur],[inf,sup],trigo,\tv) +\end{TSq} +\end{lstlisting} + +Par exemple, pour tudier le signe de $\frac{(-2x+3)(-4x+5)}{(x^2-16)(x-2)}$ sur \textbf{R}~: + +\begin{lstlisting} +\begin{TSq} +TSq("Q",[-2*x+3,-4*x+5],[x^2-16,x-2],[-infinity,+infinity],n,\tv) +\end{TSq} +\end{lstlisting} + + + + +\begin{TSq} +TSq("Q",[-2*x+3,-4*x+5],[x^2-16,x-2],[-infinity,+infinity],n,\tv) +\end{TSq} + + Sur un intervalle born~: + +\begin{lstlisting} +\begin{TSq} +TSq("Q",[x-10,x-5],[x+10,x+3],[-10,10],n,\tv) +\end{TSq} +\end{lstlisting} + + +\begin{TSq} +TSq("Q",[x-10,x-5],[x+10,x+3],[-10,10],n,\tv) +\end{TSq} + + + + +\subsection{Signe d'une seule expression} + + +On utilise l'environnement \texttt{TSc} comme \emph{Tableau de Signe court} en prcisant +l'expression tudie, l'intervalle considr et les valeurs interdites~: + +\begin{lstlisting} +\begin{TSc} +TSc((x-10)*(x+5),[-10,10],[],n,\tv) +\end{TSc} +\end{lstlisting} + + + +\begin{TSc} +TSc((x-10)*(x+5),[-10,10],[],n,\tv) +\end{TSc} + +avec valeurs interdites~: + +\begin{lstlisting} +\begin{TSc} +TSc((x+10)/((x-5)*(x-2)),[-10,5],[2,5],n,\tv) +\end{TSc} +\end{lstlisting} + + +\begin{TSc} +TSc((x+10)/((x-5)*(x-2)),[-10,5],[2,5],n,\tv) +\end{TSc} + +valeurs interdites et fonction trigonomtrique~: + +\begin{lstlisting} +\begin{TSc} +TSc(tan(x),[0,2*pi],[pi/2,3*pi/2],t,\tv) +\end{TSc} +\end{lstlisting} + + +\begin{TSc} +TSc(tan(x),[0,2*pi],[pi/2,3*pi/2],t,\tv) +\end{TSc} + + +\section{Comment modifier les tableaux partir des fichiers MetaPOST~?}\label{modif} + + +\subsection{Tableau par tableau} + +Il est impossible de prvoir toutes les requtes des diffrents utilisateurs. Le style du tableau +produit peut nanmoins vous dplaire. Vous pouvez le modifier en intervenant directement sur le +fichier \texttt{MetaPOST} cr pour chaque tableau. Pour cela, il suffit d'ajouter une toile au nom de +l'environnement utilis et de donner un numro votre nouvelle figure pour qu'elle ne soit pas +crase par les compilations suivantes. Numrotez partir de 100 par exemple. + +Si vous tapez~: + +\begin{lstlisting} +\begin{TV*}{100} + TV([-1,+infinity],[],"f","x",x-ln(x+1),1,n,\tv) +\end{TV*} +\end{lstlisting} + +l'diteur que vous avez mis en option (voir le paragraphe~\ref{option}) est directement lanc et le fichier +\texttt{MetaPOST} correspondant votre tableau qui portera le numro 100 +est affich. Vous pouvez alors le modifier, taper sur \Ctrl + \keystroke{S} pour l'enregistrer et +\Ctrl + \keystroke{Q} pour fermer l'diteur\footnote{Ces combinaisons de touches correspondent la + plupart des diteurs mais ne sont pas universelles : vrifiez pour celui que vous avez choisi.}. La compilation s'achve alors automatiquement comme +pour un environnement non toil. + +\begin{figure}[!h] + \begin{DANGER}{Choix de l'diteur} + vitez de choisir votre diteur habituel~:~sur + \texttt{Linux} prenez par exemple \texttt{gedit} ou + \texttt{kate}, sur \texttt{Windows} prenez + \texttt{wordpad}, etc. + \end{DANGER} + \end{figure} + + + +Par exemple, je tape~: + +\begin{lstlisting} +\begin{TS*}{100} + TS("F",[3*x+2,5*x^2-1],[-50,50],n,\tv) +\end{TS*} +\end{lstlisting} + + +et apparat une fentre de l'diteur (ici \TeX maker) avec le fichier correspondant au tableau. Je le modifie +volont~: + +\begin{center} + \includegraphics[height=9cm]{capture.eps} +\end{center} + + +Je tape sur \Ctrl + \keystroke{S} puis \Ctrl + \keystroke{Q} et la compilation reprend +automatiquement pour m'afficher le tableau voulu~: + + +\begin{center} + \begin{TS*}{105} + TS("F",[3*x+2,5*x^2-1],[-50,50],n,\tv) + \end{TS*} +\end{center} + + + +Une fois la modification faite, on ne vous redemandera pas d'effectuer de modifications, sauf si +vous changez le numro de la figure. + +\subsection{Traitement global dans un unique fichier MetaPOST}\label{global} + +Un fichier \texttt{prfixe\_Tab.mp} est cr o sont copis les sources de chaque tableau. Vous pouvez +ainsi retravailler globalement sur les tableaux si besoin ou les transmettre une personne n'ayant +pas install \texttt{XCAS}. Voir le paragraphe~\ref{prefix} pour plus de dtails. + + +\section{Merci...} + +\begin{itemize} + +\item \href{http://frederic.mazoit.free.fr/LaTeX\_metapost/tableauVariations/}{Frdric \textsc{Mazoit}} pour son fichier \texttt{tableauVariation.mp}; + +\item \href{http://www.yvesdelhaye.be/?Generateur-d-interrogations-le}{Yves \textsc{Delhaye}} pour ses ides sur le \texttt{shell-escape} + +\item \href{http://www-fourier.ujf-grenoble.fr/\%7Eparisse/giac\_fr.html}{Bernard + \textsc{Parisse}} pour \texttt{XCAS}; + +\item Jean-Michel \textsc{Boucart} pour ses prcieuses et efficaces + amliorations de la partie \LaTeX{} du code. + + +\end{itemize} + + +\section{Erreurs habituelles} + + +Avez-vous rendu possible le \texttt{shell-escape}~? Avez-vous install +toutes les extensions listes en dbut de ce document~? Est-ce que \texttt{XCAS} + est dans votre \texttt{PATH}~? + +La premire chose est d'analyser le fichier \texttt{log}. + +En cas de problme, n'hsitez pas me contacter l'adresse indique +sur mon site en joignant le fichier \texttt{log}. + + + +\section{\texttt{Tablor} et Emacs} + +Pour les heureux utilisateurs de tempo, voici quelques lignes pour faciliter votre vie rajouter +dans un fichier \texttt{latex-tempo}: + +\begin{lstlisting} +;; +;; TABLOR +;;; +;cas tableau de variation + ("TV" (& > "\\begin{center}"n> + "\\begin{TV}" n> +"TV(["(p "debut de l'intervalle:")","(p "fin de l'intervalle:")"]," + "["(p "liste de valeurs interdites (,) :")"]," + "\""(p "nom de la fonction :")"\"," + "\""(p "nom de la variable :")"\"," + ""(p "expression de la fonction (utiliser x) :")"," +""(p "type de tableau (1:complet, 0:sans signe, 2:que le signe) :")"," +""(p "trigo ? (t:oui, n:non) :")"," + "\\tv)" n> + "\\end{TV}" n> + "\\end{center}" > % )) + ;cas TVI + ("TVI" (& > "\\begin{center}"n> + "\\begin{TVI}" n> +"TVI(["(p "debut de l'intervalle:")","(p "fin de l'intervalle:")"]," + "["(p "liste de valeurs interdites (,) :")"]," + "\""(p "nom de la fonction :")"\"," + "\""(p "nom de la variable :")"\"," + ""(p "expression de la fonction (utiliser x) :")"," +""(p "type de tableau (1:complet, 0:sans signe, 2:que le signe) :")"," +""(p "trigo ? (t:oui, n:non) :")"," + ""(p "f(x)=l pour la valeur l :")"," + "\\tv)" n> + "\\end{TVI}" n> + "\\end{center}" > % )) + ;cas signe produit + ("TS" (& > "\\begin{center}"n> + "\\begin{TS}" n> + "TS(\""(p "nom du produit :")"\"," + "["(p "liste des facteurs (,) :")"]," + "["(p "debut de l'intervalle:")","(p "fin de l'intervalle:")"]," + ""(p "trigo ? (t:oui, n:non) :")"," + "\\tv)" n> + "\\end{TS}" n> + "\\end{center}" > % )) + ;cas signe quotient + ("TSq" (& > "\\begin{center}"n> + "\\begin{TSq}" n> + "TSq(\""(p "nom du quotient :")"\"," + "["(p "liste des facteurs du numerateur (,) :")"]," + "["(p "liste des facteurs du denominateur (,) :")"]," + "["(p "debut de l'intervalle:")","(p "fin de l'intervalle:")"]," + ""(p "trigo ? (t:oui, n:non) :")"," + "\\tv)" n> + "\\end{TSq}" n> + "\\end{center}" > % )) + +; Tableau signe court + ("TSc" (& > "\\begin{center}"n> + "\\begin{TSc}" n> + "TSc("(p "expression :")",""[" +(p "debut de l'intervalle:")"," +(p "fin de l'intervalle:")"],""[" +(p "liste de valeurs interdites (,) :")"],""" +(p "trigo ? (t:oui, n:non) :")"," + "\\tv)" n> + "\\end{TSc}" n> + "\\end{center}" > % )) + + ;cas tableau de variation avec zone interdite + ("TVZ" (& > "\\begin{center}"n> + "\\begin{TV}" n> +"TVZ(["(p "debut de l'intervalle:")","(p "fin de l'intervalle:")"]," + "["(p "liste de valeurs interdites (,) :")"]," + "["(p "liste des zones interdites ([,],[,]) :")"]," + "\""(p "nom de la fonction :")"\"," + "\""(p "nom de la variable :")"\"," + ""(p "expression de la fonction (utiliser x) :")"," +""(p "type de tableau (1:complet, 0:sans signe, 2:que le signe) :")"," +""(p "trigo ? (t:oui, n:non) :")"," + "\\tv)" n> + "\\end{TV}" n> + "\\end{center}" > % )) +;cas TVP + ("TVP" (& > "\\begin{center}"n> + "\\begin{TVI}" n> +"TVP(["(p "debut de l'intervalle:")","(p "fin de l'intervalle:")"]," + "[["(p "liste de valeurs interdites de x(t)(,) :")"]," + "["(p "liste de valeurs interdites de y(t)(,) :")"]]," + "[\""(p "nom de la fonction x :")"\"," + "\""(p "nom de la fonction y :")"\"]," + "\""(p "nom de la variable :")"\"," + "["(p "expression de la fonction x (utiliser t) :")"," + ""(p "expression de la fonction y (utiliser t) :")"]," +""(p "type de tableau (1:complet, 0:sans signe, 2:que le signe) :")"," + ""(p "t si fonctions trigo, n sinon :")"," + "\\tv)" n> + "\\end{TVP}" n> + "\\end{center}" > % )) +\end{lstlisting} + +Merci \href{http://phil.pham.free.fr/}{Phil Pham}. + + +\section{Galerie} + +Voici quelques exemples de tableaux~: + +\begin{lstlisting} +\begin{TVI} +TVI([-1,+infinity],[-1],"f","x",x^2/sqrt(x+1)-1,1,2,n,\tv) +\end{TVI} +\end{lstlisting} + +\begin{TVI} +TVI([-1,+infinity],[-1],"f","x",x^2/sqrt(x+1)-1,1,2,n,\tv) +\end{TVI} + + +\begin{lstlisting} +\begin{TVI} +TVI([-1/2,+infinity],[],"f","x",x^2,1,2,n,\tv) +\end{TVI} +\end{lstlisting} + + +\begin{TVI} +TVI([-1/2,+infinity],[],"f","x",x^2,1,2,n,\tv) +\end{TVI} + + +\begin{lstlisting} +\begin{TVI} +TVI([0,+infinity],[0],"@ln","x",ln(x),1,2,n,\tv) +\end{TVI} +\end{lstlisting} + +\begin{TVI} +TVI([0,+infinity],[0],"@ln","x",ln(x),1,2,n,\tv) +\end{TVI} + +\stepcounter{TVn} + +\begin{lstlisting} +\begin{TV} +TV([1,+infinity],[],"-@ln","x",-ln(x),1,n,\tv) +\end{TV} +\end{lstlisting} + +\begin{TV} +TV([1,+infinity],[],"-@ln","x",-ln(x),1,n,\tv) +\end{TV} + + + +\begin{lstlisting} +\begin{TVI} +TVI([-pi,pi],[],"@cos","x",cos(x),1,1/2,t,\tv) +\end{TVI} +\end{lstlisting} + +\begin{TVI} +TVI([-pi,pi],[],"@cos","x",cos(x),1,1/2,t,\tv) +\end{TVI} + +\begin{lstlisting} +\begin{TV} +TV([0,2*pi],[],"@cos","x",cos(x),1,t,\tv) +\end{TV} +\end{lstlisting} + +\begin{TV} +TV([0,2*Pi],[],"@cos","x",cos(x),1,t,\tv) +\end{TV} + + + + + + +\begin{lstlisting} +\begin{TVI} +TVI([0,pi],[pi/2],"@tan","t",tan(x),1,7,t,\tv) +\end{TVI} +\end{lstlisting} + +\begin{TVI} +TVI([0,pi],[pi/2],"@tan","t",tan(x),1,7,t,\tv) +\end{TVI} + + +\begin{lstlisting} +\begin{TVIex} +TVIex([0,pi],[pi/2],"@tan","t",tan(x),1,7,t,\tv) +\end{TVIex} +\end{lstlisting} + +\begin{TVIex} +TVIex([0,pi],[pi/2],"@tan","t",tan(x),1,7,t,\tv) +\end{TVIex} + + +\begin{lstlisting} +\begin{TVI} +TVI([-1,1],[],"f","x",(1-x)*sqrt(1-x^2),1,1,n,\tv) +\end{TVI} +\end{lstlisting} + +\begin{TVI} +TVI([-1,1],[],"f","x",(1-x)*sqrt(1-x^2),1,1,n,\tv) +\end{TVI} + + + + +\begin{lstlisting} +\begin{TVIex} +TVIex([-1,1],[],"f","x",(1-x)*sqrt(1-x^2),1,1,n,\tv) +\end{TVIex} +\end{lstlisting} + +\begin{TVIex} +TVIex([-1,1],[],"f","x",(1-x)*sqrt(1-x^2),1,1,n,\tv) +\end{TVIex} + + + + + +\begin{lstlisting} +\begin{TV} +TV([-1,+infinity],[-1],"f","x",ln(1+x)-(x-x^2/2+x^3/3),1,n,\tv) +\end{TV} +\end{lstlisting} + +\begin{TV} +TV([-1,+infinity],[-1],"f","x",ln(1+x)-(x-x^2/2+x^3/3),1,n,\tv) +\end{TV} + + +\begin{lstlisting} +\begin{TS} +TS("G",[-2*x+3,x-1,x+1,x^2+3*x+1],[-10,+infinity],n,\tv); +\end{TS} +\end{lstlisting} + +\begin{TS} +TS("G",[-2*x+3,x-1,x+1,x^2+3*x+1],[-10,+infinity],n,\tv); +\end{TS} + +\begin{lstlisting} +\begin{TVI} +TVI([-infinity,+infinity],[],"f","x",(x+2)*exp(x-1)-1,1,0,n,\tv) +\end{TVI} +\end{lstlisting} + +\begin{TVI} +TVI([-infinity,+infinity],[],"f","x",(x+2)*exp(x-1)-1,1,0,n,\tv) +\end{TVI} + + + + +\begin{lstlisting} +\begin{TVI} +TVI([-infinity,+infinity],[],"f","x",1+(-2*x+1)*exp(2*x),1,0,n,\tv) +\end{TVI} +\end{lstlisting} + +\begin{TVI} +TVI([-infinity,+infinity],[],"f","x",1+(-2*x+1)*exp(2*x),1,0,n,\tv) +\end{TVI} + +\stepcounter{TVn} + + +\begin{lstlisting} +\begin{TV} +TV([0,+infinity],[],"f","x",ln(exp(x)+x)-x,1,n,\tv) +\end{TV} +\end{lstlisting} + +\begin{TV} +TV([0,+infinity],[],"f","x",ln(exp(x)+x)-x,1,n,\tv) +\end{TV} + + + + + +\begin{lstlisting} +\begin{TVI} +TVI([0,pi],[],"f","x",cos(x)-x,1,0,n,\tv) +\end{TVI} +\end{lstlisting} + +\begin{TVI} +TVI([0,pi],[],"f","x",cos(x)-x,1,0,n,\tv) +\end{TVI} + +\begin{lstlisting} +\begin{TVI} +TVI([0,+infinity],[0],"f","x",ln(x)-(ln(x))^2,1,-1,n,\tv) +\end{TVI} +\end{lstlisting} + + + +\begin{TVI} +TVI([0,+infinity],[0],"f","x",ln(x)-(ln(x))^2,1,-1,n,\tv) +\end{TVI} + + +\begin{lstlisting} +\begin{TVIex} +TVIex([0,+infinity],[0],"f","x",ln(x)-(ln(x))^2,1,-1,n,\tv) +\end{TVIex} +\end{lstlisting} + + + +\begin{TVIex} +TVIex([0,+infinity],[0],"f","x",ln(x)-(ln(x))^2,1,-1,n,\tv) +\end{TVIex} + + + +\begin{lstlisting} +\begin{TSc} +TSc((x-10)*(x+10),[-10,10],[],n,\tv) +\end{TSc} +\end{lstlisting} + + + +\begin{TSc} +TSc((x-10)*(x+10),[-10,10],[],n,\tv) +\end{TSc} + + +\begin{lstlisting} +\begin{TVZ} + TVZ([-infinity,+infinity],[],[[-1,1]],"f","x",(sqrt(x^2-1))*(x^2-4),1,n,\tv) +\end{TVZ} +\end{lstlisting} + + \begin{TVZ} + TVZ([-infinity,+infinity],[],[[-1,1]],"f","x",(sqrt(x^2-1))*(x^2-4),1,n,\tv) + \end{TVZ} + + \begin{lstlisting} +\begin{TVZ} + TVZ([-infinity,+infinity],[-1,1],[[-1,1]],"f","x",ln(x^2-1),1,n,\tv) +\end{TVZ} + \end{lstlisting} + + \begin{TVZ} + TVZ([-infinity,+infinity],[-1,1],[[-1,1]],"f","x",ln(x^2-1),1,n,\tv) + \end{TVZ} + + + + \begin{lstlisting} +\begin{TVP} +TVP([0,pi/2],[[],[]],["x","y"],"t",[cos(3*t),sin(4*t)],1,t,\tv) +\end{TVP} + \end{lstlisting} + + + +\begin{TVP} +TVP([0,pi/2],[[],[]],["x","y"],"t",[cos(3*t),sin(4*t)],1,t,\tv) +\end{TVP} + + +\begin{lstlisting} +\begin{TVP} +TVP([0,2*pi],[[],[]],["x","y"],"t",[t-2*sin(t),-1+2*cos(t)],1,t,\tv) +\end{TVP} +\end{lstlisting} + + +\begin{TVP} +TVP([0,2*pi],[[],[]],["x","y"],"t",[t-2*sin(t),-1+2*cos(t)],1,t,\tv) +\end{TVP} + + +% \begin{lstlisting} +% \begin{TVZ} +% TVZ([-infinity,+infinity],[],[[-1,1],[4,6]],"f","x",sqrt((x-5)^2-1)+sqrt(x^2-1),1,n,\tv) +% \end{TVZ} +% \end{lstlisting} + + + +% \begin{center} +% \begin{TVZ} +% TVZ([-infinity,+infinity],[],[[-1,1],[4,6]],"f","x",sqrt((x-5)^2-1)+sqrt(x^2-1),1,n,\tv) +% \end{TVZ} +% \end{center} + + + +\begin{lstlisting} + \begin{TVP} + TVP([0,pi/2],[[],[]],["f","g"],"t",[(sin(3*t)),(sin(4*t))],1,t,\tv) + \end{TVP} +\end{lstlisting} + + +\begin{center} + \begin{TVP} + TVP([0,pi/2],[[],[]],["f","g"],"t",[(sin(3*t)),(sin(4*t))],1,t,\tv) + \end{TVP} + \end{center} + +\begin{lstlisting} +\begin{TS} + TS(" f ",[cos(x)-1/2,sin(x)+1/2],[0,2*pi],t,\tv) +\end{TS} +\end{lstlisting} + + +\begin{center} +\begin{TS} + TS(" f ",[cos(x)-1/2,sin(x)+1/2],[0,2*pi],t,\tv) +\end{TS} +\end{center} + +% \begin{lstlisting} +% \begin{TVIapp} +% TVIapp([-1,+infinity],[-1,0],"g'","x",diff(ln(x+1)/x^2,x),1,0,\tv) +% \end{TVIapp} +% \end{lstlisting} + +% \begin{center} +% \begin{TVIapp} +% TVIapp([-1,+infinity],[-1,0],"g'","x",diff(ln(x+1)/x^2,x),1,0,\tv) +% \end{TVIapp} +% \end{center} + + + + +% \lat + +% \begin{lstlisting} +% \begin{enumerate} +% \item + +% Selon le tableau de variation de la fonction $f$ +% ci-dessous, on peut affirmer que \ldots + +% \begin{TV} +% TV([-5,10],[],"f","x",(5/2)*x^2-2*x+12,0,n,\tv) +% \end{TV} + +% \VF +% \begin{itemize} + +% \item[\ldots] 5 n'a pas d'antcdent \Rep +% \item[\ldots] 5 n'a pas d'image \Rep +% \item[\ldots] 5 a deux antcdents \Rep +% \item[\ldots] 5 a une image suprieure celle de $\sqrt{2}$\Rep + +% \end{itemize} + + + +% \item Soit $f$ la fonction dfinie par $f~:~x\mapsto 3x^3-5x^2+2x-7$. Les tableaux suivants peuvent +% correspondre $f$~: + +% \VF + +% \begin{enumerate} + + +% \item Tableau 1 \Rep + +% \begin{TV} +% TV([-20,20],[],"f","x",3*x^3-5*x^2+2*x-7,0,n,\tv) +% \end{TV} + +% \item Tableau 2 \Rep + +% \begin{TV} +% TV([-20,20],[],"f","x",-3*x^3+5*x^2-2*x+7,0,n,\tv) +% \end{TV} + +% \item Tableau 3 \Rep + +% \begin{TSc} +% TSc(-3*x^3+5*x^2-2*x+7,[-20,20],n,\tv) +% \end{TSc} + + +% \item Tableau 4 \Rep + +% \begin{TSc} +% TSc(3*x^3-5*x^2+2*x-7,[-20,20],n,\tv) +% \end{TSc} + + +% \end{enumerate} + +% \end{enumerate} + +% \end{lstlisting} + + + + + +% \begin{enumerate} +% \item + +% Selon le tableau de variation de la fonction $f$ +% ci-dessous, on peut affirmer que \ldots + +% \begin{TV} +% TV([-5,10],[],"f","x",(5/2)*x^2-2*x+12,0,n,\tv) +% \end{TV} + +% \VF +% \begin{itemize} + +% \item[\ldots] 5 n'a pas d'antcdent \Rep +% \item[\ldots] 5 n'a pas d'image \Rep +% \item[\ldots] 5 a deux antcdents \Rep +% \item[\ldots] 5 a une image suprieure celle de $\sqrt{2}$\Rep + +% \end{itemize} + + + +% \item Soit $f$ la fonction dfinie par $f~:~x\mapsto 3x^3-5x^2+2x-7$. Les tableaux suivants peuvent-ils +% correspondre la fonction $f$~: + +% \VF + +% \begin{enumerate} + + +% \item Tableau 1 \Rep + + +% \begin{TV} +% TV([-20,20],[],"f","x",3*x^3-5*x^2+2*x-7,0,n,\tv) +% \end{TV} + +% \item Tableau 2 \Rep + +% \begin{TV} +% TV([-20,20],[],"f","x",-3*x^3+5*x^2-2*x+7,0,n,\tv) +% \end{TV} + +% \item Tableau 3 \Rep + +% \begin{TSc} +% TSc(-3*x^3+5*x^2-2*x+7,[-20,20],n,\tv) +% \end{TSc} + + +% \item Tableau 4 \Rep + +% \begin{TSc} +% TSc(3*x^3-5*x^2+2*x-7,[-20,20],n,\tv) +% \end{TSc} + + +% \end{enumerate} + +% \end{enumerate} + + + +% \begin{lstlisting} +% On considre la fonction $f$ dfinie sur \textbf{R} par $f(x)=\frac{1}{2}\bigl(x+(1-x){\rm e}^{2x}\bigr)$ + +% tudions sa drive~: + + +% \begin{TVIapp} +% TVIapp([-infinity,+infinity],[],"f'","x",diff(1/2*(x+(1-x)*exp(2*x)),x),1,0,\tv) +% \end{TVIapp} + +% On en dduit le tableau de variation de $f$ + + +% \begin{TVapp} +% TVapp([-infinity,+infinity],[],"f","x",1/2*(x+(1-x)*exp(2*x)),1,\tv) +% \end{TVapp} +% \end{lstlisting} + +% On considre la fonction $f$ dfinie sur \textbf{R} par $f(x)=\frac{1}{2}\bigl(x+(1-x){\rm e}^{2x}\bigr)$ + +% tudions sa drive~: + + +% \begin{TVIapp} +% TVIapp([-infinity,+infinity],[],"f'","x",diff(1/2*(x+(1-x)*exp(2*x)),x),1,0,\tv) +% \end{TVIapp} + +% On en dduit le tableau de variation de $f$ + + +% \begin{TVapp} +% TVapp([-infinity,+infinity],[],"f","x",1/2*(x+(1-x)*exp(2*x)),1,\tv) +% \end{TVapp} + + + + +\pagebreak + +\tableofcontents + +\nettoyer + + + +%\bouger{/home/moi/Desktop/} + +\end{document} + +%%% Local Variables: +%%% mode: latex +%%% TeX-master: t +%%% End: -- cgit v1.2.3