Exemple #1
0
/**
 * Rend un polynome de degré 1 joli
 * @param  Polynome	$P	Le polynome
 * @return string		La représentation du polynome
 */
function prettyPolynome($P)
{
    $len = count($P->monomes);
    if ($len == 2 && $P->calculDegrePolynome() == 1) {
        $m0 = $P->monomes[0];
        $m1 = $P->monomes[1];
        if ($m0->coeff < 0 && $m1->coeff < 0) {
            $r0 = new Monome(-1 * $m0->coeff, $m0->degre);
            $r1 = new Monome(-1 * $m1->coeff, $m1->degre);
            return "- (" . $r0 . " + " . $r1 . ")";
        }
        if ($m0->coeff < 0 && $m1->coeff > 0) {
            return "(" . $m1 . " " . $m0 . ")";
        }
        return "(" . $P . ")";
    } elseif ($len == 1 && $P->calculDegrePolynome() == 1) {
        return $P;
    } else {
        throw new Exception("WTF ?", 1);
    }
}
Exemple #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;
 }