Método de Newton e PHP

O método de Newton é um método matemático que pode ser utilizado para resolver equações. Como este método pode ser descrito em forma de algoritmo, então ele é facilmente aplicado à linguagem PHP (ou qualquer outra linguagem de programação).

[ Hits: 101.577 ]

Por: Laudelino em 11/08/2004


newton.php



<html>
<head>
<title>Método de Newton</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
</head>

<body bgcolor="#CCCCCC" text="#000000">

<?

/*
Método de Newton em PHP versão 0.1
Código escrito por Laudelino ([email protected])
*/


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 repetições
$i = 0;        // Valor da primeira repetição (poderia ser 1 também)
$xi = array(); // Valores da seqüência
$xi[0] = 8;    // 1o. valor da seqüência, o ponto de partida, o valor inicial

echo "<table align=\"center\" border=\"1\">\n";
echo "<tr bgcolor=\"999999\"><td align=\"center\">n</td><td align=\"center\">x<sub>n</sub></td><td align=\"center\">f(x<sub>n</sub>)</td><td align=\"center\">f'(x<sub>n</sub>)</td><td align=\"center\">ERRO</td></tr>\n";
echo "<tr><td>0</td><td>" . $xi[0] . "</td><td>" . funcao($xi[0]) . "</td><td>" . derivada($xi[0]) . "</td><td align=\"center\">****</td></tr>\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 "<tr><td>";
  echo $i+1;
  echo "</td><td>" . $xi[$i+1] . "</td><td>" . funcao($xi[$i+1]) . "</td><td>" . derivada($xi[$i+1]) . "</td><td>$erro</td></tr>\n";

  $i = $i + 1;
}
}

echo "</table>";

?>

</body>
</html>
Página anterior     Próxima página

Páginas do artigo
   1. Introdução
   2. O método de Newton
   3. Aplicação à linguagem PHP
   4. newton.php
   5. Pequeno comentário sobre o código PHP
   6. Conclusão
   7. Referências
Outros artigos deste autor

Programando PostgreSQL + PHP

PostgreSQL: comandos básicos

Criptografando mensagens com PHP

Leitura recomendada

Trabalhando conteúdo dinâmico com Smarty

Administrando usuários no GNU/Linux e Samba via web com PHP

Relatórios com PHP e XSLT - Conceitos iniciais e utilização básica

Usando Blocos Dinâmicos com a Classe FastTemplate (Parte 2)

Usando Blocos Dinâmicos com a Classe FastTemplate (Parte 1)

  
Comentários
[1] Comentário enviado por pereira.celso em 11/08/2004 - 16:02h

parabéns pelo artigo.....

fazia algum tempo q nao via nd desses lances...... :)

falo veio t+

[2] Comentário enviado por mafioso em 12/08/2004 - 15:46h

Tive que fazer um algoritmo como o seu... Mas o meu algoritmo não era baseado em difinir um número de iterações, mas sim um erro (erro = xn - x[n-1]). Fiz tanto o método de Newton como o método da Bissecção (um método parecido). As saídas do algoritmo estão em:

www.noclique.com.br/calculo/newton.php (método de Newton)
www.noclique.com.br/calculo/bisseccao.php (método da Bissecção)

Se alguém quiser ou precisar destes algoritmos, é só me pedir!

Valeu pelo artigo!

[3] Comentário enviado por rafa_mat em 13/08/2004 - 10:44h

Eu fiz um um algoritmo em C para um trablho da faculdade, que calcula o método de Newton Modificado para raízes multiplas com qualquer função de grau <= 6. Tb fiz uma versão pra kylix. Se alguém quiser, é só pedir tb!!! Ficou muito legal o artigo!! Parabéns!!!

[4] Comentário enviado por birilo em 15/08/2004 - 10:52h

Coloca como script aqui Mafioso

[5] Comentário enviado por hvasoares em 24/12/2005 - 05:52h

Newton é um método ótimo para resolver equações, mas infelizmente você vai ter que conhecer a derivada da equação que lhe interessa (há derivadas monstruosas).
Dêem um pesquisada na internet sobre esse método e vocês verão que ele é realmente muito interessante, pois não é preciso usar derivadas. Eu tenho um implementação em C++, a quem interessar e-mail-me.

[6] Comentário enviado por mafioso em 23/02/2007 - 23:33h

Como me pediram, atualizei o link com as saídas dos algoritmos do método da bissecção e do método de newton. Além disso, disponibilizei os códigos fonte neste arquivo:

http://www.noclique.com.br/calculo/calculo.zip


[7] Comentário enviado por civicx em 27/02/2007 - 21:54h

Opa.. muito bommm..!!

Eu tb estou atrais de um em Java, que eu entendo melhor a linguagem..

vc sabe onde eu consiga esses metodos em JAVA?

MUITOO obrigadoooooooo ;)

[8] Comentário enviado por removido em 20/12/2007 - 19:21h

Boas,
Estou a colocar este Help porque estou mesmo a necessitar de ajuda. Estou no último ano da minha Licenciatura e preciso de apresentar um trabalho onde tenho de implementar os seguintes metodos em linguagem C:
• Equações não lineares
o Método da Secante
o Método de Newton
• Sistemas de equações lineares
o Método de gauss-seidel
• Sistemas de equações não lineares
o Método de Newton
• Optimização Unidimensional
o DSC
• Optimização Multidimensional
o Nelder-Mead
o Quasi-Newton (versão BFGS) com critério de Armijo na procura do valor de alfa
Não estou a conseguir reunir informação para conseguir implementar os metodos e começo a ficar preocupado porque posso não terminar meu curso devido a esse trabalho.
Alguém sabe indicar-me onde posso encontrar informação sobre os codigos ou a forma como posso implementar os algortimos?
Fico muito agradecido a quem me puder ajudar.
Obrigado
Francisco


Contribuir com comentário