/*
Método de Newton em PHP versão 0.1
Código escrito por Laudelino (laudelino7@click21.com.br)
*/
function funcao($x) {
$fx = pow($x,2) + 2*$x - 3;
// outros exemplos (funções)
// $fx = 2*pow($x,3) + log($x) - 5; // Exemplo 1- f(x) = 2*x^3 + ln(x) - 5
// $fx = pow($x,2) - $x -2; // Exemplo 2- (x-2)(x+1) = x^2 -x -2 = f(x)
return $fx;
}
function derivada($x) {
$flinhax = 2*$x + 2;
// $flinhax = 6*pow($x,2) + 1/$x; // Exemplo 1- f'(x) = 6*x^2 + 1/x
// $flinhax = (2*$x) -1; // Exemplo 2- 2*x -1 = f'(x)
return $flinhax;
}
function metodo_de_newton($x) {
$funcao = funcao($x);
$derivada = derivada($x);
$xi_mais_1 = $x - $funcao/$derivada; // Este é o algoritmo!
return $xi_mais_1;
}
$L = 10; // número máximo de iterações
$i = 0;
$xi = array();
$xi[0] = 8;
echo "\n";
echo "| n | xn | f(xn) | f'(xn) | ERRO |
\n";
echo "| 0 | ".$xi[0]." | ".funcao($xi[0])." | ".derivada($xi[0])." | **** |
\n";
while ($i < $L) {
if (derivada($xi[$i]) == 0 || funcao($xi[$i]) == 0) { $i = $L + 1; }
else {
$xi[$i+1] = metodo_de_newton($xi[$i]);
$erro = abs($xi[$i+1] - $xi[$i]);
echo "| "; echo $i+1; echo " | ".$xi[$i+1]." | ".funcao($xi[$i+1])." | ".derivada($xi[$i+1])." | $erro |
\n";
$i = $i + 1;
}
}
echo "
";
?>