% 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{xint-regression}[2024/06/05 0.1.0 Some classic regressions, with xint] %0.1.0 Initial version %------Packages utiles \RequirePackage{simplekv} \RequirePackage{xintexpr} \RequirePackage{listofitems} \RequirePackage{xstring} %régression linéaire \defKV[CoefRegLin]{% coeffa=\def\RegLinCoefa{#1},% coeffb=\def\RegLinCoefb{#1},% round=\def\RegLinRound{#1} } \setKVdefault[CoefRegLin]{% coeffa=linrega,% coeffb=linregb,% round={} } \newcommand\xintlinreg[3][]{% \useKVdefault[CoefRegLin]% \setKV[CoefRegLin]{#1}% on paramètres les nouvelles clés et on les simplifie %listes des données \def\xliste{#2}% \def\yliste{#3}% \readlist*\LX{\xliste}% \readlist*\LY{\yliste}% %taille des listes \def\LNB{\inteval{\LXlen}}% %somme des LX et des LY OK \xdef\LXSomme{0}% \xdef\LYSomme{0}% \xintFor* ##1 in {\xintSeq{1}{\LNB}}\do{% \xdef\LXSomme{\xintfloateval{\LXSomme+(\LX[##1])}}% \xdef\LYSomme{\xintfloateval{\LYSomme+(\LY[##1])}}% }% %moyenne des LX et des LY OK \xdef\LXmoy{\xintfloateval{\LXSomme/\LNB}}% \xdef\LYmoy{\xintfloateval{\LYSomme/\LNB}}% %variance des LX et des LY OK \xdef\LXvar{0}% \xintFor* ##1 in {\xintSeq{1}{\LNB}}\do{% \xdef\LXvar{\xintfloateval{\LXvar+(\LX[##1]-(\LXmoy))*(\LX[##1]-(\LXmoy))}}% } \xdef\LXvar{\xintfloateval{\LXvar/\LNB}}% \xdef\LYvar{0}% \xintFor* ##1 in {\xintSeq{1}{\LNB}}\do{% \xdef\LYvar{\xintfloateval{\LYvar+(\LY[##1]-(\LYmoy))*(\LY[##1]-(\LYmoy))}}% }% \xdef\LYvar{\xintfloateval{\LYvar/\LNB}}% %covariance des XY OK \xdef\LXYvar{0}% \xintFor* ##1 in {\xintSeq{1}{\LNB}}\do{% \xdef\LXYvar{\xintfloateval{\LXYvar+(\LX[##1]-(\LXmoy))*(\LY[##1]-(\LYmoy))}}% }% \xdef\LXYvar{\xintfloateval{\LXYvar/\LNB}}% %COEFFS TEMPORAIRES OK \xdef\tmp@reg@lin@a{\xintfloateval{\LXYvar/\LXvar}}% \xdef\tmp@reg@lin@b{\xintfloateval{\LYmoy-(\tmp@reg@lin@a)*(\LXmoy)}}% %STOCKAGE \IfStrEq{\RegLinRound}{}% {% \expandafter\def\csname\RegLinCoefa\endcsname{\tmp@reg@lin@a}% \expandafter\def\csname\RegLinCoefb\endcsname{\tmp@reg@lin@b}% }% {% \IfSubStr{\RegLinRound}{/}% {% \StrCut{\RegLinRound}{/}{\xintarrondisreglina}{\xintarrondisreglinb}% }% {% \xdef\xintarrondisreglina{\RegLinRound}\xdef\xintarrondisreglinb{\RegLinRound}% }% \expandafter\def\csname\RegLinCoefa\endcsname{\xintfloateval{round(\tmp@reg@lin@a,\xintarrondisreglina)}}% \expandafter\def\csname\RegLinCoefb\endcsname{\xintfloateval{round(\tmp@reg@lin@b,\xintarrondisreglinb)}}% }% } %régression quadratique \defKV[CoeffRegQuad]{% coeffa=\def\RegQuadCoefa{#1},% coeffb=\def\RegQuadCoefb{#1},% coeffc=\def\RegQuadCoefc{#1},% round=\def\RegQuadRound{#1} } \setKVdefault[CoeffRegQuad]{% coeffa=quadrega,% coeffb=quadregb,% coeffc=quadregc,% round={} } \newcommand\xintquadreg[3][]{% \useKVdefault[CoeffRegQuad]% \setKV[CoeffRegQuad]{#1}% on paramètres les nouvelles clés et on les simplifie %listes des données \def\xliste{#2}% \def\yliste{#3}% \readlist*\LX{\xliste}% \readlist*\LY{\yliste}% %taille des listes \def\LNB{\inteval{\LXlen}}% %somme importantes \xdef\LXSomme{0}% \xdef\LXCSomme{0}% \xdef\LYSomme{0}% \xdef\LXXSomme{0}% \xdef\LXYSomme{0}% \xdef\LXXCSomme{0}% \xdef\LXCXCSomme{0}% \xdef\LXCYSomme{0}% %calculs \xintFor* ##1 in {\xintSeq{1}{\LNB}}\do{% \xdef\LXSomme{\xintfloateval{\LXSomme+(\LX[##1])}}% \xdef\LXCSomme{\xintfloateval{\LXCSomme+(\LX[##1])^2}}% }% \xintFor* ##1 in {\xintSeq{1}{\LNB}}\do{% \xdef\LYSomme{\xintfloateval{\LYSomme+(\LY[##1])}}% }% \xdef\LXmoy{\xintfloateval{\LXSomme/\LNB}}% \xdef\LYmoy{\xintfloateval{\LYSomme/\LNB}}% \xdef\LXCmoy{\xintfloateval{\LXCSomme/\LNB}}% %calculs suites \xintFor* ##1 in {\xintSeq{1}{\LNB}}\do{% \xdef\LXXSomme{\xintfloateval{\LXXSomme+(\LX[##1]-\LXmoy)^2}}% \xdef\LXYSomme{\xintfloateval{\LXYSomme+(\LX[##1]-\LXmoy)*(\LY[##1]-\LYmoy)}}% \xdef\LXXCSomme{\xintfloateval{\LXXCSomme+(\LX[##1]-\LXmoy)*((\LX[##1])*(\LX[##1])-\LXCmoy)}}% \xdef\LXCXCSomme{\xintfloateval{\LXCXCSomme+((\LX[##1])^2-\LXCmoy)^2}}% \xdef\LXCYSomme{\xintfloateval{\LXCYSomme+((\LX[##1])^2-\LXCmoy)*(\LY[##1]-\LYmoy)}}% }% %COEFFS TEMPORAIRES OK \xdef\tmp@reg@quad@b{\xintfloateval{(\LXYSomme*\LXCXCSomme-\LXCYSomme*\LXXCSomme)/(\LXXSomme*\LXCXCSomme-(\LXXCSomme)^2)}}% \xdef\tmp@reg@quad@a{\xintfloateval{(\LXCYSomme*\LXXSomme-\LXYSomme*\LXXCSomme)/(\LXXSomme*\LXCXCSomme-(\LXXCSomme)^2)}}% \xdef\tmp@reg@quad@c{\xintfloateval{\LYmoy-(\tmp@reg@quad@b)*\LXmoy-(\tmp@reg@quad@a)*\LXCmoy}}% %STOCKAGE \IfStrEq{\RegQuadRound}{}% {% \expandafter\def\csname\RegQuadCoefb\endcsname{\tmp@reg@quad@b}% \expandafter\def\csname\RegQuadCoefa\endcsname{\tmp@reg@quad@a}% \expandafter\def\csname\RegQuadCoefc\endcsname{\tmp@reg@quad@c}% }% {% \IfSubStr{\RegQuadRound}{/}% {% \StrBefore[1]{\RegQuadRound}{/}[\xintarrondisregquada]% \StrBetween[1,2]{\RegQuadRound}{/}{/}[\xintarrondisregquadb]% \StrBehind[2]{\RegQuadRound}{/}[\xintarrondisregquadc]% }% {% \xdef\xintarrondisregquada{\RegQuadRound}% \xdef\xintarrondisregquadb{\RegQuadRound}% \xdef\xintarrondisregquadc{\RegQuadRound}% }% \expandafter\def\csname\RegQuadCoefb\endcsname{\xintfloateval{round(\tmp@reg@quad@b,\xintarrondisregquadb)}}% \expandafter\def\csname\RegQuadCoefa\endcsname{\xintfloateval{round(\tmp@reg@quad@a,\xintarrondisregquada)}}% \expandafter\def\csname\RegQuadCoefc\endcsname{\xintfloateval{round(\tmp@reg@quad@c,\xintarrondisregquadc)}}% }% } %régression puissance a*x^b \defKV[CoeffRegPuiss]{% coeffa=\def\RegPuissCoefa{#1},% coeffb=\def\RegPuissCoefb{#1},% round=\def\RegPuissRound{#1} } \setKVdefault[CoeffRegPuiss]{% coeffa=powrega,% coeffb=powregb,% round={} } \newcommand\xintpowreg[3][]{% \useKVdefault[CoeffRegPuiss]% \setKV[CoeffRegPuiss]{#1}% on paramètres les nouvelles clés et on les simplifie %listes des données \def\xliste{#2}% \def\yliste{#3}% \readlist*\LX{\xliste}% \readlist*\LY{\yliste}% %taille des listes \def\LNB{\inteval{\LXlen}}% %somme importantes \xdef\LlnXSomme{0}% \xdef\LlnYSomme{0}% \xdef\LlnXlnYSomme{0}% \xdef\LlncXSomme{0}% %calculs \xintFor* ##1 in {\xintSeq{1}{\LNB}}\do{% \xdef\LlnXSomme{\xintfloateval{\LlnXSomme+log(\LX[##1])}}% \xdef\LlnYSomme{\xintfloateval{\LlnYSomme+log(\LY[##1])}}% \xdef\LlnXlnYSomme{\xintfloateval{\LlnXlnYSomme+log(\LX[##1])*log(\LY[##1])}}% \xdef\LlncXSomme{\xintfloateval{\LlncXSomme+(log(\LX[##1]))^2}}% }% %COEFFS TEMPORAIRES OK \xdef\tmp@reg@pow@b{\xintfloateval{(\LNB*\LlnXlnYSomme-\LlnXSomme*\LlnYSomme)/(\LNB*\LlncXSomme-(\LlnXSomme)^2)}}% \xdef\tmp@reg@pow@a{\xintfloateval{exp(1/\LNB*\LlnYSomme-(\tmp@reg@pow@b)/\LNB*\LlnXSomme)}}% %STOCKAGE \IfStrEq{\RegPuissRound}{}% {% \expandafter\def\csname\RegPuissCoefb\endcsname{\xintfloateval{\tmp@reg@pow@b}}% \expandafter\def\csname\RegPuissCoefa\endcsname{\xintfloateval{\tmp@reg@pow@a}}% }% {% \IfSubStr{\RegPuissRound}{/}% {% \StrCut{\RegPuissRound}{/}{\xintarrondisregpowa}{\xintarrondisregpowb}% }% {% \xdef\xintarrondisregpowa{\RegPuissRound}\xdef\xintrrondisregpowb{\RegPuissRound}% }% \expandafter\def\csname\RegPuissCoefb\endcsname{\xintfloateval{round(\tmp@reg@pow@b,\xintarrondisregpowb)}}% \expandafter\def\csname\RegPuissCoefa\endcsname{\xintfloateval{round(\tmp@reg@pow@a,\xintarrondisregpowa)}}% }% } %régression a*b^x \defKV[CoeffRegExpoAB]{% coeffa=\def\RegExpoCoefa{#1},% coeffb=\def\RegExpoCoefb{#1},% round=\def\RegExpoRound{#1} } \setKVdefault[CoeffRegExpoAB]{% coeffa=expabrega,% coeffb=expabregb,% round={} } \newcommand\xintexpabreg[3][]{% \useKVdefault[CoeffRegExpoAB]% \setKV[CoeffRegExpoAB]{#1}% on paramètres les nouvelles clés et on les simplifie %listes des données \def\xliste{#2}% \def\yliste{#3}% \readlist*\LX{\xliste}% \readlist*\LY{\yliste}% %taille des listes \def\LNB{\inteval{\LXlen}}% %somme importantes \xdef\LXlnYSomme{0}% \xdef\LXSomme{0}% \xdef\LlnYSomme{0}% \xdef\LXcSomme{0}% %calculs \xintFor* ##1 in {\xintSeq{1}{\LNB}}\do{% \xdef\LXlnYSomme{\xintfloateval{\LXlnYSomme+\LX[##1]*log(\LY[##1])}}% \xdef\LXSomme{\xintfloateval{\LXSomme+\LX[##1]}}% \xdef\LlnYSomme{\xintfloateval{\LlnYSomme+log(\LY[##1])}}% \xdef\LXcSomme{\xintfloateval{\LXcSomme+(\LX[##1])^2}}% }% %COEFFS TEMPORAIRES OK \xdef\tmp@reg@expab@b{\xintfloateval{exp((\LNB*\LXlnYSomme-\LXSomme*\LlnYSomme)/(\LNB*\LXcSomme-(\LXSomme)^2))}}% \xdef\tmp@reg@expab@a{\xintfloateval{exp(1/\LNB*\LlnYSomme-log(\tmp@reg@expab@b)/\LNB*\LXSomme)}}% %STOCKAGE \IfStrEq{\RegExpoRound}{}% {% \expandafter\def\csname\RegExpoCoefb\endcsname{\tmp@reg@expab@b}% \expandafter\def\csname\RegExpoCoefa\endcsname{\tmp@reg@expab@a}% }% {% \IfSubStr{\RegExpoRound}{/}% {% \StrCut{\RegExpoRound}{/}{\xintarrondisregexpoaba}{\xintarrondisregexpoabb}% }% {% \xdef\xintarrondisregexpoaba{\RegExpoRound}\xdef\xintarrondisregexpoabb{\RegExpoRound}% }% \expandafter\def\csname\RegExpoCoefb\endcsname{\xintfloateval{round(\tmp@reg@expab@b,\xintarrondisregexpoabb)}}% \expandafter\def\csname\RegExpoCoefa\endcsname{\xintfloateval{round(\tmp@reg@expab@a,\xintarrondisregexpoaba)}}% }% } %régression a+b/x \defKV[CoeffRegHyperb]{% coeffa=\def\RegHyperbCoefa{#1},% coeffb=\def\RegHyperbCoefb{#1},% round=\def\RegHyperbRound{#1} } \setKVdefault[CoeffRegHyperb]{% coeffa=hyprega,% coeffb=hypregb,% round={} } \newcommand\xinthypreg[3][]{% \useKVdefault[CoeffRegHyperb]% \setKV[CoeffRegHyperb]{#1}% on paramètres les nouvelles clés et on les simplifie %listes des données \def\xliste{#2}% \def\yliste{#3}% \readlist*\LX{\xliste}% \readlist*\LY{\yliste}% %taille des listes \def\LNB{\inteval{\LXlen}}% %somme importantes \xdef\LinvXSomme{0}% \xdef\LYdivXSomme{0}% \xdef\LYSomme{0}% \xdef\LinvXcSomme{0}% %calculs \xintFor* ##1 in {\xintSeq{1}{\LNB}}\do{% \xdef\LinvXSomme{\xintfloateval{\LinvXSomme+1/\LX[##1]}}% \xdef\LYdivXSomme{\xintfloateval{\LYdivXSomme+\LY[##1]/\LX[##1]}}% \xdef\LYSomme{\xintfloateval{\LYSomme+\LY[##1]}}% \xdef\LinvXcSomme{\xintfloateval{\LinvXcSomme+1/(\LX[##1])^2}}% }% %COEFFS TEMPORAIRES OK \xdef\tmp@reg@hyp@b{\xintfloateval{(\LNB*\LYdivXSomme-\LinvXSomme*\LYSomme)/(\LNB*\LinvXcSomme-(\LinvXSomme)^2)}}% \xdef\tmp@reg@hyp@a{\xintfloateval{1/\LNB*\LYSomme-(\tmp@reg@hyp@b)/\LNB*\LinvXSomme}}% %STOCKAGE \IfStrEq{\RegHyperbRound}{}% {% \expandafter\def\csname\RegHyperbCoefb\endcsname{\tmp@reg@hyp@b}% \expandafter\def\csname\RegHyperbCoefa\endcsname{\tmp@reg@hyp@a}% }% {% \IfSubStr{\RegHyperbRound}{/}% {% \StrCut{\RegHyperbRound}{/}{\xintarrondisreghypa}{\xintarrondisreghypb}% }% {% \xdef\xintarrondisreghypa{\RegHyperbRound}\xdef\xintarrondisreghypb{\RegHyperbRound}% }% \expandafter\def\csname\RegHyperbCoefb\endcsname{\xintfloateval{round(\tmp@reg@hyp@b,\xintarrondisreghypb)}}% \expandafter\def\csname\RegHyperbCoefa\endcsname{\xintfloateval{round(\tmp@reg@hyp@a,\xintarrondisreghypa)}}% }% } %régression a+b*ln(x) \defKV[CoeffRegLog]{% coeffa=\def\RegLogCoefa{#1},% coeffb=\def\RegLogCoefb{#1},% round=\def\RegLogRound{#1} } \setKVdefault[CoeffRegLog]{% coeffa=logrega,% coeffb=logregb,% round={} } \newcommand\xintlogreg[3][]{% \useKVdefault[CoeffRegLog]% \setKV[CoeffRegLog]{#1}% on paramètres les nouvelles clés et on les simplifie %listes des données \def\xliste{#2}% \def\yliste{#3}% \readlist*\LX{\xliste}% \readlist*\LY{\yliste}% %taille des listes \def\LNB{\inteval{\LXlen}}% %somme importantes \xdef\LYlnXSomme{0}% \xdef\LlnXSomme{0}% \xdef\LYSomme{0}% \xdef\LYlncXSomme{0}% %calculs \xintFor* ##1 in {\xintSeq{1}{\LNB}}\do{% \xdef\LYlnXSomme{\xintfloateval{\LYlnXSomme+\LY[##1]*log(\LX[##1])}}% \xdef\LlnXSomme{\xintfloateval{\LlnXSomme+log(\LX[##1])}}% \xdef\LYSomme{\xintfloateval{\LYSomme+\LY[##1]}}% \xdef\LYlncXSomme{\xintfloateval{\LYlncXSomme+log(\LX[##1])^2}}% }% %COEFFS TEMPORAIRES OK \xdef\tmp@reg@log@b{\xintfloateval{(\LNB*\LYlnXSomme-\LlnXSomme*\LYSomme)/(\LNB*\LYlncXSomme-(\LlnXSomme)^2)}}% \xdef\tmp@reg@log@a{\xintfloateval{1/\LNB*\LYSomme-(\tmp@reg@log@b)/\LNB*\LlnXSomme}}% %STOCKAGE \IfStrEq{\RegLogRound}{}% {% \expandafter\def\csname\RegLogCoefb\endcsname{\tmp@reg@log@b}% \expandafter\def\csname\RegLogCoefa\endcsname{\tmp@reg@log@a}% }% {% \IfSubStr{\RegLogRound}{/}% {% \StrCut{\RegLogRound}{/}{\xintarrondisregloga}{\xintarrondisreglogb}% }% {% \xdef\xintarrondisregloga{\RegLogRound}\xdef\xintarrondisreglogb{\RegLogRound}% }% \expandafter\def\csname\RegLogCoefb\endcsname{\xintfloateval{round(\tmp@reg@log@b,\xintarrondisreglogb)}}% \expandafter\def\csname\RegLogCoefa\endcsname{\xintfloateval{round(\tmp@reg@log@a,\xintarrondisregloga)}}% }% } %régression e^(ax+b) \defKV[CoeffRegExpo]{% coeffa=\def\RegExpoNCoefa{#1},% coeffb=\def\RegExpoNCoefb{#1},% round=\def\RegExpoNRound{#1} } \setKVdefault[CoeffRegExpo]{% coeffa=exprega,% coeffb=expregb,% Alt=false,% round={} } \newcommand\xintexpreg[3][]{% \useKVdefault[CoeffRegExpo]% \setKV[CoeffRegExpo]{#1}% on paramètres les nouvelles clés et on les simplifie %listes des données \def\xliste{#2}% \def\yliste{#3}% \readlist*\LX{\xliste}% \readlist*\LY{\yliste}% %taille des listes \def\LNB{\inteval{\LXlen}}% %somme importantes \xdef\LXlnYSomme{0}% \xdef\LXSomme{0}% \xdef\LlnYSomme{0}% \xdef\LXcSomme{0}% %calculs \xintFor* ##1 in {\xintSeq{1}{\LNB}}\do{% \xdef\LXlnYSomme{\xintfloateval{\LXlnYSomme+\LX[##1]*log(\LY[##1])}}% \xdef\LXSomme{\xintfloateval{\LXSomme+\LX[##1]}}% \xdef\LlnYSomme{\xintfloateval{\LlnYSomme+log(\LY[##1])}}% \xdef\LXcSomme{\xintfloateval{\LXcSomme+(\LX[##1])^2}}% }% %COEFFS TEMPORAIRES \xdef\TmpCoeffExpoA{\xintfloateval{(\LNB*\LXlnYSomme-\LXSomme*\LlnYSomme)/(\LNB*\LXcSomme-(\LXSomme)^2)}}% \xdef\TmpCoeffExpoB{\xintfloateval{1/\LNB*\LlnYSomme-(\TmpCoeffExpoA)/\LNB*\LXSomme}}% \ifboolKV[CoeffRegExpo]{Alt}% {% %STOCKAGE \IfStrEq{\RegExpoNRound}{}% {% \expandafter\def\csname\RegExpoNCoefb\endcsname{\xintfloateval{exp(\TmpCoeffExpoB)}}% \expandafter\def\csname\RegExpoNCoefa\endcsname{\TmpCoeffExpoA}% }% {% \IfSubStr{\RegExpoNRound}{/}% {% \StrCut{\RegExpoNRound}{/}{\xintarrondisregexpoa}{\xintarrondisregexpob}% }% {% \xdef\xintarrondisregexpoa{\RegExpoNRound}\xdef\xintarrondisregexpob{\RegExpoNRound}% }% \expandafter\def\csname\RegExpoNCoefb\endcsname{\xintfloateval{round(exp(\TmpCoeffExpoB),\xintarrondisregexpob)}}% \expandafter\def\csname\RegExpoNCoefa\endcsname{\xintfloateval{round(\TmpCoeffExpoA,\xintarrondisregexpoa)}}% }% }% {% %STOCKAGE \IfStrEq{\RegExpoNRound}{}% {% \expandafter\def\csname\RegExpoNCoefb\endcsname{\TmpCoeffExpoB}% \expandafter\def\csname\RegExpoNCoefa\endcsname{\TmpCoeffExpoA}% }% {% \IfSubStr{\RegExpoNRound}{/}% {% \StrCut{\RegExpoNRound}{/}{\xintarrondisregexpoa}{\xintarrondisregexpob}% }% {% \xdef\xintarrondisregexpoa{\RegExpoNRound}\xdef\xintarrondisregexpob{\RegExpoNRound}% }% \expandafter\def\csname\RegExpoNCoefb\endcsname{\xintfloateval{round(\TmpCoeffExpoB,\xintarrondisregexpob)}}% \expandafter\def\csname\RegExpoNCoefa\endcsname{\xintfloateval{round(\TmpCoeffExpoA,\xintarrondisregexpoa)}}% }% }% } %régression C + b*e^(ax) \defKV[CoeffRegExpoOff]{% coeffa=\def\RegExpoOffCoefa{#1},% coeffb=\def\RegExpoOffCoefb{#1},% offset=\def\RegExpoOffset{#1},% round=\def\RegExpoOffRound{#1} } \setKVdefault[CoeffRegExpoOff]{% coeffa=expregoffa,% coeffb=expregoffb,% offset=0,% round={} } \newcommand\xintexpoffreg[3][]{% \useKVdefault[CoeffRegExpoOff]% \setKV[CoeffRegExpoOff]{#1}% on paramètres les nouvelles clés et on les simplifie %listes des données \def\xliste{#2}% \def\yliste{#3}% \readlist*\LX{\xliste}% \readlist*\LY{\yliste}% %taille des listes \def\LNB{\inteval{\LXlen}}% %somme importantes \xdef\LXlnYSomme{0}% \xdef\LXSomme{0}% \xdef\LlnYSomme{0}% \xdef\LXcSomme{0}% %calculs \xintFor* ##1 in {\xintSeq{1}{\LNB}}\do{% \xdef\LXlnYSomme{\xintfloateval{\LXlnYSomme+\LX[##1]*log(\LY[##1]-\RegExpoOffset)}}% \xdef\LXSomme{\xintfloateval{\LXSomme+\LX[##1]}}% \xdef\LlnYSomme{\xintfloateval{\LlnYSomme+log(\LY[##1]-\RegExpoOffset)}}% \xdef\LXcSomme{\xintfloateval{\LXcSomme+(\LX[##1])^2}}% }% %COEFFS TEMPORAIRES \xdef\TmpCoeffExpoA{\xintfloateval{(\LNB*\LXlnYSomme-\LXSomme*\LlnYSomme)/(\LNB*\LXcSomme-(\LXSomme)^2)}}% \xdef\TmpCoeffExpoB{\xintfloateval{1/\LNB*\LlnYSomme-(\TmpCoeffExpoA)/\LNB*\LXSomme}}% %STOCKAGE \IfStrEq{\RegExpoOffRound}{}% {% \expandafter\def\csname\RegExpoOffCoefb\endcsname{\xintfloateval{exp(\TmpCoeffExpoB)}}% \expandafter\def\csname\RegExpoOffCoefa\endcsname{\xintfloateval{\TmpCoeffExpoA}}% }% {% \IfSubStr{\RegExpoOffRound}{/}% {% \StrCut{\RegExpoOffRound}{/}{\xintarrondisregexpoffa}{\xintarrondisregexpoffb}% }% {% \xdef\xintarrondisregexpoffa{\RegExpoOffRound}\xdef\xintarrondisregexpoffb{\RegExpoOffRound}% }% \expandafter\def\csname\RegExpoOffCoefb\endcsname{\xintfloateval{round(exp(\TmpCoeffExpoB),\xintarrondisregexpoffb)}}% \expandafter\def\csname\RegExpoOffCoefa\endcsname{\xintfloateval{round(\TmpCoeffExpoA,\xintarrondisregexpoffa)}}% }% } %régression cubique \defKV[CoeffRegCubic]{% coeffa=\def\RegCubicCoefa{#1},% coeffb=\def\RegCubicCoefb{#1},% coeffc=\def\RegCubicCoefc{#1},% coeffd=\def\RegCubicCoefd{#1},% round=\def\RegCubicRound{#1} } \setKVdefault[CoeffRegCubic]{% coeffa=cubrega,% coeffb=cubregb,% coeffc=cubregc,% coeffd=cubregd,% round={} } \newcommand\xintcubreg[3][]{% \useKVdefault[CoeffRegCubic]% \setKV[CoeffRegCubic]{#1}% on paramètres les nouvelles clés et on les simplifie %listes des données \def\xliste{#2}% \def\yliste{#3}% \readlist*\LX{\xliste}% \readlist*\LY{\yliste}% %taille des listes \def\LNB{\inteval{\LXlen}}% %somme importantes \xdef\LXSomme{0}% \xdef\LXdSomme{0}% \xdef\LXtSomme{0}% \xdef\LXqSomme{0}% \xdef\LXcSomme{0}% \xdef\LXsSomme{0}% \xdef\LYSomme{0}% \xdef\LXYSomme{0}% \xdef\LXdYSomme{0}% \xdef\LXtYSomme{0}% %calculs \xintFor* ##1 in {\xintSeq{1}{\LNB}}\do{% \xdef\LXSomme{\xintfloateval{\LXSomme+\LX[##1]}}% \xdef\LXdSomme{\xintfloateval{\LXdSomme+(\LX[##1])^2}}% \xdef\LXtSomme{\xintfloateval{\LXtSomme+(\LX[##1])^3}}% \xdef\LXqSomme{\xintfloateval{\LXqSomme+(\LX[##1])^4}}% \xdef\LXcSomme{\xintfloateval{\LXcSomme+(\LX[##1])^5}}% \xdef\LXsSomme{\xintfloateval{\LXsSomme+(\LX[##1])^6}}% \xdef\LYSomme{\xintfloateval{\LYSomme+\LY[##1]}}% \xdef\LXYSomme{\xintfloateval{\LXYSomme+\LX[##1]*\LY[##1]}}% \xdef\LXdYSomme{\xintfloateval{\LXdYSomme+(\LX[##1])^2*\LY[##1]}}% \xdef\LXtYSomme{\xintfloateval{\LXtYSomme+(\LX[##1])^3*\LY[##1]}}% }% %calculs suites, avec des matrices !! \def\MatA{\LXtSomme}% \def\MatB{\LXdSomme}% \def\MatC{\LXSomme}% \def\MatD{\LNB}% \def\MatE{\LXqSomme}% \def\MatF{\LXtSomme}% \def\MatG{\LXdSomme}% \def\MatH{\LXSomme}% \def\MatI{\LXcSomme}% \def\MatJ{\LXqSomme}% \def\MatK{\LXtSomme}% \def\MatL{\LXdSomme}% \def\MatM{\LXsSomme}% \def\MatN{\LXcSomme}% \def\MatO{\LXqSomme}% \def\MatP{\LXtSomme}% \def\MatBA{\LYSomme}% \def\MatBB{\LXYSomme}% \def\MatBC{\LXdYSomme}% \def\MatBD{\LXtYSomme}% \def\DETMATRICE{\xintfloateval{\MatA*\MatF*\MatK*\MatP-\MatA*\MatF*\MatL*\MatO-\MatA*\MatG*\MatJ*\MatP+\MatA*\MatG*\MatL*\MatN+\MatA*\MatH*\MatJ*\MatO-\MatA*\MatH*\MatK*\MatN-\MatB*\MatE*\MatK*\MatP+\MatB*\MatE*\MatL*\MatO+\MatB*\MatG*\MatI*\MatP-\MatB*\MatG*\MatL*\MatM-\MatB*\MatH*\MatI*\MatO+\MatB*\MatH*\MatK*\MatM+\MatC*\MatE*\MatJ*\MatP-\MatC*\MatE*\MatL*\MatN-\MatC*\MatF*\MatI*\MatP+\MatC*\MatF*\MatL*\MatM+\MatC*\MatH*\MatI*\MatN-\MatC*\MatH*\MatJ*\MatM-\MatD*\MatE*\MatJ*\MatO+\MatD*\MatE*\MatK*\MatN+\MatD*\MatF*\MatI*\MatO-\MatD*\MatF*\MatK*\MatM-\MatD*\MatG*\MatI*\MatN+\MatD*\MatG*\MatJ*\MatM}}% \def\MatInvA{(\MatF*\MatK*\MatP-\MatF*\MatL*\MatO-\MatG*\MatJ*\MatP+\MatG*\MatL*\MatN+\MatH*\MatJ*\MatO-\MatH*\MatK*\MatN)/\DETMATRICE}% \def\MatInvB{(-\MatB*\MatK*\MatP+\MatB*\MatL*\MatO+\MatC*\MatJ*\MatP-\MatC*\MatL*\MatN-\MatD*\MatJ*\MatO+\MatD*\MatK*\MatN)/\DETMATRICE}% \def\MatInvC{(\MatB*\MatG*\MatP-\MatB*\MatH*\MatO-\MatC*\MatF*\MatP+\MatC*\MatH*\MatN+\MatD*\MatF*\MatO-\MatD*\MatG*\MatN)/\DETMATRICE}% \def\MatInvD{(-\MatB*\MatG*\MatL+\MatB*\MatH*\MatK+\MatC*\MatF*\MatL-\MatC*\MatH*\MatJ-\MatD*\MatF*\MatK+\MatD*\MatG*\MatJ)/\DETMATRICE}% \def\MatInvE{(-\MatE*\MatK*\MatP+\MatE*\MatL*\MatO+\MatG*\MatI*\MatP-\MatG*\MatL*\MatM-\MatH*\MatI*\MatO+\MatH*\MatK*\MatM)/\DETMATRICE}% \def\MatInvF{(\MatA*\MatK*\MatP-\MatA*\MatL*\MatO-\MatC*\MatI*\MatP+\MatC*\MatL*\MatM+\MatD*\MatI*\MatO-\MatD*\MatK*\MatM)/\DETMATRICE}% \def\MatInvG{(-\MatA*\MatG*\MatP+\MatA*\MatH*\MatO+\MatC*\MatE*\MatP-\MatC*\MatH*\MatM-\MatD*\MatE*\MatO+\MatD*\MatG*\MatM)/\DETMATRICE}% \def\MatInvH{(\MatA*\MatG*\MatL-\MatA*\MatH*\MatK-\MatC*\MatE*\MatL+\MatC*\MatH*\MatI+\MatD*\MatE*\MatK-\MatD*\MatG*\MatI)/\DETMATRICE}% \def\MatInvI{(\MatE*\MatJ*\MatP-\MatE*\MatL*\MatN-\MatF*\MatI*\MatP+\MatF*\MatL*\MatM+\MatH*\MatI*\MatN-\MatH*\MatJ*\MatM)/\DETMATRICE}% \def\MatInvJ{(-\MatA*\MatJ*\MatP+\MatA*\MatL*\MatN+\MatB*\MatI*\MatP-\MatB*\MatL*\MatM-\MatD*\MatI*\MatN+\MatD*\MatJ*\MatM)/\DETMATRICE}% \def\MatInvK{(\MatA*\MatF*\MatP-\MatA*\MatH*\MatN-\MatB*\MatE*\MatP+\MatB*\MatH*\MatM+\MatD*\MatE*\MatN-\MatD*\MatF*\MatM)/\DETMATRICE}% \def\MatInvL{(-\MatA*\MatF*\MatL+\MatA*\MatH*\MatJ+\MatB*\MatE*\MatL-\MatB*\MatH*\MatI-\MatD*\MatE*\MatJ+\MatD*\MatF*\MatI)/\DETMATRICE}% \def\MatInvM{(-\MatE*\MatJ*\MatO+\MatE*\MatK*\MatN+\MatF*\MatI*\MatO-\MatF*\MatK*\MatM-\MatG*\MatI*\MatN+\MatG*\MatJ*\MatM)/\DETMATRICE}% \def\MatInvN{(\MatA*\MatJ*\MatO-\MatA*\MatK*\MatN-\MatB*\MatI*\MatO+\MatB*\MatK*\MatM+\MatC*\MatI*\MatN-\MatC*\MatJ*\MatM)/\DETMATRICE}% \def\MatInvO{(-\MatA*\MatF*\MatO+\MatA*\MatG*\MatN+\MatB*\MatE*\MatO-\MatB*\MatG*\MatM-\MatC*\MatE*\MatN+\MatC*\MatF*\MatM)/\DETMATRICE}% \def\MatInvP{(\MatA*\MatF*\MatK-\MatA*\MatG*\MatJ-\MatB*\MatE*\MatK+\MatB*\MatG*\MatI+\MatC*\MatE*\MatJ-\MatC*\MatF*\MatI)/\DETMATRICE}% %COEFFS TEMPORAIRES OK \xdef\tmp@reg@cub@a{\xintfloateval{\MatInvA*\MatBA+\MatInvB*\MatBB+\MatInvC*\MatBC+\MatInvD*\MatBD}}% \xdef\tmp@reg@cub@b{\xintfloateval{\MatInvE*\MatBA+\MatInvF*\MatBB+\MatInvG*\MatBC+\MatInvH*\MatBD}}% \xdef\tmp@reg@cub@c{\xintfloateval{\MatInvI*\MatBA+\MatInvJ*\MatBB+\MatInvK*\MatBC+\MatInvL*\MatBD}}% \xdef\tmp@reg@cub@d{\xintfloateval{\MatInvM*\MatBA+\MatInvN*\MatBB+\MatInvO*\MatBC+\MatInvP*\MatBD}}% %STOCKAGE \IfStrEq{\RegCubicRound}{}% {% \expandafter\def\csname\RegCubicCoefa\endcsname{\tmp@reg@cub@a}% \expandafter\def\csname\RegCubicCoefb\endcsname{\tmp@reg@cub@b}% \expandafter\def\csname\RegCubicCoefc\endcsname{\tmp@reg@cub@c}% \expandafter\def\csname\RegCubicCoefd\endcsname{\tmp@reg@cub@d}% }% {% \IfSubStr{\RegCubicRound}{/}% {% \StrBefore[1]{\RegCubicRound}{/}[\xintarrondisregcuba]% \StrBetween[1,2]{\RegCubicRound}{/}{/}[\xintarrondisregcubb]% \StrBetween[2,3]{\RegCubicRound}{/}{/}[\xintarrondisregcubc]% \StrBehind[3]{\RegCubicRound}{/}[\xintarrondisregcubd]% }% {% \xdef\xintarrondisregcuba{\RegCubicRound}% \xdef\xintarrondisregcubb{\RegCubicRound}% \xdef\xintarrondisregcubc{\RegCubicRound}% \xdef\xintarrondisregcubd{\RegCubicRound}% }% \expandafter\def\csname\RegCubicCoefa\endcsname{\xintfloateval{round(\tmp@reg@cub@a,\xintarrondisregcuba)}}% \expandafter\def\csname\RegCubicCoefb\endcsname{\xintfloateval{round(\tmp@reg@cub@b,\xintarrondisregcubb)}}% \expandafter\def\csname\RegCubicCoefc\endcsname{\xintfloateval{round(\tmp@reg@cub@c,\xintarrondisregcubc)}}% \expandafter\def\csname\RegCubicCoefd\endcsname{\xintfloateval{round(\tmp@reg@cub@d,\xintarrondisregcubd)}}% }% } \endinput