解2个整数方程组
问题描述
我有一组有三个未知数的两个方程,它有一些条件。x
、y
和z
必须都大于零。我怎么才能解决这个问题?只有一个解决方案,我已经知道了,但我想知道如何正确使用它。
以下是公式:
100 = x + y + z
100 = 10x +2.5y + 0.5z
需要查找x
、y
和z
。它们是正整数。
这是我的代码,但它不起作用:
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只寻找一个解决方案。要找到后续的解决方案,需要添加一个条款来禁止已经找到的解决方案。(在这种情况下,似乎只有一个解决方案。)
相关文章