Решатели уравнений для линейных математических уравнений - PullRequest
3 голосов
/ 08 октября 2008

Мне нужно решить несколько математических уравнений в моем приложении. Вот типичный пример такого уравнения:

a + b * c - d / e = a

Дополнительные правила:

  • b% 10 = 0
  • b> = 0
  • b <= 100 </li>
  • Каждое число должно быть целым числом
  • ...

Я хотел бы получить возможные наборы решений для a, b, c, d и e.

Существуют ли какие-либо библиотеки , либо с открытым исходным кодом, либо коммерческие, , которые я могу использовать для решения такого уравнения ? Если да, то какой результат они дают?

Ответы [ 10 ]

3 голосов
/ 08 октября 2008

Решение линейных систем может обычно быть решено с помощью линейного программирования. Я бы посоветовал взглянуть на Boost uBLAS для начинающих - в нем есть простой треугольный решатель. Затем вы можете оформить заказ на библиотеки, ориентированные на более специфичные для домена подходы, например QSopt .

2 голосов
/ 08 октября 2008

Вы рискуете в мир численного анализа, и вот вам драконы. Кажущиеся незначительными различия в спецификации могут иметь огромное значение в правильном подходе.

Я не решаюсь делать конкретные предложения без довольно точного описания предметной области. Это звучит поверхностно, как будто вы решаете ограниченные линейные задачи, которые достаточно просты, поэтому есть много способов сделать это, но «...» может быть проблемой.

Хороший ресурс для общих решателей и т. Д. Будет GAMS . Большая часть программного обеспечения может быть немного тяжелой для того, что вы просите.

1 голос
/ 08 октября 2008

Я знаю, что это не ваш настоящий вопрос, но вы можете упростить данное уравнение до:

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

1 голос
/ 08 октября 2008

Вам нужна система компьютерной алгебры.

См. https://stackoverflow.com/questions/160911/symbolic-math-lib,, ответы на которые в большей степени относятся к с ++, чем к с.

0 голосов
/ 09 ноября 2009

Калькулятор TI-89 имеет приложение «решатель». Он был создан для решения проблем, подобных той, что в вашем примере. Я знаю, что это не библиотека. Но есть несколько эмуляторов TI-89.

0 голосов
/ 14 октября 2008

Глядя только на часть «дополнительных правил», она выглядит как линейное программирование, и в этом случае LINDO или аналогичная программа, реализующая симплексный алгоритм, должны подойти.

Однако, если первое уравнение действительно типичное , оно показывает, что ваша задача НЕ является линейной алгеброй - никакие 2 переменные, умножающие или делящие друг друга, не должны появляться в линейном уравнении!

Так что я бы сказал, что вам определенно нужна либо система компьютерной алгебры, либо решение проблемы с использованием генетического алгоритма.

Поскольку у вас есть ограничения, аналогичные тем, которые встречаются в линейном программировании, хотя вы не совсем там, если вы просто хотите решить вашу конкретную проблему, я бы сказал, возьмите любую из библиотек, упомянутых в конце Статья в Википедии о генетических алгоритмах и разработка приложения, которое даст вам результат. Если вам нужен более универсальный подход, то вы должны симулировать алгебраические манипуляции на вашем компьютере, а не наоборот.

0 голосов
/ 08 октября 2008

В дополнение к другим постам. Ваши наборы ограничений напоминают о проблеме целочисленного программирования , так что вы можете захотеть проверить и такие вещи. Возможно, ваша проблема может быть (пере) сформулирована как единое целое.

Вы должны знать, однако, что проблемы целочисленного программирования, как правило, являются одной из более сложных вычислительных проблем, поэтому вы можете использовать много тактов для их взлома.

0 голосов
/ 08 октября 2008

Это похоже на линейное программирование. этот список помогает?

0 голосов
/ 08 октября 2008

Вы ищете систему компьютерной алгебры, и это не тривиальная вещь.

Их много, хотя, попробуйте этот список в Википедии:

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

-Adam

0 голосов
/ 08 октября 2008

Уверен, Числовые рецепты будет иметь что-то

...