Atualmente, estou fazendo uma calculadora integral que você pode verificar aqui: http://jesuscastaneda.net76.net/apcalc/HJBABJHBHDA123hjdhjshsnGF63.html
mas eu preciso fazer várias funções matemáticas e uma delas é um divisor polinomial em php que você pode verificar aqui
function degree($polynomial){
for($i = (count($polynomial)-1); $i>=0; $i--){
if($polynomial[$i]!=0){
return $i;
}
}
return 0;
}
function formatPolynomial($poly){
$expression = "";
for($i = (count($poly)-1); $i>=0; $i--){
if($i!=(count($poly)-1)){
if($poly[$i]>0){
$expression .= "+";
}
}
if($poly[$i]!=0){
if($poly[$i]!=1){
$expression.=$poly[$i];
}
if($i!=1 and $i!=0){
$expression.=("x^".$i);
}
elseif($i==1){
$expression.=("x");
}
}
}
if($expression[0]=="+"){
$expression = substr($expression,1);
}
return $expression;
}
function polynomialDivision($numerator,$denominator){
$numeratorDegree = degree($numerator);
$denominatorDegree = degree($denominator);
//Calculate to see if the division makes sense or not
if($denominatorDegree > $numeratorDegree){
return array();
}
elseif($numeratorDegree >= $denominatorDegree){
$i = $numeratorDegree-$denominatorDegree;
//the array_pad is for given initial values and avoiding undefined indexes
$answer = array_pad(array(),$i+2,0);
$remainder = array_pad(array(),$denominatorDegree+1,0);
while($numeratorDegree >= $denominatorDegree){
//we devide the highest degree term from the denominator
//by the highest term from the numerator
//so the highest term of the answer has a degree of
// dN-dD
$i = $numeratorDegree-$denominatorDegree;
//we add the term to the array
$answer[$i] = $numerator[$numeratorDegree]/$denominator[$denominatorDegree];
//we make the new array so we could take the difference
$polyForDiff = array_pad(array(),$denominatorDegree+$i+2,0);
for($j = 0; $j<=$denominatorDegree; $j++){
$polyForDiff[$j+$i] = $denominator[$j]*$answer[$i];
}
//now we calculate the difference
for($j = 0; $j<=degree($polyForDiff); $j++){
$numerator[$j] = $numerator[$j] - $polyForDiff[$j];
}
//recalculate the new numerator degree
$numeratorDegree = degree($numerator);
}
return array($answer,$numerator);
}
return array();
}
$aP = array(-4,0,-2,1);
$bP = array(-3,1);
$result = polynomialDivision($aP,$bP);
$a = formatPolynomial($aP);
$b = formatPolynomial($bP);
$c = formatPolynomial($result[0]);
$d = formatPolynomial($result[1]);
echo("(".$a.")/(".$b.") = (".$c.")*(".$b.")+(".$d.")n");
//(x^3-2x^2-4)/(x-3) = (x^2+x+3)*(x-3)+(5)