diff options
author | Norbert Preining <norbert@preining.info> | 2023-05-20 03:02:47 +0000 |
---|---|---|
committer | Norbert Preining <norbert@preining.info> | 2023-05-20 03:02:47 +0000 |
commit | 9cdcfcf8d9333b1d9b34b61ddc21910bbcc04491 (patch) | |
tree | f9143b5812837ab74ec819d0be97721594863346 /macros/latex/contrib/proflycee/tex | |
parent | dd54bf2a9c9e985917ceb5ced412213cd44eaeae (diff) |
CTAN sync 202305200302
Diffstat (limited to 'macros/latex/contrib/proflycee/tex')
6 files changed, 815 insertions, 178 deletions
diff --git a/macros/latex/contrib/proflycee/tex/ProfLycee.sty b/macros/latex/contrib/proflycee/tex/ProfLycee.sty index 322e4ad25d..89b82dd10c 100644 --- a/macros/latex/contrib/proflycee/tex/ProfLycee.sty +++ b/macros/latex/contrib/proflycee/tex/ProfLycee.sty @@ -3,8 +3,9 @@ % or later, see http://www.latex-project.org/lppl.txtf \NeedsTeXFormat{LaTeX2e} -\ProvidesPackage{ProfLycee}[2023/05/09 2.6.3 Aide pour l'utilisation de LaTeX en lycee] -% 2.6.3 Ajout d'une commande pour l'équation affine d'une droite passant par deux points +\ProvidesPackage{ProfLycee}[2023/05/19 2.6.4 Aide pour l'utilisation de LaTeX en lycee] +% 2.6.4 Correction d'un dysfonctionnement avec les racines (oubli du \num) + Equation diophantienne ax+by=c + Eq cartésiennes (plan & droite) + Corrections de bugs mineurs +% 2.6.3 Ajout d'une commande pour rédiger l'obtention de l'équation affine d'une droite passant par deux points % 2.6.2 Correction de commandes pour la pseudo3d + nouvelle clé pour la trigo % 2.6.1 Ajout de commandes pour du calcul intégral (valeur approchée + tikz) % 2.6.0 Ajout d'une clé [Brut] pour les mesures principales + commande calcul ligne trigo diff --git a/macros/latex/contrib/proflycee/tex/proflycee-tools-aleatoire.tex b/macros/latex/contrib/proflycee/tex/proflycee-tools-aleatoire.tex index 943a28d0fb..c1d167f058 100644 --- a/macros/latex/contrib/proflycee/tex/proflycee-tools-aleatoire.tex +++ b/macros/latex/contrib/proflycee/tex/proflycee-tools-aleatoire.tex @@ -25,7 +25,7 @@ \setKV[kvensemble]{#1}% \ifboolKV[kvensemble]{Mathpunct}% {\left\lbrace \PLensopt{} \mathpunct{} \StrSubstitute{#2}{/}{\mathpunct{}{\PLenssep}\mathpunct{}} \mathpunct{} \right\rbrace}% - {\left\lbrace \PLensopt{} \StrSubstitute{#2}{/}{{\PLenssep}} \right\rbrace} + {\left\lbrace \PLensopt{} \StrSubstitute{#2}{/}{{\PLenssep}} \right\rbrace}% } %%------TRINOMEALEA diff --git a/macros/latex/contrib/proflycee/tex/proflycee-tools-analyse.tex b/macros/latex/contrib/proflycee/tex/proflycee-tools-analyse.tex index 0e8906ee96..4057fe37dd 100644 --- a/macros/latex/contrib/proflycee/tex/proflycee-tools-analyse.tex +++ b/macros/latex/contrib/proflycee/tex/proflycee-tools-analyse.tex @@ -334,7 +334,7 @@ \ensuremath{\frac{% \xintifboolexpr{\RacNumSimpl == 1 && \RacRacSimpl == 1}% {1}% - { \xintifboolexpr{\RacNumSimpl == 1}{}{\RacNumSimpl} \xintifboolexpr{\RacRacSimpl == 1}{}{\sqrt{\RacRacSimpl}} }% + { \xintifboolexpr{\RacNumSimpl == 1}{}{\RacNumSimpl} \xintifboolexpr{\RacRacSimpl == 1}{}{\sqrt{\num{\RacRacSimpl}}} }% }% { \RacDenomSimpl }}% }% diff --git a/macros/latex/contrib/proflycee/tex/proflycee-tools-arithm.tex b/macros/latex/contrib/proflycee/tex/proflycee-tools-arithm.tex index 5b83b2a4d0..42e9264e5d 100644 --- a/macros/latex/contrib/proflycee/tex/proflycee-tools-arithm.tex +++ b/macros/latex/contrib/proflycee/tex/proflycee-tools-arithm.tex @@ -16,12 +16,12 @@ \NewDocumentCommand\ConversionDecBin{ s O{} m }{% \useKVdefault[CONVDECBIN] \setKV[CONVDECBIN]{#2}% on paramètres les nouvelles clés et on les simplifie - \def\resbrut{\xintDecToBin{#3}} - \StrLen{\resbrut}[\nbchiffres] - \def\nbgrp{\fpeval{4*ceil(\nbchiffres/4,0)}} - \IfBooleanTF{#1} - {\num{#3}\ifboolKV[CONVDECBIN]{AffBase}{_{10}}{}=\num[digit-group-size=4]{\resbrut}\ifboolKV[CONVDECBIN]{AffBase}{_{2}}{}} - {\num{#3}\ifboolKV[CONVDECBIN]{AffBase}{_{10}}{}=\num[digit-group-size=4,minimum-integer-digits=\nbgrp]{\resbrut}\ifboolKV[CONVDECBIN]{AffBase}{_{2}}{}} + \def\resbrut{\xintDecToBin{#3}}% + \StrLen{\resbrut}[\nbchiffres]% + \def\nbgrp{\fpeval{4*ceil(\nbchiffres/4,0)}}% + \IfBooleanTF{#1}% + {\num{#3}\ifboolKV[CONVDECBIN]{AffBase}{_{10}}{}=\num[digit-group-size=4]{\resbrut}\ifboolKV[CONVDECBIN]{AffBase}{_{2}}{}}% + {\num{#3}\ifboolKV[CONVDECBIN]{AffBase}{_{10}}{}=\num[digit-group-size=4,minimum-integer-digits=\nbgrp]{\resbrut}\ifboolKV[CONVDECBIN]{AffBase}{_{2}}{}}% } \setKVdefault[CONVBINHEX]{% @@ -43,35 +43,35 @@ %la conversion complète \newcommand\ConversionBinHex[2][]{% - \useKVdefault[CONVBINHEX] + \useKVdefault[CONVBINHEX]% \setKV[CONVBINHEX]{#1}% on paramètres les nouvelles clés et on les simplifie - \def\chbrut{#2} + \def\chbrut{#2}% \StrLen{\chbrut}[\nbchiffres] %nb de chiffres du binaire \xdef\nbgrp{\fpeval{4*ceil(\nbchiffres/4,0)}} %nb de chiffres avec blocs de 4 \xdef\nbblocs{\fpeval{\nbgrp/4}} %nb de blocs %on rajoute des zeros si besoin := OK - \xdef\resinter{\chbrut} - \num[digit-group-size=4]{\chbrut}\ifboolKV[CONVBINHEX]{AffBase}{_{2}}{}= + \xdef\resinter{\chbrut}% + \num[digit-group-size=4]{\chbrut}\ifboolKV[CONVBINHEX]{AffBase}{_{2}}{}=% \ifboolKV[CONVBINHEX]{Details}{% - \ifnum\nbchiffres<\nbgrp - \xdef\nbz{\inteval{\nbgrp-\nbchiffres}} - \xdef\resinter{\PLstrzeros{\nbz}\chbrut} - \num[digit-group-size=4,minimum-integer-digits=\nbgrp]{\resinter}= - \fi + \ifnum\nbchiffres<\nbgrp% + \xdef\nbz{\inteval{\nbgrp-\nbchiffres}}% + \xdef\resinter{\PLstrzeros{\nbz}\chbrut}% + \num[digit-group-size=4,minimum-integer-digits=\nbgrp]{\resinter}=% + \fi% %découpage par blocs et conversion en hexa := OK - \newcount\cpt - \cpt0 - \loop\ifnum \cpt<\nbblocs + \newcount\cpt% + \cpt0% + \loop\ifnum \cpt<\nbblocs% \def\iinit{\fpeval{4*\cpt+1}}% \def\ifinal{\fpeval{4*(\cpt+1)}}% \StrMid{\resinter}{\iinit}{\ifinal}[\blocinter]% - {\underbracket{\blocinter}_{\xintBinToHex{\blocinter}}\,} - \advance\cpt by 1 - \repeat - \!= + {\underbracket{\blocinter}_{\xintBinToHex{\blocinter}}\,}% + \advance\cpt by 1% + \repeat% + \!=% }% - {} - \xintBinToHex{\chbrut}\ifboolKV[CONVBINHEX]{AffBase}{_{16}}{} + {}% + \xintBinToHex{\chbrut}\ifboolKV[CONVBINHEX]{AffBase}{_{16}}{}% } %hexa/bin->dec avec écriture polynomiale @@ -94,62 +94,62 @@ \newcommand\ConversionVersDec[2][]{% \useKVdefault[CONVTODEC] \setKV[CONVTODEC]{#1}% on paramètres les nouvelles clés et on les simplifie - \def\nbdepart{#2} - \StrLen{\nbdepart}[\nbchiffres] - \StrChar{\nbdepart}{1}[\chiffre] + \def\nbdepart{#2}% + \StrLen{\nbdepart}[\nbchiffres]% + \StrChar{\nbdepart}{1}[\chiffre]% %si on est en base 16 \xintifboolexpr{\basedepart == 16}% {% - \nbdepart\ifboolKV[CONVTODEC]{AffBase}{_{\basedepart}}{} = + \nbdepart\ifboolKV[CONVTODEC]{AffBase}{_{\basedepart}}{} =% \ifboolKV[CONVTODEC]{Details}{% \xintHexToDec{\chiffre}\times\basedepart^{\inteval{\nbchiffres-1}}% - \newcount\cpt - \cpt2 - \loop\ifnum \cpt<\inteval{\nbchiffres+1} - \def\puiss{\inteval{\nbchiffres-\cpt}} - \StrChar{\nbdepart}{\cpt}[\chiffre] + \newcount\cpt% + \cpt2% + \loop\ifnum \cpt<\inteval{\nbchiffres+1}% + \def\puiss{\inteval{\nbchiffres-\cpt}}% + \StrChar{\nbdepart}{\cpt}[\chiffre]% \ifboolKV[CONVTODEC]{Zeros}% {% +\xintHexToDec{\chiffre}\times\basedepart^{\puiss}% - } - { - \ifnum\xintHexToDec{\chiffre} > 0 + }% + {% + \ifnum\xintHexToDec{\chiffre} > 0% +\xintHexToDec{\chiffre}\times\basedepart^{\puiss}% - \fi - } - \advance\cpt by 1 - \repeat - = - } - {} - \num{\xintHexToDec{\nbdepart}}\ifboolKV[CONVTODEC]{AffBase}{_{10}}{} + \fi% + }% + \advance\cpt by 1% + \repeat% + =% + }% + {}% + \num{\xintHexToDec{\nbdepart}}\ifboolKV[CONVTODEC]{AffBase}{_{10}}{}% }% - {} + {}% \xintifboolexpr{\basedepart == 2}% {% - \num[digit-group-size=4]{\nbdepart}\ifboolKV[CONVTODEC]{AffBase}{_{\basedepart}}{} = + \num[digit-group-size=4]{\nbdepart}\ifboolKV[CONVTODEC]{AffBase}{_{\basedepart}}{} =% \ifboolKV[CONVTODEC]{Details}{% \chiffre\times\basedepart^{\inteval{\nbchiffres-1}}% - \newcount\cpt - \cpt2 - \loop\ifnum \cpt<\inteval{\nbchiffres+1} - \def\puiss{\inteval{\nbchiffres-\cpt}} - \StrChar{\nbdepart}{\cpt}[\chiffre] + \newcount\cpt% + \cpt2% + \loop\ifnum \cpt<\inteval{\nbchiffres+1}% + \def\puiss{\inteval{\nbchiffres-\cpt}}% + \StrChar{\nbdepart}{\cpt}[\chiffre]% \ifboolKV[CONVTODEC]{Zeros}% {% +\chiffre\times\basedepart^{\puiss}% } { - \ifnum\chiffre > 0 + \ifnum\chiffre > 0% +\chiffre\times\basedepart^{\puiss}% - \fi - } - \advance\cpt by 1 - \repeat - = - } - {} - \num{\xintBinToDec{\nbdepart}}\ifboolKV[CONVTODEC]{AffBase}{_{10}}{} + \fi% + }% + \advance\cpt by 1% + \repeat% + =% + }% + {}% + \num{\xintBinToDec{\nbdepart}}\ifboolKV[CONVTODEC]{AffBase}{_{10}}{}% }% {}% } @@ -157,30 +157,30 @@ \newcommand\ConversionBaseDix[3][]{%1=options,%2=nb,%3=basedep ?? \useKVdefault[CONVTODEC] \setKV[CONVTODEC]{#1}% on paramètres les nouvelles clés et on les simplifie - \def\NBdepart{#2} - \def\basedepart{#3} - \StrLen{\NBdepart}[\nbchiffres] - \StrChar{\NBdepart}{1}[\chiffre] - \NBdepart\ifboolKV[CONVTODEC]{AffBase}{_{\basedepart}}{} = + \def\NBdepart{#2}% + \def\basedepart{#3}% + \StrLen{\NBdepart}[\nbchiffres]% + \StrChar{\NBdepart}{1}[\chiffre]% + \NBdepart\ifboolKV[CONVTODEC]{AffBase}{_{\basedepart}}{} =% \ifboolKV[CONVTODEC]{Details}{% \xintHexToDec{\chiffre}\times\basedepart^{\inteval{\nbchiffres-1}}% - \newcount\cpt - \cpt2 - \loop\ifnum \cpt<\inteval{\nbchiffres+1} - \def\puiss{\inteval{\nbchiffres-\cpt}} - \StrChar{\NBdepart}{\cpt}[\chiffre] + \newcount\cpt% + \cpt2% + \loop\ifnum \cpt<\inteval{\nbchiffres+1}% + \def\puiss{\inteval{\nbchiffres-\cpt}}% + \StrChar{\NBdepart}{\cpt}[\chiffre]% \ifboolKV[CONVTODEC]{Zeros}% {% +\xintHexToDec{\chiffre}\times\basedepart^{\puiss}% - } - { - \ifnum\xintHexToDec{\chiffre} > 0 + }% + {% + \ifnum\xintHexToDec{\chiffre} > 0% +\xintHexToDec{\chiffre}\times\basedepart^{\puiss}% - \fi - } - \advance\cpt by 1 - \repeat - = + \fi% + }% + \advance\cpt by 1% + \repeat% + =% }% {}% \num{\convertbasetobasedix{#2}{#3}}\ifboolKV[CONVTODEC]{AffBase}{_{10}}{}% @@ -231,7 +231,7 @@ } %dernière \xdef\ValQ{\fpeval{trunc(\ValTMP/#3,0)}}\xdef\ValR{\fpeval{\ValTMP-#3*\ValQ}}% - \\ \num{\ValTMP}\uppercase{&}\num{\ValB}\times\num{\ValQ}\uppercase{&}\PLnoeud{\PLConvNoeud2}{\num{\ValR}} + \\ \num{\ValTMP}\uppercase{&}\num{\ValB}\times\num{\ValQ}\uppercase{&}\PLnoeud{\PLConvNoeud2}{\num{\ValR}}% \end{array} \right| \Rightarrow \num{#2}_{10}=\ifboolKV[convfromten]{CouleurRes}{\mathcolor{\PLConvCouleur}{\convertbasedixtobase{#2}{#3}_{#3}}}{\convertbasedixtobase{#2}{#3}_{#3}}}% \ifboolKV[convfromten]{Rect}% {% @@ -263,6 +263,8 @@ AfficheDelimiteurs=true } +\RequirePackage{xintgcd} + \newcommand\PresentationPGCD[3][]{% \useKVdefault[prespgcd]% \setKV[prespgcd]{#1}% @@ -274,7 +276,7 @@ {}% \begin{array}{@{\,}r@{\;=\;}l@{\;+\;}r} %1ère division - \xdef\ValQ{\fpeval{trunc(\ValA/\ValB,0)}}\xdef\ValR{\fpeval{\ValA-\ValB*\ValQ}} + \xdef\ValQ{\fpeval{trunc(\ValA/\ValB,0)}}\xdef\ValR{\fpeval{\ValA-\ValB*\ValQ}}% \num{\ValA}\uppercase{&}\num{\ValB}\times\num{\ValQ}\uppercase{&}% \xintifboolexpr{\ValR == \respgcd}% {\PLnoeud{\PLPGCDNoeud1}{\num{\ValR}}}%noeud si c'est le pgcd @@ -308,4 +310,150 @@ }{}% } +%%===égalité de Bezout +\NewDocumentCommand\AffCoeffBezout{ m }{% + \xintifboolexpr{#1 < 0}% + {\left( \num{#1} \right)}% + {\num{#1}}% +} +\NewDocumentCommand\EgaliteBezout{ O{black} m m }{% + \xintAssign{\xintBezout{#2}{#3}}\to\TmpU\TmpV\TmpD% + \ensuremath{\num{#2} \times \mathcolor{#1}{\AffCoeffBezout{\TmpU}} + \AffCoeffBezout{#3} \times \mathcolor{#1}{\AffCoeffBezout{\TmpV}} = \num{\TmpD}}% +} + +%%===Équations diophantiennes +\RequirePackage{cancel} +\NewDocumentCommand\AffCoeffDioph{ m }{% + \xintifboolexpr{#1 < 0}% + {\left( \num{#1} \right)}% + {\num{#1}}% +} +\NewDocumentCommand\AffCoeffDiophSign{ m }{% + \xintifboolexpr{#1 < 0}% + {\num{#1}}% + {+\num{#1}}% +} + +\defKV[eqdioph]{% + Lettre=\def\LettreSolEDioph{#1},% + Couleur=\def\CouleurSolEDioph{#1},% + Inconnues=\def\InconnuesSolEDioph{#1},% + Entier=\def\KKK{#1} +} + +\setKVdefault[eqdioph]{% + Lettre=E,% + Couleur=black,% + Inconnues=x/y,% + Entier=k,% + Cadres=false,% + PresPGCD=true +} + +\NewDocumentCommand\EquationDiophantienne{ O{} m }{%v2 avec équation en "dur" + \useKVdefault[eqdioph]% + \setKV[eqdioph]{#1}% + \setlength{\parindent}{0pt}% + %extractions des paramètres + \StrBefore[1]{\InconnuesSolEDioph}{/}[\XXX]% + \StrBehind[1]{\InconnuesSolEDioph}{/}[\YYY]% + \StrBefore{#2}{\XXX}[\AA]% + \StrBetween{#2}{\XXX}{\YYY}[\BB]% + \StrBehind{#2}{=}[\CC]% + \IfStrEq{\AA}{}% + {\def\AA{1}}{}% + \IfStrEq{\AA}{-}% + {\def\AA{-1}}{}% + \StrLen{\BB}[\lgtB]% + \xintifboolexpr{ \lgtB > 1 }%+b ou -b + {% + \StrDel{\BB}{+}[\BB]% + }% + {% + \IfStrEq{\BB}{-}% + {\def\BB{-1}}{}% + \IfStrEq{\BB}{+}% + {\def\BB{1}}{}% + }% + %Calcul du PGCD + \xdef\PGCDD{\xinteval{gcd(\AA,\BB)}}% + On cherche à résoudre l'équation diophantienne :\[ \num{\AA}\XXX + \AffCoeffDioph{\BB}\YYY=\num{\CC} \xintifboolexpr{ \PGCDD == 1 'or' \xintiiRem{\CC}{\PGCDD} != 0 }{\qquad (\LettreSolEDioph)}{} \]% + \ifboolKV[eqdioph]{PresPGCD}% + {D'après l'algorithme d'Euclide : \PresentationPGCD[Rectangle=false]{\xinteval{abs(\AA)}}{\xinteval{abs(\BB)}}.}% + {Le PGCD de \num{\AA} et de \num{\BB} vaut \num{\PGCDD}.}% + \par\smallskip + \xintifboolexpr{ \xintiiRem{\CC}{\PGCDD} == 0 }%solutions obligatoires + {% + \xintifboolexpr{ \PGCDD == 1}% + {% + Les entiers \num{\xinteval{abs(\AA)}} et \num{\xinteval{abs(\BB)}} sont premiers entre eux, donc l'équation $(\LettreSolEDioph)$ admet une infinité de solutions.\par + \xdef\AAA{\AA}\xdef\BBB{\BB}\xdef\CCC{\CC}% + }% + {% + Le PGCD de \num{\AA} et \num{\BB} divise \num{\CC}, donc on peut simplifier l'équation diophantienne par \num{\PGCDD}.% + \xdef\AAA{\xintiieval{\AA/\PGCDD}}\xdef\BBB{\xintiieval{\BB/\PGCDD}}\xdef\CCC{\xintiieval{\CC/\PGCDD}}% + % + \[ \num{\AA}\XXX+\AffCoeffDioph{\BB}\YYY=\num{\CC} \underset{\div\num{\PGCDD}}{\Longleftrightarrow} \num{\AAA}\XXX+\AffCoeffDioph{\BBB}\YYY=\num{\CCC} \qquad (\LettreSolEDioph) \]% + Les entiers \num{\AAA} et \num{\BBB} sont premiers entre eux, donc l'équation $(\LettreSolEDioph)$ admet une infinité de solutions.\par + }% + \xintAssign{\xintBezout{\AAA}{\BBB}}\to\TmpU\TmpV\TmpD + % + On détermine une solution particulière de $(E)$ : \[ \num{\AAA} \times \mathcolor{\CouleurSolEDioph}{\AffCoeffBezout{\TmpU}} + \AffCoeffBezout{\BBB} \times \mathcolor{\CouleurSolEDioph}{\AffCoeffBezout{\TmpV}} = \num{\TmpD} + \xintifboolexpr{ \CCC != 1}% + {% + \underset{\times\AffCoeffDioph{\CCC}}{\implies} + \num{\AAA} \times \mathcolor{\CouleurSolEDioph}{\AffCoeffDioph{\xinteval{\TmpU*\CCC}}} + \AffCoeffBezout{\BBB} \times \mathcolor{\CouleurSolEDioph}{\AffCoeffDioph{\xinteval{\TmpV*\CCC}}} = \num{\CCC} + }% + {}% + \qquad ({\LettreSolEDioph}_0) + \]% + % + Par soustraction : + % + \[% + {\renewcommand\arraystretch{1.25}% + \begin{array}{ @{\,} c @{\,} c @{\;\times\;} c @{\;+\;} c @{\;\times\;} c @{\;=\;} c } + & \num{\AAA} & \XXX & \AffCoeffDioph{\BBB} & \YYY & \num{\CCC} \\ + -~~~~~ & \num{\AAA} & \mathcolor{\CouleurSolEDioph}{\AffCoeffDioph{\xinteval{\TmpU*\CCC}}} & \AffCoeffDioph{\BBB} & \mathcolor{\CouleurSolEDioph}{\AffCoeffDioph{\xinteval{\TmpV*\CCC}}} & \num{\CCC} \\ \hline + & \num{\AAA} & \left( \XXX \mathcolor{\CouleurSolEDioph}{\AffCoeffDiophSign{\xinteval{-\TmpU*\CCC}}} \right)& \AffCoeffDioph{\BBB} & \left( \YYY \mathcolor{\CouleurSolEDioph}{\AffCoeffDiophSign{\xinteval{-\TmpV*\CCC}}} \right) & 0\\ + \end{array}} + \]% + \xdef\TmpPartieA{\XXX \mathcolor{\CouleurSolEDioph}{\AffCoeffDiophSign{\xinteval{-\TmpU*\CCC}}}}% + \xdef\TmpPartieB{\YYY \mathcolor{\CouleurSolEDioph}{\AffCoeffDiophSign{\xinteval{-\TmpV*\CCC}}}}% + % + On en déduit que $\num{\AAA} \times \underbrace{\left( \TmpPartieA \right)}_{\text{entier}} = \num{\xinteval{-\BBB}} \times \left( \TmpPartieB \right)$, et donc que $\num{\AAA} \mid \num{\xinteval{-\BBB}} \times \left( \TmpPartieB \right)$.\par\smallskip + Or \num{\xinteval{abs(\AAA)}} et \num{\xinteval{abs(\BBB)}} sont premiers entre eux, donc d'après le théorème de Gauss, on a $\num{\AAA} \mid \TmpPartieB$.\par + Il existe donc un entier $\KKK$ tel que $\TmpPartieB = \num{\AAA} \times \KKK$, ce qui donne + $\ifboolKV[eqdioph]{Cadres} + {\boxed{\YYY = \mathcolor{\CouleurSolEDioph}{\num{\xinteval{\CCC*\TmpV}}} \AffCoeffDiophSign{\AAA}\KKK}} + {\YYY = \mathcolor{\CouleurSolEDioph}{\num{\xinteval{\CCC*\TmpV}}} \AffCoeffDiophSign{\AAA}\KKK} + $.\par + En remplaçant, on obtient : + % + \begin{align*} + \num{\AAA} \times \left( \TmpPartieA \right) = \num{\xinteval{-\BBB}} \times \left( \TmpPartieB \right) & \implies \num{\AAA} \times \left( \TmpPartieA \right) = \num{\xinteval{-\BBB}} \times \big( \underbrace{\mathcolor{\CouleurSolEDioph}{\num{\xinteval{\CCC*\TmpV}}} \AffCoeffDiophSign{\AAA}\KKK}_{\mathclap{\YYY}} \mathcolor{\CouleurSolEDioph}{\AffCoeffDiophSign{\xinteval{-\CCC*\TmpV}}} \big) \\ + & \implies \num{\AAA} \times \left( \TmpPartieA \right) = \num{\xinteval{-\BBB}} \times \left( \num{\AAA}\KKK \right) \\ + & \implies \TmpPartieA = \num{\xinteval{-\BBB}}\KKK \\ + & \implies \ifboolKV[eqdioph]{Cadres} + {\boxed{\XXX = \mathcolor{\CouleurSolEDioph}{\num{\xinteval{\CCC*\TmpU}}} \AffCoeffDiophSign{\xinteval{-\BBB}}\KKK}} + {\XXX = \mathcolor{\CouleurSolEDioph}{\num{\xinteval{\CCC*\TmpU}}} \AffCoeffDiophSign{\xinteval{-\BBB}}\KKK} + \end{align*} + % + Ainsi, si $\XXX$ et $\YYY$ sont solutions de $(\LettreSolEDioph)$, alors il existe un entier $\KKK$ tel que ${\XXX=\mathcolor{\CouleurSolEDioph}{\num{\xinteval{\CCC*\TmpU}}} \AffCoeffDiophSign{\xinteval{-\BBB}}\KKK}$ et ${\YYY=\mathcolor{\CouleurSolEDioph}{\num{\xinteval{\CCC*\TmpV}}} \AffCoeffDiophSign{\AAA}\KKK}$.\par\medskip + Réciproquement, soit $\KKK$ un entier quelconque : + % + \begin{align*} + \num{\AAA} \times \left( \mathcolor{\CouleurSolEDioph}{\num{\xinteval{\CCC*\TmpU}}} \AffCoeffDiophSign{\xinteval{-\BBB}}\KKK \right) + \AffCoeffDioph{\BBB} \times \left( \mathcolor{\CouleurSolEDioph}{\num{\xinteval{\CCC*\TmpV}}} \AffCoeffDiophSign{\AAA}\KKK \right) & = \num{\AAA} \times \mathcolor{\CouleurSolEDioph}{\AffCoeffDioph{\xinteval{\CCC*\TmpU}}} + \cancel{\AffCoeffDioph{\AAA} \times \AffCoeffDioph{\xinteval{-\BBB}} \KKK} + \AffCoeffDioph{\BBB} \times \mathcolor{\CouleurSolEDioph}{\AffCoeffDioph{\xinteval{\CCC*\TmpV}}} + \cancel{\AffCoeffDioph{\BBB} \times \AffCoeffDioph{\AAA} \KKK} \\ + & = \underbrace{\num{\AAA} \times \mathcolor{\CouleurSolEDioph}{\AffCoeffDioph{\xinteval{\CCC*\TmpU}}} + \AffCoeffDioph{\BBB} \times \mathcolor{\CouleurSolEDioph}{\AffCoeffDioph{\xinteval{\CCC*\TmpV}}}}_{=\,\num{\CCC} \text{ d'après } ({\LettreSolEDioph}_0)} \\ + & = \num{\CCC} + \end{align*} + % + On en déduit que $\left(\mathcolor{\CouleurSolEDioph}{\num{\xinteval{\CCC*\TmpU}}} \AffCoeffDiophSign{\xinteval{-\BBB}}\KKK \mathpunct{}; \mathcolor{\CouleurSolEDioph}{\num{\xinteval{\CCC*\TmpV}}} \AffCoeffDiophSign{\AAA}\KKK \right)$ est solution de $(\LettreSolEDioph)$.\par\medskip + En conclusion, les solutions de $(E)$ sont donc les couples $\left(\mathcolor{\CouleurSolEDioph}{\num{\xinteval{\CCC*\TmpU}}} \AffCoeffDiophSign{\xinteval{-\BBB}}\KKK \mathpunct{}; \mathcolor{\CouleurSolEDioph}{\num{\xinteval{\CCC*\TmpV}}} \AffCoeffDiophSign{\AAA}\KKK \right)$, avec $\KKK$ un entier relatif. + }% + {% + Le PGCD de \num{\AA} et \num{\BB} ne divise pas \num{\CC}, donc l'équation $(\LettreSolEDioph)$ n'admet aucune solution. + }% +} + \endinput
\ No newline at end of file diff --git a/macros/latex/contrib/proflycee/tex/proflycee-tools-geom.tex b/macros/latex/contrib/proflycee/tex/proflycee-tools-geom.tex index 93e0e09191..1758c015fd 100644 --- a/macros/latex/contrib/proflycee/tex/proflycee-tools-geom.tex +++ b/macros/latex/contrib/proflycee/tex/proflycee-tools-geom.tex @@ -135,5 +135,493 @@ mainlevee/.default={5mm et 0.6pt} } +%%Equations Cartésiennes + Affichages coordonnées +\RequirePackage{nicematrix} +\NewDocumentCommand\AffCoeffSgn{ s O{} m m D<>{} }{% + \IfStrEq{#5}{}%si argument vide, on convertit en fraction + {% + \xintifboolexpr{\xinteval{#3} == 0}% + {}%on n'affiche rien si le coeff est nul + {%sinon on teste >0 puis else + \xintifboolexpr{\xinteval{#3} > 0}% + {% + \IfBooleanTF{#1}{}{+}% + \xintifboolexpr{\xinteval{#3} == 1}% + {#4}% + {\ConversionFraction[#2]{#3}#4}% + }% + {% + \xintifboolexpr{\xinteval{#3} == -1}% + {-#4\relax}% + {\ConversionFraction[#2]{#3}#4}% + }% + }% + }% + %sinon on met en brut + {% + #3#4 + }% +} + +\NewDocumentCommand\AffCoeffSgnSimpl{ s O{} m D<>{} }{% + \IfStrEq{#4}{}%si argument vide, on convertit en fraction + {% + \xintifboolexpr{\xinteval{#3} == 0}% + {}%on n'affiche rien si le coeff est nul + {%sinon on teste >0 puis else + \xintifboolexpr{\xinteval{#3} > 0}% + {% + \IfBooleanTF{#1}{}{+}% + \xintifboolexpr{\xinteval{#3} == 1}% + {#3}% + {+\ConversionFraction[#2]{#3}}% + }% + {% + \xintifboolexpr{\xinteval{#3} == -1}% + {#3\relax}% + {\ConversionFraction[#2]{#3}}% + } % + }% + }% + %sinon on met en brut + {% + #3 + }% +} + +\defKV[eqcartplan]{% + OptionCoeffs=\def\eqcartplformat{#1},% + Facteur=\def\eqcartplfact{#1} +} + +\setKVdefault[eqcartplan]{% + OptionCoeffs={d},% + SimplifCoeffs=false,% + Facteur=1 +} + +\NewDocumentCommand\TrouveEqCartPlan{ O{} r() r() d() }{%test commande générique avec VP ou PPP ou PVV + \restoreKV[eqcartplan]% revenir au valeurs par défaut + \setKV[eqcartplan]{#1}% lit les arguments optionnels + \IfNoValueTF{#4}%c'est Vect+Point + {% + \setsepchar{;}\readlist*\CoordVecNorm{#2}% + \setsepchar{,}\readlist*\CoordPt{#3}% + \itemtomacro\CoordVecNorm[1]\vecnx% + \itemtomacro\CoordVecNorm[2]\vecny% + \itemtomacro\CoordVecNorm[3]\vecnz% + \itemtomacro\CoordPt[1]\xpta% + \itemtomacro\CoordPt[2]\ypta% + \itemtomacro\CoordPt[3]\zpta% + %calculs + \xdef\coeffd{-((\xpta)*(\vecnx)+(\ypta)*(\vecny)+(\zpta)*(\vecnz))}% + \xdef\PPCMDenom{\xinteval{lcm([\xintDenominator{\xintIrr{\xinteval{\vecnx}}},\xintDenominator{\xintIrr{\xinteval{\vecny}}},\xintDenominator{\xintIrr{\xinteval{\vecnz}}},\xintDenominator{\xintIrr{\xinteval{\coeffd}}}])}}% + \xdef\PGCDsiEntiers{1}% + \xintifboolexpr{\xinteval{isint(\vecnx)}*\xinteval{isint(\vecny)}*\xinteval{isint(\vecnz)}*\xinteval{isint(\coeffd)} == 1}%tous les coeffs sont entiers + {% + \xdef\PGCDsiEntiers{\xinteval{gcd([\xinteval{\vecnx},\xinteval{\vecny},\xinteval{\vecnz},\xinteval{\coeffd}])}}% + }% + {}% + %affichages + \ifboolKV[eqcartplan]{SimplifCoeffs}% + {% + \AffCoeffSgn*[\eqcartplformat]{(\vecnx)*(\eqcartplfact)*\PPCMDenom/\PGCDsiEntiers}{x} \AffCoeffSgn[\eqcartplformat]{(\vecny)*(\eqcartplfact)*\PPCMDenom/\PGCDsiEntiers}{y} \AffCoeffSgn[\eqcartplformat]{(\vecnz)*(\eqcartplfact)*\PPCMDenom/\PGCDsiEntiers}{z} \AffCoeffSgnSimpl*[\eqcartplformat]{\coeffd*\PPCMDenom/\PGCDsiEntiers} = 0% + }% + {% + \AffCoeffSgn*[\eqcartplformat]{\vecnx}{x} \AffCoeffSgn[\eqcartplformat]{\vecny}{y} \AffCoeffSgn[\eqcartplformat]{\vecnz}{z} \AffCoeffSgnSimpl*[\eqcartplformat]{\coeffd} = 0% + }% + }%sinon c'est Point+Point+Point ou vectdir+vectdir+point + {% + \IfSubStr{#2}{,}%c'est point+point+point + {% + \setsepchar{,}\readlist*\CoordPtA{#2}% + \setsepchar{,}\readlist*\CoordPtB{#3}% + \setsepchar{,}\readlist*\CoordPtC{#4}% + \itemtomacro\CoordPtA[1]\ptxa% + \itemtomacro\CoordPtA[2]\ptya% + \itemtomacro\CoordPtA[3]\ptza% + \itemtomacro\CoordPtB[1]\ptxb% + \itemtomacro\CoordPtB[2]\ptyb% + \itemtomacro\CoordPtB[3]\ptzb% + \itemtomacro\CoordPtC[1]\ptxc% + \itemtomacro\CoordPtC[2]\ptyc% + \itemtomacro\CoordPtC[3]\ptzc% + %calculs + \xdef\vecxab{(\ptxb-\ptxa)}% + \xdef\vecyab{(\ptyb-\ptya)}% + \xdef\veczab{(\ptzb-\ptza)}% + \xdef\vecxac{(\ptxc-\ptxa)}% + \xdef\vecyac{(\ptyc-\ptya)}% + \xdef\veczac{(\ptzc-\ptza)}% + %coeffs a/b/c + \xdef\coeffa{(\vecyab*\veczac-\veczab*\vecyac)}% + \xdef\coeffb{(\vecxac*\veczab-\vecxab*\veczac)}% + \xdef\coeffc{(\vecxab*\vecyac-\vecxac*\vecyab)}% + %coeffd + \xdef\coeffd{(-(\ptxa)*\vecyab*\veczac-(\ptza)*\vecxab*\vecyac-(\ptya)*\vecxac*\veczab+(\ptza)*\vecyab*\vecxac+(\ptxa)*\veczab*\vecyac+(\ptya)*\vecxab*\veczac)}% + %pour simplifier + \xdef\PPCMDenom{\xinteval{lcm([\xintDenominator{\xintIrr{\xinteval{\coeffa}}},\xintDenominator{\xintIrr{\xinteval{\coeffb}}},\xintDenominator{\xintIrr{\xinteval{\coeffc}}},\xintDenominator{\xintIrr{\xinteval{\coeffd}}}])}}% + \xdef\PGCDsiEntiers{1}% + \xintifboolexpr{\xinteval{isint(\coeffa)}*\xinteval{isint(\coeffb)}*\xinteval{isint(\coeffc)}*\xinteval{isint(\coeffd)} == 1}%tous les coeffs sont entiers + {% + \xdef\PGCDsiEntiers{\xinteval{gcd([\xinteval{\coeffa},\xinteval{\coeffb},\xinteval{\coeffc},\xinteval{\coeffd}])}}% + }% + {}% + %affichages + \ifboolKV[eqcartplan]{SimplifCoeffs}% + {% + \AffCoeffSgn*[\eqcartplformat]{\coeffa*(\eqcartplfact)*\PPCMDenom/\PGCDsiEntiers}{x} \AffCoeffSgn[\eqcartplformat]{\coeffb*(\eqcartplfact)*\PPCMDenom/\PGCDsiEntiers}{y} \AffCoeffSgn[\eqcartplformat]{\coeffc*(\eqcartplfact)*\PPCMDenom/\PGCDsiEntiers}{z} \AffCoeffSgnSimpl*[\eqcartplformat]{\coeffd*(\eqcartplfact)*\PPCMDenom/\PGCDsiEntiers} = 0% + }% + {% + \AffCoeffSgn*[\eqcartplformat]{\coeffa}{x} \AffCoeffSgn[\eqcartplformat]{\coeffb}{y} \AffCoeffSgn[\eqcartplformat]{\coeffc}{z} \AffCoeffSgnSimpl*[\eqcartplformat]{\coeffd} = 0% + }% + }% + {% + \setsepchar{;}\readlist*\CoordVecA{#2}% + \setsepchar{;}\readlist*\CoordVecB{#3}% + \setsepchar{,}\readlist*\CoordPtC{#4}% + \itemtomacro\CoordVecA[1]\vecxab% + \itemtomacro\CoordVecA[2]\vecyab% + \itemtomacro\CoordVecA[3]\veczab% + \itemtomacro\CoordVecB[1]\vecxac% + \itemtomacro\CoordVecB[2]\vecyac% + \itemtomacro\CoordVecB[3]\veczac% + \itemtomacro\CoordPtC[1]\ptxc% + \itemtomacro\CoordPtC[2]\ptyc% + \itemtomacro\CoordPtC[3]\ptzc% + %coeff a/b/c + \xdef\coeffa{((\vecyab)*(\veczac)-(\vecyac)*(\veczab))}% + \xdef\coeffb{((\veczab)*(\vecxac)-(\veczac)*(\vecxab))}% + \xdef\coeffc{((\vecxab)*(\vecyac)-(\vecxac)*(\vecyab))}% + %coeffd + \xdef\coeffd{-((\ptxc)*\coeffa+(\ptyc)*\coeffb+(\ptzc)*\coeffc)}% + %pour simplifier + \xdef\PPCMDenom{\xinteval{lcm([\xintDenominator{\xintIrr{\xinteval{\coeffa}}},\xintDenominator{\xintIrr{\xinteval{\coeffb}}},\xintDenominator{\xintIrr{\xinteval{\coeffc}}},\xintDenominator{\xintIrr{\xinteval{\coeffd}}}])}}% + \xdef\PGCDsiEntiers{1}% + \xintifboolexpr{\xinteval{isint(\coeffa)}*\xinteval{isint(\coeffb)}*\xinteval{isint(\coeffc)}*\xinteval{isint(\coeffd)} == 1}%tous les coeffs sont entiers + {% + \xdef\PGCDsiEntiers{\xinteval{gcd([\xinteval{\coeffa},\xinteval{\coeffb},\xinteval{\coeffc},\xinteval{\coeffd}])}}% + }% + {}% + %affichages + \ifboolKV[eqcartplan]{SimplifCoeffs}% + {% + \AffCoeffSgn*[\eqcartplformat]{\coeffa*(\eqcartplfact)*\PPCMDenom/\PGCDsiEntiers}{x} \AffCoeffSgn[\eqcartplformat]{\coeffb*(\eqcartplfact)*\PPCMDenom/\PGCDsiEntiers}{y} \AffCoeffSgn[\eqcartplformat]{\coeffc*(\eqcartplfact)*\PPCMDenom/\PGCDsiEntiers}{z} \AffCoeffSgnSimpl*[\eqcartplformat]{\coeffd*(\eqcartplfact)*\PPCMDenom/\PGCDsiEntiers} = 0% + }% + {% + \AffCoeffSgn*[\eqcartplformat]{\coeffa}{x} \AffCoeffSgn[\eqcartplformat]{\coeffb}{y} \AffCoeffSgn[\eqcartplformat]{\coeffc}{z} \AffCoeffSgnSimpl*[\eqcartplformat]{\coeffd} = 0% + }% + }% + }% +} + +\defKV[eqcartdroite]{% + OptionCoeffs=\def\eqcartdteformat{#1},% + Facteur=\def\eqcartdtefact{#1} +} + +\setKVdefault[eqcartdroite]{% + OptionCoeffs={d},% + SimplifCoeffs=false,% + VectDirecteur=false,% + Facteur=1 +} + +\NewDocumentCommand\TrouveEqCartDroite{ O{} r() r() }{%vect/point ou point/point + \restoreKV[eqcartdroite]% revenir au valeurs par défaut + \setKV[eqcartdroite]{#1}% lit les arguments optionnels + %on teste si c'est point/point + \IfSubStr{#2}{;}%c'est vecteur+point, sinon c'est point+point + {% + \setsepchar{;}\readlist*\CoordVec{#2}% + \setsepchar{,}\readlist*\CoordPt{#3}% + \itemtomacro\CoordVec[1]\vecnx% + \itemtomacro\CoordVec[2]\vecny% + \itemtomacro\CoordPt[1]\xpta% + \itemtomacro\CoordPt[2]\ypta% + %calculs + \ifboolKV[eqcartdroite]{VectDirecteur}% + {% + \xdef\coeffd{((\xpta)*(\vecny)-(\ypta)*(\vecnx))}% + }% + {% + \xdef\coeffd{-((\xpta)*(\vecnx)+(\ypta)*(\vecny))}% + }% + \xdef\PPCMDenom{\xinteval{lcm([\xintDenominator{\xintIrr{\xinteval{\vecnx}}},\xintDenominator{\xintIrr{\xinteval{\vecny}}},\xintDenominator{\xintIrr{\xinteval{\coeffd}}}])}}% + \xdef\PGCDsiEntiers{1}% + \xintifboolexpr{\xinteval{isint(\vecnx)}*\xinteval{isint(\vecny)}*\xinteval{isint(\coeffd)} == 1}%tous les coeffs sont entiers + {% + \xdef\PGCDsiEntiers{\xinteval{gcd([\xinteval{\vecnx},\xinteval{\vecny},\xinteval{\coeffd}])}}% + }% + {}% + %affichages + \ifboolKV[eqcartdroite]{SimplifCoeffs}% + {% + \ifboolKV[eqcartdroite]{VectDirecteur}% + {% + \AffCoeffSgn*[\eqcartdteformat]{-(\vecny)*(\eqcartdtefact)*\PPCMDenom/\PGCDsiEntiers}{x} \AffCoeffSgn[\eqcartdteformat]{(\vecnx)*(\eqcartdtefact)*\PPCMDenom/\PGCDsiEntiers}{y} \AffCoeffSgnSimpl*[\eqcartdteformat]{\coeffd*(\eqcartdtefact)*\PPCMDenom/\PGCDsiEntiers} = 0% + }% + {% + \AffCoeffSgn*[\eqcartdteformat]{(\vecnx)*(\eqcartdtefact)*\PPCMDenom/\PGCDsiEntiers}{x} \AffCoeffSgn[\eqcartdteformat]{(\vecny)*(\eqcartdtefact)*\PPCMDenom/\PGCDsiEntiers}{y} \AffCoeffSgnSimpl*[\eqcartdteformat]{\coeffd*(\eqcartdtefact)*\PPCMDenom/\PGCDsiEntiers} = 0% + }% + }% + {% + \ifboolKV[eqcartdroite]{VectDirecteur}% + {% + \AffCoeffSgn*[\eqcartdteformat]{-(\vecny)}{x} \AffCoeffSgn[\eqcartdteformat]{\vecnx}{y} \AffCoeffSgnSimpl*[\eqcartdteformat]{\coeffd} = 0% + }% + {% + \AffCoeffSgn*[\eqcartdteformat]{\vecnx}{x} \AffCoeffSgn[\eqcartdteformat]{\vecny}{y} \AffCoeffSgnSimpl*[\eqcartdteformat]{\coeffd} = 0% + }% + }% + }% + {% + \setsepchar{,}\readlist*\CoordPtA{#2}% + \setsepchar{,}\readlist*\CoordPtB{#3}% + \itemtomacro\CoordPtA[1]\xpta% + \itemtomacro\CoordPtA[2]\ypta% + \itemtomacro\CoordPtB[1]\xptb% + \itemtomacro\CoordPtB[2]\yptb% + \xdef\vecnx{((\xptb)-(\xpta))}% + \xdef\vecny{((\yptb)-(\ypta))}% + %calculs + \xdef\coeffd{((\xpta)*(\vecny)-(\ypta)*(\vecnx))}% + \xdef\PPCMDenom{\xinteval{lcm([\xintDenominator{\xintIrr{\xinteval{\vecnx}}},\xintDenominator{\xintIrr{\xinteval{\vecny}}},\xintDenominator{\xintIrr{\xinteval{\coeffd}}}])}}% + \xdef\PGCDsiEntiers{1}% + \xintifboolexpr{\xinteval{isint(\vecnx)}*\xinteval{isint(\vecny)}*\xinteval{isint(\coeffd)} == 1}%tous les coeffs sont entiers + {% + \xdef\PGCDsiEntiers{\xinteval{gcd([\xinteval{\vecnx},\xinteval{\vecny},\xinteval{\coeffd}])}}% + }% + {}% + %affichages + \ifboolKV[eqcartdroite]{SimplifCoeffs}% + {% + \AffCoeffSgn*[\eqcartdteformat]{-(\vecny)*(\eqcartdtefact)*\PPCMDenom/\PGCDsiEntiers}{x} \AffCoeffSgn[\eqcartdteformat]{(\vecnx)*(\eqcartdtefact)*\PPCMDenom/\PGCDsiEntiers}{y} \AffCoeffSgnSimpl*[\eqcartdteformat]{\coeffd*(\eqcartdtefact)*\PPCMDenom/\PGCDsiEntiers} = 0% + }% + {% + \AffCoeffSgn*[\eqcartdteformat]{-(\vecny)}{x} \AffCoeffSgn[\eqcartdteformat]{(\vecnx)}{y} \AffCoeffSgnSimpl*[\eqcartdteformat]{\coeffd} = 0% + }% + }% +} + +\NewDocumentCommand\AffVecteur{ O{d} D<>{} r() }{% + \setsepchar{;}\readlist*\CoordVec{#3}% + \xintifboolexpr{\CoordVeclen == 2}% + {% + \IfSubStr{#1}{;}%si l'option est globale... + {% + \setsepchar{;}\readlist*\OptVec{#1}% + \itemtomacro\OptVec[1]\optvecx% + \itemtomacro\OptVec[2]\optvecy% + }% + {% + \xdef\optvecx{#1}\xdef\optvecy{#1}% + }% + \itemtomacro\CoordVec[1]\vecx% + \itemtomacro\CoordVec[2]\vecy% + \begin{pNiceMatrix}[#2] \ConversionFraction[\optvecx]{\vecx} \\ \ConversionFraction[\optvecy]{\vecy} \end{pNiceMatrix}% + }% + {}% + \xintifboolexpr{\CoordVeclen == 3}% + {% + \IfSubStr{#1}{;}%si l'option est globale... + {% + \setsepchar{;}\readlist*\OptVec{#1}% + \itemtomacro\OptVec[1]\optvecx% + \itemtomacro\OptVec[2]\optvecy% + \itemtomacro\OptVec[3]\optvecz% + }% + {% + \xdef\optvecx{#1}\xdef\optvecy{#1}\xdef\optvecz{#1}% + }% + \itemtomacro\CoordVec[1]\vecx% + \itemtomacro\CoordVec[2]\vecy% + \itemtomacro\CoordVec[3]\vecz% + \begin{pNiceMatrix}[#2] \ConversionFraction[\optvecx]{\vecx} \\ \ConversionFraction[\optvecy]{\vecy} \\ \ConversionFraction[\optvecz]{\vecz} \end{pNiceMatrix}% + }% + {}% +} + +\NewDocumentCommand\AffPoint{ O{d} r() }{% + \setsepchar{,} + \readlist*\CoordPt{#2}% + \xintifboolexpr{\CoordPtlen == 2}% + {% + \IfSubStr{#1}{,}%si l'option est globale... + {% + \setsepchar{,}\readlist*\OptPt{#1}% + \itemtomacro\OptPt[1]\optptx% + \itemtomacro\OptPt[2]\optpty% + }% + {% + \xdef\optptx{#1}\xdef\optpty{#1}% + }% + \itemtomacro\CoordPt[1]\ptx% + \itemtomacro\CoordPt[2]\pty% + \left( \ConversionFraction[\optptx]{\ptx} ; \ConversionFraction[\optpty]{\pty} \right)% + }% + {}% + \xintifboolexpr{\CoordPtlen == 3}% + {% + \IfSubStr{#1}{,}%si l'option est globale... + {% + \setsepchar{,}\readlist*\OptPt{#1}% + \itemtomacro\OptPt[1]\optptx% + \itemtomacro\OptPt[2]\optpty% + \itemtomacro\OptPt[3]\optptz% + }% + {% + \xdef\optptx{#1}\xdef\optpty{#1}\xdef\optptz{#1}% + }% + \itemtomacro\CoordPt[1]\ptx% + \itemtomacro\CoordPt[2]\pty% + \itemtomacro\CoordPt[3]\ptz% + \left( \ConversionFraction[\optptx]{\ptx} ; \ConversionFraction[\optpty]{\pty} ; \ConversionFraction[\optptz]{\ptz} \right)% + }% + {}% +} + +%%Équation paramétrique de droite +\defKV[eqparamdroite]{% + OptionCoeffs=\def\eqparamdteformat{#1},% + Reel=\def\eqparamdtereel{#1} +} + +\setKVdefault[eqparamdroite]{% + OptionCoeffs={d},% + Reel=k,% + Aligne=false,% + Oppose=false,% + Rgras=false +} + +\NewDocumentCommand\AffVarDteParam{ m m }{% + \xdef\restmp{\ConversionFraction[\eqparamdteformat]{#1} \AffCoeffSgn[\eqcartdteformat]{#2}{\eqparamdtereel}}% + \xintifboolexpr{\xinteval{#1} == 0 'and' \xinteval{#2} == 0}{\xdef\restmp{0}}{}% + \xintifboolexpr{\xinteval{#1} == 0 'and' \xinteval{#2} != 0}{\xdef\restmp{\AffCoeffSgn*[\eqcartdteformat]{#2}{\eqparamdtereel}}}{}% + \restmp% +} + +\NewDocumentCommand\AffVarDteParamAlign{ m m }{% + \xdef\restmp{\ConversionFraction[\eqparamdteformat]{#1} & \AffCoeffSgn[\eqcartdteformat]{#2}{\eqparamdtereel}}% + \xintifboolexpr{\xinteval{#1} == 0 'and' \xinteval{#2} == 0}{\xdef\restmp{0 & }}{}% + \xintifboolexpr{\xinteval{#1} == 0 'and' \xinteval{#2} != 0}{\xdef\restmp{ & \AffCoeffSgn*[\eqcartdteformat]{#2}{\eqparamdtereel}}}{}% + \restmp% +} + +\NewDocumentCommand\TrouveEqParamDroite{ O{} r() r() }{%vect/point ou point/point + \restoreKV[eqparamdroite]% revenir au valeurs par défaut + \setKV[eqparamdroite]{#1}% lit les arguments optionnels + %on teste si c'est point/point + \IfSubStr{#2}{;}%c'est vecteur+point, sinon c'est point+point + {% + \setsepchar{;}\readlist*\CoordVec{#2}% + \setsepchar{,}\readlist*\CoordPt{#3}% + \itemtomacro\CoordVec[1]\vecdirx% + \itemtomacro\CoordVec[2]\vecdiry% + \itemtomacro\CoordVec[3]\vecdirz% + \itemtomacro\CoordPt[1]\xpta% + \itemtomacro\CoordPt[2]\ypta% + \itemtomacro\CoordPt[3]\zpta% + }% + {% + \setsepchar{,}\readlist*\CoordPtA{#2}% + \setsepchar{,}\readlist*\CoordPtB{#3}% + \itemtomacro\CoordPtA[1]\xpta% + \itemtomacro\CoordPtA[2]\ypta% + \itemtomacro\CoordPtA[2]\zpta% + \itemtomacro\CoordPtB[1]\xptb% + \itemtomacro\CoordPtB[2]\yptb% + \itemtomacro\CoordPtB[2]\zptb% + \ifboolKV[eqparamdroite]{Oppose}% + {% + \xdef\vecdirx{((\xpta)-(\xptb))}% + \xdef\vecdiry{((\ypta)-(\yptb))}% + \xdef\vecdirz{((\zpta)-(\zptb))}% + }% + {% + \xdef\vecdirx{((\xptb)-(\xpta))}% + \xdef\vecdiry{((\yptb)-(\ypta))}% + \xdef\vecdirz{((\zptb)-(\zpta))}% + }% + }% + \ifboolKV[eqparamdroite]{Aligne}% + {% + \left\lbrace\begin{array}{@{\,}l@{\;=\;}l@{\;}r} + x & \AffVarDteParamAlign{\xpta}{\vecdirx} \\ + y & \AffVarDteParamAlign{\ypta}{\vecdiry} \\ + z & \AffVarDteParamAlign{\zpta}{\vecdirz} \\ + \end{array}\right. + \text{, } \eqparamdtereel \in \ifboolKV[eqparamdroite]{Rgras}{\textbf{R}}{\mathbb{R}}% + }% + {% + \begin{dcases} + x = \AffVarDteParam{\xpta}{\vecdirx} \\ + y = \AffVarDteParam{\ypta}{\vecdiry} \\ + z = \AffVarDteParam{\zpta}{\vecdirz} \\ + \end{dcases} + \text{, } \eqparamdtereel \in \ifboolKV[eqparamdroite]{Rgras}{\textbf{R}}{\mathbb{R}}% + }% +} + +\NewDocumentCommand\TrouveDistancePtPlan{ r() r() d() }{%pt+vect+pt + \IfNoValueTF{#3}%c'est Point + Equation // sinon c'est point + vectnorm + point + {% + \StrDel{#2}{=0}[\tmpeq]% + %%\tmpeq \text{ et }% + \setsepchar{,}\readlist*\CoordPtA{#1}% + \itemtomacro\CoordPtA[1]\xa% + \itemtomacro\CoordPtA[2]\ya% + \itemtomacro\CoordPtA[3]\za%. + %calcul de d + \StrSubstitute{\tmpeq}{x}{(0)}[\tmpcoeffd]% + \StrSubstitute{\tmpcoeffd}{y}{(0)}[\tmpcoeffd]% + \StrSubstitute{\tmpcoeffd}{z}{(0)}[\tmpcoeffd]% + \xdef\coeffd{\tmpcoeffd}% + %%d=\xinteval{\coeffd} \text{ et }% + %calcul de a + \StrSubstitute{\tmpeq}{x}{(1)}[\tmpcoeffa]% + \StrSubstitute{\tmpcoeffa}{y}{(0)}[\tmpcoeffa]% + \StrSubstitute{\tmpcoeffa}{z}{(0)}[\tmpcoeffa]% + \xdef\vectx{(\tmpcoeffa)-(\coeffd)}% + %%a=\xinteval{\vectx} \text{ et }% + %calcul de b + \StrSubstitute{\tmpeq}{x}{(0)}[\tmpcoeffb]% + \StrSubstitute{\tmpcoeffb}{y}{(1)}[\tmpcoeffb]% + \StrSubstitute{\tmpcoeffb}{z}{(0)}[\tmpcoeffb]% + \xdef\vecty{(\tmpcoeffb)-(\coeffd)}% + %%b=\xinteval{\vecty} \text{ et }% + %calcul de c + \StrSubstitute{\tmpeq}{x}{(0)}[\tmpcoeffc]% + \StrSubstitute{\tmpcoeffc}{y}{(0)}[\tmpcoeffc]% + \StrSubstitute{\tmpcoeffc}{z}{(1)}[\tmpcoeffc]% + \xdef\vectz{(\tmpcoeffc)-(\coeffd)}% + %c=\xinteval{\vectz} \text{ et }% + %calcul du numérateur + \StrSubstitute{\tmpeq}{x}{(\xa)}[\resnum]% + \StrSubstitute{\resnum}{y}{(\ya)}[\resnum]% + \StrSubstitute{\resnum}{z}{(\za)}[\resnum]% + %%\text{num}=\xinteval{\resnum} \text{ et } + %le carré + \xdef\restmp{(\resnum)**2/((\vectx)**2+(\vecty)**2+(\vectz)**2)}% + %%\text{resultatcarré}=\xinteval{\restmp} \text{ et }% + }% + {% + \setsepchar{,}\readlist*\CoordPtA{#1}% + \setsepchar{;}\readlist*\CoordVec{#2}% + \setsepchar{,}\readlist*\CoordPtB{#3}% + \itemtomacro\CoordPtA[1]\xa% + \itemtomacro\CoordPtA[2]\ya% + \itemtomacro\CoordPtA[3]\za% + \itemtomacro\CoordVec[1]\vectx% + \itemtomacro\CoordVec[2]\vecty% + \itemtomacro\CoordVec[3]\vectz% + \itemtomacro\CoordPtB[1]\xb% + \itemtomacro\CoordPtB[2]\yb% + \itemtomacro\CoordPtB[3]\zb% + \def\restmp{((\vectx)*((\xb)-(\xa))+(\vecty)*((\yb)-(\ya))+(\vectz)*((\zb)-(\za)))**2/((\vectx)**2+(\vecty)**2+(\vectz)**2)}% + }% + \SimplificationRacine{\restmp}% +} \endinput
\ No newline at end of file diff --git a/macros/latex/contrib/proflycee/tex/proflycee-tools-probas.tex b/macros/latex/contrib/proflycee/tex/proflycee-tools-probas.tex index 270e99e3cc..2d7e0716e6 100644 --- a/macros/latex/contrib/proflycee/tex/proflycee-tools-probas.tex +++ b/macros/latex/contrib/proflycee/tex/proflycee-tools-probas.tex @@ -14,53 +14,53 @@ \xintFloatToDecimal{\xintfloateval{binomial(#1,#3)*#2^#3*(1-#2)^(#1-#3)}} } \newcommand\CalcBinomC[4]{%npab - \def\BorneInf{#3}\def\BorneSup{#4} + \def\BorneInf{#3}\def\BorneSup{#4}% \ifthenelse{\equal{#3}{*}}% - {\def\BorneInf{0}} - {} + {\def\BorneInf{0}}% + {}% \ifthenelse{\equal{#4}{*}}% - {\def\BorneSup{#1}} - {} - \xintFloatToDecimal{\xintfloateval{add(binomial(#1,i)*#2^i*(1-#2)^(#1-i), i=\BorneInf..\BorneSup)}} + {\def\BorneSup{#1}}% + {}% + \xintFloatToDecimal{\xintfloateval{add(binomial(#1,i)*#2^i*(1-#2)^(#1-i), i=\BorneInf..\BorneSup)}}% } \newcommand\CalcGeomP[2]{%pk - \xintFloatToDecimal{\xintfloateval{(1-#1)^(#2-1)*(#1)}} + \xintFloatToDecimal{\xintfloateval{(1-#1)^(#2-1)*(#1)}}% } \newcommand\CalcGeomC[3]{%pab - \def\BorneInf{#2}\def\BorneSup{#3} + \def\BorneInf{#2}\def\BorneSup{#3}% \ifthenelse{\equal{#2}{*}}% - {\def\BorneInf{1}} - {} + {\def\BorneInf{1}}% + {}% \ifthenelse{\equal{#3}{*}}% - {\def\BorneSup{\fpeval{trunc(1/#1*10,0)}}} - {} - \xintFloatToDecimal{\xintfloateval{add((1-#1)^(i-1)*(#1), i=\BorneInf..\BorneSup)}} + {\def\BorneSup{\fpeval{trunc(1/#1*10,0)}}}% + {}% + \xintFloatToDecimal{\xintfloateval{add((1-#1)^(i-1)*(#1), i=\BorneInf..\BorneSup)}}% } \newcommand\CalcHypergeomP[4]{%Nnmk - \xintFloatToDecimal{\xintfloateval{binomial(#3,#4)*binomial(#1-#3,#2-#4)/binomial(#1,#2)}} + \xintFloatToDecimal{\xintfloateval{binomial(#3,#4)*binomial(#1-#3,#2-#4)/binomial(#1,#2)}}% } \newcommand\CalcHypergeomC[5]{%Nnmab - \def\BorneInf{#4}\def\BorneSup{#5} + \def\BorneInf{#4}\def\BorneSup{#5}% \ifthenelse{\equal{#4}{*}}% - {\def\BorneInf{0}} - {} + {\def\BorneInf{0}}% + {}% \ifthenelse{\equal{#5}{*}}% - {\def\BorneSup{#1}} - {} - \xintFloatToDecimal{\xintfloateval{add(binomial(#3,i)*binomial(#1-#3,#2-i)/binomial(#1,#2), i=\BorneInf..\BorneSup)}} + {\def\BorneSup{#1}}% + {}% + \xintFloatToDecimal{\xintfloateval{add(binomial(#3,i)*binomial(#1-#3,#2-i)/binomial(#1,#2), i=\BorneInf..\BorneSup)}}% } \newcommand\CalcPoissP[2]{%lk - \xintFloatToDecimal{\xintfloateval{exp(-#1)*#1^#2/factorial(#2)}} + \xintFloatToDecimal{\xintfloateval{exp(-#1)*#1^#2/factorial(#2)}}% } \newcommand\CalcPoissC[3]{%lab - \def\BorneInf{#2}\def\BorneSup{#3} + \def\BorneInf{#2}\def\BorneSup{#3}% \ifthenelse{\equal{#2}{*}}% - {\def\BorneInf{0}} - {} + {\def\BorneInf{0}}% + {}% \ifthenelse{\equal{#3}{*}}% - {\def\BorneSup{10*#1}} - {} - \xintFloatToDecimal{\xintfloateval{add(exp(-#1)*#1^i/factorial(i), i=\BorneInf..\BorneSup)}} + {\def\BorneSup{10*#1}}% + {}% + \xintFloatToDecimal{\xintfloateval{add(exp(-#1)*#1^i/factorial(i), i=\BorneInf..\BorneSup)}}% } %utiles idée de https://tex.stackexchange.com/questions/355574/im-searching-for-a-table-with-cdf-of-standard-normal-distribution \xintdeffloatvar a_1,a_2,a_3,a_4,a_5,a_6 := @@ -72,170 +72,170 @@ \newcommand\CalcNormC[4]{%msab %def des bornes de l'intervalle suivant l'absence de a ou de b... - \def\BorneInf{#3}\def\BorneSup{#4} + \def\BorneInf{#3}\def\BorneSup{#4}% \ifthenelse{\equal{#3}{*}}% - {\def\BorneInf{#4-10*#2}} - {} + {\def\BorneInf{#4-10*#2}}% + {}% \ifthenelse{\equal{#4}{*}}% - {\def\BorneSup{#3+10*#2}} - {} - \xintFloatToDecimal{\xintfloateval{Phi((\BorneSup-#1)/#2)-Phi((\BorneInf-#1)/#2)}} + {\def\BorneSup{#3+10*#2}}% + {}% + \xintFloatToDecimal{\xintfloateval{Phi((\BorneSup-#1)/#2)-Phi((\BorneInf-#1)/#2)}}% } %calculs "simples" fiabilite \newcommand\CalcExpoC[3]{%lab \def\BorneInf{#2}\def\BorneSup{#3} \ifthenelse{\equal{#2}{*}}% - {\def\BorneInf{0}} - {} + {\def\BorneInf{0}}% + {}% \ifthenelse{\equal{#3}{*}}% - {\def\BorneSup{100/#1}} - {} - \xintFloatToDecimal{\xintfloateval{exp(-#1*\BorneInf)-exp(-#1*\BorneSup)}} + {\def\BorneSup{100/#1}}% + {}% + \xintFloatToDecimal{\xintfloateval{exp(-#1*\BorneInf)-exp(-#1*\BorneSup)}}% } %calculs formatés \NewDocumentCommand{\BinomP}{ s O{3} m m m }{%*=sci,2=prec,3=n,4=p,5=k \IfBooleanTF{#1}% {% - \num[exponent-mode=scientific]{\xintFloatToDecimal{\xintfloateval{round(binomial(#3,#5)*#4^#5*(1-#4)^(#3-#5),#2)}}} + \num[exponent-mode=scientific]{\xintFloatToDecimal{\xintfloateval{round(binomial(#3,#5)*#4^#5*(1-#4)^(#3-#5),#2)}}}% }% {% - \num[minimum-decimal-digits=#2]{\xintFloatToDecimal{\xintfloateval{round(binomial(#3,#5)*#4^#5*(1-#4)^(#3-#5),#2)}}} - } + \num[minimum-decimal-digits=#2]{\xintFloatToDecimal{\xintfloateval{round(binomial(#3,#5)*#4^#5*(1-#4)^(#3-#5),#2)}}}% + }% } \NewDocumentCommand{\BinomC}{ s O{3} m m m m }{%*=sci,2=prec,3=n,4=p,5=a,6=b - \def\BorneInf{#5}\def\BorneSup{#6} + \def\BorneInf{#5}\def\BorneSup{#6}% \ifthenelse{\equal{#5}{*}}% - {\def\BorneInf{0}} - {} + {\def\BorneInf{0}}% + {}% \ifthenelse{\equal{#6}{*}}% - {\def\BorneSup{#3}} - {} + {\def\BorneSup{#3}}% + {}% \IfBooleanTF{#1}% {% - \num[exponent-mode=scientific]{\xintFloatToDecimal{\xintfloateval{round(add(binomial(#3,i)*#4^i*(1-#4)^(#3-i), i=\BorneInf..\BorneSup),#2)}}} + \num[exponent-mode=scientific]{\xintFloatToDecimal{\xintfloateval{round(add(binomial(#3,i)*#4^i*(1-#4)^(#3-i), i=\BorneInf..\BorneSup),#2)}}}% }% {% - \num[minimum-decimal-digits=#2]{\xintFloatToDecimal{\xintfloateval{round(add(binomial(#3,i)*#4^i*(1-#4)^(#3-i), i=\BorneInf..\BorneSup),#2)}}} - } + \num[minimum-decimal-digits=#2]{\xintFloatToDecimal{\xintfloateval{round(add(binomial(#3,i)*#4^i*(1-#4)^(#3-i), i=\BorneInf..\BorneSup),#2)}}}% + }% } \NewDocumentCommand{\GeomP}{ s O{3} m m }{%*=sci,2=prec,3=p,4=k \IfBooleanTF{#1}% {% - \num[exponent-mode=scientific]{\xintFloatToDecimal{\xintfloateval{round((1-#3)^(#4-1)*(#3),#2)}}} + \num[exponent-mode=scientific]{\xintFloatToDecimal{\xintfloateval{round((1-#3)^(#4-1)*(#3),#2)}}}% }% {% - \num[minimum-decimal-digits=#2]{\xintFloatToDecimal{\xintfloateval{round((1-#3)^(#4-1)*(#3),#2)}}} - } + \num[minimum-decimal-digits=#2]{\xintFloatToDecimal{\xintfloateval{round((1-#3)^(#4-1)*(#3),#2)}}}% + }% } \NewDocumentCommand{\GeomC}{ s O{3} m m m }{%*=sci,2=prec,3=p,4=a,5=b - \def\BorneInf{#4}\def\BorneSup{#5} + \def\BorneInf{#4}\def\BorneSup{#5}% \ifthenelse{\equal{#4}{*}}% - {\def\BorneInf{1}} - {} + {\def\BorneInf{1}}% + {}% \ifthenelse{\equal{#5}{*}}% - {\def\BorneSup{\fpeval{trunc(1/#3*10,0)}}} - {} + {\def\BorneSup{\fpeval{trunc(1/#3*10,0)}}}% + {}% \IfBooleanTF{#1}% {% - \num[exponent-mode=scientific]{\xintFloatToDecimal{\xintfloateval{round(add((1-#3)^(i-1)*(#3), i=\BorneInf..\BorneSup),#2)}}} + \num[exponent-mode=scientific]{\xintFloatToDecimal{\xintfloateval{round(add((1-#3)^(i-1)*(#3), i=\BorneInf..\BorneSup),#2)}}}% }% {% - \num[minimum-decimal-digits=#2]{\xintFloatToDecimal{\xintfloateval{round(add((1-#3)^(i-1)*(#3), i=\BorneInf..\BorneSup),#2)}}} + \num[minimum-decimal-digits=#2]{\xintFloatToDecimal{\xintfloateval{round(add((1-#3)^(i-1)*(#3), i=\BorneInf..\BorneSup),#2)}}}% } } \NewDocumentCommand{\HypergeomP}{ s O{3} m m m m }{%*=sci,2=prec,3=N,4=n,5=m,6=k \IfBooleanTF{#1}% {% - \num[exponent-mode=scientific]{\xintFloatToDecimal{\xintfloateval{round(binomial(#5,#6)*binomial(#3-#5,#4-#6)/binomial(#3,#4),#2)}}} + \num[exponent-mode=scientific]{\xintFloatToDecimal{\xintfloateval{round(binomial(#5,#6)*binomial(#3-#5,#4-#6)/binomial(#3,#4),#2)}}}% }% {% - \num[minimum-decimal-digits=#2]{\xintFloatToDecimal{\xintfloateval{round(binomial(#5,#6)*binomial(#3-#5,#4-#6)/binomial(#3,#4),#2)}}} + \num[minimum-decimal-digits=#2]{\xintFloatToDecimal{\xintfloateval{round(binomial(#5,#6)*binomial(#3-#5,#4-#6)/binomial(#3,#4),#2)}}}% } } \NewDocumentCommand{\HypergeomC}{ s O{3} m m m m m }{%*=sci,2=prec,3=N,4=n,5=m,6=a,7=b - \def\BorneInf{#6}\def\BorneSup{#7} + \def\BorneInf{#6}\def\BorneSup{#7}% \ifthenelse{\equal{#6}{*}}% - {\def\BorneInf{0}} - {} + {\def\BorneInf{0}}% + {}% \ifthenelse{\equal{#7}{*}}% - {\def\BorneSup{#3}} - {} + {\def\BorneSup{#3}}% + {}% \IfBooleanTF{#1}% {% - \num[exponent-mode=scientific]{\xintFloatToDecimal{\xintfloateval{round(add(binomial(#5,i)*binomial(#3-#5,#4-i)/binomial(#3,#4), i=\BorneInf..\BorneSup),#2)}}} + \num[exponent-mode=scientific]{\xintFloatToDecimal{\xintfloateval{round(add(binomial(#5,i)*binomial(#3-#5,#4-i)/binomial(#3,#4), i=\BorneInf..\BorneSup),#2)}}}% }% {% \num[minimum-decimal-digits=#2]{\xintFloatToDecimal{\xintfloateval{round(add(binomial(#5,i)*binomial(#3-#5,#4-i)/binomial(#3,#4), i=\BorneInf..\BorneSup),#2)}}} - } + }% } \NewDocumentCommand{\PoissonP}{ s O{3} m m }{%*=sci,2=prec,3=lbda,4=k \IfBooleanTF{#1}% {% - \num[exponent-mode=scientific]{\xintFloatToDecimal{\xintfloateval{round(exp(-#3)*#3^#4/factorial(#4),#2)}}} + \num[exponent-mode=scientific]{\xintFloatToDecimal{\xintfloateval{round(exp(-#3)*#3^#4/factorial(#4),#2)}}}% }% {% - \num[minimum-decimal-digits=#2]{\xintFloatToDecimal{\xintfloateval{round(exp(-#3)*#3^#4/factorial(#4),#2)}}} - } + \num[minimum-decimal-digits=#2]{\xintFloatToDecimal{\xintfloateval{round(exp(-#3)*#3^#4/factorial(#4),#2)}}}% + }% } \NewDocumentCommand{\PoissonC}{ s O{3} m m m }{%*=ing,2=prec,3=lbda,4=a,5=b - \def\BorneInf{#4}\def\BorneSup{#5} + \def\BorneInf{#4}\def\BorneSup{#5}% \ifthenelse{\equal{#4}{*}}% - {\def\BorneInf{0}} - {} + {\def\BorneInf{0}}% + {}% \ifthenelse{\equal{#5}{*}}% - {\def\BorneSup{10*#3}} - {} + {\def\BorneSup{10*#3}}% + {}% \IfBooleanTF{#1}% {% - \num[exponent-mode=scientific]{\xintFloatToDecimal{\xintfloateval{round(add(exp(-#3)*#3^i/factorial(i), i=\BorneInf..\BorneSup),#2)}}} + \num[exponent-mode=scientific]{\xintFloatToDecimal{\xintfloateval{round(add(exp(-#3)*#3^i/factorial(i), i=\BorneInf..\BorneSup),#2)}}}% }% {% - \num[minimum-decimal-digits=#2]{\xintFloatToDecimal{\xintfloateval{round(add(exp(-#3)*#3^i/factorial(i), i=\BorneInf..\BorneSup),#2)}}} - } + \num[minimum-decimal-digits=#2]{\xintFloatToDecimal{\xintfloateval{round(add(exp(-#3)*#3^i/factorial(i), i=\BorneInf..\BorneSup),#2)}}}% + }% } \NewDocumentCommand{\NormaleC}{ s O{3} m m m m }{% %*=ing,2=prec,3=mu,4=sigma,5=a,6=b %def des bornes de l'intervalle suivant l'absence de a ou de b... - \def\BorneInf{#5}\def\BorneSup{#6} + \def\BorneInf{#5}\def\BorneSup{#6}% \ifthenelse{\equal{#5}{*}}% - {\def\BorneInf{#6-10*#4}} - {} + {\def\BorneInf{#6-10*#4}}% + {}% \ifthenelse{\equal{#6}{*}}% - {\def\BorneSup{#5+10*#4}} - {} + {\def\BorneSup{#5+10*#4}}% + {}% \IfBooleanTF{#1}% {% - \num[exponent-mode=scientific]{\xintFloatToDecimal{\xintfloateval{round(Phi((\BorneSup-#3)/#4)-Phi((\BorneInf-#3)/#4),#2)}}} + \num[exponent-mode=scientific]{\xintFloatToDecimal{\xintfloateval{round(Phi((\BorneSup-#3)/#4)-Phi((\BorneInf-#3)/#4),#2)}}}% }% {% - \num[minimum-decimal-digits=#2]{\xintFloatToDecimal{\xintfloateval{round(Phi((\BorneSup-#3)/#4)-Phi((\BorneInf-#3)/#4),#2)}}} - } + \num[minimum-decimal-digits=#2]{\xintFloatToDecimal{\xintfloateval{round(Phi((\BorneSup-#3)/#4)-Phi((\BorneInf-#3)/#4),#2)}}}% + }% } \NewDocumentCommand{\ExpoC}{ s O{3} m m m }{%*=ing,2=prec,3=lbda,4=a,5=b - \def\BorneInf{#4}\def\BorneSup{#5} + \def\BorneInf{#4}\def\BorneSup{#5}% \ifthenelse{\equal{#4}{*}}% - {\def\BorneInf{0}} - {} + {\def\BorneInf{0}}% + {}% \ifthenelse{\equal{#5}{*}}% - {\def\BorneSup{100/#3}} - {} + {\def\BorneSup{100/#3}}% + {}% \IfBooleanTF{#1}% {% - \num[exponent-mode=scientific]{\xintFloatToDecimal{\xintfloateval{round(exp(-#3*\BorneInf)-exp(-#3*\BorneSup),#2)}}} + \num[exponent-mode=scientific]{\xintFloatToDecimal{\xintfloateval{round(exp(-#3*\BorneInf)-exp(-#3*\BorneSup),#2)}}}% }% {% \num[minimum-decimal-digits=#2]{\xintFloatToDecimal{\xintFloatToDecimal{\xintfloateval{round(exp(-#3*\BorneInf)-exp(-#3*\BorneSup),#2)}}}} - } + }% } %%------ARBRESPROBAS |