diff options
Diffstat (limited to 'Master/texmf-dist')
-rw-r--r-- | Master/texmf-dist/doc/latex/resolsysteme/README.md | 7 | ||||
-rw-r--r-- | Master/texmf-dist/doc/latex/resolsysteme/ResolSysteme-doc.pdf | bin | 0 -> 123651 bytes | |||
-rw-r--r-- | Master/texmf-dist/doc/latex/resolsysteme/ResolSysteme-doc.tex | 626 | ||||
-rw-r--r-- | Master/texmf-dist/doc/latex/resolsysteme/ResolSysteme-exemples-pyluatex.pdf | bin | 0 -> 95573 bytes | |||
-rw-r--r-- | Master/texmf-dist/doc/latex/resolsysteme/ResolSysteme-exemples-pyluatex.tex | 107 | ||||
-rw-r--r-- | Master/texmf-dist/doc/latex/resolsysteme/ResolSysteme-exemples.pdf | bin | 0 -> 134039 bytes | |||
-rw-r--r-- | Master/texmf-dist/doc/latex/resolsysteme/ResolSysteme-exemples.tex | 103 | ||||
-rw-r--r-- | Master/texmf-dist/tex/latex/resolsysteme/ResolSysteme.sty | 751 |
8 files changed, 1594 insertions, 0 deletions
diff --git a/Master/texmf-dist/doc/latex/resolsysteme/README.md b/Master/texmf-dist/doc/latex/resolsysteme/README.md new file mode 100644 index 00000000000..d5227b92509 --- /dev/null +++ b/Master/texmf-dist/doc/latex/resolsysteme/README.md @@ -0,0 +1,7 @@ +ResolSysteme is a package to work with Linear Systems and matrix. +------------------------------------------------------------------------- +ResolSysteme est un package pour travailler avec des systèmes linéaires. +------------------------------------------------------------------------- +Author : Cédric Pierquet +email : cpierquet@outlook.fr +Licence : Released under the LaTeX Project Public License v1.3c or later, see http://www.latex-project.org/lppl.txt
\ No newline at end of file diff --git a/Master/texmf-dist/doc/latex/resolsysteme/ResolSysteme-doc.pdf b/Master/texmf-dist/doc/latex/resolsysteme/ResolSysteme-doc.pdf Binary files differnew file mode 100644 index 00000000000..7e155db2164 --- /dev/null +++ b/Master/texmf-dist/doc/latex/resolsysteme/ResolSysteme-doc.pdf diff --git a/Master/texmf-dist/doc/latex/resolsysteme/ResolSysteme-doc.tex b/Master/texmf-dist/doc/latex/resolsysteme/ResolSysteme-doc.tex new file mode 100644 index 00000000000..143dd663945 --- /dev/null +++ b/Master/texmf-dist/doc/latex/resolsysteme/ResolSysteme-doc.tex @@ -0,0 +1,626 @@ +% !TeX TXS-program:compile = txs:///arara +% arara: lualatex: {shell: yes, synctex: no, interaction: batchmode} +% arara: lualatex: {shell: yes, synctex: no, interaction: batchmode} if found('log', '(undefined references|Please rerun|Rerun to get)') + +\documentclass[a4paper,11pt]{article} +\def\TPversion{0.1.1} +\def\TPdate{7 Février 2023} +\usepackage[executable=python.exe]{pyluatex} +\usepackage[table,svgnames]{xcolor} +\usepackage{amsmath,amssymb} +\usepackage[bold-style=ISO,math-style=french]{unicode-math} +\setmainfont{TeX Gyre Schola} +\setmathfont{TeX Gyre Schola Math} +\usepackage[pyluatex]{ResolSysteme} +\usepackage{awesomebox} +\usepackage{fontawesome5} +\usepackage{systeme} +\usepackage{enumitem} +\usepackage{tabularray} +\usepackage{multicol} +\usepackage{fancyvrb} +\usepackage{fancyhdr} +\sisetup{locale=FR,output-decimal-marker={,}} +\fancyhf{} +\renewcommand{\headrulewidth}{0pt} +\lfoot{\sffamily\small [ResolSysteme]} +\cfoot{\sffamily\small - \thepage{} -} +\rfoot{\hyperlink{matoc}{\small\faArrowAltCircleUp[regular]}} + +%\usepackage{hvlogos} +\usepackage{hologo} +\providecommand\tikzlogo{Ti\textit{k}Z} +\providecommand\TeXLive{\TeX{}Live\xspace} +\providecommand\PSTricks{\textsf{PSTricks}\xspace} +\let\pstricks\PSTricks +\let\TikZ\tikzlogo +\newcommand\TableauDocumentation{% + \begin{tblr}{width=\linewidth,colspec={X[c]X[c]X[c]X[c]X[c]X[c]},cells={font=\sffamily}} + {\huge \LaTeX} & & & & &\\ + & {\huge \hologo{pdfLaTeX}} & & & & \\ + & & {\huge \hologo{LuaLaTeX}} & & & \\ + & & & {\huge \TikZ} & & \\ + & & & & {\huge \TeXLive} & \\ + & & & & & {\huge \hologo{MiKTeX}} \\ + \end{tblr} +} + +\usepackage{hyperref} +\urlstyle{same} +\hypersetup{pdfborder=0 0 0} +\usepackage[margin=1.5cm]{geometry} +\setlength{\parindent}{0pt} +\definecolor{LightGray}{gray}{0.9} + +\usepackage[french]{babel} + +\usepackage[most]{tcolorbox} +\tcbuselibrary{minted} +\NewTCBListing{PresentationCode}{ O{blue} m }{% + sharp corners=downhill,enhanced,arc=12pt,skin=bicolor,% + colback=#1!1!white,colframe=#1!75!black,colbacklower=white,% + attach boxed title to top right={yshift=-\tcboxedtitleheight},title=Code \LaTeX,% + boxed title style={% + colframe=#1!75!black,colback=#1!15!white,% + ,sharp corners=downhill,arc=12pt,% + },% + top=\baselineskip,% + fonttitle=\color{#1!90!black}\itshape\ttfamily\footnotesize,% + listing engine=minted,minted style=colorful, + minted language=tex,minted options={tabsize=4,fontsize=\small,autogobble}, + #2 +} + +\NewTCBListing{PresentationCodePython}{ O{DarkRed} m }{% + sharp corners=downhill,enhanced,arc=12pt,skin=bicolor,% + colback=#1!1!white,colframe=#1!75!black,colbacklower=white,% + attach boxed title to top right={yshift=-\tcboxedtitleheight},title=Code Python,% + boxed title style={% + colframe=#1!75!black,colback=#1!15!white,% + ,sharp corners=downhill,arc=12pt,% + },% + fonttitle=\color{#1!90!black}\itshape\ttfamily\footnotesize,% + listing engine=minted,minted style=colorful, + minted language=python,minted options={tabsize=2,fontsize=\footnotesize,autogobble}, + #2 +} + +\newcommand\Cle[1]{{\bfseries\sffamily\textlangle #1\textrangle}} + +\begin{document} + +\setlength{\aweboxleftmargin}{0.07\linewidth} +\setlength{\aweboxcontentwidth}{0.93\linewidth} +\setlength{\aweboxvskip}{8pt} + +\pagestyle{fancy} + +\thispagestyle{empty} + +\vspace{2cm} + +\begin{center} + \begin{minipage}{0.75\linewidth} + \begin{tcolorbox}[colframe=yellow,colback=yellow!15] + \begin{center} + \begin{tabular}{c} + {\Huge \texttt{ResolSysteme [fr]}}\\ + \\ + {\LARGE Des outils pour des} \\ + \\ + {\LARGE systèmes linéaires,} \\ + \\ + {\LARGE avec xint ou pyluatex.} \\ + \end{tabular} + + \bigskip + + {\small \texttt{Version \TPversion{} -- \TPdate}} + \end{center} + \end{tcolorbox} +\end{minipage} +\end{center} + +\vspace{0.5cm} + +\begin{center} + \begin{tabular}{c} + \texttt{Cédric Pierquet}\\ + {\ttfamily c pierquet -- at -- outlook . fr}\\ + \texttt{\url{https://github.com/cpierquet/ResolSysteme}} +\end{tabular} +\end{center} + +\vspace{0.25cm} + +{$\blacktriangleright$~~Des commandes pour travailler sur des matrices carrées (2x2, 3x3 ou 4x4).} + +\smallskip + +{$\blacktriangleright$~~Des commandes pour résoudre des systèmes linéaires (2x2, 3x3 ou 4x4).} + +\smallskip + +\vspace{1cm} + +\begin{center} + \begin{tcolorbox}[enhanced,colframe=ForestGreen,colback=lightgray!5,center,width=0.95\linewidth,drop fuzzy shadow=lightgray] + Le \textbf{déterminant} de $A=\begin{pNiceMatrix} -1&{0,5} \\ \frac12&4 \end{pNiceMatrix}$ est + $\det(A)=\DetMatrice[dec](-1,0.5 § 1/2,4)$. + + \medskip + + L'\textbf{inverse} de la matrice $A=\begin{pNiceMatrix} 1&2&3&4\\5&6&7&0\\1&1&1&1\\-2&-3&-5&-6 \end{pNiceMatrix}$ est $A^{-1}=\MatriceInversePY*[n]<cell-space-limits=2pt>(1,2,3,4 § 5,6,7,0 § 1,1,1,1 § -2,-3,-5,-6)$. + + \medskip + + La \textbf{solution} de $\systeme[xyzt]{y+z+t=1,x+z+t=-1,x+y+t=1,x+y+z=0}$ est $\mathcal{S}=\left\lbrace\SolutionSystemePY*[d](0,1,1,1 § 1,0,1,1 § 1,1,0,1 § 1,1,1,0)(1,-1,1,0)\right\rbrace$. + \end{tcolorbox} +\end{center} + +\vspace{0.5cm} + +%\hfill{}\textit{Merci aux membres du groupe \faFacebook{} du \og Coin \LaTeX{} \fg{} pour leur aide et leurs idées !} + +%\hfill{}\textit{Merci à Denis Bitouzé et à Patrick Bideault pour leurs retours et idées !} + +\vfill + +\hrule + +\medskip + +\TableauDocumentation + +\medskip + +\hrule + +\medskip + +\newpage + +\phantomsection +\hypertarget{matoc}{} + +\tableofcontents + +\newpage + +\part{Introduction} + +\section{Le package ResolSysteme} + +\subsection{Introduction} + +\begin{noteblock} +L'idée est de \textit{proposer} des outils pour travailler sur des systèmes linéaires (de taille réduite !) : + +\begin{itemize} + \item en affichant la \textbf{solution} (si elle existe) ; + \item en affichant le \textbf{déterminant} et l'éventuelle \textbf{inverse} de la matrice des coefficients. +\end{itemize} +\vspace*{-\baselineskip}\leavevmode +\end{noteblock} + +\begin{importantblock} +À noter que les calculs -- en interne -- peuvent être effectués de deux manières : + +\begin{itemize} + \item via les packages \textsf{xint*} pour des formats \textbf{2x2} ou \textbf{3x3} ; + \item via \textsf{python} et le package \textsf{pyluatex} (à charger manuellement du fait des options spécifiques) pour des formats \textbf{2x2}, \textbf{3x3} ou \textbf{4x4}. +\end{itemize} + +Il n'est pas prévu -- pour le moment -- de travailler sur des matrices/systèmes plus grands. +\end{importantblock} + +\begin{warningblock} +L'utilisation de \textsf{pyluatex} nécessite une compilation adaptée, à savoir en \hologo{LuaLaTeX} et en activant le mode \textsf{--shell-escape}. + +\smallskip + +La méthode par \textsf{python} utilise quoi qu'il en soit le module \texttt{sympy}, qui doit donc être installé ! +\end{warningblock} + +\subsection{Packages utilisés, choix de formatage} + +\begin{noteblock} +Le package charge les packages suivantes : + +\begin{itemize} + \item \texttt{xintexpr} et \texttt{xinttools} ; + \item \texttt{sinuitx}, \texttt{nicefrac} et \texttt{nicematrix} ; + \item \texttt{xstring} et \texttt{listofitems}. +\end{itemize} + +Il est compatible avec les compilations usuelles en \textsf{latex}, \textsf{pdflatex}, \textsf{lualatex} (obligatoire pour \textsf{pyluatex} !!) ou \textsf{xelatex}. +\end{noteblock} + +\begin{importantblock} +Les nombres sont formatés par la commande \texttt{\textbackslash num} de \textsf{sinuitx}, donc les options choisies par l'utilisateur se propageront aux résultats numériques. + +\smallskip + +L'affichage des matrices est gérée par le package \textsf{nicematrix}, et des options spécifiques \textit{simples} pourront être placées dans les différentes commandes. +\end{importantblock} + +\subsection{Chargement du package, et option} + +\begin{importantblock} +Le package peut donc se charger de deux manières différentes, suivant si l'utilisateur utilise \textsf{python} ou non. Les commandes \textit{classiques} sont disponibles même si \textsf{python} est utilisé. +\end{importantblock} + +\begin{PresentationCode}{listing only} +%chargement du package sans passer par pyluatex, calculs via xint +\usepackage{ResolSysteme} +\end{PresentationCode} + +\begin{PresentationCode}{listing only} +%chargement du package pyluatex et du package avec [pyluatex] +\usepackage[options]{pyluatex} +\usepackage[pyluatex]{ResolSysteme} +\end{PresentationCode} + +\pagebreak + +\part{Commandes} + +\section{Une commande interne : écriture sous forme d'une fraction} + +\subsection{La commande} + +\begin{cautionblock} +En \textit{interne}, le code utilise une commande pour formater un résultat sous forme fractionnaire, avec gestion des entiers et gestion du signe \og $-$ \fg. +\end{cautionblock} + +\begin{PresentationCode}{listing only} +\ConvVersFrac(*)[option de formatage]{calcul} +\end{PresentationCode} + +\subsection{Utilisation} + +\begin{tipblock} +Concernant cette commande, qui est dans un bloc \texttt{ensuremath} : + +\begin{itemize} + \item la version \textit{étoilée} force l'écriture du signe \og $-$ \fg{} avant l'éventuelle fraction ; + \item le premier argument, \textit{optionnel} et entre \textsf{[...]} permet de spécifier un formatage du résultat : + \begin{itemize} + \item \Cle{t} pour l'affichage de la fraction en mode \textsf{tfrac} ; + \item \Cle{d} pour l'affichage de la fraction en mode \textsf{dfrac} ; + \item \Cle{n} pour l'affichage de la fraction en mode \textsf{nicefrac} ; + \item \Cle{dec} pour l'affichage du résultat en mode \texttt{décimal} (sans arrondi !) ; + \item \Cle{dec=k} pour l'affichage du résultat en mode \texttt{décimal} arrondi à $10^{-k}$ ; + \end{itemize} + \item le second argument, \textit{obligatoire}, est quant à lui, le calcul en syntaxe \textsf{xint}. +\end{itemize} +\vspace*{-\baselineskip}\leavevmode +\end{tipblock} + +\begin{PresentationCode}{listing only} +\ConvVersFrac{-10+1/3*(-5/16)} %sortie par défaut (fraction avec - sur numérateur) + +\ConvVersFrac*{-10+1/3*(-5/16)} %sortie avec - avant la fraction + +\ConvVersFrac*[d]{-10+1/3*(-5/16)} %sortie en displaystyle + +\ConvVersFrac[n]{-10+1/3*(-5/16)} %sortie en nicefrac + +\ConvVersFrac[dec=4]{-10+1/3*(-5/16)} %sortie en décimal arrondi à 0,0001 + +\ConvVersFrac{2+91/7} %entier correctement formaté +\end{PresentationCode} + +\begin{PresentationCode}{text only} +\hfill\ConvVersFrac{-10+1/3*(-5/16)} \qquad +\ConvVersFrac*{-10+1/3*(-5/16)} \qquad +\ConvVersFrac*[d]{-10+1/3*(-5/16)} \qquad +\ConvVersFrac[n]{-10+1/3*(-5/16)} \qquad +\ConvVersFrac[dec=4]{-10+1/3*(-5/16)} \qquad +\ConvVersFrac{2+91/7}\hfill~ +\end{PresentationCode} + +\subsection{Interaction avec les commandes \og matricielles \fg, limitations} + +\begin{warningblock} +En \textit{interne}, le formatage des résultats est géré par cette commande, et les options disponibles existent donc de la même manière pour les commandes liées aux systèmes linéaires. + +\smallskip + +Il ne sera par contre pas possible de spécifier des options différentes pour chacun des coefficients, autrement dit l'éventuelle option se propagera sur l'ensemble des résultats ! + +\smallskip + +Les \textit{transformations} en fraction devraient pouvoir fonctionner avec des calculs \textit{classiques}, mais il est possible que, dans des cas \textit{spécifiques}, les résultats ne soient pas ceux attendus ! +\end{warningblock} + +\pagebreak + +\section{Calcul de déterminant} + +\subsection{Introduction} + +\begin{cautionblock} +La première commande (matricielle) disponible est pour calculer le déterminant d'une matrice : + +\begin{itemize} + \item \textbf{2x2} ou \textbf{3x3} pour le package \textit{classique} ; + \item \textbf{2x2} ou \textbf{3x3} ou \textbf{4x4} pour le package \textit{lua}. +\end{itemize} +\vspace*{-\baselineskip}\leavevmode +\end{cautionblock} + +\begin{PresentationCode}{listing only} +%version classique +\DetMatrice(*)[option de formatage](matrice) + +%version python +\DetMatricePY(*)[option de formatage](matrice) +\end{PresentationCode} + +\subsection{Utilisation} + +\begin{tipblock} +Concernant cette commande, qui est à insérer dans un environnement \textit{math} : + +\begin{itemize} + \item la version \textit{étoilée} force l'écriture du signe \og $-$ \fg{} avant l'éventuelle fraction ; + \item le premier argument, \textit{optionnel} et entre \textsf{[...]} permet de spécifier un formatage du résultat : + \begin{itemize} + \item \Cle{t} pour l'affichage de la fraction en mode \textsf{tfrac} ; + \item \Cle{d} pour l'affichage de la fraction en mode \textsf{dfrac} ; + \item \Cle{n} pour l'affichage de la fraction en mode \textsf{nicefrac} ; + \item \Cle{dec} pour l'affichage du résultat en mode \texttt{décimal} (sans arrondi !) ; + \item \Cle{dec=k} pour l'affichage du résultat en mode \texttt{décimal} arrondi à $10^{-k}$ ; + \end{itemize} + \item le second argument, \textit{obligatoire} et entre \textsf{(...)}, est quant à lui, la matrice donnée par ses coefficients \textsf{a11,a12,... § a21,a22,...} (syntaxe \textit{héritée} de \texttt{sympy}). +\end{itemize} +\vspace*{-\baselineskip}\leavevmode +\end{tipblock} + +\begin{PresentationCode}{} +%version classique +Le dét. de $A=\begin{pNiceMatrix}1&2\\3&4\end{pNiceMatrix}$ est +$\det(A)=\DetMatrice(1,2 § 3,4)$. +\end{PresentationCode} + +\begin{PresentationCode}{} +%version classique +Le dét. de $A=\begin{pNiceMatrix}-1&{0,5}\\\frac12&4\end{pNiceMatrix}$ est +$\det(A)=\DetMatrice[dec](-1,0.5 § 1/2,4)$. +\end{PresentationCode} + +\begin{PresentationCode}{} +%version classique +Le dét. de $A=\begin{pNiceMatrix}-1&\frac13&4\\\frac13&4&-1\\-1&0&0\end{pNiceMatrix}$ est +$\det(A) \approx \DetMatrice[dec=3](-1,1/3,4 § 1/3,4,-1 § -1,0,0)$. +\end{PresentationCode} + +\begin{PresentationCode}{} +%version python +Le dé. de $A=\begin{pNiceMatrix}1&2\\3&4\end{pNiceMatrix}$ est +$\det(A)=\DetMatricePY(1,2 § 3,4)$. +\end{PresentationCode} + +\begin{PresentationCode}{} +Le dét. de $A=\begin{pNiceMatrix}-1&{0,5}\\\frac12&4\end{pNiceMatrix}$ est +$\det(A)=\DetMatricePY*[d](-1,0.5 § 1/2,4)$.\end{PresentationCode} + +\begin{PresentationCode}{} +%version python +Le dét. de $A=\begin{pNiceMatrix}-1&\frac13&4\\\frac13&4&-1\\-1&0&0\end{pNiceMatrix}$ est +$\det(A) \approx \DetMatricePY[dec=3](-1,1/3,4 § 1/3,4,-1 § -1,0,0)$. +\end{PresentationCode} + +\section{Inverse d'une matrice} + +\subsection{Introduction} + +\begin{cautionblock} +La deuxième commande (matricielle) disponible est pour calculer l'éventuelle inverse d'une matrice : + +\begin{itemize} + \item \textbf{2x2} ou \textbf{3x3} pour le package \textit{classique} ; + \item \textbf{2x2} ou \textbf{3x3} ou \textbf{4x4} pour le package \textit{lua}. +\end{itemize} +\vspace*{-\baselineskip}\leavevmode +\end{cautionblock} + +\begin{PresentationCode}{listing only} +%version classique +\MatriceInverse(*)[option de formatage]<options nicematrix>(matrice) + +%version python +\MatriceInversePY(*)[option de formatage]<options nicematrix>(matrice) +\end{PresentationCode} + +\subsection{Utilisation} + +\begin{tipblock} +Concernant cette commande, qui est à insérer dans un environnement \textit{math} : + +\begin{itemize} + \item la version \textit{étoilée} force l'écriture du signe \og $-$ \fg{} avant l'éventuelle fraction ; + \item le premier argument, \textit{optionnel} et entre \textsf{[...]} permet de spécifier un formatage du résultat : + \begin{itemize} + \item \Cle{t} pour l'affichage de la fraction en mode \textsf{tfrac} ; + \item \Cle{d} pour l'affichage de la fraction en mode \textsf{dfrac} ; + \item \Cle{n} pour l'affichage de la fraction en mode \textsf{nicefrac} ; + \item \Cle{dec} pour l'affichage du résultat en mode \texttt{décimal} (sans arrondi !) ; + \item \Cle{dec=k} pour l'affichage du résultat en mode \texttt{décimal} arrondi à $10^{-k}$ ; + \end{itemize} + \item le deuxième argument, \textit{optionnel} et entre \textsf{<...>} correspond aux \Cle{options} à passer à l'environnement \texttt{pNiceMatrix} ; + \item le troisième argument, \textit{obligatoire} et entre \textsf{(...)}, est quant à lui, la matrice donnée par ses coefficients \textsf{a11,a12,... § a21,a22,...} (syntaxe héritée de \texttt{sympy}). +\end{itemize} +À noter que si la matrice n'est pas inversible, le texte \texttt{Matrice non inversible} est affiché. +\end{tipblock} + +\begin{PresentationCode}{} +%version classique +L'inverse de $A=\begin{pNiceMatrix}1&2\\3&4\end{pNiceMatrix}$ est +$A^{-1}=\MatriceInverse<cell-space-limits=2pt>(1,2 § 3,4)$. +\end{PresentationCode} + +\begin{PresentationCode}{} +%version classique +L'inverse de $A=\begin{pNiceMatrix}1&2&3\\4&5&6\\7&8&8\end{pNiceMatrix}$ est +$A^{-1}=\MatriceInverse[n]<cell-space-limits=2pt>(1,2,3 § 4,5,6 § 7,8,8)$. +\end{PresentationCode} + +\begin{PresentationCode}{} +%version python +L'inverse de $A=\begin{pNiceMatrix}1&2\\3&4\end{pNiceMatrix}$ est +$A^{-1}=\MatriceInversePY*[d]<cell-space-limits=2pt>(1,2 § 3,4)$. +\end{PresentationCode} + +\begin{PresentationCode}{} +%version python +L'inv. de $A=\begin{pNiceMatrix}1&2&3&4\\5&6&7&0\\1&1&1&1\\-2&-3&-5&-6\end{pNiceMatrix}$ est +$A^{-1}= +\MatriceInversePY*[n]<cell-space-limits=2pt>(1,2,3,4 § 5,6,7,0 § 1,1,1,1 § -2,-3,-5,-6)$. +\end{PresentationCode} + +\section{Résolution d'un système linéaire} + +\subsection{Introduction} + +\begin{cautionblock} +La deuxième commande (matricielle) disponible est pour déterminer l'éventuelle solution d'un système linéaire qui s'écrit matriciellement $A\times X=B$: + +\begin{itemize} + \item \textbf{2x2} ou \textbf{3x3} pour le package \textit{classique} ; + \item \textbf{2x2} ou \textbf{3x3} ou \textbf{4x4} pour le package \textit{lua}. +\end{itemize} +\vspace*{-\baselineskip}\leavevmode +\end{cautionblock} + +\begin{PresentationCode}{listing only} +%version classique +\SolutionSysteme(*)[opt de formatage]<opts nicematrix>(matriceA)(matriceB)[opt Matrice] + +%version python +\SolutionSystemePY(*)[opt de formatage]<opts nicematrix>(matriceA)(matriceB)[opt Matrice] +\end{PresentationCode} + +\subsection{Utilisation} + +\begin{tipblock} +Concernant cette commande, qui est à insérer dans un environnement \textit{math} : + +\begin{itemize} + \item la version \textit{étoilée} force l'écriture du signe \og $-$ \fg{} avant l'éventuelle fraction ; + \item le premier argument, \textit{optionnel} et entre \textsf{[...]} permet de spécifier un formatage du résultat : + \begin{itemize} + \item \Cle{t} pour l'affichage de la fraction en mode \textsf{tfrac} ; + \item \Cle{d} pour l'affichage de la fraction en mode \textsf{dfrac} ; + \item \Cle{n} pour l'affichage de la fraction en mode \textsf{nicefrac} ; + \item \Cle{dec} pour l'affichage du résultat en mode \texttt{décimal} (sans arrondi !) ; + \item \Cle{dec=k} pour l'affichage du résultat en mode \texttt{décimal} arrondi à $10^{-k}$ ; + \end{itemize} + \item le deuxième argument, \textit{optionnel} et entre \textsf{<...>} correspond aux \Cle{options} à passer à l'environnement \texttt{pNiceMatrix} ; + \item le troisième argument, \textit{obligatoire} et entre \textsf{(...)}, est quant à lui, la matrice $A$ donnée par ses coefficients \textsf{a11,a12,... § a21,a22,...} (syntaxe héritée de \texttt{sympy}) ; + \item le quatrième argument, \textit{obligatoire} et entre \textsf{(...)}, est quant à lui, la matrice $B$ donnée par ses coefficients \textsf{b11,b21,...} (syntaxe héritée de \texttt{sympy}) ; + \item le dernier argument, \textit{optionnel} et entre \textsf{[...]}, permet -- grâce à \Cle{Matrice} -- de présenter le vecteur solution. +\end{itemize} +À noter que si la matrice n'est pas inversible, le texte \texttt{Matrice non inversible} est affiché. +\end{tipblock} + +\begin{PresentationCode}{} +%version classique +La solution de $\systeme{3x+y-2z=-1,2x-y+z=4,x-y-2z=5}$ est $\mathcal{S}=% +\left\lbrace \SolutionSysteme*[d](3,1,-2 § 2,-1,1 § 1,-1,-2)(-1,4,5) \right\rbrace$.\\ +\end{PresentationCode} + +\begin{PresentationCode}{} +%version python +La solution de $\systeme{x+y+z=-1,3x+2y-z=6,-x-y+2z=-5}$ est $\mathcal{S}=% +\left\lbrace \SolutionSystemePY(1,1,1 § 3,2,-1 § -1,-1,2)(-1,6,-5) \right\rbrace$. +\end{PresentationCode} + +\begin{PresentationCode}{} +%version python +La solution de $\systeme[xyzt]{x+2y+3z+4t=-10,5x+6y+7z=0,x+y+z+t=4,-2x-3y-5z-6t=7}$ +est $\mathcal{S}=% +\left\lbrace + \SolutionSystemePY% + [dec]<cell-space-limits=2pt>% + (1,2,3,4 § 5,6,7,0 § 1,1,1,1 § -2,-3,-5,-6)(-10,0,4,7)% + [Matrice] +\right\rbrace$. +\end{PresentationCode} + +\begin{PresentationCode}{} +%pas de solution +La solution de $\systeme{x+2y=-5,4x+8y=1}$ est $\mathcal{S}=% +\left\lbrace \SolutionSystemePY(1,2 § 4,8)(-5,1) \right\rbrace$. +\end{PresentationCode} + +\pagebreak + +\part{Fonctions python utilisées} + +\begin{cautionblock} +Les fonctions utilisées par les packages \textsf{pyluatex} ou \textsf{pythontex} sont données ci-dessous. + +Elles sont accessibles en \textit{natif} une fois l'option \textsf{lua} activée, grâce notamment à la macro \texttt{\textbackslash py}. +\end{cautionblock} + +\begin{PresentationCodePython}{listing only} +import sympy as sy +x = sy.Symbol('x') +y = sy.Symbol('y') +z = sy.Symbol('z') +t = sy.Symbol('t') + +def resol_systeme_QQ(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,u) : + solution=sy.solve([a*x+b*y+c*z+d*t-e,f*x+g*y+h*z+i*t-j,k*x+l*y+m*z+n*t-o,p*x+q*y+r*z+s*t-u],[x,y,z,t]) + return solution + +def resol_systeme_TT(a,b,c,d,e,f,g,h,i,j,k,l) : + solution=sy.solve([a*x+b*y+c*z-d,e*x+f*y+g*z-h,i*x+j*y+k*z-l],[x,y,z]) + return solution + +def resol_systeme_DD(a,b,c,d,e,f) : + solution=sy.solve([a*x+b*y-c,d*x+e*y-f],[x,y]) + return solution + +def det_matrice_QQ(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p) : + MatTmp = sy.Matrix(([a,b,c,d],[e,f,g,h],[i,j,k,l],[m,n,o,p])) + DetMatTmp = MatTmp.det() + return DetMatTmp + +def det_matrice_TT(a,b,c,d,e,f,g,h,i) : + MatTmp = sy.Matrix(([a,b,c],[d,e,f],[g,h,i])) + DetMatTmp = MatTmp.det() + return DetMatTmp + +def det_matrice_DD(a,b,c,d) : + MatTmp = sy.Matrix(([a,b],[c,d])) + DetMatTmp = MatTmp.det() + return DetMatTmp + +def inverse_matrice_QQ(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p) : + MatTmp = sy.Matrix(([a,b,c,d],[e,f,g,h],[i,j,k,l],[m,n,o,p])) + DetMatTmp = MatTmp.inv() + return DetMatTmp + +def inverse_matrice_DD(a,b,c,d) : + MatTmp = sy.Matrix(([a,b],[c,d])) + InvMatTmp = MatTmp.inv() + return InvMatTmp + +def inverse_matrice_TT(a,b,c,d,e,f,g,h,i) : + MatTmp = sy.Matrix(([a,b,c],[d,e,f],[g,h,i])) + InvMatTmp = MatTmp.inv() + return InvMatTmp +\end{PresentationCodePython} + +\pagebreak + +\part{Historique} + +\verb|v0.1.1|~:~~~~Correction d'un bug avec le caractère \og ; \fg{} + +\verb|v0.1.0|~:~~~~Version initiale + +\end{document}
\ No newline at end of file diff --git a/Master/texmf-dist/doc/latex/resolsysteme/ResolSysteme-exemples-pyluatex.pdf b/Master/texmf-dist/doc/latex/resolsysteme/ResolSysteme-exemples-pyluatex.pdf Binary files differnew file mode 100644 index 00000000000..3275b5262e7 --- /dev/null +++ b/Master/texmf-dist/doc/latex/resolsysteme/ResolSysteme-exemples-pyluatex.pdf diff --git a/Master/texmf-dist/doc/latex/resolsysteme/ResolSysteme-exemples-pyluatex.tex b/Master/texmf-dist/doc/latex/resolsysteme/ResolSysteme-exemples-pyluatex.tex new file mode 100644 index 00000000000..c6439a053cd --- /dev/null +++ b/Master/texmf-dist/doc/latex/resolsysteme/ResolSysteme-exemples-pyluatex.tex @@ -0,0 +1,107 @@ +% !TeX TXS-program:compile = txs:///lualatex/[--shell-escape] + +\documentclass[french,a4paper,10pt]{article} +\usepackage[margin=1.5cm]{geometry} +\usepackage[executable=python.exe]{pyluatex} +\usepackage[pyluatex]{ResolSysteme} +\usepackage{systeme} +\usepackage[most]{tcolorbox} +\sisetup{locale=FR,output-decimal-marker={,}} +\usepackage{babel} +\newtcblisting{ShowCodeTeX}[1][]{colback=white,colframe=red!75!black,listing options={style=tcblatex},#1} + +\begin{document} + +\part*{Version \og pyluatex \fg} + +\section{Préambule, avec le package pyluatex} + +\begin{ShowCodeTeX}[listing only] +\documentclass[french,a4paper,10pt]{article} +\usepackage[margin=1.5cm]{geometry} +\usepackage[executable=python.exe]{pyluatex} +\usepackage[pyluatex]{ResolSysteme} %version pyluatex, lua + shell-escape +\usepackage{systeme} +\sisetup{locale=FR,output-decimal-marker={,}} +\end{ShowCodeTeX} + +\section{Inverse d'une matrice, 2x2 ou 3x3 ou 4x4} + +\begin{ShowCodeTeX} +L'inverse de $A=\begin{pNiceMatrix} 1&2 \\ 3&4 \end{pNiceMatrix}$ est +$A^{-1}=\MatriceInversePY<cell-space-limits=2pt>(1,2 § 3,4)$. +\end{ShowCodeTeX} + +\begin{ShowCodeTeX} +L'inverse de $A=\begin{pNiceMatrix} 1&2 \\ 3&4 \end{pNiceMatrix}$ est +$A^{-1}=\MatriceInversePY*<cell-space-limits=2pt>(1,2 § 3,4)$. +\end{ShowCodeTeX} + +\begin{ShowCodeTeX} +L'inverse de $A=\begin{pNiceMatrix} 1&2 \\ 3&6 \end{pNiceMatrix}$ est +$A^{-1}=\MatriceInversePY<cell-space-limits=2pt>(1,2 § 3,6)$. +\end{ShowCodeTeX} + +\begin{ShowCodeTeX} +L'inverse de $A=\begin{pNiceMatrix} 1&2 \\ 3&4 \end{pNiceMatrix}$ est +$A^{-1}=\MatriceInversePY*[d]<cell-space-limits=2pt>(1,2 § 3,4)$. +\end{ShowCodeTeX} + +\begin{ShowCodeTeX} +L'inverse de $A=\begin{pNiceMatrix} 1&2&3\\4&5&6\\7&8&8 \end{pNiceMatrix}$ est +$A^{-1}=\MatriceInversePY<cell-space-limits=2pt>(1,2,3 § 4,5,6 § 7,8,8)$. +\end{ShowCodeTeX} + +\begin{ShowCodeTeX} +L'inverse de $A=\begin{pNiceMatrix} 1&2&3\\4&5&6\\7&8&8 \end{pNiceMatrix}$ est +$A^{-1}=\MatriceInversePY*<cell-space-limits=2pt>(1,2,3 § 4,5,6 § 7,8,8)$. +\end{ShowCodeTeX} + +\begin{ShowCodeTeX} +L'inverse de $A=\begin{pNiceMatrix} 1&2&3&4\\5&6&7&0\\1&1&1&1\\2&-3&-5&-6 \end{pNiceMatrix}$ +est $A^{-1}=\MatriceInversePY*[n]<cell-space-limits=2pt>(1,2,3,4 § 5,6,7,0 § 1,1,1,1 § 2,-3,-5,-6)$. +\end{ShowCodeTeX} + +\section{Résolution d'un système, 2x2 ou 3x3 ou 4x4} + +\begin{ShowCodeTeX} +La solution de $\systeme{-9x-8y=-8,3x-6y=-7}$ est $\mathcal{S}=% +\left\lbrace \SolutionSystemePY(-9,-8 § 3,-6)(-8,-7) \right\rbrace$. +\end{ShowCodeTeX} + +\begin{ShowCodeTeX} +La solution de $\systeme{x+2y=-5,4x+8y=1}$ est $\mathcal{S}=% +\left\lbrace \SolutionSystemePY(1,2 § 4,8)(-5,1) \right\rbrace$. +\end{ShowCodeTeX} + +\begin{ShowCodeTeX} +La solution de $\systeme{-9x-8y=-8,3x-6y=-7}$ est $\mathcal{S}=% +\left\lbrace \SolutionSystemePY*[d](-9,-8 § 3,-6)(-8,-7) \right\rbrace$. +\end{ShowCodeTeX} + +\begin{ShowCodeTeX} +La solution de $\systeme{x+y+z=-1,3x+2y-z=6,-x-y+2z=-5}$ est $\mathcal{S}=% +\left\lbrace \SolutionSystemePY(1,1,1 § 3,2,-1 § -1,-1,2)(-1,6,-5) \right\rbrace$. +\end{ShowCodeTeX} + +\begin{ShowCodeTeX} +La solution de $\systeme{x+y+z=-1,3x+2y-z=-5,-x-y+2z=0}$ est donnée par $X=% +\SolutionSystemePY*[d]<cell-space-limits=2pt>(1,1,1 § 3,2,-1 § -1,-1,2)(-1,-5,0)[Matrice]$. +\end{ShowCodeTeX} + +\begin{ShowCodeTeX} +La solution de $\systeme[xyzt]{y+z+t=1,x+z+t=-1,x+y+t=1,x+y+z=0}$ est $\mathcal{S}=% +\left\lbrace\SolutionSystemePY*[d](0,1,1,1 § 1,0,1,1 § 1,1,0,1 § 1,1,1,0)(1,-1,1,0)\right\rbrace$. +\end{ShowCodeTeX} + +\begin{ShowCodeTeX} +La solution de $\systeme[xyzt]{x+2y+3z+4t=-10,5x+6y+7z=0,x+y+z+t=4,-2x-3y-5z-6t=7}$ est $\mathcal{S}= +\left\lbrace +\SolutionSystemePY + [dec]<cell-space-limits=2pt> + (1,2,3,4 § 5,6,7,0 § 1,1,1,1 § -2,-3,-5,-6)(-10,0,4,7) + [Matrice] +\right\rbrace$. +\end{ShowCodeTeX} + +\end{document}
\ No newline at end of file diff --git a/Master/texmf-dist/doc/latex/resolsysteme/ResolSysteme-exemples.pdf b/Master/texmf-dist/doc/latex/resolsysteme/ResolSysteme-exemples.pdf Binary files differnew file mode 100644 index 00000000000..2afa0bbc426 --- /dev/null +++ b/Master/texmf-dist/doc/latex/resolsysteme/ResolSysteme-exemples.pdf diff --git a/Master/texmf-dist/doc/latex/resolsysteme/ResolSysteme-exemples.tex b/Master/texmf-dist/doc/latex/resolsysteme/ResolSysteme-exemples.tex new file mode 100644 index 00000000000..f9daeb9826c --- /dev/null +++ b/Master/texmf-dist/doc/latex/resolsysteme/ResolSysteme-exemples.tex @@ -0,0 +1,103 @@ +% !TeX document-id = {f9c98d52-d889-44e1-8a1d-1b1aa5b344f6} +% !TeX TXS-program:compile = txs:///pdflatex + +\documentclass[french,a4paper,10pt]{article} +\usepackage[margin=1.5cm]{geometry} +\usepackage{ResolSysteme} +\usepackage{systeme} +\usepackage{babel} +\usepackage[most]{tcolorbox} +\sisetup{locale=FR,output-decimal-marker={,}} +\newtcblisting{ShowCodeTeX}[1][]{colback=white,colframe=red!75!black,listing options={style=tcblatex},#1} + +\begin{document} + +\part*{Version \og classique \fg{} avec xint} + +\section{Préambule sans utiliser python} + +\begin{ShowCodeTeX}[listing only] +\documentclass[french,a4paper,10pt]{article} +\usepackage[margin=1.5cm]{geometry} +\usepackage{ResolSysteme} %version classique +\usepackage{systeme} +\sisetup{locale=FR,output-decimal-marker={,}} +\end{ShowCodeTeX} + +\section{Déterminant d'une matrice, 2x2 ou 3x3} + +\begin{ShowCodeTeX} +Le déterminant de $A=\begin{pNiceMatrix} 1&2 \\ 3&4 \end{pNiceMatrix}$ est +$\det(A)=\DetMatrice(1,2 § 3,4)$. +\end{ShowCodeTeX} + +\begin{ShowCodeTeX} +Le déterminant de $A=\begin{pNiceMatrix} -1&{0,5} \\ \frac12&4 \end{pNiceMatrix}$ est +$\det(A)=\DetMatrice[dec](-1,0.5 § 1/2,4)$. +\end{ShowCodeTeX} + +\begin{ShowCodeTeX} +Le dét. de $A=\begin{pNiceMatrix} -1&\frac13&4 \\ \frac13&4&-1 \\ -1&0&0 \end{pNiceMatrix}$ est +$\det(A) \approx \DetMatrice[dec=3](-1,1/3,4 § 1/3,4,-1 § -1,0,0)$. +\end{ShowCodeTeX} + +\section{Inverse d'une matrice, 2x2 ou 3x3} + +\begin{ShowCodeTeX} +L'inverse de $A=\begin{pNiceMatrix} 1&2 \\ 3&4 \end{pNiceMatrix}$ est +$A^{-1}=\MatriceInverse<cell-space-limits=2pt>(1,2 § 3,4)$. +\end{ShowCodeTeX} + +\begin{ShowCodeTeX} +L'inverse de $A=\begin{pNiceMatrix} 1&2 \\ 3&4 \end{pNiceMatrix}$ est +$A^{-1}=\MatriceInverse*<cell-space-limits=2pt>(1,2 § 3,4)$. +\end{ShowCodeTeX} + +\begin{ShowCodeTeX} +L'inverse de $A=\begin{pNiceMatrix} 1&2 \\ 3&4 \end{pNiceMatrix}$ est +$A^{-1}=\MatriceInverse[d]<cell-space-limits=2pt>(1,2 § 3,4)$. +\end{ShowCodeTeX} + +\begin{ShowCodeTeX} +L'inverse de $A=\begin{pNiceMatrix} 1&2&3\\4&5&6\\7&8&8 \end{pNiceMatrix}$ est +$A^{-1}=\MatriceInverse<cell-space-limits=2pt>(1,2,3 § 4,5,6 § 7,8,8)$. +\end{ShowCodeTeX} + +\begin{ShowCodeTeX} +L'inverse de $A=\begin{pNiceMatrix} 1&2&3\\4&5&6\\7&8&8 \end{pNiceMatrix}$ est +$A^{-1}=\MatriceInverse[n]<cell-space-limits=2pt>(1,2,3 § 4,5,6 § 7,8,8)$. +\end{ShowCodeTeX} + +\section*{Résolution d'un système, 2x2 ou 3x3} + +\begin{ShowCodeTeX} +La solution de $\systeme{-9x-8y=-8,3x-6y=-7}$ est $\mathcal{S}=% +\left\lbrace \SolutionSysteme(-9,-8 § 3,-6)(-8,-7) \right\rbrace$. +\end{ShowCodeTeX} + +\begin{ShowCodeTeX} +La solution de $\systeme{-9x-8y=-8,3x-6y=-7}$ est $\mathcal{S}=% +\left\lbrace \SolutionSysteme*[d](-9,-8 § 3,-6)(-8,-7) \right\rbrace$. +\end{ShowCodeTeX} + +\begin{ShowCodeTeX} +La solution de $\systeme{x+y+z=-1,3x+2y-z=6,-x-y+2z=-5}$ est $\mathcal{S}=% +\left\lbrace \SolutionSysteme(1,1,1 § 3,2,-1 § -1,-1,2)(-1,6,-5) \right\rbrace$. +\end{ShowCodeTeX} + +\begin{ShowCodeTeX} +La solution de $\systeme{x+y+z=-1,3x+2y-z=6,-x-y+2z=-5}$ est donnée par $X=% +\SolutionSysteme(1,1,1 § 3,2,-1 § -1,-1,2)(-1,6,-5)[Matrice]$. +\end{ShowCodeTeX} + +\begin{ShowCodeTeX} +La solution de $\systeme{3x+y-2z=-1,2x-y+z=4,x-y-2z=5}$ est $\mathcal{S}=% +\left\lbrace \SolutionSysteme(3,1,-2 § 2,-1,1 § 1,-1,-2)(-1,4,5) \right\rbrace$. +\end{ShowCodeTeX} + +\begin{ShowCodeTeX} +La solution de $\systeme{3x+y-2z=-1,2x-y+z=4,x-y-2z=5}$ est $\mathcal{S}=% +\left\lbrace \SolutionSysteme*[d](3,1,-2 § 2,-1,1 § 1,-1,-2)(-1,4,5) \right\rbrace$. +\end{ShowCodeTeX} + +\end{document}
\ No newline at end of file diff --git a/Master/texmf-dist/tex/latex/resolsysteme/ResolSysteme.sty b/Master/texmf-dist/tex/latex/resolsysteme/ResolSysteme.sty new file mode 100644 index 00000000000..338e8b3d3c6 --- /dev/null +++ b/Master/texmf-dist/tex/latex/resolsysteme/ResolSysteme.sty @@ -0,0 +1,751 @@ +% Author.........: C. Pierquet +% licence........: Released under the LaTeX Project Public License v1.3c or later, see http://www.latex-project.org/lppl.txtf + +\NeedsTeXFormat{LaTeX2e} +\ProvidesPackage{ResolSysteme}[2023/02/07 v0.1.1 Travailler sur un systeme lineaire avec xint ou pyluatex] +% 0.1.1 Correction d'un bug avec le séparateur ";" +% 0.1.0 Version initiale + +%------Option(s) +\newif\if@pyluatex \@pyluatexfalse +\DeclareOption{pyluatex}{\@pyluatextrue} +\DeclareOption*{} +\ProcessOptions\relax + +%------Packages utiles +\RequirePackage{nicematrix} +\RequirePackage{ifthen} +\RequirePackage{xintexpr} +\RequirePackage{xinttools} +\RequirePackage{listofitems} +\RequirePackage{siunitx} +\RequirePackage{nicefrac} +\RequirePackage{xstring} + +%-------Option pyluatex pour les scripts python via pyluatex ! +\if@pyluatex %package pyluatex à charger par l'utilisateur ! +\begin{python} +import sympy as sy +x = sy.Symbol('x') +y = sy.Symbol('y') +z = sy.Symbol('z') +t = sy.Symbol('t') + +def resol_systeme_QQ(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,u) : + solution=sy.solve([a*x+b*y+c*z+d*t-e,f*x+g*y+h*z+i*t-j,k*x+l*y+m*z+n*t-o,p*x+q*y+r*z+s*t-u],[x,y,z,t]) + return solution + +def resol_systeme_TT(a,b,c,d,e,f,g,h,i,j,k,l) : + solution=sy.solve([a*x+b*y+c*z-d,e*x+f*y+g*z-h,i*x+j*y+k*z-l],[x,y,z]) + return solution + +def resol_systeme_DD(a,b,c,d,e,f) : + solution=sy.solve([a*x+b*y-c,d*x+e*y-f],[x,y]) + return solution + +def det_matrice_QQ(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p) : + MatTmp = sy.Matrix(([a,b,c,d],[e,f,g,h],[i,j,k,l],[m,n,o,p])) + DetMatTmp = MatTmp.det() + return DetMatTmp + +def det_matrice_TT(a,b,c,d,e,f,g,h,i) : + MatTmp = sy.Matrix(([a,b,c],[d,e,f],[g,h,i])) + DetMatTmp = MatTmp.det() + return DetMatTmp + +def det_matrice_DD(a,b,c,d) : + MatTmp = sy.Matrix(([a,b],[c,d])) + DetMatTmp = MatTmp.det() + return DetMatTmp + +def inverse_matrice_QQ(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p) : + MatTmp = sy.Matrix(([a,b,c,d],[e,f,g,h],[i,j,k,l],[m,n,o,p])) + DetMatTmp = MatTmp.inv() + return DetMatTmp + +def inverse_matrice_DD(a,b,c,d) : + MatTmp = sy.Matrix(([a,b],[c,d])) + InvMatTmp = MatTmp.inv() + return InvMatTmp + +def inverse_matrice_TT(a,b,c,d,e,f,g,h,i) : + MatTmp = sy.Matrix(([a,b,c],[d,e,f],[g,h,i])) + InvMatTmp = MatTmp.inv() + return InvMatTmp + +\end{python} +\fi + +%------conversion en fraction, version interne ! +\NewDocumentCommand\ConvVersFrac{ s O{} m }{% + %*=moins devant + %2=argument.optionnel[d/t/dec=...] + %3=argument mandataire {calcul ou fraction} + \def\calculargument{\xintPRaw{\xintIrr{\xinteval{#3}}}}%on calcule et on transforme en A/B + \IfSubStr{\calculargument}{/}%on teste si le symbole / apparaît + {%si oui := fraction + \StrBefore{\calculargument}{/}[\numerateur]%on extrait le numérateur + \StrBehind{\calculargument}{/}[\denominateur]%on extrait le dénominateur + \ifblank{#2}% + {% + \IfBooleanTF{#1}% + {% + \ifthenelse{\numerateur < 0}% + {\ensuremath{-\frac{\num{\fpeval{abs(\numerateur)}}}{\num{\denominateur}}}}% + {\ensuremath{\frac{\num{\numerateur}}{\num{\denominateur}}}}% + }% + {\ensuremath{\frac{\num{\numerateur}}{\num{\denominateur}}}}% + }% + {}%si l'argument optionnel est vide + \IfStrEq{#2}{d}% + {% + \IfBooleanTF{#1}% + {% + \ifthenelse{\numerateur < 0}% + {\ensuremath{-\dfrac{\num{\fpeval{abs(\numerateur)}}}{\num{\denominateur}}}}% + {\ensuremath{\dfrac{\num{\numerateur}}{\num{\denominateur}}}}% + }% + {\ensuremath{\dfrac{\num{\numerateur}}{\num{\denominateur}}}}% + }% + {}%si l'argument optionnel est vide + \IfStrEq{#2}{t}% + {% + \IfBooleanTF{#1}% + {% + \ifthenelse{\numerateur < 0}% + {\ensuremath{-\tfrac{\num{\fpeval{abs(\numerateur)}}}{\num{\denominateur}}}}% + {\ensuremath{\tfrac{\num{\numerateur}}{\num{\denominateur}}}}% + }% + {\ensuremath{\tfrac{\num{\numerateur}}{\num{\denominateur}}}}% + }% + {}%si l'argument optionnel est vide + \IfStrEq{#2}{n}% + {% + \IfBooleanTF{#1}% + {% + \ifthenelse{\numerateur < 0}% + {\ensuremath{-\nicefrac{\num{\fpeval{abs(\numerateur)}}}{\num{\denominateur}}}}% + {\ensuremath{\nicefrac{\num{\numerateur}}{\num{\denominateur}}}}% + }% + {\ensuremath{\nicefrac{\num{\numerateur}}{\num{\denominateur}}}}% + }% + {}%si l'argument optionnel est vide + \IfSubStr{#2}{dec}%on veut la forme décimale + {% + \IfSubStr{#2}{=}%si on rajoute une précision + {% + \StrBehind{#2}{=}[\precdecimal]% + \ensuremath{\num{\xintfloateval{round(#3,\precdecimal)}}}% + }% + {% + \ensuremath{\num{\xintfloateval{#3}}}% + }% + }% + {}%si l'argument optionnel est vide + }{%si non := entier + \num{\calculargument}%on affiche l'entier, avec le package siunitx + }% +} + +%------Commande classique, 2x2 ou 3x3 +\NewDocumentCommand\MatriceInverse{ s O{} D<>{} r() }{% + %*=fractions avec - devant + %2=options conversion + %3=options nicematrix + %4=matrice (,,;,,) + %--------------------- + %lectures des matrices + \setsepchar{§/,}% + \readlist*\MAMATRICEA{#4}% + \def\MatDim{\MAMATRICEAlen}% + %les coeffs de A et le déterminant et les coeff de l'inverse + \ifnum \MAMATRICEAlen=3 + \itemtomacro\MAMATRICEA[1,1]\MatA + \itemtomacro\MAMATRICEA[1,2]\MatB + \itemtomacro\MAMATRICEA[1,3]\MatC + \itemtomacro\MAMATRICEA[2,1]\MatD + \itemtomacro\MAMATRICEA[2,2]\MatE + \itemtomacro\MAMATRICEA[2,3]\MatF + \itemtomacro\MAMATRICEA[3,1]\MatG + \itemtomacro\MAMATRICEA[3,2]\MatH + \itemtomacro\MAMATRICEA[3,3]\MatI + %le déterminant + \def\DETMATRICE{\xinteval{\MatA*\MatE*\MatI+\MatD*\MatH*\MatC+\MatB*\MatF*\MatG-\MatG*\MatE*\MatC-\MatD*\MatB*\MatI-\MatA*\MatH*\MatF}}% + %matrice inverse, si elle existe... + \xintifboolexpr{\DETMATRICE == 0}% + {\text{Matrice non inversible}}% + {% + \IfBooleanTF{#1}% + {% + \def\MatInvA{\ConvVersFrac*[#2]{(\MatE*\MatI-\MatH*\MatF)/\DETMATRICE}}% + \def\MatInvB{\ConvVersFrac*[#2]{(-\MatB*\MatI+\MatC*\MatH)/\DETMATRICE}}% + \def\MatInvC{\ConvVersFrac*[#2]{(\MatB*\MatF-\MatC*\MatE)/\DETMATRICE}}% + \def\MatInvD{\ConvVersFrac*[#2]{(-\MatD*\MatI+\MatF*\MatG)/\DETMATRICE}}% + \def\MatInvE{\ConvVersFrac*[#2]{(\MatA*\MatI-\MatC*\MatG)/\DETMATRICE}}% + \def\MatInvF{\ConvVersFrac*[#2]{(-\MatA*\MatF+\MatD*\MatC)/\DETMATRICE}}% + \def\MatInvG{\ConvVersFrac*[#2]{(\MatD*\MatH-\MatE*\MatG)/\DETMATRICE}}% + \def\MatInvH{\ConvVersFrac*[#2]{(-\MatA*\MatH+\MatB*\MatG)/\DETMATRICE}}% + \def\MatInvI{\ConvVersFrac*[#2]{(\MatA*\MatE-\MatB*\MatD)/\DETMATRICE}}% + }% + {% + \def\MatInvA{\ConvVersFrac[#2]{(\MatE*\MatI-\MatH*\MatF)/\DETMATRICE}}% + \def\MatInvB{\ConvVersFrac[#2]{(-\MatB*\MatI+\MatC*\MatH)/\DETMATRICE}}% + \def\MatInvC{\ConvVersFrac[#2]{(\MatB*\MatF-\MatC*\MatE)/\DETMATRICE}}% + \def\MatInvD{\ConvVersFrac[#2]{(-\MatD*\MatI+\MatF*\MatG)/\DETMATRICE}}% + \def\MatInvE{\ConvVersFrac[#2]{(\MatA*\MatI-\MatC*\MatG)/\DETMATRICE}}% + \def\MatInvF{\ConvVersFrac[#2]{(-\MatA*\MatF+\MatD*\MatC)/\DETMATRICE}}% + \def\MatInvG{\ConvVersFrac[#2]{(\MatD*\MatH-\MatE*\MatG)/\DETMATRICE}}% + \def\MatInvH{\ConvVersFrac[#2]{(-\MatA*\MatH+\MatB*\MatG)/\DETMATRICE}}% + \def\MatInvI{\ConvVersFrac[#2]{(\MatA*\MatE-\MatB*\MatD)/\DETMATRICE}}% + }% + \begin{pNiceMatrix}[#3] + {\MatInvA}&{\MatInvB}&{\MatInvC} \\ + {\MatInvD}&{\MatInvE}&{\MatInvF} \\ + {\MatInvG}&{\MatInvH}&{\MatInvI} + \end{pNiceMatrix}% + }% + \fi + \ifnum \MAMATRICEAlen=2 + \itemtomacro\MAMATRICEA[1,1]\MatA + \itemtomacro\MAMATRICEA[1,2]\MatB + \itemtomacro\MAMATRICEA[2,1]\MatC + \itemtomacro\MAMATRICEA[2,2]\MatD + %le déterminant + \def\DETMATRICE{\xinteval{\MatA*\MatD-\MatB*\MatC}}% + %matrice inverse, si elle existe... + \xintifboolexpr{\DETMATRICE == 0}% + {\text{Matrice non inversible}}% + {% + \IfBooleanTF{#1}% + {% + \def\MatInvA{\ConvVersFrac*[#2]{(\MatD)/\DETMATRICE}}% + \def\MatInvB{\ConvVersFrac*[#2]{(-\MatB)/\DETMATRICE}}% + \def\MatInvC{\ConvVersFrac*[#2]{(-\MatC)/\DETMATRICE}}% + \def\MatInvD{\ConvVersFrac*[#2]{(\MatA)/\DETMATRICE}}% + }% + {% + \def\MatInvA{\ConvVersFrac[#2]{(\MatD)/\DETMATRICE}}% + \def\MatInvB{\ConvVersFrac[#2]{(-\MatB)/\DETMATRICE}}% + \def\MatInvC{\ConvVersFrac[#2]{(-\MatC)/\DETMATRICE}}% + \def\MatInvD{\ConvVersFrac[#2]{(\MatA)/\DETMATRICE}}% + }% + \begin{pNiceMatrix}[#3] + {\MatInvA}&{\MatInvB} \\ + {\MatInvC}&{\MatInvD} + \end{pNiceMatrix}% + }% + \fi +} + +\NewDocumentCommand\DetMatrice{ s O{} r() }{% + %*=fractions avec - devant + %2=options conversion + %3=matrice (,,;,,) + %--------------------- + %lectures des matrices + \setsepchar{§/,}% + \readlist*\MAMATRICEA{#3}% + %les coeffs de A et le déterminant et les coeff de l'inverse + \ifnum \MAMATRICEAlen=3 + \itemtomacro\MAMATRICEA[1,1]\MatA + \itemtomacro\MAMATRICEA[1,2]\MatB + \itemtomacro\MAMATRICEA[1,3]\MatC + \itemtomacro\MAMATRICEA[2,1]\MatD + \itemtomacro\MAMATRICEA[2,2]\MatE + \itemtomacro\MAMATRICEA[2,3]\MatF + \itemtomacro\MAMATRICEA[3,1]\MatG + \itemtomacro\MAMATRICEA[3,2]\MatH + \itemtomacro\MAMATRICEA[3,3]\MatI + %le déterminant + \def\DETMATRICE{\xinteval{\MatA*\MatE*\MatI+\MatD*\MatH*\MatC+\MatB*\MatF*\MatG-\MatG*\MatE*\MatC-\MatD*\MatB*\MatI-\MatA*\MatH*\MatF}}% + \fi + \ifnum \MAMATRICEAlen=2 + \itemtomacro\MAMATRICEA[1,1]\MatA + \itemtomacro\MAMATRICEA[1,2]\MatB + \itemtomacro\MAMATRICEA[2,1]\MatC + \itemtomacro\MAMATRICEA[2,2]\MatD + %le déterminant + \def\DETMATRICE{\xinteval{\MatA*\MatD-\MatB*\MatC}}% + \fi + \IfBooleanTF{#1}% + {% + \ConvVersFrac*[#2]{\DETMATRICE}% + }% + {% + \ConvVersFrac[#2]{\DETMATRICE}% + }% +} + +\NewDocumentCommand\SolutionSysteme{ s O{} D<>{} r() r() O{} }{% + %*=fractions avec - devant + %2=options conversion + %3=options nicematrix + %4=matrice (,,;,,) principale + %5=matrice (;;) second membre + %6=résultat sous forme d'une matrice + %--------------------- + %lectures des matrices + \setsepchar{§/,}% + \readlist*\MAMATRICEA{#4}% + \setsepchar{,}% + \readlist*\MAMATRICEB{#5}% + \def\MatDim{\MAMATRICEAlen}% + %les coeffs de A et le déterminant et les coeff de l'inverse + \ifnum \MAMATRICEAlen=3 + \itemtomacro\MAMATRICEA[1,1]\MatA + \itemtomacro\MAMATRICEA[1,2]\MatB + \itemtomacro\MAMATRICEA[1,3]\MatC + \itemtomacro\MAMATRICEA[2,1]\MatD + \itemtomacro\MAMATRICEA[2,2]\MatE + \itemtomacro\MAMATRICEA[2,3]\MatF + \itemtomacro\MAMATRICEA[3,1]\MatG + \itemtomacro\MAMATRICEA[3,2]\MatH + \itemtomacro\MAMATRICEA[3,3]\MatI + %le déterminant + \def\DETMATRICE{\xinteval{\MatA*\MatE*\MatI+\MatD*\MatH*\MatC+\MatB*\MatF*\MatG-\MatG*\MatE*\MatC-\MatD*\MatB*\MatI-\MatA*\MatH*\MatF}}% + %les coeffs de B + \itemtomacro\MAMATRICEB[1]\MatBA + \itemtomacro\MAMATRICEB[2]\MatBB + \itemtomacro\MAMATRICEB[3]\MatBC + %matrice inverse, si elle existe... + \xintifboolexpr{\DETMATRICE == 0}% + {\text{Matrice non inversible}}% + {% + \def\MatInvA{(\MatE*\MatI-\MatH*\MatF)/\DETMATRICE}% + \def\MatInvB{(-\MatB*\MatI+\MatC*\MatH)/\DETMATRICE}% + \def\MatInvC{(\MatB*\MatF-\MatC*\MatE)/\DETMATRICE}% + \def\MatInvD{(-\MatD*\MatI+\MatF*\MatG)/\DETMATRICE}% + \def\MatInvE{(\MatA*\MatI-\MatC*\MatG)/\DETMATRICE}% + \def\MatInvF{(-\MatA*\MatF+\MatD*\MatC)/\DETMATRICE}% + \def\MatInvG{(\MatD*\MatH-\MatE*\MatG)/\DETMATRICE}% + \def\MatInvH{(-\MatA*\MatH+\MatB*\MatG)/\DETMATRICE}% + \def\MatInvI{(\MatA*\MatE-\MatB*\MatD)/\DETMATRICE}% + % + \IfBooleanTF{#1}%version étoilée := moinsdevant + {% + \def\MatResA{\ConvVersFrac*[#2]{\MatInvA*\MatBA+\MatInvB*\MatBB+\MatInvC*\MatBC}}% + \def\MatResB{\ConvVersFrac*[#2]{\MatInvD*\MatBA+\MatInvE*\MatBB+\MatInvF*\MatBC}}% + \def\MatResC{\ConvVersFrac*[#2]{\MatInvG*\MatBA+\MatInvH*\MatBB+\MatInvI*\MatBC}}% + }% + {% + \def\MatResA{\ConvVersFrac[#2]{\MatInvA*\MatBA+\MatInvB*\MatBB+\MatInvC*\MatBC}}% + \def\MatResB{\ConvVersFrac[#2]{\MatInvD*\MatBA+\MatInvE*\MatBB+\MatInvF*\MatBC}}% + \def\MatResC{\ConvVersFrac[#2]{\MatInvG*\MatBA+\MatInvH*\MatBB+\MatInvI*\MatBC}}% + }% + \IfStrEq{#6}{Matrice}%si matrice + {% + \begin{pNiceMatrix}[#3] + {\MatResA} \\ + {\MatResB} \\ + {\MatResC} + \end{pNiceMatrix}% + }% + {% + \left( {\MatResA} ; {\MatResB} ; {\MatResC} \right)% + }% + }% + \fi + \ifnum \MAMATRICEAlen=2 + \itemtomacro\MAMATRICEA[1,1]\MatA + \itemtomacro\MAMATRICEA[1,2]\MatB + \itemtomacro\MAMATRICEA[2,1]\MatC + \itemtomacro\MAMATRICEA[2,2]\MatD + %le déterminant + \def\DETMATRICE{\xinteval{\MatA*\MatD-\MatB*\MatC}}% + %les coeffs de B + \itemtomacro\MAMATRICEB[1]\MatBA + \itemtomacro\MAMATRICEB[2]\MatBB + %matrice inverse, si elle existe... + \xintifboolexpr{\DETMATRICE == 0}% + {\text{Matrice non inversible}}% + {% + \def\MatInvA{(\MatD)/\DETMATRICE}% + \def\MatInvB{(-\MatB)/\DETMATRICE}% + \def\MatInvC{(-\MatC)/\DETMATRICE}% + \def\MatInvD{(\MatA)/\DETMATRICE}% + % + \IfBooleanTF{#1}% + {% + \def\MatResA{\ConvVersFrac*[#2]{\MatInvA*\MatBA+\MatInvB*\MatBB}}% + \def\MatResB{\ConvVersFrac*[#2]{\MatInvC*\MatBA+\MatInvD*\MatBB}}% + }% + {% + \def\MatResA{\ConvVersFrac[#2]{\MatInvA*\MatBA+\MatInvB*\MatBB}}% + \def\MatResB{\ConvVersFrac[#2]{\MatInvC*\MatBA+\MatInvD*\MatBB}}% + }% + \IfStrEq{#6}{Matrice}%si matrice + {% + \begin{pNiceMatrix}[#3] + {\MatResA} \\ + {\MatResB} + \end{pNiceMatrix}% + }% + {% + \left( {\MatResA} ; {\MatResB} \right)% + }% + }% + \fi +} + +%------Commandes via pyluatex +\if@pyluatex %package pyluatex à charger par l'utilisateur ! +\NewDocumentCommand\SolutionSystemePY{ s O{} D<>{} r() r() O{} }{% + %*=avec le moins devant + %2=Option Fraction + %3=matrice du système + %4=second membre + %5=option NiceMatrix + %6=résultat sous forme d'une matrice + %--------------------- + %lectures des matrices + \setsepchar{§/,}% + \readlist*\MAMATRICEA{#4}% + \setsepchar{,}% + \readlist*\MAMATRICEB{#5}% + %système QuatreQuatre + \ifnum \MAMATRICEAlen=4 + \itemtomacro\MAMATRICEA[1,1]\MatA + \itemtomacro\MAMATRICEA[1,2]\MatB + \itemtomacro\MAMATRICEA[1,3]\MatC + \itemtomacro\MAMATRICEA[1,4]\MatD + \itemtomacro\MAMATRICEA[2,1]\MatE + \itemtomacro\MAMATRICEA[2,2]\MatF + \itemtomacro\MAMATRICEA[2,3]\MatG + \itemtomacro\MAMATRICEA[2,4]\MatH + \itemtomacro\MAMATRICEA[3,1]\MatI + \itemtomacro\MAMATRICEA[3,2]\MatJ + \itemtomacro\MAMATRICEA[3,3]\MatK + \itemtomacro\MAMATRICEA[3,4]\MatL + \itemtomacro\MAMATRICEA[4,1]\MatM + \itemtomacro\MAMATRICEA[4,2]\MatN + \itemtomacro\MAMATRICEA[4,3]\MatO + \itemtomacro\MAMATRICEA[4,4]\MatP + %les coeffs de B + \itemtomacro\MAMATRICEB[1]\MatBA + \itemtomacro\MAMATRICEB[2]\MatBB + \itemtomacro\MAMATRICEB[3]\MatBC + \itemtomacro\MAMATRICEB[4]\MatBD + %les solutions + \def\DETMATRICE{\xinteval{\py{det_matrice_QQ(\MatA,\MatB,\MatC,\MatD,\MatE,\MatF,\MatG,\MatH,\MatI,\MatJ,\MatK,\MatL,\MatM,\MatN,\MatO,\MatP)}}}% + \xintifboolexpr{\DETMATRICE == 0}% + {\text{Matrice non inversible}}% + {% + \IfBooleanTF{#1}% + { + \def\MatResA{\ConvVersFrac*[#2]{\py{resol_systeme_QQ(\MatA,\MatB,\MatC,\MatD,\MatBA,\MatE,\MatF,\MatG,\MatH,\MatBB,\MatI,\MatJ,\MatK,\MatL,\MatBC,\MatM,\MatN,\MatO,\MatP,\MatBD)[x]}}}% + \def\MatResB{\ConvVersFrac*[#2]{\py{resol_systeme_QQ(\MatA,\MatB,\MatC,\MatD,\MatBA,\MatE,\MatF,\MatG,\MatH,\MatBB,\MatI,\MatJ,\MatK,\MatL,\MatBC,\MatM,\MatN,\MatO,\MatP,\MatBD)[y]}}}% + \def\MatResC{\ConvVersFrac*[#2]{\py{resol_systeme_QQ(\MatA,\MatB,\MatC,\MatD,\MatBA,\MatE,\MatF,\MatG,\MatH,\MatBB,\MatI,\MatJ,\MatK,\MatL,\MatBC,\MatM,\MatN,\MatO,\MatP,\MatBD)[z]}}}% + \def\MatResD{\ConvVersFrac*[#2]{\py{resol_systeme_QQ(\MatA,\MatB,\MatC,\MatD,\MatBA,\MatE,\MatF,\MatG,\MatH,\MatBB,\MatI,\MatJ,\MatK,\MatL,\MatBC,\MatM,\MatN,\MatO,\MatP,\MatBD)[t]}}}% + }% + {% + \def\MatResA{\ConvVersFrac[#2]{\py{resol_systeme_QQ(\MatA,\MatB,\MatC,\MatD,\MatBA,\MatE,\MatF,\MatG,\MatH,\MatBB,\MatI,\MatJ,\MatK,\MatL,\MatBC,\MatM,\MatN,\MatO,\MatP,\MatBD)[x]}}}% + \def\MatResB{\ConvVersFrac[#2]{\py{resol_systeme_QQ(\MatA,\MatB,\MatC,\MatD,\MatBA,\MatE,\MatF,\MatG,\MatH,\MatBB,\MatI,\MatJ,\MatK,\MatL,\MatBC,\MatM,\MatN,\MatO,\MatP,\MatBD)[y]}}}% + \def\MatResC{\ConvVersFrac[#2]{\py{resol_systeme_QQ(\MatA,\MatB,\MatC,\MatD,\MatBA,\MatE,\MatF,\MatG,\MatH,\MatBB,\MatI,\MatJ,\MatK,\MatL,\MatBC,\MatM,\MatN,\MatO,\MatP,\MatBD)[z]}}}% + \def\MatResD{\ConvVersFrac[#2]{\py{resol_systeme_QQ(\MatA,\MatB,\MatC,\MatD,\MatBA,\MatE,\MatF,\MatG,\MatH,\MatBB,\MatI,\MatJ,\MatK,\MatL,\MatBC,\MatM,\MatN,\MatO,\MatP,\MatBD)[t]}}}% + }% + \IfStrEq{#6}{Matrice}%si matrice + {% + \begin{pNiceMatrix}[#3] + {\MatResA} \\ + {\MatResB} \\ + {\MatResC} \\ + {\MatResD} + \end{pNiceMatrix}% + }% + {% + \left( {\MatResA} ; {\MatResB} ; {\MatResC} ; {\MatResD} \right)% + }% + }% + \fi + %système TroisTrois + \ifnum \MAMATRICEAlen=3 + \itemtomacro\MAMATRICEA[1,1]\MatA + \itemtomacro\MAMATRICEA[1,2]\MatB + \itemtomacro\MAMATRICEA[1,3]\MatC + \itemtomacro\MAMATRICEA[2,1]\MatD + \itemtomacro\MAMATRICEA[2,2]\MatE + \itemtomacro\MAMATRICEA[2,3]\MatF + \itemtomacro\MAMATRICEA[3,1]\MatG + \itemtomacro\MAMATRICEA[3,2]\MatH + \itemtomacro\MAMATRICEA[3,3]\MatI + %les coeffs de B + \itemtomacro\MAMATRICEB[1]\MatBA + \itemtomacro\MAMATRICEB[2]\MatBB + \itemtomacro\MAMATRICEB[3]\MatBC + %les solutions + \def\DETMATRICE{\xinteval{\py{det_matrice_TT(\MatA,\MatB,\MatC,\MatD,\MatE,\MatF,\MatG,\MatH,\MatI)}}}% + \xintifboolexpr{\DETMATRICE == 0}% + {\text{Matrice non inversible}}% + {% + \IfBooleanTF{#1}% + { + \def\MatResA{\ConvVersFrac*[#2]{\py{resol_systeme_TT(\MatA,\MatB,\MatC,\MatBA,\MatD,\MatE,\MatF,\MatBB,\MatG,\MatH,\MatI,\MatBC)[x]}}}% + \def\MatResB{\ConvVersFrac*[#2]{\py{resol_systeme_TT(\MatA,\MatB,\MatC,\MatBA,\MatD,\MatE,\MatF,\MatBB,\MatG,\MatH,\MatI,\MatBC)[y]}}}% + \def\MatResC{\ConvVersFrac*[#2]{\py{resol_systeme_TT(\MatA,\MatB,\MatC,\MatBA,\MatD,\MatE,\MatF,\MatBB,\MatG,\MatH,\MatI,\MatBC)[z]}}}% + }% + {% + \def\MatResA{\ConvVersFrac[#2]{\py{resol_systeme_TT(\MatA,\MatB,\MatC,\MatBA,\MatD,\MatE,\MatF,\MatBB,\MatG,\MatH,\MatI,\MatBC)[x]}}}% + \def\MatResB{\ConvVersFrac[#2]{\py{resol_systeme_TT(\MatA,\MatB,\MatC,\MatBA,\MatD,\MatE,\MatF,\MatBB,\MatG,\MatH,\MatI,\MatBC)[y]}}}% + \def\MatResC{\ConvVersFrac[#2]{\py{resol_systeme_TT(\MatA,\MatB,\MatC,\MatBA,\MatD,\MatE,\MatF,\MatBB,\MatG,\MatH,\MatI,\MatBC)[z]}}}% + }% + \IfStrEq{#6}{Matrice}%si matrice + {% + \begin{pNiceMatrix}[#3] + {\MatResA} \\ + {\MatResB} \\ + {\MatResC} + \end{pNiceMatrix}% + }% + {% + \left( {\MatResA} ; {\MatResB} ; {\MatResC} \right)% + }% + }% + \fi + %système DeuxDeux + \ifnum \MAMATRICEAlen=2 + \itemtomacro\MAMATRICEA[1,1]\MatA + \itemtomacro\MAMATRICEA[1,2]\MatB + \itemtomacro\MAMATRICEA[2,1]\MatC + \itemtomacro\MAMATRICEA[2,2]\MatD + %les coeffs de B + \itemtomacro\MAMATRICEB[1]\MatBA + \itemtomacro\MAMATRICEB[2]\MatBB + %solutions + \def\DETMATRICE{\xinteval{\py{det_matrice_DD(\MatA,\MatB,\MatC,\MatD)}}}% + \xintifboolexpr{\DETMATRICE == 0}% + {\text{Matrice non inversible}}% + {% + \IfBooleanTF{#1}% + { + \def\MatResA{\ConvVersFrac*[#2]{\py{resol_systeme_DD(\MatA,\MatB,\MatBA,\MatC,\MatD,\MatBB)[x]}}}% + \def\MatResB{\ConvVersFrac*[#2]{\py{resol_systeme_DD(\MatA,\MatB,\MatBA,\MatC,\MatD,\MatBB)[y]}}}% + }% + {% + \def\MatResA{\ConvVersFrac[#2]{\py{resol_systeme_DD(\MatA,\MatB,\MatBA,\MatC,\MatD,\MatBB)[x]}}}% + \def\MatResB{\ConvVersFrac[#2]{\py{resol_systeme_DD(\MatA,\MatB,\MatBA,\MatC,\MatD,\MatBB)[y]}}}% + }% + \IfStrEq{#6}{Matrice}%si matrice + {% + \begin{pNiceMatrix}[#3] + {\MatResA} \\ + {\MatResB} + \end{pNiceMatrix}% + }% + {% + \left( {\MatResA} ; {\MatResB} \right)% + }% + }% + \fi +} + +\NewDocumentCommand\MatriceInversePY{ s O{} D<>{} r() }{% + %*=fractions avec - devant + %2=options conversion + %3=options nicematrix + %4=matrice (,,;,,) + %--------------------- + %lectures des matrices + \setsepchar{§/,}% + \readlist*\MAMATRICEA{#4}% + %les coeffs de A et le déterminant et les coeff de l'inverse + \ifnum \MAMATRICEAlen=4 + \itemtomacro\MAMATRICEA[1,1]\MatA + \itemtomacro\MAMATRICEA[1,2]\MatB + \itemtomacro\MAMATRICEA[1,3]\MatC + \itemtomacro\MAMATRICEA[1,4]\MatD + \itemtomacro\MAMATRICEA[2,1]\MatE + \itemtomacro\MAMATRICEA[2,2]\MatF + \itemtomacro\MAMATRICEA[2,3]\MatG + \itemtomacro\MAMATRICEA[2,4]\MatH + \itemtomacro\MAMATRICEA[3,1]\MatI + \itemtomacro\MAMATRICEA[3,2]\MatJ + \itemtomacro\MAMATRICEA[3,3]\MatK + \itemtomacro\MAMATRICEA[3,4]\MatL + \itemtomacro\MAMATRICEA[4,1]\MatM + \itemtomacro\MAMATRICEA[4,2]\MatN + \itemtomacro\MAMATRICEA[4,3]\MatO + \itemtomacro\MAMATRICEA[4,4]\MatP + %les solutions + \def\DETMATRICE{\xinteval{\py{det_matrice_QQ(\MatA,\MatB,\MatC,\MatD,\MatE,\MatF,\MatG,\MatH,\MatI,\MatJ,\MatK,\MatL,\MatM,\MatN,\MatO,\MatP)}}}% + \xintifboolexpr{\DETMATRICE == 0}% + {\text{Matrice non inversible}}% + {% + \IfBooleanTF{#1}% + { + \def\MatInvA{\ConvVersFrac*[#2]{\py{inverse_matrice_QQ(\MatA,\MatB,\MatC,\MatD,\MatE,\MatF,\MatG,\MatH,\MatI,\MatJ,\MatK,\MatL,\MatM,\MatN,\MatO,\MatP)[0]}}}% + \def\MatInvB{\ConvVersFrac*[#2]{\py{inverse_matrice_QQ(\MatA,\MatB,\MatC,\MatD,\MatE,\MatF,\MatG,\MatH,\MatI,\MatJ,\MatK,\MatL,\MatM,\MatN,\MatO,\MatP)[1]}}}% + \def\MatInvC{\ConvVersFrac*[#2]{\py{inverse_matrice_QQ(\MatA,\MatB,\MatC,\MatD,\MatE,\MatF,\MatG,\MatH,\MatI,\MatJ,\MatK,\MatL,\MatM,\MatN,\MatO,\MatP)[2]}}}% + \def\MatInvD{\ConvVersFrac*[#2]{\py{inverse_matrice_QQ(\MatA,\MatB,\MatC,\MatD,\MatE,\MatF,\MatG,\MatH,\MatI,\MatJ,\MatK,\MatL,\MatM,\MatN,\MatO,\MatP)[3]}}}% + \def\MatInvE{\ConvVersFrac*[#2]{\py{inverse_matrice_QQ(\MatA,\MatB,\MatC,\MatD,\MatE,\MatF,\MatG,\MatH,\MatI,\MatJ,\MatK,\MatL,\MatM,\MatN,\MatO,\MatP)[4]}}}% + \def\MatInvF{\ConvVersFrac*[#2]{\py{inverse_matrice_QQ(\MatA,\MatB,\MatC,\MatD,\MatE,\MatF,\MatG,\MatH,\MatI,\MatJ,\MatK,\MatL,\MatM,\MatN,\MatO,\MatP)[5]}}}% + \def\MatInvG{\ConvVersFrac*[#2]{\py{inverse_matrice_QQ(\MatA,\MatB,\MatC,\MatD,\MatE,\MatF,\MatG,\MatH,\MatI,\MatJ,\MatK,\MatL,\MatM,\MatN,\MatO,\MatP)[6]}}}% + \def\MatInvH{\ConvVersFrac*[#2]{\py{inverse_matrice_QQ(\MatA,\MatB,\MatC,\MatD,\MatE,\MatF,\MatG,\MatH,\MatI,\MatJ,\MatK,\MatL,\MatM,\MatN,\MatO,\MatP)[7]}}}% + \def\MatInvI{\ConvVersFrac*[#2]{\py{inverse_matrice_QQ(\MatA,\MatB,\MatC,\MatD,\MatE,\MatF,\MatG,\MatH,\MatI,\MatJ,\MatK,\MatL,\MatM,\MatN,\MatO,\MatP)[8]}}}% + \def\MatInvJ{\ConvVersFrac*[#2]{\py{inverse_matrice_QQ(\MatA,\MatB,\MatC,\MatD,\MatE,\MatF,\MatG,\MatH,\MatI,\MatJ,\MatK,\MatL,\MatM,\MatN,\MatO,\MatP)[9]}}}% + \def\MatInvK{\ConvVersFrac*[#2]{\py{inverse_matrice_QQ(\MatA,\MatB,\MatC,\MatD,\MatE,\MatF,\MatG,\MatH,\MatI,\MatJ,\MatK,\MatL,\MatM,\MatN,\MatO,\MatP)[10]}}}% + \def\MatInvL{\ConvVersFrac*[#2]{\py{inverse_matrice_QQ(\MatA,\MatB,\MatC,\MatD,\MatE,\MatF,\MatG,\MatH,\MatI,\MatJ,\MatK,\MatL,\MatM,\MatN,\MatO,\MatP)[11]}}}% + \def\MatInvM{\ConvVersFrac*[#2]{\py{inverse_matrice_QQ(\MatA,\MatB,\MatC,\MatD,\MatE,\MatF,\MatG,\MatH,\MatI,\MatJ,\MatK,\MatL,\MatM,\MatN,\MatO,\MatP)[12]}}}% + \def\MatInvN{\ConvVersFrac*[#2]{\py{inverse_matrice_QQ(\MatA,\MatB,\MatC,\MatD,\MatE,\MatF,\MatG,\MatH,\MatI,\MatJ,\MatK,\MatL,\MatM,\MatN,\MatO,\MatP)[13]}}}% + \def\MatInvO{\ConvVersFrac*[#2]{\py{inverse_matrice_QQ(\MatA,\MatB,\MatC,\MatD,\MatE,\MatF,\MatG,\MatH,\MatI,\MatJ,\MatK,\MatL,\MatM,\MatN,\MatO,\MatP)[14]}}}% + \def\MatInvP{\ConvVersFrac*[#2]{\py{inverse_matrice_QQ(\MatA,\MatB,\MatC,\MatD,\MatE,\MatF,\MatG,\MatH,\MatI,\MatJ,\MatK,\MatL,\MatM,\MatN,\MatO,\MatP)[15]}}}% + }% + {% + \def\MatInvA{\ConvVersFrac[#2]{\py{inverse_matrice_QQ(\MatA,\MatB,\MatC,\MatD,\MatE,\MatF,\MatG,\MatH,\MatI,\MatJ,\MatK,\MatL,\MatM,\MatN,\MatO,\MatP)[0]}}}% + \def\MatInvB{\ConvVersFrac[#2]{\py{inverse_matrice_QQ(\MatA,\MatB,\MatC,\MatD,\MatE,\MatF,\MatG,\MatH,\MatI,\MatJ,\MatK,\MatL,\MatM,\MatN,\MatO,\MatP)[1]}}}% + \def\MatInvC{\ConvVersFrac[#2]{\py{inverse_matrice_QQ(\MatA,\MatB,\MatC,\MatD,\MatE,\MatF,\MatG,\MatH,\MatI,\MatJ,\MatK,\MatL,\MatM,\MatN,\MatO,\MatP)[2]}}}% + \def\MatInvD{\ConvVersFrac[#2]{\py{inverse_matrice_QQ(\MatA,\MatB,\MatC,\MatD,\MatE,\MatF,\MatG,\MatH,\MatI,\MatJ,\MatK,\MatL,\MatM,\MatN,\MatO,\MatP)[3]}}}% + \def\MatInvE{\ConvVersFrac[#2]{\py{inverse_matrice_QQ(\MatA,\MatB,\MatC,\MatD,\MatE,\MatF,\MatG,\MatH,\MatI,\MatJ,\MatK,\MatL,\MatM,\MatN,\MatO,\MatP)[4]}}}% + \def\MatInvF{\ConvVersFrac[#2]{\py{inverse_matrice_QQ(\MatA,\MatB,\MatC,\MatD,\MatE,\MatF,\MatG,\MatH,\MatI,\MatJ,\MatK,\MatL,\MatM,\MatN,\MatO,\MatP)[5]}}}% + \def\MatInvG{\ConvVersFrac[#2]{\py{inverse_matrice_QQ(\MatA,\MatB,\MatC,\MatD,\MatE,\MatF,\MatG,\MatH,\MatI,\MatJ,\MatK,\MatL,\MatM,\MatN,\MatO,\MatP)[6]}}}% + \def\MatInvH{\ConvVersFrac[#2]{\py{inverse_matrice_QQ(\MatA,\MatB,\MatC,\MatD,\MatE,\MatF,\MatG,\MatH,\MatI,\MatJ,\MatK,\MatL,\MatM,\MatN,\MatO,\MatP)[7]}}}% + \def\MatInvI{\ConvVersFrac[#2]{\py{inverse_matrice_QQ(\MatA,\MatB,\MatC,\MatD,\MatE,\MatF,\MatG,\MatH,\MatI,\MatJ,\MatK,\MatL,\MatM,\MatN,\MatO,\MatP)[8]}}}% + \def\MatInvJ{\ConvVersFrac[#2]{\py{inverse_matrice_QQ(\MatA,\MatB,\MatC,\MatD,\MatE,\MatF,\MatG,\MatH,\MatI,\MatJ,\MatK,\MatL,\MatM,\MatN,\MatO,\MatP)[9]}}}% + \def\MatInvK{\ConvVersFrac[#2]{\py{inverse_matrice_QQ(\MatA,\MatB,\MatC,\MatD,\MatE,\MatF,\MatG,\MatH,\MatI,\MatJ,\MatK,\MatL,\MatM,\MatN,\MatO,\MatP)[10]}}}% + \def\MatInvL{\ConvVersFrac[#2]{\py{inverse_matrice_QQ(\MatA,\MatB,\MatC,\MatD,\MatE,\MatF,\MatG,\MatH,\MatI,\MatJ,\MatK,\MatL,\MatM,\MatN,\MatO,\MatP)[11]}}}% + \def\MatInvM{\ConvVersFrac[#2]{\py{inverse_matrice_QQ(\MatA,\MatB,\MatC,\MatD,\MatE,\MatF,\MatG,\MatH,\MatI,\MatJ,\MatK,\MatL,\MatM,\MatN,\MatO,\MatP)[12]}}}% + \def\MatInvN{\ConvVersFrac[#2]{\py{inverse_matrice_QQ(\MatA,\MatB,\MatC,\MatD,\MatE,\MatF,\MatG,\MatH,\MatI,\MatJ,\MatK,\MatL,\MatM,\MatN,\MatO,\MatP)[13]}}}% + \def\MatInvO{\ConvVersFrac[#2]{\py{inverse_matrice_QQ(\MatA,\MatB,\MatC,\MatD,\MatE,\MatF,\MatG,\MatH,\MatI,\MatJ,\MatK,\MatL,\MatM,\MatN,\MatO,\MatP)[14]}}}% + \def\MatInvP{\ConvVersFrac[#2]{\py{inverse_matrice_QQ(\MatA,\MatB,\MatC,\MatD,\MatE,\MatF,\MatG,\MatH,\MatI,\MatJ,\MatK,\MatL,\MatM,\MatN,\MatO,\MatP)[15]}}}% + }% + \begin{pNiceMatrix}[#3] + {\MatInvA} & {\MatInvB} & {\MatInvC} & {\MatInvD} \\ + {\MatInvE} & {\MatInvF} & {\MatInvG} & {\MatInvH} \\ + {\MatInvI} & {\MatInvJ} & {\MatInvK} & {\MatInvL} \\ + {\MatInvM} & {\MatInvN} & {\MatInvO} & {\MatInvP} \\ + \end{pNiceMatrix}% + }% + \fi + \ifnum \MAMATRICEAlen=3 + \itemtomacro\MAMATRICEA[1,1]\MatA + \itemtomacro\MAMATRICEA[1,2]\MatB + \itemtomacro\MAMATRICEA[1,3]\MatC + \itemtomacro\MAMATRICEA[2,1]\MatD + \itemtomacro\MAMATRICEA[2,2]\MatE + \itemtomacro\MAMATRICEA[2,3]\MatF + \itemtomacro\MAMATRICEA[3,1]\MatG + \itemtomacro\MAMATRICEA[3,2]\MatH + \itemtomacro\MAMATRICEA[3,3]\MatI + \def\DETMATRICE{\xinteval{\py{det_matrice_TT(\MatA,\MatB,\MatC,\MatD,\MatE,\MatF,\MatG,\MatH,\MatI)}}}% + \xintifboolexpr{\DETMATRICE == 0}% + {\text{Matrice non inversible}}% + {% + \IfBooleanTF{#1}% + {% + \def\MatInvA{\ConvVersFrac*[#2]{\py{inverse_matrice_TT(\MatA,\MatB,\MatC,\MatD,\MatE,\MatF,\MatG,\MatH,\MatI)[0]}}} + \def\MatInvB{\ConvVersFrac*[#2]{\py{inverse_matrice_TT(\MatA,\MatB,\MatC,\MatD,\MatE,\MatF,\MatG,\MatH,\MatI)[1]}}} + \def\MatInvC{\ConvVersFrac*[#2]{\py{inverse_matrice_TT(\MatA,\MatB,\MatC,\MatD,\MatE,\MatF,\MatG,\MatH,\MatI)[2]}}} + \def\MatInvD{\ConvVersFrac*[#2]{\py{inverse_matrice_TT(\MatA,\MatB,\MatC,\MatD,\MatE,\MatF,\MatG,\MatH,\MatI)[3]}}} + \def\MatInvE{\ConvVersFrac*[#2]{\py{inverse_matrice_TT(\MatA,\MatB,\MatC,\MatD,\MatE,\MatF,\MatG,\MatH,\MatI)[4]}}} + \def\MatInvF{\ConvVersFrac*[#2]{\py{inverse_matrice_TT(\MatA,\MatB,\MatC,\MatD,\MatE,\MatF,\MatG,\MatH,\MatI)[5]}}} + \def\MatInvG{\ConvVersFrac*[#2]{\py{inverse_matrice_TT(\MatA,\MatB,\MatC,\MatD,\MatE,\MatF,\MatG,\MatH,\MatI)[6]}}} + \def\MatInvH{\ConvVersFrac*[#2]{\py{inverse_matrice_TT(\MatA,\MatB,\MatC,\MatD,\MatE,\MatF,\MatG,\MatH,\MatI)[7]}}} + \def\MatInvI{\ConvVersFrac*[#2]{\py{inverse_matrice_TT(\MatA,\MatB,\MatC,\MatD,\MatE,\MatF,\MatG,\MatH,\MatI)[8]}}} + }% + {% + \def\MatInvA{\ConvVersFrac[#2]{\py{inverse_matrice_TT(\MatA,\MatB,\MatC,\MatD,\MatE,\MatF,\MatG,\MatH,\MatI)[0]}}} + \def\MatInvB{\ConvVersFrac[#2]{\py{inverse_matrice_TT(\MatA,\MatB,\MatC,\MatD,\MatE,\MatF,\MatG,\MatH,\MatI)[1]}}} + \def\MatInvC{\ConvVersFrac[#2]{\py{inverse_matrice_TT(\MatA,\MatB,\MatC,\MatD,\MatE,\MatF,\MatG,\MatH,\MatI)[2]}}} + \def\MatInvD{\ConvVersFrac[#2]{\py{inverse_matrice_TT(\MatA,\MatB,\MatC,\MatD,\MatE,\MatF,\MatG,\MatH,\MatI)[3]}}} + \def\MatInvE{\ConvVersFrac[#2]{\py{inverse_matrice_TT(\MatA,\MatB,\MatC,\MatD,\MatE,\MatF,\MatG,\MatH,\MatI)[4]}}} + \def\MatInvF{\ConvVersFrac[#2]{\py{inverse_matrice_TT(\MatA,\MatB,\MatC,\MatD,\MatE,\MatF,\MatG,\MatH,\MatI)[5]}}} + \def\MatInvG{\ConvVersFrac[#2]{\py{inverse_matrice_TT(\MatA,\MatB,\MatC,\MatD,\MatE,\MatF,\MatG,\MatH,\MatI)[6]}}} + \def\MatInvH{\ConvVersFrac[#2]{\py{inverse_matrice_TT(\MatA,\MatB,\MatC,\MatD,\MatE,\MatF,\MatG,\MatH,\MatI)[7]}}} + \def\MatInvI{\ConvVersFrac[#2]{\py{inverse_matrice_TT(\MatA,\MatB,\MatC,\MatD,\MatE,\MatF,\MatG,\MatH,\MatI)[8]}}} + }% + \begin{pNiceMatrix}[#3] + {\MatInvA} & {\MatInvB} & {\MatInvC} \\ + {\MatInvD} & {\MatInvE} & {\MatInvF} \\ + {\MatInvG} & {\MatInvH} & {\MatInvI} + \end{pNiceMatrix}% + }% + \fi + \ifnum \MAMATRICEAlen=2 + \itemtomacro\MAMATRICEA[1,1]\MatA + \itemtomacro\MAMATRICEA[1,2]\MatB + \itemtomacro\MAMATRICEA[2,1]\MatC + \itemtomacro\MAMATRICEA[2,2]\MatD + \def\DETMATRICE{\xinteval{\py{det_matrice_DD(\MatA,\MatB,\MatC,\MatD)}}}% + \xintifboolexpr{\DETMATRICE == 0}% + {\text{Matrice non inversible}}% + {% + \IfBooleanTF{#1}% + {% + \def\MatInvA{\ConvVersFrac*[#2]{\py{inverse_matrice_DD(\MatA,\MatB,\MatC,\MatD)[0]}}} + \def\MatInvB{\ConvVersFrac*[#2]{\py{inverse_matrice_DD(\MatA,\MatB,\MatC,\MatD)[1]}}} + \def\MatInvC{\ConvVersFrac*[#2]{\py{inverse_matrice_DD(\MatA,\MatB,\MatC,\MatD)[2]}}} + \def\MatInvD{\ConvVersFrac*[#2]{\py{inverse_matrice_DD(\MatA,\MatB,\MatC,\MatD)[3]}}} + }% + {% + \def\MatInvA{\ConvVersFrac[#2]{\py{inverse_matrice_DD(\MatA,\MatB,\MatC,\MatD)[0]}}} + \def\MatInvB{\ConvVersFrac[#2]{\py{inverse_matrice_DD(\MatA,\MatB,\MatC,\MatD)[1]}}} + \def\MatInvC{\ConvVersFrac[#2]{\py{inverse_matrice_DD(\MatA,\MatB,\MatC,\MatD)[2]}}} + \def\MatInvD{\ConvVersFrac[#2]{\py{inverse_matrice_DD(\MatA,\MatB,\MatC,\MatD)[3]}}} + }% + \begin{pNiceMatrix}[#3] + {\MatInvA} & {\MatInvB} \\ + {\MatInvC} & {\MatInvD} + \end{pNiceMatrix}% + }% + \fi +} + +\NewDocumentCommand\DetMatricePY{ s O{} r() }{% + %*=fractions avec - devant + %2=options conversion + %3=matrice (,,;,,) + %--------------------- + %lectures des matrices + \setsepchar{§/,}% + \readlist*\MAMATRICEA{#3}% + \def\MatDim{\MAMATRICEAlen}% + %les coeffs de A et le déterminant et les coeff de l'inverse + \ifnum \MAMATRICEAlen=4 + \itemtomacro\MAMATRICEA[1,1]\MatA + \itemtomacro\MAMATRICEA[1,2]\MatB + \itemtomacro\MAMATRICEA[1,3]\MatC + \itemtomacro\MAMATRICEA[1,4]\MatD + \itemtomacro\MAMATRICEA[2,1]\MatE + \itemtomacro\MAMATRICEA[2,2]\MatF + \itemtomacro\MAMATRICEA[2,3]\MatG + \itemtomacro\MAMATRICEA[2,4]\MatH + \itemtomacro\MAMATRICEA[3,1]\MatI + \itemtomacro\MAMATRICEA[3,2]\MatJ + \itemtomacro\MAMATRICEA[3,3]\MatK + \itemtomacro\MAMATRICEA[3,4]\MatL + \itemtomacro\MAMATRICEA[4,1]\MatM + \itemtomacro\MAMATRICEA[4,2]\MatN + \itemtomacro\MAMATRICEA[4,3]\MatO + \itemtomacro\MAMATRICEA[4,4]\MatP + %les solutions + \def\DETMATRICE{\xinteval{\py{det_matrice_QQ(\MatA,\MatB,\MatC,\MatD,\MatE,\MatF,\MatG,\MatH,\MatI,\MatJ,\MatK,\MatL,\MatM,\MatN,\MatO,\MatP)}}}% + \fi + \ifnum \MAMATRICEAlen=3 + \itemtomacro\MAMATRICEA[1,1]\MatA + \itemtomacro\MAMATRICEA[1,2]\MatB + \itemtomacro\MAMATRICEA[1,3]\MatC + \itemtomacro\MAMATRICEA[2,1]\MatD + \itemtomacro\MAMATRICEA[2,2]\MatE + \itemtomacro\MAMATRICEA[2,3]\MatF + \itemtomacro\MAMATRICEA[3,1]\MatG + \itemtomacro\MAMATRICEA[3,2]\MatH + \itemtomacro\MAMATRICEA[3,3]\MatI + \def\DETMATRICE{\xinteval{\py{det_matrice_TT(\MatA,\MatB,\MatC,\MatD,\MatE,\MatF,\MatG,\MatH,\MatI)}}}% + \fi + \ifnum \MAMATRICEAlen=2 + \itemtomacro\MAMATRICEA[1,1]\MatA + \itemtomacro\MAMATRICEA[1,2]\MatB + \itemtomacro\MAMATRICEA[2,1]\MatC + \itemtomacro\MAMATRICEA[2,2]\MatD + \def\DETMATRICE{\xinteval{\py{det_matrice_DD(\MatA,\MatB,\MatC,\MatD)}}}% + \fi + \IfBooleanTF{#1}% + {% + \ConvVersFrac*[#2]{\DETMATRICE}% + }% + {% + \ConvVersFrac[#2]{\DETMATRICE}% + }% +} +\fi + +\endinput
\ No newline at end of file |