COURBES TENDANCE , RÉGRESSION LINÉAIRE

FhX Messages postés 2350 Date d'inscription mercredi 13 octobre 2004 Statut Membre Dernière intervention 18 avril 2015 - 21 sept. 2006 à 20:09
 Greg - 30 avril 2019 à 15:15
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/39643-courbes-tendance-regression-lineaire

Bug apparu sous php7.2 :

Dans la fonction GetOpt() (ligne 193) il ne faut pas initialiser $tOpt = "" (string) mais en tant que tableau : $tOpt = array(); (ou écriture raccourcie []).
RaftY Messages postés 56 Date d'inscription mardi 5 mars 2002 Statut Membre Dernière intervention 12 août 2010
14 oct. 2008 à 18:48
Pas de quoi pour les réponses, je suis un peu au calme ajr.

Mais pour compléter, j'ai trouver ceci toujours écrit en VB, CAML et PHP. Très impressionnant, seulement tu ne règles pas le degré de la courbe. mais fonctionne super bien

http://www.codyx.org/snippet_interpolation-polynomiale_549.aspx

Pour en revenir au langage de prog, chacun a ces habitudes et chaque langage a ces propres facilités et domaine d'activité privilégié. On ne refera pas le monde, mais n'oublions jamais, que la plupart des nouveau langage s'appuie sur des sources C, des OS écrit en C voir en ASM. Ne pas oublié les bases.

Ensuite, pourquoi pas intégrer dans le lib standard du PHP, car vraisemblablement PHP est peu utiliser pour faire ceci. Je pense que lib PECL comme pear, se contruisent des outils simples pour l'instant qui sont beaucoup utilisés. De plus, les connaissances mathématiques nécessaire à ce genre de prog ne sont pas anodine, et que les mathématiciens préfèrent des langage comme CAML ou mathlab pour exprimer leur bib, plutot que PHP qui reste un très bon langage, mais usage quasi exclusif pour le WEB. Il est passé depuis peu comme un langage important. Il faut laisser le temps à la communauté de s'habituer et d'œuvrer vers son nouveau status.

A plus
madvic Messages postés 21 Date d'inscription vendredi 3 janvier 2003 Statut Membre Dernière intervention 9 juin 2018
14 oct. 2008 à 14:06
Merci bcp pour ton travail et ta réponse.

Mais pq autant de langage de programmation ? Autant tous mettre en php (ca m'arrange ;-) )
Je trouve tout de même étrange que ces fonction ne soit pas intégré dans les bibliothèque des langages de prog.
Enfin, ca viendra...
madvic Messages postés 21 Date d'inscription vendredi 3 janvier 2003 Statut Membre Dernière intervention 9 juin 2018
13 oct. 2008 à 14:46
Bonjour,

Y'a t-il un moyen de resortir l'equation de la droite obtenue ?
Et est ce difficile de faire la même chose pour une courbe ?
merci
RaftY Messages postés 56 Date d'inscription mardi 5 mars 2002 Statut Membre Dernière intervention 12 août 2010
3 sept. 2008 à 10:04
Merci MYMY1592 pour la découverte du bug, correction faite.
Mymy1592 Messages postés 1 Date d'inscription samedi 30 août 2008 Statut Membre Dernière intervention 30 août 2008
30 août 2008 à 17:29
Bonjour,

Il y a un petit bug qui gène dans le calcul de l'écart type
ligne 112 :
$sumY2+=$yVal=$yVal;

A remplacer par :

$sumY2+=$yVal*$yVal;

En tout cas, merci RaftY pour ce code ! :)
RaftY Messages postés 56 Date d'inscription mardi 5 mars 2002 Statut Membre Dernière intervention 12 août 2010
22 sept. 2006 à 09:33
Merci pour ces petites corrections. Juste pour info, effectivement, le code original que j'ai écrit était en C++ et j'utilisé plusieurs constructeurs au lieu de 1 seul dispo en PHP, la méthode Init à tout son sens dans ce cas.

Mais effectivement, l'erreur de typage est une très bonne remarque.

Pour les tableaux, que j'utilise souvent ici je pense qu'ils susciteraient des erreurs de lecture du code de fond. L'objectif n'est pas seulement de coder un objet mais bel et bien de coder une régression linéaire avec le maximum d'explication, car c'est un domaine pas facile à appréhender.

Si je devais changer le code pour des tableaux je ferai un tableau avec index indentifier ex : $tVar=array("SumX"=> $valX, "SumY"=>$valY ....)
Aucun intérêt ici.

Mais merci pour toutes ces remarques, c'est vraiment sympa.
FhX Messages postés 2350 Date d'inscription mercredi 13 octobre 2004 Statut Membre Dernière intervention 18 avril 2015 3
21 sept. 2006 à 20:09
Alors, comme c'est objet, moi je regarde :p

Vala ce que j'en dis "à codement parler" =) :

function __construct($tDataY,$tDataX="") {

Ici, $tDataY est de type mixed, $tDataX de type string.
Typement parlant, y'a une ptite erreur pour $tDataX.
Si tu veux que $tDataX soit optionnel, alors tu dois déclarer ta méthode comme suit :
public function __construct($tDataY, $tDataX=NULL) {

Ce qui fait que pour vérifier ta variable tu fais : ( if ( isset($tDataX) ) ). Plus élégant et plus rapide.

Ta méthode init() ne sert à rien, elle substitue le constructeur et tu perds du temps à l'appeler car cette méthode n'est appelé qu'à ce moment la.
Voici la véritable méthode constructeur à faire :

public function __construct($tDataY,$tDataX=NULL) {
$this->tDonnees = $tDataY;
$this->tAbscisse = $tDataX;
$this->vNbElt = count($this->tDonnees); // Nombres d'éléments

//Mise en place des abscisses
if( isset($tDataX) ) {
for($i=0;$i<$this->vNbElt;$i++){
$this->tAbscisse[$i]=$i;
}
}

//parcours des donnees pour récupération formule nécessaire au calcul des éléments
$sumX=0; //somme des X
$sumY=0; //somme des Y
$sumX2=0; //somme des X²
$sumY2=0; //somme des y²
$sumXY=0; //somme des x*y

for($i=0;$i<$n;$i++)
{
$xVal=$this->tAbscisse[$i];
$yVal=$this->tDonnees[$i];

$sumX+=$xVal;
$sumY+=$yVal;
$sumX2+=$xVal*$xVal;
$sumY2+=$yVal=$yVal;
$sumXY+=$xVal*$yVal;

}

// etc...
}

La ton objet est initialisé correctement :)
Et j'aurais pu mieux faire en utilisant des tableaux au lieu de 40 variables =)
Codement parlé, y'a encore un peu de boulot, mais sinon j'aime bien !
Rejoignez-nous