找到列出等式python的最简单的解决方案

时间:2016-06-08 18:01:55

标签: python solver

我正在寻找一个模块或函数来编写,它在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作为例子。

有什么想法吗?谢谢!

修改: 评论中有人提出了一个很好的观点。我猜有可能存在两种解决方案,一种是A"最小的" B是另一个"最小的"。但在我的情况下,我使用它作为化学方程式平衡器,因此据我所知,这种情况永远不会发生 - 应始终有一个正确的,最小的解决方案。

1 个答案:

答案 0 :(得分:3)

一般来说,你试图在整数上求解方程组,这不是一项简单的任务(check out this paper)。

但是,有些工具可以提供帮助,假设您将工作转换为代表系统的lhsrhs列表。

奇妙的SymPy包是一个很好的起点,它们有set of solvers,允许您指定系统以及外部约束(如正整数)。

请注意,在您的示例中,您有四个未知数和三个等式,这意味着您的解决方案将至少包含一个自由变量,这将为您的整体解决方案增加一些复杂性。