Поиск целочисленных решений (диофантов) для линейных систем с 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]

Оба решения верны, но я хочу связать свои решения только с целочисленными решениями

0 ответов

Другие вопросы по тегам