找到具有numpy / sympy的线性系统的最小二乘整数解

时间:2016-05-08 14:48:58

标签: python numpy scipy sympy integer-programming

我需要用numpy或sympy来解决一个线性不定方程组。

有没有办法限制numpy的linalg.solve / linalg.lstsq方法只返回整数解? (可能不是,但我想应该问)

我研究了Sympy的丢番图解算器,它似乎不适用于解决整个系统

我正在处理的问题是

P1(X) + P2(Y) = TargetPro
F1(X) + F2(Y) = TargetFat
C1(X) + C2(Y) = TargetCarb

在这种情况下,X,Y,Z代表近似的份量,P1 / F1 / C1分别是pro / fat / carb的分布。

基于本文 https://www.math.uwaterloo.ca/~wgilbert/Research/GilbertPathria.pdf

似乎我可以进行行减少以找到该系统的参考(行 - 梯形式),然后将其插入到sympy的求解器中。

有没有更简单的方法呢?

这是一个微不足道的例子:

pro = [4,5]
fat = [1,2]
carb = [3,6]

A = np.array((pro, fat, carb))
b = np.array([22,12,21])

print(np.linalg.lstsq(A, b))

我希望得到一个整数解[3,2],而不是得到 [2.16666667,2.666666667]

两种解决方案都是正确的,但我想将我的解决方案仅限于整数解决方案

0 个答案:

没有答案