我正在寻找一个模块或函数来编写,它在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是另一个"最小的"。但在我的情况下,我使用它作为化学方程式平衡器,因此据我所知,这种情况永远不会发生 - 应始终有一个正确的,最小的解决方案。
答案 0 :(得分:3)
一般来说,你试图在整数上求解方程组,这不是一项简单的任务(check out this paper)。
但是,有些工具可以提供帮助,假设您将工作转换为代表系统的lhs
,rhs
列表。
奇妙的SymPy
包是一个很好的起点,它们有set of solvers,允许您指定系统以及外部约束(如正整数)。
请注意,在您的示例中,您有四个未知数和三个等式,这意味着您的解决方案将至少包含一个自由变量,这将为您的整体解决方案增加一些复杂性。