Решатели уравнений для линейных математических уравнений

StackOverflow https://stackoverflow.com/questions/180327

  •  05-07-2019
  •  | 
  •  

Вопрос

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

a + b * c - d / e = a

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

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

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

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

Это было полезно?

Решение

Решение линейные системы может в целом решается с помощью линейного программирования.Я бы рекомендовал взглянуть на Увеличьте уБЛАС для начала - у него есть простой треугольный решатель.Затем вы могли бы приобрести библиотеки, ориентированные на более специфичные для домена подходы, возможно QSopt ( КСопт ).

Другие советы

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

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

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

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

Видишь https://stackoverflow.com/questions/160911/symbolic-math-lib, ответы на которые в основном так же актуальны для c ++, как и для c.

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

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

Почти уверен Числовые Рецепты будет что-то

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

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

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

-Адам

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

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

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

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

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top