Como ler funções matematicas como f(x)=exp( cos(x^2 + 1) ) em C

7 respostas
L

Bom dia. Preciso fazer um programa que acha aproximaçoes de raizes de funções. Mas encontrei um problema logo de cara: ler a funçao de entrada como, por exemplo, f(x)=exp( cos(x^2 + 1) ).
A unica soluçao que pensei foi "passear"pela string e tentar desmenbrar em funçoes menores, mas acredito que esse algoritmo ja deve ser conhecido de muita gente e, portanto, existe uma soluçao comum que é usada. Gostaria de saber se alguem conhece algum algoritmo desses.
Obs: pode ser em C ou em java tanto faz, preciso apenas da logica empregada.
Obrigado, Leonardo.

7 Respostas

A

Vc quer uma lógica para fazer: x^2 por exemplo?

L

Isso mesmo. Mas que comporte funcoes mais complicadas como a do titulo. Gostaria de ler funcoes do teclado, que o usuario digitasse como texto.

M

O que você precisa é de um parser. Veja esse projeto no codeproject:
http://www.codeproject.com/KB/recipes/FastMathParser.aspx
Tenha em mente que fazer um parser de funções matemáticas é algo bem complicado.

D

Tem de implementar uma lógica para tratamento de strings e abstração para gerar uma solução que o computador saiba tratar.
Normalmente para simular o cálculo do modo humano nos utilizamos árvores.

M

DavidUser:
Tem de implementar uma lógica para tratamento de strings e abstração para gerar uma solução que o computador saiba tratar.
Normalmente para simular o cálculo do modo humano nos utilizamos árvores.

Isso é uma coisa absurdamente difícil de fazer. Ele irá perder muito tempo implementando funções de análises de tokens que ele pode encontrar já implementadas na internet.
O projeto que eu mostrei é bacana, mas deve haver coisas melhores.

D

Se quiser algo bom faça você mesmo ou busque ao menos um open-source.
Concordo que não seja algo simples matheuslmota mas não que seja uma perca de tempo, dependendo do prazo que ele estima para a conclusão pode definir o melhor caminho.
A parte mais pesada passa longe de ser a codificação e a solução não é assim tão difícil, se quiser algo pronto tem sites como QuickMath, mesmo acreditando que se buscou um fórum para a pergunta procurava desenvolve você mesmo.

M

DavidUser:
Se quiser algo bom faça você mesmo ou busque ao menos um open-source.
Concordo que não seja algo simples matheuslmota mas não que seja uma perca de tempo, dependendo do prazo que ele estima para a conclusão pode definir o melhor caminho.
A parte mais pesada passa longe de ser a codificação e a solução não é assim tão difícil, se quiser algo pronto tem sites como QuickMath, mesmo acreditando que se buscou um fórum para a pergunta procurava desenvolve você mesmo.

Ele pode então implementar um parser matemático a partir e um analisador léxico, como o lex. em conjunto com um analizador sintático (o lex usa o yacc como analisador sintático). Ele terá de definir operadores, precedência etc. Mas com essas duas ferramentas ele consegue validar expressões matemáticas e analisar tolkens. É algo difícil, dependendo do tipo de expressões que ele irá reconhecer, mas é um projeto realmente enriquecedor.

Criado 24 de setembro de 2011
Ultima resposta 24 de set. de 2011
Respostas 7
Participantes 4