serie a 2 variables

Toutes les contributions sont les bienvenues (source + image), y compris les plus simples!

serie a 2 variables

Messagepar Joffrey » 23 Sep 2011 15:35

Bonjour à tous,

Je me suis fait une petite macro pour présenter la méthode des moindres carrés dans un tableau :

Code: Tout sélectionner
TeXgraph#
{ stat2var.mac version 0.2 du 23/09/2011 }

Include   
   "variations.mod";

Mac

serie2varTab =
   //serie2varTab(<Liste de complexe>,<nb de chiffres apres la virgule si necessaire>)
   [
   L:=%1, nbdeci:=%2,
   NbLigne:=Nops(L),
   usecomma:=1,
   //Construction du tableau, des lignes et des colonnes
   dimTab(NbLigne+2,6),
   defLargeCol(0,3.75), defHautLig(1,1.25), Cadre(1,1,NbLigne+1,6),
   for k from 1 to NbLigne do traitH(k) od,
   for k from 1 to 6 do traitV(k,1,NbLigne+1) od,
   traitH(NbLigne+2,1,2), traitH(NbLigne+2,5,6),
   for k in [0,1,2,4,5,6,7] do traitV(k,NbLigne+1,NbLigne+2) od,
   //Affichage des entetes des listes
   InitLig1("x_i","y_i",-1,"x_i-\overline{x}",-1,"y_i-\overline{y}",-1,
            "\left(x_i-\overline{x}\right)\left(y_i-\overline{y}\right)",-1,
            "\left(x_i-\overline{x}\right)^2"),
   //Creation des listes
   //List1 = xi
   List1:=[for k in L do Re(k) od],
   //List2 = yi
   List2:=[for k in L do Im(k) od],
   xbar:=moy(List1), ybar:=moy(List2),
   Label(pos(NbLigne+2,1),["$\overline{x}=",StrNum(xbar),"$"],
         pos(NbLigne+2,2),["$\overline{y}=",StrNum(ybar),"$"]),
   //List3 = xi-xbar
   List3:=[for k from 1 to NbLigne do List1[k]-xbar od],
   //List4 = yi-ybar
   List4:=[for k from 1 to NbLigne do List2[k]-ybar od],
   //List5 = (xi-xbar)(yi-ybar)
   List5:=[for k from 1 to NbLigne do List3[k]*List4[k] od],
   //List6 = (xi-xbar)^2
   List6:=[for k from 1 to NbLigne do (List3[k])^2 od],
   //Calcul et affichage des valeurs des listes
   for k from 1 to NbLigne do
       Label(pos(k+1,1),["$",StrNum(List1[k]),"$"],
             pos(k+1,2),["$",StrNum(List2[k]),"$"],
             pos(k+1,3),["$",StrNum(List1[k]-xbar),"$"],
             pos(k+1,4),["$",StrNum(List4[k]),"$"],
             pos(k+1,5),["$",StrNum(List5[k]),"$"],
             pos(k+1,6),["$",StrNum(List6[k]),"$"]),
   od,
   Label(pos(NbLigne+2,4),["Somme :"],
         pos(NbLigne+2,5),["$",StrNum(sum(List5)),"$"],
         pos(NbLigne+2,6),["$",StrNum(sum(List6)),"$"]),
   
   ];


le code
[
L:=[19*i, 5+21*i,10+25*i,15+30*i, 20+37*i, 25+42*i, 30+50*i],
serie2varTab(L,2),
]

permet d'obtenir :
tableau.png
tableau.png (8.7 Kio) Consulté 21105 fois


Bonne journée

mise à jour du 23/09/11 - 20:30
Dernière édition par Joffrey le 23 Sep 2011 20:29, édité 1 fois.
L'homme en noir fuyait à travers le désert, et le Pistoléro le suivait ...
Joffrey
 
Messages: 287
Inscription: 16 Juil 2009 17:05
Localisation: Vichy

Re: serie a 2 variables

Messagepar P.Fradin » 23 Sep 2011 16:24

Bonjour Jofrey,

Très bonne initiative! Et rien à redire sur le code!
Peut-être une toute petite astuce pour éviter de répéter les "round()", valable avec la dernière version test, il te suffit de mettre dans ta macro: nbdeci:=%2, et tu peux alors remplacer StrNum( round(x,%2)) par StrNum(x).
P.Fradin
Avatar de l’utilisateur
P.Fradin
Administrateur du site
 
Messages: 1902
Inscription: 29 Oct 2008 15:04

Re: serie a 2 variables

Messagepar Joffrey » 23 Sep 2011 16:54

Le code en lui-même n'est pas compliqué.
Peut-être une toute petite astuce pour éviter de répéter les "round()", valable avec la dernière version test, il te suffit de mettre dans ta macro: nbdeci:=%2, et tu peux alors remplacer StrNum( round(x,%2)) par StrNum(x).

Effectivement, c'est une bonne astuce.

par contre, j'ai un petit souci, si je le tape dans mon document LaTeX, j'ai un souci avec les lignes, comme si TeXgraph n'avait pas recalculé la dimension du tableau et du coup les lignes horizontales ou verticales sont décalése.
J'ai pas pu mettre le doigt sur l'erreur.

As tu une idée ?
L'homme en noir fuyait à travers le désert, et le Pistoléro le suivait ...
Joffrey
 
Messages: 287
Inscription: 16 Juil 2009 17:05
Localisation: Vichy

Re: serie a 2 variables

Messagepar P.Fradin » 23 Sep 2011 17:29

Joffrey a écrit:par contre, j'ai un petit souci, si je le tape dans mon document LaTeX, j'ai un souci avec les lignes, comme si TeXgraph n'avait pas recalculé la dimension du tableau et du coup les lignes horizontales ou verticales sont décalése.
J'ai pas pu mettre le doigt sur l'erreur.
As tu une idée ?


Tu déclares la largeur des colonnes après avoir tracer les traits :roll:
P.Fradin
Avatar de l’utilisateur
P.Fradin
Administrateur du site
 
Messages: 1902
Inscription: 29 Oct 2008 15:04

Re: serie a 2 variables

Messagepar Joffrey » 23 Sep 2011 20:22

Ah ben oui ! Ca c'est c.. comme boulette :oops:
L'homme en noir fuyait à travers le désert, et le Pistoléro le suivait ...
Joffrey
 
Messages: 287
Inscription: 16 Juil 2009 17:05
Localisation: Vichy

Re: serie a 2 variables

Messagepar Joffrey » 23 Sep 2011 20:29

J'ai fait les modifs dans le premier post.
L'homme en noir fuyait à travers le désert, et le Pistoléro le suivait ...
Joffrey
 
Messages: 287
Inscription: 16 Juil 2009 17:05
Localisation: Vichy

Re: serie a 2 variables

Messagepar Joffrey » 23 Sep 2011 20:44

J'ai encore une question, dans un fichier de macro est-il possible de d'appeler un modèle ou un autre fichier de macro seulement lorsque l'on utilise une macro ?
Par exemple, dans le fichier (du premier post) qui contient une macro j'appelle "variations.mod" car j'ai besoin d'un tableau.
Mais si dans ce même fichier je veux créer un macro "graphique" qui ne nécessite pas de tableau, par exemple la macro "nuage".
Comment puis-je faire appeler "variations.mod" seulement avec la macro "serie2varTab" ?

Suis-je clair ?
L'homme en noir fuyait à travers le désert, et le Pistoléro le suivait ...
Joffrey
 
Messages: 287
Inscription: 16 Juil 2009 17:05
Localisation: Vichy

Re: serie a 2 variables

Messagepar P.Fradin » 23 Sep 2011 21:22

Oui, c'est très clair.
Normalement, il te suffit de charger le modèle dans la macro qui en a besoin, comme ceci:
Code: Tout sélectionner
serie2varTab =
   //serie2varTab(<Liste de complexe>,<nb de chiffres apres la virgule si necessaire>)
   [InputMac("variations.mod"),
   L:=%1, nbdeci:=%2,
   NbLigne:=Nops(L),
   usecomma:=1,
   //Construction du tableau, des lignes et des colonnes
   dimTab(NbLigne+2,6),
   defLargeCol(0,3.75), defHautLig(1,1.25), Cadre(1,1,NbLigne+1,6),
   for k from 1 to NbLigne do traitH(k) od,
   for k from 1 to 6 do traitV(k,1,NbLigne+1) od,
   traitH(NbLigne+2,1,2), traitH(NbLigne+2,5,6),
   for k in [0,1,2,4,5,6,7] do traitV(k,NbLigne+1,NbLigne+2) od,
   //Affichage des entetes des listes
   InitLig1("x_i","y_i",-1,"x_i-\overline{x}",-1,"y_i-\overline{y}",-1,
            "\left(x_i-\overline{x}\right)\left(y_i-\overline{y}\right)",-1,
            "\left(x_i-\overline{x}\right)^2"),
   //Creation des listes
   //List1 = xi
   List1:=[for k in L do Re(k) od],
   //List2 = yi
   List2:=[for k in L do Im(k) od],
   xbar:=moy(List1), ybar:=moy(List2),
   Label(pos(NbLigne+2,1),["$\overline{x}=",StrNum(xbar),"$"],
         pos(NbLigne+2,2),["$\overline{y}=",StrNum(ybar),"$"]),
   //List3 = xi-xbar
   List3:=[for k from 1 to NbLigne do List1[k]-xbar od],
   //List4 = yi-ybar
   List4:=[for k from 1 to NbLigne do List2[k]-ybar od],
   //List5 = (xi-xbar)(yi-ybar)
   List5:=[for k from 1 to NbLigne do List3[k]*List4[k] od],
   //List6 = (xi-xbar)^2
   List6:=[for k from 1 to NbLigne do (List3[k])^2 od],
   //Calcul et affichage des valeurs des listes
   for k from 1 to NbLigne do
       Label(pos(k+1,1),["$",StrNum(List1[k]),"$"],
             pos(k+1,2),["$",StrNum(List2[k]),"$"],
             pos(k+1,3),["$",StrNum(List1[k]-xbar),"$"],
             pos(k+1,4),["$",StrNum(List4[k]),"$"],
             pos(k+1,5),["$",StrNum(List5[k]),"$"],
             pos(k+1,6),["$",StrNum(List6[k]),"$"]),
   od,
   Label(pos(NbLigne+2,4),["Somme :"],
         pos(NbLigne+2,5),["$",StrNum(sum(List5)),"$"],
         pos(NbLigne+2,6),["$",StrNum(sum(List6)),"$"]),
   ];

Par contre, il faut viré le Include "variations.mod";. Même si tu appelles 100 fois la macro, le paquet n'est chargé qu'une fois.
P.Fradin
Avatar de l’utilisateur
P.Fradin
Administrateur du site
 
Messages: 1902
Inscription: 29 Oct 2008 15:04

Re: serie a 2 variables

Messagepar Joffrey » 24 Sep 2011 12:58

Bonjour,

Je n'avais pas fait attention à cette macro InputMac

Merci
L'homme en noir fuyait à travers le désert, et le Pistoléro le suivait ...
Joffrey
 
Messages: 287
Inscription: 16 Juil 2009 17:05
Localisation: Vichy

Re: serie a 2 variables

Messagepar Joffrey » 24 Sep 2011 15:34

Re, je continue avec mes stats à 2 vars, j'ai définie la covariance :

Code: Tout sélectionner
cov = [$List1:=%1, $List2:=%2,
       if Nops(List1)<>Nops(List2) then Input("ERREUR !","","Les deux deux listes n'ont pas le meme nombre d'elements"),
      else $List1bar:=moy(List1), $List2bar:=moy(List2),
           sum(for $k from 1 to Nops(List1) do List1[k]*List2[k] od)/Nops(List1)-List1bar*List2bar
      fi
     ];


J'ai opté pour cov(L1,L2) où L1 et L2 sont deux listes de réels pour garder l'uniformité avec var
L'homme en noir fuyait à travers le désert, et le Pistoléro le suivait ...
Joffrey
 
Messages: 287
Inscription: 16 Juil 2009 17:05
Localisation: Vichy

Re: serie a 2 variables

Messagepar P.Fradin » 24 Sep 2011 16:04

Pour cette macro je te conseillerais plutôt ceci:

Code: Tout sélectionner
cov = [$List1:=%1, $List2:=%2,
       $N1:=Nops(List1),
       if N1<>Nops(List2) then
          Message(["ERREUR !",LF,"Les deux deux listes n'ont pas le meme nombre d'elements"]),
       else $List1bar:=moy(List1), $List2bar:=moy(List2),
           sum(for $z in Mix(List1,List2) by 2 do z[1]*z[2] od)/N1-List1bar*List2bar
       fi
      ]


C'est surtout pour minimiser les parcours de listes. Par exemple Nops() fait un parcours de liste, Liste1[k] fait un parcours (partiel) de liste pour chaque valeur de k...
P.Fradin
Avatar de l’utilisateur
P.Fradin
Administrateur du site
 
Messages: 1902
Inscription: 29 Oct 2008 15:04


Revenir vers Contributions diverses

Qui est en ligne ?

Utilisateurs parcourant ce forum : Aucun utilisateur inscrit et 1 invité