Pregunta

Necesito resolver algunas ecuaciones matemáticas en mi aplicación. Aquí hay un ejemplo típico de tal ecuación:

a + b * c - d / e = a

Reglas adicionales:

  • b% 10 = 0
  • b > = 0
  • b < = 100
  • Cada número debe ser entero
  • ...

Me gustaría obtener los posibles conjuntos de soluciones para a, b, c, d y e.

¿Hay bibliotecas por ahí , de código abierto o comercial, que pueda usar para resolver tal ecuación ? En caso afirmativo, ¿qué tipo de resultado proporcionan?

¿Fue útil?

Solución

Solución de sistemas lineales pueden generalmente resolverse mediante programación lineal . Recomiendo echar un vistazo a Boost uBLAS para empezar: tiene un solucionador triangular simple. Luego, puede retirar las bibliotecas dirigidas a enfoques más específicos del dominio, tal vez QSopt .

Otros consejos

Te estás aventurando en el mundo del análisis numérico, y aquí hay dragones. Aparentemente, pequeñas diferencias en las especificaciones pueden hacer una gran diferencia en cuál es el enfoque correcto.

Dudo en hacer sugerencias específicas sin una descripción bastante precisa del dominio del problema. Parece superficial que está resolviendo problemas lineales restringidos que son lo suficientemente simples como para que haya muchas maneras de hacerlo, pero & "; ... &"; podría ser un problema.

Un buen recurso para solucionadores generales, etc. sería GAMS . Gran parte del software puede ser un poco pesado para lo que está pidiendo.

Quiere un sistema de álgebra computacional.

Ver https://stackoverflow.com/questions/160911/symbolic-math-lib , cuyas respuestas son tan relevantes para c ++ como para c.

Sé que no es su verdadera pregunta, pero puede simplificar la ecuación dada para:

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

Estoy bastante seguro de que Recetas numéricas tendrá algo

Estás buscando un sistema de álgebra computacional, y eso no es algo trivial.

Muchos de ellos están disponibles, sin embargo, pruebe esta lista en Wikipedia:

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

-Adam

Esto parece una programación lineal. esta lista de ayuda?

Además de las otras publicaciones. Sus conjuntos de restricciones hacen que esto recuerde un problema de programación de enteros , por lo que es posible que también desee verificar ese tipo de cosas. Quizás su problema se pueda (re) declarar como uno.

Debe saber, sin embargo, que los problemas de programación de enteros tienden a ser uno de los problemas computacionales más difíciles, por lo que podría terminar usando muchos ciclos de reloj para resolverlo.

Mirando solo las " reglas adicionales " parte parece una programación lineal, en cuyo caso LINDO o un programa similar que implemente el algoritmo simplex debería estar bien.

Sin embargo, si la primera ecuación es realmente típica , muestra que la suya NO es un problema de álgebra lineal: ¡no deberían aparecer 2 variables que se multipliquen o se dividan entre sí en una ecuación lineal!

Entonces diría que definitivamente necesita un sistema de álgebra de computadora o resolver el problema usando un algoritmo genético.

Dado que tiene restricciones similares a las que se encuentran en la programación lineal, aunque no está del todo allí, si solo desea una solución a su problema específico, diría que elija cualquiera de las bibliotecas mencionadas al final de Artículo de Wikipedia sobre algoritmos genéticos y desarrolle una aplicación para darle el resultado. Si desea un enfoque más generalista, debe simular manipulaciones algebraicas en su computadora, no al revés.

La calculadora TI-89 tiene una aplicación 'solucionador'. Fue construido para resolver problemas como el de su ejemplo. Sé que no es una biblioteca. Pero hay varios emuladores TI-89 por ahí.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top