Pergunta

Eu preciso resolver algumas equações matemáticas em meu aplicativo. Aqui está um exemplo típico de uma equação como:

a + b * c - d / e = a

As regras adicionais:

  • b% 10 = 0
  • b> = 0
  • b <= 100
  • Cada número deve ser inteiro
  • ...

Eu gostaria de obter os possíveis conjuntos de soluções para a, b, c, d e e.

Existem quaisquer bibliotecas lá fora, , seja de código aberto ou comercial, que eu posso usar para resolver um tal equação ? Se sim, que tipo de resultado que eles oferecem?

Foi útil?

Solução

linear sistemas lata geralmente ser resolvidos usando programação linear . Eu recomendo dar uma olhada uBLAS impulso para começar - ele tem um solucionador triangular simples. Em seguida, você pode fazer o checkout bibliotecas alvo mais específico de domínio se aproxima, talvez QSopt .

Outras dicas

Você está se aventurar no mundo da análise numérica, e seja aqui dragões. Aparentemente pequenas diferenças de especificação pode fazer uma enorme diferença no que é a abordagem certa.

Eu hesito em fazer sugestões específicas sem uma descrição bastante precisa do domínio do problema. Parece superficiall como você está resolvendo constrangidos linear problemas que são bastante simples que há uma série de maneiras de fazer isso, mas "..." poderia ser um problema.

Um recurso bom para solucionadores gerais etc. seria GAMS . Grande parte do software pode haver um peso pouco pesado para o que você está pedindo.

Você quer um sistema de álgebra computacional.

https://stackoverflow.com/questions/160911/symbolic-math-lib , cujas respostas são na sua maioria como relevantes para c ++ como a c.

Eu sei que não é a sua pergunta real, mas você pode simplificar a equação dada a:

d = b * c * e com e! = 0

Pretty certeza Numerical Recipes terá algo

Você está procurando um sistema de álgebra computacional, e isso não é uma coisa trivial.

O lote deles estão disponíveis, embora, tente esta lista na Wikipedia:

http://en.wikipedia.org/wiki/Comparison_of_computer_algebra_systems

-Adam

Isto parece programação linear. Faz este lista de ajuda?

Além das outras mensagens. Seus conjuntos de restrição tornar esta uma reminiscência de uma número inteiro problema de programação , então você pode querer verificar que tipo de coisa fora também. Talvez o seu problema pode ser (re) afirmado como um.

Você deve saber, no entanto, que os problemas de programação inteira tende a ser um dos problemas mais difíceis computacionais de modo que você pode acabar usando muitos ciclos de clock para quebrá-la.

Olhando apenas para a parte "regras adicionais" que se parece com programação linear, caso em que LINDO ou um programa similar implementar o algoritmo simplex deve ser fino.

No entanto, se a primeira equação é realmente típico mostra o seu não é um problema de álgebra linear - há 2 variáveis ??multiplicar ou dividir entre si devem aparecer em uma equação linear

Então, eu diria que você definitivamente precisará de um sistema de álgebra computacional ou resolver o problema usando um algoritmo genético.

Uma vez que você tem restrições semelhantes aos encontrados na programação linear, embora você não está completamente lá, se você quiser apenas uma solução para o seu problema específico Eu diria que pegar qualquer uma das bibliotecas mencionadas no final de artigo da Wikipedia sobre algoritmos genéticos e desenvolver um aplicativo para lhe dar o resultado. Se você quiser uma abordagem mais generalista, então você tem de manipulações algébricas simulados no computador, nenhum outro caminho de volta.

A calculadora TI-89 tem uma aplicação 'solver'. Foi construído para resolver problemas como o que no seu exemplo. Eu sei que não é uma biblioteca. Mas há várias TI-89 emuladores lá fora.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top