Поиск целочисленных решений (диофантов) для линейных систем с numpy/sympy
Мне нужно решить систему линейных диофантовых уравнений с numpy или sympy.
Есть ли способ ограничить метод linalg.solve / linalg.lstsq для numpy возвращением только целочисленных решений? (вероятно нет, но подумал, что я должен спросить)
Я посмотрел на диофантовый решатель 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
кажется, что я мог бы провести сокращение строк, чтобы найти эталон этой системы (форма рядного эшелона), а затем подключить его к решателю симпози.
Есть ли более простой способ сделать это?
Вот тривиальный пример:
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.66666667]
Оба решения верны, но я хочу связать свои решения только с целочисленными решениями