解2个整数方程组

2022-04-06 00:00:00 python sympy

问题描述

我有一组有三个未知数的两个方程,它有一些条件。xyz必须都大于零。我怎么才能解决这个问题?只有一个解决方案,我已经知道了,但我想知道如何正确使用它。

以下是公式:

  • 100 = x + y + z
  • 100 = 10x +2.5y + 0.5z

需要查找xyz。它们是正整数。

这是我的代码,但它不起作用:

from sympy import symbols, Eq, solve
x, y, z = symbols('x y z')
eq1 = Eq(x + y + z, 100)
eq2 = Eq(x*10 + y*2.5 + z*0.5, 100)
#eq3 = x, y, z must all be larger than zero and integers
solution = solve((eq1,eq2), (x,y,z))
solution

解决方案

此类问题可以通过Z3py,SAT/SMT求解器:

解决
from z3 import Ints, solve

x, y, z = Ints('x y z')
sol = solve(x + y + z == 100, x * 100 + y * 25 + z * 5 == 1000, x > 0, y > 0, z > 0)
print(sol)

输出:[z = 90, y = 6, x = 4]

请注意,通常情况下,Z3只寻找一个解决方案。要找到后续的解决方案,需要添加一个条款来禁止已经找到的解决方案。(在这种情况下,似乎只有一个解决方案。)

相关文章