找到最简单的解决方案来列出相等蟒蛇



我正在寻找一个模块或函数来编写,在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 是"最小的"。但就我而言,我将其用作化学方程式平衡器,因此据我所知,这永远不会发生 - 总应该有一个正确的,最小的解决方案。

一般来说,你试图求解整数上的方程组,这不是一个简单的任务(看看这篇论文)。

但是,有一些工具可以提供帮助,假设您投入了转换lhs的工作,rhs列表转换为代表您的系统的矩阵。

梦幻般的SymPy包是一个很好的起点,它们有一组求解器,允许您指定系统以及外部约束(例如正整数)。

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

最新更新