2016-06-08 5 views
3

Я ищу для модуля или функции, чтобы написать, что делает следующее в Python:найти простое решение перечислить РАВЕНСТВО Python

Скажем, у меня есть две матрицы:

left = ['2B', '1A', '2A+1B'] 
right = ['8C', '3C', '2D'] 

Я хочу, чтобы найти наименьшее целое число, для A, B, C и D (все должно быть больше, чем 0), так что

left = right 

Таким образом, в этом случае мы имеем:

2*B = 8*C 
A = 3*C 
2*A + B = 2*D 

Поэтому

A = 3 
B = 4 
C = 1 
D = 5 

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

Матрицы могут быть произвольного размера, я просто выбрал длину 3 в качестве примера.

Любые идеи? Благодаря!

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

+0

Как вы определяете "самые маленькие"? Система может легко иметь два решения, где один имеет меньший A, а другой имеет меньший B. – user2357112

+2

Связанный и высокоповторный пост [Простой способ решения математических уравнений в Python] (http://stackoverflow.com/q/1642357) –

+1

посмотрите здесь: http://docs.sympy.org/dev/modules/solvers/solvers.html. вы должны понять, как писать ваши уравнения в матричной форме и применять решатель –

ответ

3

В общем, вы пытаетесь решить систему уравнений над целыми числами, что не является простой задачей (check out this paper).

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

Сказочный пакет SymPy - это хорошее место для начала, у них есть set of solvers, которые позволяют вам указать систему вместе с внешними ограничениями (например, как положительное целое число).

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