[Cascavel-pm] Perl pode calcular derivadas!

Breno G. de Oliveira breno em clavis.com.br
Quarta Novembro 2 08:37:16 PST 2005


Luis Campos de Carvalho wrote:
> 
>   Isto pode ser implementado.
>   O problema de calcular derivadas depende muito de dois fatores mais ou menos interdependentes:
> 
>   1) Notação: a notação (de cálculo) pode fazer você pirar. Escolher com cuidado é fundamental.
> Existem duas ou três notações populares entre os matemáticos, e pelo que eu pude perceber entre os
> engenheiros e físicos devem existir pelo menos mais duas. Recomendo que você experimente com
> cuidado e não ouse muito no começo.
> 
>   2) Complexidade das Expressões: não acho que alguém tenha dúvidas que isso está ligado à forma
> como você representa as expressões. E tenho certeza de que existem derivadas e "Derivadas" (notem
> o "D"). Derivar polinômios algébricos em perl pode ser tão simples quanto procurar e substituir
> strings. ;-) Claro, conforme a operação se sofisticar, isso pode ficar arbitráriamente complicado.
> Por isso cálculo e álgebra são campos em que humanos podem fazer melhor.
> 
>   Se você estiver procurando por algum tipo de derivada específica, ou conseguir isolar e fazer
> com que seu programa compreenda quando e como aplicar algumas das técnicas, posso ajudar a
> construir um módulo capaz de resolver *algumas* derivadas. Principalmente as polinomiais com
> expoentes naturais positivos. ;-)
> 

Oi Champs!

Obrigado pelas dicas e pelo apoio, realmente tenho muito medo em
automatizar operações algébricas já que mesmo ferramentas consagradas
como o Maple e o Mathematica cometem erros capazes de jogar uma pesquisa
toda no lixo.

Achei o módulo

 Math::Calculus::Differentiate

que consegue derivar relativamente bem, até onde eu pude testar. O
autor, Jonathan Worthington, colocou alguns exemplos de seus módulos
online em http://www.jwcs.net/~jonathan/math/ e ele aparentemente
retorna a expressão algébrica corretamente. Por exemplo, ele diz que a
derivada de

x^3 * e^x

 é

x^3*ln(e)*exp(ln(e)*x) + 3*e^x*x^2

o que é verdade, mas ln(e) == 1, então isso na verdade deveria ser:

x^3 * e^x + 3 * e^x * x^2

Existe no módulo o método "simplify" que deve fazer isso, e ainda não
testei exaustivamente problemas de divisão por zero. Outro problema
menos grave é a resolução da equação para um determinado valor de x
(sendo um ponto na reta ou uma faixa de valores). Enfim, precisa de mais
testes! ;)

Mas pode deixar que se eu tiver algum problema volto a perturbar vcs ;)


Obrigado!

breno



Mais detalhes sobre a lista de discussão Cascavel-pm