Esempio n. 1
0
/**
 * Rend la factorisation plus compacte et peut-être jolie
 * @param  Polynome	$P1	Le facteur 1
 * @param  Polynome	$P2	Le facteur 2
 * @param  Polynome	$P3	Le facteur 3
 * @return string		La représentation factorisée du polynome
 */
function prettyFactors($P1, $P2, $P3)
{
    // echo $P1."<br/>".$P2."<br/>".$P3."<br/>";
    if ($P1->equals($P2) && $P1->equals($P3)) {
        return prettyPolynome($P1) . "&sup3;";
    } elseif ($P1->equals($P2) && $P2->equals($P3->multNumber(-1))) {
        return "- " . prettyPolynome($P1) . "&sup3;";
    } elseif ($P1->equals($P2->multNumber(-1)) && $P1->equals($P3)) {
        return "- " . prettyPolynome($P1) . "&sup3;";
    } elseif ($P1->equals($P2->multNumber(-1)) && $P2->equals($P3)) {
        return prettyPolynome($P1) . "&sup3;";
    } elseif ($P1->equals($P2) && !$P1->equals($P3)) {
        return prettyPolynome($P1) . "&sup2;" . prettyPolynome($P3);
    } elseif (!$P1->equals($P2) && $P1->equals($P3)) {
        return prettyPolynome($P1) . "&sup2;" . prettyPolynome($P2);
    } elseif ($P1->equals($P2->multNumber(-1)) && !$P1->equals($P3) && !$P2->equals($P3)) {
        return "- " . prettyPolynome($P1) . "&sup2;" . prettyPolynome($P3);
    } elseif ($P2->equals($P3->multNumber(-1)) && !$P1->equals($P3) && !$P1->equals($P2)) {
        return "- " . prettyPolynome($P3) . "&sup2;" . prettyPolynome($P1);
    }
    return prettyPolynome($P1) . prettyPolynome($P2) . prettyPolynome($P3);
}
Esempio n. 2
0
 /**
  * L'algorithme de division euclidienne de polynomes
  * Merci : http://www.developpez.net/forums/d174185/general-developpement/algorithme-mathematiques/mathematiques/division-euclidienne-polynome/#post1117295
  * @param	Polynome	$P2	Le Polynome diviseur
  * @return	Polynome		Le Polynome dividende
  */
 public function algorithme($P2)
 {
     // $P1 est une copie de $this
     $P1 = $this->clonePolynome();
     // $P stockera le résultat
     $P = new Polynome(array(new Monome(0, 0)));
     // $degre1 est le degré maximum actuel du Polynome $P1
     $degre1 = $P1->calculDegrePolynome();
     // $degre2 est le degré maximum du Polynome $P2
     $degre2 = $P2->calculDegrePolynome();
     // $coeff2 est le coefficient du Monome de degré $degre2 de $P2
     $coeff2 = $P2->getMonomeByDegre($degre2)->coeff;
     // Tant que le degré de $P2 est inférieur ou égal au degré de $P1
     while ($degre1 >= $degre2) {
         // On actualise le degré de $P1
         $degre1 = $P1->calculDegrePolynome();
         // $n est la différence de degré entre $P1 et $P2
         $n = $degre1 - $degre2;
         // $coeff1 est le coefficient du Monome de degré $degre1 de $P1
         $coeff1 = $P1->getMonomeByDegre($degre1)->coeff;
         // $xn est le Monome valant X à la puissance $n
         $xn = new Monome(1, $n);
         // $coeffDiv est le dividende des coefficients actuels
         $coeffDiv = $coeff1 / $coeff2;
         // $P2xn est le Polynome avec lequel on multiplie $xn
         $P2xn = $P2->multMonome($xn);
         // $P2xndiv est le Polynome avec lequel on multiplie $coeffDiv
         $P2xndiv = $P2xn->multNumber($coeffDiv);
         // $P1 est le nouveau Polynome diviseur, il vaut la soustraction de $P1 avec $P2xndiv
         // comme dans la division euclidienne à l'école
         $P1 = $P1->subPolynome($P2xndiv);
         // $P recoit $P + $xn * $coeffDiv
         $P = $P->addMonome($xn->multNumber($coeffDiv));
     }
     // $Q = $this->subPolynome($P2->multPolynome($P));
     // $P1 = $this->subPolynome($P2->multPolynome($P));
     return $P;
 }