<?php
  | 
/*---------------------------------------------------------------*/
  | 
/*
  | 
    Titre : Régression Polynomiale de degré 3                                                                           
  | 
                                                                                                                          
  | 
    URL   : https://phpsources.net/code_s.php?id=889
  | 
    Date Ã©dition     : 14 Fév 2019                                                                                 
  | 
*/
  | 
/*---------------------------------------------------------------*/
  | 
  | 
  | 
function regression_poly_3($x , $y){ 
  | 
 // Les abscisses et ordonnées sont envoyées 
  | 
 // sous forme de 2 tableaux 
  | 
  
  | 
 // $x[]=0; 
  | 
 // $x[]=1; 
  | 
 // $x[]=2; 
  | 
 // $x[]=3; 
  | 
 // $x[]=4; 
  | 
 // $x[]=5; 
  | 
  
  | 
 // $y[]=0; 
  | 
 // $y[]=2; 
  | 
 // $y[]=4; 
  | 
 // $y[]=5; 
  | 
 // $y[]=4; 
  | 
 // $y[]=6; 
  | 
  
  | 
  
  | 
 // Cette fonction requiert les fonctions suivantes : 
  | 
 // (disponibles sur nexen.net ) 
  | 
  
  | 
 // Calcul d'une matrice mineure de Pierre Beaumadier 
  | 
 // minor_matrix($m, $i, $j) 
  | 
  
  | 
 function minor_matrix($m, $i, $j){ 
  | 
 if (!(is_array($m))) 
  | 
  return ("Veuillez passer une matrice"); 
  | 
  $nbl = sizeof($m); 
  | 
  if ($nbl < 1) 
  | 
  return ("Veuillez passer une vraie matrice"); 
  | 
  $nbc = sizeof($m[0]); 
  | 
  for ($cpt = 1; $cpt < $nbl; $cpt++) 
  | 
  if (sizeof($m[$cpt]) != $nbc) 
  | 
  return ("Veuillez passer une vraie matrice"); 
  | 
  if ($nbl == 1) 
  | 
  return ("Veuillez passer une matrice de taille >= 2"); 
  | 
  if (($i < 1) || ($j < 1) || ($i > $nbl) || ($j > $nbc)) 
  | 
  return ("Veuillez passer des valeurs correctes pour les 2 et 3e parametres");
  | 
  $ret = array(); 
  | 
  for ($cptl = 0, $a = 0; $cptl < $nbl; $cptl++) 
  | 
  { 
  | 
  for ($cptc = 0, $b = 0; $cptc < $nbc; $cptc++) 
  | 
  { 
  | 
   if (($cptl != $i - 1) && ($cptc != $j - 1)) 
  | 
   $ret[$a][$b] = $m[$cptl][$cptc]; 
  | 
   if ($cptc != $j - 1) 
  | 
   $b++; 
  | 
  } 
  | 
  if ($cptl != $i - 1) 
  | 
   $a++; 
  | 
  } 
  | 
  return ($ret); 
  | 
 } 
  | 
  
  | 
 // Calcul du déterminant d'une matrice de Pierre Beaumadier 
  | 
 // det_matrix($m) 
  | 
  
  | 
 function det_matrix($m){ 
  | 
 if (!(is_array($m))) 
  | 
  return ("Veuillez passer une matrice"); 
  | 
  $nbl = sizeof($m); 
  | 
  if ($nbl < 1) 
  | 
  return ("Veuillez passer une vraie matrice"); 
  | 
  $nbc = sizeof($m[0]); 
  | 
  for ($i = 1; $i < $nbl; $i++) 
  | 
  if (sizeof($m[$i]) != $nbc) 
  | 
  return ("Veuillez passer une vraie matrice"); 
  | 
  if ($nbl == 1) 
  | 
  return $m[0][0]; 
  | 
  if ($nbl == 2) 
  | 
  return ($m[0][0]*$m[1][1] - $m[1][0]*$m[0][1]); 
  | 
  if ($nbl == 3) 
  | 
  return ($m[0][0]*$m[1][1]*$m[2][2] + $m[0][1]*$m[1][2]*$m[2][0] + $m[0][2]*$m[
  | 
1][0]*$m[2][1] - $m[0][1]*$m[1][0]*$m[2][2] - $m[0][0]*$m[1][2]*$m[2][1] - $m[0]
  | 
[2]*$m[1][1]*$m[2][0]);
  | 
  $det = 0; 
  | 
  for ($i = 0; $i < $nbl; $i++) 
  | 
  $det += pow(-1, $i+1) * $m[$i][0] * det_matrix(minor_matrix($m, $i + 1, 1));
  | 
  return (-$det); // La version originale renvoie +$det 
  | 
 } 
  | 
  
  | 
 //Fonction qui permet d'afficher correctement 
  | 
 //le signe des coefficients de la régression 
  | 
  
  | 
 function signe($nbr){ 
  | 
  
  | 
 $tmp=explode('-', $nbr); 
  | 
  
  | 
   if(empty($tmp[1])){ 
  | 
   
  | 
   $end = "+".number_format($nbr, 3, ', ', ' '); 
  | 
   return $end ; 
  | 
   
  | 
   }else{ 
  | 
   
  | 
   $end = number_format($nbr, 3, ', ', ' '); 
  | 
   return $end ; 
  | 
   } 
  | 
  
  | 
 } 
  | 
  
  | 
 echo "<font color=\"#666666\" size=\"1\" face=\"Tahoma\">"; 
  | 
  
  | 
 //Nombre d'éléments 
  | 
  
  | 
 $nbx=count($x); 
  | 
  
  | 
 //Calcul des Ex... 
  | 
  
  | 
 $i=0; 
  | 
  
  | 
 while($i<$nbx){ 
  | 
   
  | 
   $Ex1+=$x[$i]; 
  | 
   $Ey1+=$y[$i]; 
  | 
   
  | 
   $Ex2+=pow($x[$i], 2); 
  | 
   $Ex3+=pow($x[$i], 3); 
  | 
   $Ex4+=pow($x[$i], 4); 
  | 
   $Ex5+=pow($x[$i], 5); 
  | 
   $Ex6+=pow($x[$i], 6); 
  | 
   
  | 
  $Ex1y1+=$x[$i]*$y[$i]; 
  | 
  $Ex2y1+=pow($x[$i], 2)*$y[$i]; 
  | 
  $Ex3y1+=pow($x[$i], 3)*$y[$i]; 
  | 
  $Ex4y1+=pow($x[$i], 4)*$y[$i]; 
  | 
   
  | 
   $i++; 
  | 
 } 
  | 
  
  | 
 echo "<b>Calculs Prélimminaires des Sommes</b><br>"; 
  | 
 echo "<br>"; 
  | 
 echo "N = ".$nbx."<br><br>"; 
  | 
 echo "Ex1 : ".$Ex1."<br>"; 
  | 
 echo "Ey1 : ".$Ey1."<br><br>"; 
  | 
 echo "Ex2 : ".$Ex2."<br>"; 
  | 
 echo "Ex3 : ".$Ex3."<br>"; 
  | 
 echo "Ex4 : ".$Ex4."<br>"; 
  | 
 echo "Ex5 : ".$Ex5."<br>"; 
  | 
 echo "Ex6 : ".$Ex6."<br>"; 
  | 
 echo "Ex1y1 : ".$Ex1y1."<br>"; 
  | 
 echo "Ex2y1 : ".$Ex2y1."<br>"; 
  | 
 echo "Ex3y1 : ".$Ex3y1."<br>"; 
  | 
  
  | 
 // Construction des matrices 
  | 
  
  | 
 // Matrice Principale 
  | 
  
  | 
 $mp[0][0]=$Ex6; $mp[1][0]=$Ex5; $mp[2][0]=$Ex4; $mp[3][0]=$Ex3; 
  | 
 $mp[0][1]=$Ex5; $mp[1][1]=$Ex4; $mp[2][1]=$Ex3; $mp[3][1]=$Ex2; 
  | 
 $mp[0][2]=$Ex4; $mp[1][2]=$Ex3; $mp[2][2]=$Ex2; $mp[3][2]=$Ex1; 
  | 
 $mp[0][3]=$Ex3; $mp[1][3]=$Ex2; $mp[2][3]=$Ex1; $mp[3][3]=$nbx; 
  | 
  
  | 
 // Matrice 1 
  | 
  
  | 
 $m1[0][0]=$Ex3y1; $m1[1][0]=$Ex5; $m1[2][0]=$Ex4; $m1[3][0]=$Ex3; 
  | 
 $m1[0][1]=$Ex2y1; $m1[1][1]=$Ex4; $m1[2][1]=$Ex3; $m1[3][1]=$Ex2; 
  | 
 $m1[0][2]=$Ex1y1; $m1[1][2]=$Ex3; $m1[2][2]=$Ex2; $m1[3][2]=$Ex1; 
  | 
 $m1[0][3]=$Ey1; $m1[1][3]=$Ex2; $m1[2][3]=$Ex1; $m1[3][3]=$nbx; 
  | 
  
  | 
 // Matrice 2 
  | 
  
  | 
 $m2[0][0]=$Ex6; $m2[1][0]=$Ex3y1; $m2[2][0]=$Ex4; $m2[3][0]=$Ex3; 
  | 
 $m2[0][1]=$Ex5; $m2[1][1]=$Ex2y1; $m2[2][1]=$Ex3; $m2[3][1]=$Ex2; 
  | 
 $m2[0][2]=$Ex4; $m2[1][2]=$Ex1y1; $m2[2][2]=$Ex2; $m2[3][2]=$Ex1; 
  | 
 $m2[0][3]=$Ex3; $m2[1][3]=$Ey1; $m2[2][3]=$Ex1; $m2[3][3]=$nbx; 
  | 
  
  | 
 // Matrice 3 
  | 
  
  | 
 $m3[0][0]=$Ex6; $m3[1][0]=$Ex5; $m3[2][0]=$Ex3y1; $m3[3][0]=$Ex3; 
  | 
 $m3[0][1]=$Ex5; $m3[1][1]=$Ex4; $m3[2][1]=$Ex2y1; $m3[3][1]=$Ex2; 
  | 
 $m3[0][2]=$Ex4; $m3[1][2]=$Ex3; $m3[2][2]=$Ex1y1; $m3[3][2]=$Ex1; 
  | 
 $m3[0][3]=$Ex3; $m3[1][3]=$Ex2; $m3[2][3]=$Ey1; $m3[3][3]=$nbx; 
  | 
  
  | 
 // Matrice 4 
  | 
  
  | 
 $m4[0][0]=$Ex6; $m4[1][0]=$Ex5; $m4[2][0]=$Ex4; $m4[3][0]=$Ex3y1; 
  | 
 $m4[0][1]=$Ex5; $m4[1][1]=$Ex4; $m4[2][1]=$Ex3; $m4[3][1]=$Ex2y1; 
  | 
 $m4[0][2]=$Ex4; $m4[1][2]=$Ex3; $m4[2][2]=$Ex2; $m4[3][2]=$Ex1y1; 
  | 
 $m4[0][3]=$Ex3; $m4[1][3]=$Ex2; $m4[2][3]=$Ex1; $m4[3][3]=$Ey1; 
  | 
  
  | 
 echo "<br>"; 
  | 
 echo "<b>Régression polynomiale de degré 3</b><br>"; 
  | 
 echo "<br>"; 
  | 
 echo "Det Mp : ".$det_mp = det_matrix($mp); 
  | 
 echo "<br>"; 
  | 
 echo "Det M1 : ".$det_m1 = det_matrix($m1); 
  | 
 echo "<br>"; 
  | 
 echo "Det M2 : ".$det_m2 = det_matrix($m2); 
  | 
 echo "<br>"; 
  | 
 echo "Det M3 : ".$det_m3 = det_matrix($m3); 
  | 
 echo "<br>"; 
  | 
 echo "Det M4 : ".$det_m4 = det_matrix($m4); 
  | 
 echo "<br>"; 
  | 
  
  | 
 // Calculs des coefficients de l'équation 
  | 
  
  | 
 echo "<br>"; 
  | 
 echo "a3 : ".$a3[3] = $det_m1/$det_mp; 
  | 
 echo "<br>"; 
  | 
 echo "a2 : ".$a3[2] = $det_m2/$det_mp; 
  | 
 echo "<br>"; 
  | 
 echo "a1 : ".$a3[1] = $det_m3/$det_mp; 
  | 
 echo "<br>"; 
  | 
 echo "a0 : ".$a3[0] = $det_m4/$det_mp; 
  | 
 echo "<br><br>"; 
  | 
  
  | 
 // Affichage de l'équation 
  | 
  
  | 
 echo "<b>Y = ".signe($a3[3])." X³ ".signe($a3[2])." X²".signe($a3[1]).
  | 
" X".signe($a3[0])."</b></font>";
  | 
  
  | 
   return $a3 ; 
  | 
}
  | 
  | 
 ?>
  | 
  | 
 |