<?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 ;
|
}
|
|
?>
|
|
|