begin process at 2012 05 27 19:41:05
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Class et Objet ( POO )

 > COURBES TENDANCE , RÉGRESSION LINÉAIRE

COURBES TENDANCE , RÉGRESSION LINÉAIRE


 Information sur la source

Note :
Aucune note
Catégorie :Class et Objet ( POO ) Classé sous :algorithmique, tendance, régression, linéaire, excel Niveau :Initié Date de création :21/09/2006 Date de mise à jour :03/09/2008 10:01:59 Vu / téléchargé :27 415 / 299

Auteur : RaftY

Ecrire un message privé
Commentaire sur cette source (8)
Ajouter un commentaire et/ou une note

 Description

But: Fournir un objet assez complet permettant d'opérer facilement une régression
   linéaire, plus connu sur le nom de courbe de tendance sous Excel.
  Bases: Wikipédia et son cours de régression linéaire
  Usage: 0- Dans votre fichier PHP insérer include ("CrbTendance.php");
   1- Déclarer l'objet RegLin
  ex: $oReg= new RegLin($tDonnees) ou $oReg= new RegLin($tY, $tX)
  Les deux syntaxe sont disponible, si une seul tableau est fourni
  alors le second est initialisé du même nombre d'occurence commençant à 0
  avec un pas de 1
2- Lancer le calcul, avec méthodes fournie de 0 à 4, par défaut 0 sera pris. Pour
   tout élément supérieur à 4, la cinquième sera prise.
   Cette méthode retourne un tableau à Trois positions,
    -avec dans la case "A" le coef directeur de la droite,
    -dans la case "B" le positionnement vertical
    -dans la case "Cor" le coef de corrélation
    -et dans la case "Meth" le numéro de la méthode utlisée
    
    Ex: print_r($oReg0->OptMV(0));
    ==>Array ( [A] => -649.029426204
[B] => 3037796.68186
[Cor] => -0.143065138366
[Meth] => 0 )
3- De manière optionnel vous pouvez lancer la méthode GetOpt();,
qui vous fournira le point de votre droite en fonction de votre
tableau d'abscisses, si ce dernier n'est pas fourni
vous aurez un tableau de 0 à nb-1 d'occurence du premier tableau

Ex: print_r($oReg1->GetOpt());
==>Array ( [1] => 3037147.65243
[7] => 3033253.47587
[20] => 3024816.09333
[21] => 3024167.06391
[22] => 3023518.03448)

Source

  • <?php
  • // CrbTendance.php
  • class RegLin{
  • /*
  • Auteur: MILCENT Abel
  • Date: 09/21/06
  • But: Fournir un objet assez complet permettant d'opérer facilement une régression
  • linéaire, plus connu sur le nom de courbe de tendance sous Excel.
  • Bases: Wikipédia et son cours de régression linéaire
  • Usage: 0- Dans votre fichier PHP insérer include ("CrbTendance.php");
  • 1- Déclarer l'objet RegLin
  • ex: $oReg= new RegLin($tDonnees) ou $oReg= new RegLin($tY, $tX)
  • Les deux syntaxe sont disponible, si une seul tableau est fourni
  • alors le second est initialisé du même nombre d'occurence commençant à 0
  • avec un pas de 1
  • 2- Lancer le calcul, avec méthodes fournie de 0 à 4, par défaut 0 sera pris. Pour
  • tout élément supérieur à 4, la cinquième sera prise.
  • Cette méthode retourne un tableau à Trois positions,
  • -avec dans la case "A" le coef directeur de la droite,
  • -dans la case "B" le positionnement vertical
  • -dans la case "Cor" le coef de corrélation
  • -et dans la case "Meth" le numéro de la méthode utlisée
  • Ex: print_r($oReg0->OptMV(0));
  • ==>Array ( [A] => -649.029426204
  • [B] => 3037796.68186
  • [Cor] => -0.143065138366
  • [Meth] => 0 )
  • 3- De manière optionnel vous pouvez lancer la méthode GetOpt();,
  • qui vous fournira le point de votre droite en fonction de votre
  • tableau d'abscisses, si ce dernier n'est pas fourni
  • vous aurez un tableau de 0 à nb-1 d'occurence du premier tableau
  • Ex: print_r($oReg1->GetOpt());
  • ==>Array ( [1] => 3037147.65243
  • [7] => 3033253.47587
  • [20] => 3024816.09333
  • [21] => 3024167.06391
  • [22] => 3023518.03448)
  • */
  • //champ de l'objet
  • private $tDonnees;
  • private $tAbscisse;
  • private $vNbElt; //Nombre déléments des tableaux
  • private $vMoyX; //Moyenne des X
  • private $vMoyY; //Moyenne des Y
  • private $vSumXY;
  • private $vSumX;
  • private $vSumY;
  • private $vSumX2;
  • private $tPtG; //Le point moyen G est un tableau tPtG(X,Y)=(vMoyX,vMoyY)
  • //La variance, c'est la moyenne des carrés soustrait du carré de la moyenne
  • Private $vVarianceX;
  • Private $vVarianceY;
  • //L'écart Type, c'est la racine carrée de la variance
  • Private $vEcartTX;
  • Private $vEcartTY;
  • //La covariance, la moyenne des produits moins le produit des moyennes
  • Private $vCovariance;
  • Private $vA; //Coef directeur de la droite liée à la régression
  • Private $vB; //Coef B de la droite liée à la régression
  • Private $vCoefCorLin;//Coef de corrélation linéaire
  • // constructeur
  • function __construct($tDataY,$tDataX="") {
  • $this->tDonnees = $tDataY;
  • $this->tAbscisse = $tDataX;
  • $p=0;
  • if($tDataX=="")
  • {$p=1;}
  • $this->init($p);
  • }
  • //Méthodes privée de l'objet
  • Private function init($x=0)
  • {
  • //initialise les Variables pour les calculs
  • $this->vNbElt= $n= count($this->tDonnees); // Nombres d'éléments
  • //Mise en place des abscisses
  • if($x==1)
  • {
  • for($i=0;$i<$n;$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;
  • //correction du 20080903 remplace $sumY2+=$yVal=$yVal; par $sumY2+=$yVal*$yVal;
  • $sumY2+=$yVal*$yVal;
  • $sumXY+=$xVal*$yVal;
  • }
  • $this->vMoyX=$sumX/$n; //moyenne X
  • $this->vMoyY=$sumY/$n; //moyenne Y
  • $this->vSumXY=$sumXY;
  • $this->vSumX=$sumX;
  • $this->vSumY=$sumY;
  • $this->vSumX2=$sumX2;
  • $this->tPtG=array("X"=>$this->vMoyX,"Y"=>$this->vMoyY); //point moyen G
  • //La variance, c'est la moyenne des carrés soustrait du carré de la moyenne: Rappel
  • $this->vVarianceX=($sumX2/$n)-($this->vMoyX*$this->vMoyX);
  • $this->vVarianceY=($sumY2/$n)-($this->vMoyY*$this->vMoyY);
  • //L'écart Type, c'est la racine carrée de la variance: Rappel
  • $this->vEcartTX=sqrt(abs($this->vVarianceX));
  • $this->vEcartTY=sqrt(abs($this->vVarianceY));
  • //La covariance, la moyenne des produits moins le produit des moyennes
  • $this->vCovariance=($sumXY/$n)-($this->vMoyX*$this->vMoyY);
  • $tTest=array(
  • $this->vMoyX,
  • $this->vMoyY,
  • $this->tPtG,
  • $this->vVarianceX,
  • $this->vVarianceY,
  • $this->vEcartTX,
  • $this->vEcartTY,
  • $this->vCovariance);
  • }
  • //Calcul de la droite
  • Private function CoefsDroite($met=0)
  • {
  • //Calcul de coef directeur de la régression
  • //par théorie de la régression linéaire le coef a est obtenu des manières suivantes avec
  • // 5 variantes disponibles
  • switch ($i) {
  • case 0:
  • $this->vA=$this->vCovariance/$this->vVarianceX;
  • break;
  • case 1:
  • $this->vA=$this->vVarianceY/$this->vCovariance;
  • break;
  • case 2:
  • $this->vA=($this->vCovariance*$this->vEcartTY)/(abs($this->vCovariance)*$this->vEcartTX);
  • break;
  • case 3:
  • $this->vA=($this->vVarianceY-$this->vVarianceX+SQRT(pow(($this->vVarianceY-$this->vVarianceX),2)+pow((2*$this->vCovariance)),2))/(2*$this->vCovariance);
  • break;
  • case 4:
  • $this->vA=($this->vSumXY-(($this->vSumX*$this->vSumY)/$this->vNbElt)/($this->vSumX2-(pow($this->vSumX,2)/$this->vNbElt)));
  • break;
  • }
  • $this->vB=$this->vMoyY-($this->vA*$this->vMoyX);
  • }
  • Private function CoefCorLin()
  • {
  • //Calcul de coef de coorélation linéaire
  • //ce coef a est obtenu de la manière suivante
  • //Covariance que divise l'écart Type X multiplié par l'écart Type de Y
  • $this->vCoefCorLin=$this->vCovariance/($this->vEcartTX*$this->vEcartTY);
  • }
  • //Méthodes publiques de l'objet
  • function OptMV($meth=0){
  • //Effectue la régression Linéaire
  • $this->CoefsDroite($meth);
  • $this->CoefCorLin();
  • return array("A"=>$this->vA,"B"=>$this->vB,"Cor"=>$this->vCoefCorLin,"Meth"=>$meth);
  • }
  • function GetOpt(){
  • //renvoi le tableau des points optimisés
  • $tOpt="";
  • // for($i=0;$i<$this->vNbElt;$i++)
  • foreach($this->tAbscisse as $i)
  • {
  • $tOpt[$i]=$this->vA*$i+$this->vB;
  • }
  • return $tOpt;
  • }
  • }
  • //zone Test et exemple d'utilisation
  • /*
  • $y=array(50,75,76,80,50,180,17,72,200,56,22,85,100,90,80,110,70,110,105,89);
  • $x=array(1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20);
  • $y2=array(1,4,9,16,25,36,49,64,81,100);
  • $y3=array(150,2,1000,60,1000000,3,8,557,45623125,455,987,1564231,12,56,78963,52,6,8956321,8956,5);
  • $x3=array(1,7,20,21,22,40,100,101,180,181,182,185,186,189,200,201,202,203,204,3000);
  • $oReg0= new RegLin($y3,$x3);
  • print("<hr>Meth 0: <br>");
  • print_r($oReg0->OptMV(0));
  • $oReg1= new RegLin($y3,$x3);
  • print("<hr>Meth 1: <br>");
  • print_r($oReg1->OptMV(1));
  • $oReg2= new RegLin($y3,$x3);
  • print("<hr>Meth 2: <br>");
  • print_r($oReg2->OptMV(2));
  • $oReg3= new RegLin($y3,$x3);
  • print("<hr>Meth 3: <br>");
  • print_r($oReg3->OptMV(3));
  • $oReg4= new RegLin($y3,$x3);
  • print("<hr>Meth 4: <br>");
  • print_r($oReg4->OptMV(4));
  • print_r($oReg1->GetOpt());
  • */
  • ?>
<?php
//	CrbTendance.php
class RegLin{
 /*
  Auteur: 	MILCENT Abel
  Date:		09/21/06
  But: 		Fournir un objet assez complet permettant d'opérer facilement une régression 
  			linéaire, plus connu sur le nom de courbe de tendance sous Excel.
  Bases:	Wikipédia et son cours de régression linéaire	
  Usage:	0- Dans votre fichier PHP insérer include ("CrbTendance.php");
  			1- Déclarer l'objet RegLin 
			  ex: $oReg= new RegLin($tDonnees) ou $oReg= new RegLin($tY, $tX)
			  Les deux syntaxe sont disponible, si une seul tableau est fourni 
			  alors le second est initialisé du même nombre d'occurence commençant à 0 
			  avec un pas de 1 
			2- Lancer le calcul, avec méthodes fournie de 0 à 4, par défaut 0 sera pris. Pour 
			   tout élément supérieur à 4, la cinquième sera prise.
			   Cette méthode retourne un tableau à Trois positions, 
			    -avec dans la case "A" le coef directeur de la droite, 
			    -dans la case "B" le positionnement vertical 
			    -dans la case "Cor" le coef de corrélation
			    -et dans la case "Meth" le numéro de la méthode utlisée
			    
			    Ex: print_r($oReg0->OptMV(0));
			    ==>Array ( 	[A] => -649.029426204 
							[B] => 3037796.68186 
							[Cor] => -0.143065138366 
							[Meth] => 0 ) 
			3- De manière optionnel vous pouvez lancer la méthode GetOpt();, 
				qui vous fournira le point de votre droite en fonction de votre 
				tableau d'abscisses, si ce dernier n'est pas fourni 
				vous aurez un tableau de 0 à nb-1 d'occurence du premier tableau
				
				Ex: print_r($oReg1->GetOpt());
				==>Array ( 	[1] => 3037147.65243 
							[7] => 3033253.47587 
							[20] => 3024816.09333 
							[21] => 3024167.06391 
							[22] => 3023518.03448)

			     
 */
 
 //champ de l'objet
 private $tDonnees;
 private $tAbscisse;
 private $vNbElt;	//Nombre déléments des tableaux
 
 private $vMoyX;		//Moyenne des X
 private $vMoyY;		//Moyenne des Y
 private $vSumXY;
 private $vSumX;
 private $vSumY;
 private $vSumX2;
 private $tPtG;		//Le point moyen G est un tableau tPtG(X,Y)=(vMoyX,vMoyY)
 //La variance, c'est la moyenne des carrés soustrait du carré de la moyenne
 Private $vVarianceX;	
 Private $vVarianceY; 
 //L'écart Type, c'est la racine carrée de la variance
 Private $vEcartTX;	
 Private $vEcartTY;  
 //La covariance, la moyenne des produits moins le produit des moyennes
 Private $vCovariance;
 
 
 Private $vA;			//Coef directeur de la droite liée à la régression
 Private $vB;			//Coef B de la droite liée à la régression
 Private $vCoefCorLin;//Coef de corrélation linéaire
 
 
 // constructeur
 function __construct($tDataY,$tDataX="") {
  $this->tDonnees = $tDataY;
  $this->tAbscisse = $tDataX;
  $p=0;
  if($tDataX=="")
  {$p=1;}
  
  $this->init($p);
 }


 //Méthodes privée de l'objet 
 Private function init($x=0)
 {
	//initialise les Variables pour les calculs
  $this->vNbElt= $n=	count($this->tDonnees); // Nombres d'éléments

	//Mise en place des abscisses
	if($x==1)
	{
	 	for($i=0;$i<$n;$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;
	  //correction du 20080903 remplace  $sumY2+=$yVal=$yVal; par $sumY2+=$yVal*$yVal;
	  $sumY2+=$yVal*$yVal; 
	  $sumXY+=$xVal*$yVal;

	}
	
	
	
	
	
	$this->vMoyX=$sumX/$n; //moyenne X
	$this->vMoyY=$sumY/$n; //moyenne Y
	
	$this->vSumXY=$sumXY;
	$this->vSumX=$sumX;
	$this->vSumY=$sumY;
	$this->vSumX2=$sumX2;

	$this->tPtG=array("X"=>$this->vMoyX,"Y"=>$this->vMoyY); //point moyen G
	//La variance, c'est la moyenne des carrés soustrait du carré de la moyenne: Rappel
	
	$this->vVarianceX=($sumX2/$n)-($this->vMoyX*$this->vMoyX);	
	$this->vVarianceY=($sumY2/$n)-($this->vMoyY*$this->vMoyY);

	
	
	//L'écart Type, c'est la racine carrée de la variance: Rappel
 	$this->vEcartTX=sqrt(abs($this->vVarianceX));	
 	$this->vEcartTY=sqrt(abs($this->vVarianceY));  
	 //La covariance, la moyenne des produits moins le produit des moyennes
 	$this->vCovariance=($sumXY/$n)-($this->vMoyX*$this->vMoyY);
	
	$tTest=array(
	$this->vMoyX,
	$this->vMoyY,
	$this->tPtG,
	$this->vVarianceX,
	$this->vVarianceY,
 	$this->vEcartTX,	
 	$this->vEcartTY,
 	$this->vCovariance);
 }
 //Calcul de la droite
 Private function CoefsDroite($met=0)
 {
	//Calcul de coef directeur de la régression
	//par théorie de la régression linéaire le coef a est obtenu des manières suivantes avec 	
	// 5 variantes  disponibles
	switch ($i) {
	case 0:
  	 $this->vA=$this->vCovariance/$this->vVarianceX;
  	 break;
  	case 1:
	 $this->vA=$this->vVarianceY/$this->vCovariance;
  	 break;  
 	case 2:
	 $this->vA=($this->vCovariance*$this->vEcartTY)/(abs($this->vCovariance)*$this->vEcartTX);
  	 break; 
	     
	case 3:
	 $this->vA=($this->vVarianceY-$this->vVarianceX+SQRT(pow(($this->vVarianceY-$this->vVarianceX),2)+pow((2*$this->vCovariance)),2))/(2*$this->vCovariance);
  	 break; 
  	case 4:
	 $this->vA=($this->vSumXY-(($this->vSumX*$this->vSumY)/$this->vNbElt)/($this->vSumX2-(pow($this->vSumX,2)/$this->vNbElt)));
  	 break; 
	   }
	$this->vB=$this->vMoyY-($this->vA*$this->vMoyX);
}

 Private function CoefCorLin()
 {
	//Calcul de coef de coorélation linéaire
	//ce  coef a est obtenu de la manière suivante
	//Covariance que divise l'écart Type X multiplié par l'écart Type de Y
	$this->vCoefCorLin=$this->vCovariance/($this->vEcartTX*$this->vEcartTY);
}


 //Méthodes publiques de l'objet
 function OptMV($meth=0){
	//Effectue la régression Linéaire
	$this->CoefsDroite($meth);
	$this->CoefCorLin();
	return array("A"=>$this->vA,"B"=>$this->vB,"Cor"=>$this->vCoefCorLin,"Meth"=>$meth);
 }
function GetOpt(){
	//renvoi le tableau des points optimisés
	$tOpt="";
//	for($i=0;$i<$this->vNbElt;$i++)
	foreach($this->tAbscisse as $i)
	{
		$tOpt[$i]=$this->vA*$i+$this->vB;
	}
	return $tOpt;
}
	
	
	
}


//zone Test et exemple d'utilisation
/*
$y=array(50,75,76,80,50,180,17,72,200,56,22,85,100,90,80,110,70,110,105,89);
$x=array(1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20);
$y2=array(1,4,9,16,25,36,49,64,81,100);
$y3=array(150,2,1000,60,1000000,3,8,557,45623125,455,987,1564231,12,56,78963,52,6,8956321,8956,5);
$x3=array(1,7,20,21,22,40,100,101,180,181,182,185,186,189,200,201,202,203,204,3000);

$oReg0= new RegLin($y3,$x3);
print("<hr>Meth 0: <br>");
print_r($oReg0->OptMV(0));

$oReg1= new RegLin($y3,$x3);
print("<hr>Meth 1: <br>");
print_r($oReg1->OptMV(1));

$oReg2= new RegLin($y3,$x3);
print("<hr>Meth 2: <br>");
print_r($oReg2->OptMV(2));

$oReg3= new RegLin($y3,$x3);
print("<hr>Meth 3: <br>");
print_r($oReg3->OptMV(3));

$oReg4= new RegLin($y3,$x3);
print("<hr>Meth 4: <br>");
print_r($oReg4->OptMV(4));

print_r($oReg1->GetOpt());
*/
?>

 Conclusion

Il doit y avoir quelques petits bugs que vous vous ferez un plaisir de corriger.

 Fichier Zip

Les Membres Club peuvent télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip


 Historique

03 septembre 2008 09:58:20 :
correction du 20080903 remplace $sumY2+=$yVal=$yVal; par $sumY2+=$yVal*$yVal;
03 septembre 2008 10:01:59 :
Upload du nouveau ZIP

 Sources du même auteur

CLEF POUR EAN 13 ET 14
RÉCUPÉRER UNE IMAGE EN LIGNE (OU AUTRES FICHIERS)

 Sources de la même categorie

Source avec Zip GÉNÉRATION AUTOMATIQUE DE FICHIER .CLASS.PHP EN FONCTION D'U... par ig3
CLASSE D'OBJET DE CRYPTAGE ET DÉCRYPTAGE DE CHAINES DE CARAC... par 8Tnerolf8
Source avec Zip MY.DEVIANTART API par inwebo
CLASSE DE GESTION DE "VARIABLES GLOBALES D'ENVIRONNEMENT" par pifou25
Source avec Zip COLLECTION.CLASS.MIN.PHP par thunderhunter

 Sources en rapport avec celle ci

Source avec Zip Source avec une capture GESTIONNAIRE D'ELEVES OU CARNET D'ADRESSE AVEC EXPORT XLS par cod57
CONVERTIR LES RÉFÉRENCES DE COLONNE EXCEL DE CHIFFRE EN LETT... par computman007
ECRITURE D'UNE FICHIER XLS EN DYNAMIQUE par soul2006
Source avec Zip LECTURE D'UN FICHIER EXCEL par cacoucatatonique
Source avec Zip Source avec une capture TABLEUR GENRE EXCEL EN PHP POUR LE CSV par Mrreivax

Commentaires et avis

Commentaire de FhX le 21/09/2006 20:09:36

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 !

Commentaire de RaftY le 22/09/2006 09:33:20

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.

Commentaire de Mymy1592 le 30/08/2008 17:29:37

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 ! :)

Commentaire de RaftY le 03/09/2008 10:04:01

Merci MYMY1592 pour la découverte du bug, correction faite.

Commentaire de madvic le 13/10/2008 14:46:08

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

Commentaire de RaftY le 14/10/2008 13:55:39

Ex: print_r($oReg0->OptMV(0));
    ==>Array ( [A] => -649.029426204
[B] => 3037796.68186
[Cor] => -0.143065138366
[Meth] => 0 )

$var est un tableau contenant le coef A, B, Cor, Meth

Où A et B sont les coef de la Droite Ax+B, les autres coef sont la corrélation (pour schématiser l'écart type qui définit la précision de la droite) et Meth la méthodes de régression utilisée

Soit dans l'exemple la droite y=-649.029426204*x+3037796.68186.

Pour les régressions polynomiales, j'ai jeté un coup d'½il cela est faisable. Cependant, en ce moment je suis sur quelques autres projets qui me prennent beaucoup de temps.

mais vous pouvez consulter ces articles ou logiciels
http://www.delphifr.com/codes/REGRESSION-POLYNOMIALE_43475.aspx
http://www.vbfrance.com/codes/REGRESSION-NON-LINEAIRE-POLYNOMIALE-METHODE-MOINDRES-CARRES_44215.aspx


A plus

Commentaire de madvic le 14/10/2008 14:06:12

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...

Commentaire de RaftY le 14/10/2008 18:48:02

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

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

Excel to Mysql [ par TuXAveRy ] Salut tt le mondeVoila chuis confronté a un petit probleme...j'ai une base de donnée ki est dans un fichié excel, et je voudrai le mettre dans une bas modif classeur excel sur site web par internautes [ par jmrolland ] J'ai inséré un classeur excel sur mon site web et j'aimerais connaître la manière la plus simple pour que : les modifs effectuées par les internautes class,PDF,XLS et boucles..... [ par booth ] bonjour!j'ai un méga problème...je dois générer un PDF et une grillle excel toutes deux issues d'un moteur de recherche...pour le moteur de recherche Php et excel ???? [ par Adagyo ] Salut @ tous,Je cherche un moyen de faire communiquer le contenu d'une base MySQL avec un tableau Excel.J'ai pensé à passer par du XML (je fait une re Lire un fichier excel [ par nikos283 ] salut a tous!Je suis a la recherche d'une classe ou de fonctions simples me permettant à un utilisateur d'envoyer sur mon site un fichier au format xl Couleur sous Excel [ par Alexnancy ] Bonjour,J'extrait un fichier excel depuis une page php mais ce fichier est brut.J'aimerai savoir comment mettre une police dans tel case ou sur toute Lire un fichier excel [ par NeOkizis ] Salut,Je suis totalement débutant dans le php, et j'ai un petit problème...Je dois créer une page sur un site intranet qui affiche un annuaire telepho Tuer un Processus Excel (objet COM) [ par nerikT ] Bonjour à tous !J'ai un grros problème.J'utilise un objet COM pour crere un fichier Excel, et à la fin du script, le processu est toujours en mémoire PHP et Word (ou Excel) [ par kowak ] Bonjour,Existe-t-il un moyen de récupérer les propriétés (fichiers/propriétés) d'un document word (notament le résumé ou le titre, etc...) ?Merci,Kowa Publipostage word excel différent [ par teez ] Les instructions de ce que je voudrais faire sont dans le id.docDites-moi si vous avez une idée de comment faire !C'est ici le fichier à télécharger.h


Nos sponsors


Sondage...

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

Photothèque

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,796 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales