寻找列表相等性的最简单解决方案 python

Finding simplest solution to list equality 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为例。

有什么想法吗?谢谢!

编辑: 评论中有人提出了一个很好的观点。我想有可能有两种解决方案,一种是A是"smallest",另一种是B是"smallest"。但就我而言,我将其用作化学方程式平衡器,据我所知,这永远不会发生——应该总是有一个正确的、最小的解决方案。

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

然而,有一些工具可以提供帮助,假设您投入工作将 lhsrhs 列表转换为表示您的系统的矩阵。

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

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