Question

Je dois résoudre quelques équations mathématiques dans mon application. Voici un exemple typique d’une telle équation:

a + b * c - d / e = a

Règles supplémentaires:

  • b% 10 = 0
  • b > = 0
  • b < = 100
  • Chaque nombre doit être un entier
  • ...

Je souhaite connaître les solutions possibles pour a, b, c, d et e.

Existe-t-il des bibliothèques , soit open source, soit commerciales, que je peux utiliser pour résoudre une telle équation ? Si oui, quel type de résultat fournissent-ils?

Était-ce utile?

La solution

La résolution des systèmes linéaires peut généralement être résolue à l'aide de la programmation linéaire . Je vous conseillerais de consulter Boost uBLAS pour commencer - il a un solveur triangulaire simple. Ensuite, vous pouvez extraire des bibliothèques ciblant des approches plus spécifiques à un domaine, par exemple QSopt .

Autres conseils

Vous vous aventurez dans le monde de l’analyse numérique, et voici des dragons. De légères différences dans les spécifications peuvent avoir un impact considérable sur la bonne approche.

J’hésite à faire des suggestions spécifiques sans une description assez précise du domaine du problème. Il semble superficiellement que vous résolvez des problèmes linéaires contraints qui sont assez simples pour qu’il existe de nombreuses façons de le faire, mais & "; ... &"; pourrait être un problème.

Une GAMS serait une bonne ressource pour les solveurs généraux, etc. Une grande partie du logiciel peut être un peu lourd pour ce que vous demandez.

Vous voulez un système de calcul formel.

Voir https://stackoverflow.com/questions/160911/symbolic-math-lib , dont les réponses sont généralement aussi pertinentes pour c ++ que pour c.

Je sais que ce n'est pas votre vraie question, mais vous pouvez simplifier l'équation donnée en:

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

Il est certain que les recettes numériques auront quelque chose de concret

.

Vous recherchez un système de calcul formel, et ce n'est pas une mince affaire.

Beaucoup d'entre eux sont disponibles, essayez cette liste sur Wikipedia:

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

-Adam

Cela ressemble à une programmation linéaire. cette liste d'aide?

En plus des autres messages. Vos ensembles de contraintes font penser à un problème de programmation d’entiers , vous pouvez donc également vérifier ce type de problème. Peut-être que votre problème peut être (re) énoncé comme un.

Vous devez savoir, cependant, que les problèmes de programmation des nombres entiers ont tendance à être l’un des problèmes de calcul les plus difficiles, de sorte que vous pourriez vous retrouver à utiliser plusieurs cycles d’horloge pour le résoudre.

En ne regardant que les ". règles supplémentaires " En partie, cela ressemble à une programmation linéaire, auquel cas LINDO ou un programme similaire mettant en œuvre l’algorithme simplex devrait convenir.

Cependant, si la première équation est vraiment typique , cela signifie que le vôtre n'est PAS un problème d'algèbre linéaire - aucune variable ne se multipliant ou se divisant ne devrait apparaître sur une équation linéaire!

Je dirais donc que vous avez absolument besoin d'un système de calcul algébrique ou de résoudre le problème à l'aide d'un algorithme génétique.

Étant donné que vous avez des restrictions similaires à celles de la programmation linéaire, même si vous n'y êtes pas encore très bien, si vous voulez juste une solution à votre problème spécifique, je vous conseillerais de choisir l'une des bibliothèques mentionnées à la fin de Article de Wikipedia sur les algorithmes génétiques et développez une application pour vous donner le résultat. Si vous souhaitez une approche plus généraliste, vous devez simuler des manipulations algébriques sur votre ordinateur, sans autre solution.

La calculatrice TI-89 a une application "solveur". Il a été conçu pour résoudre des problèmes comme celui de votre exemple. Je sais que ce n'est pas une bibliothèque. Mais il existe plusieurs émulateurs TI-89.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top