Python 如何找到2个';解决';线性方程快吗?
我需要一种方法来找到满足两个未知数方程的整数。约束条件是两个整数都在1到10000之间。例如:Python 如何找到2个';解决';线性方程快吗?,python,iteration,equation,Python,Iteration,Equation,我需要一种方法来找到满足两个未知数方程的整数。约束条件是两个整数都在1到10000之间。例如: value = 21 for x in range(1, 10001): for y in range(1, 10001): if (3 * x) + (5 * y) == value: x_val = x y_val = y break 在这种情况下,我将得到x_val=2和y_val=3如果没有整数解或多个解
value = 21
for x in range(1, 10001):
for y in range(1, 10001):
if (3 * x) + (5 * y) == value:
x_val = x
y_val = y
break
在这种情况下,我将得到x_val=2
和y_val=3
如果没有整数解或多个解,则输出应为0
我想要一个快速的方法来解决这个“方程”,而不是重复迭代。这在python中可能吗?谢谢。这里的关键是要知道等式中只有正的输入。这样,您可以缩短需要检查的数字量。例如,如果值为3000,则只需检查1到1000,而不需要检查1到10000。您需要将方程中的变量值除以方程中的最小公分母,并将其用作上限,以减少迭代方法的负担。这里的关键是要知道方程中只有正输入。这样,您可以缩短需要检查的数字量。例如,如果值为3000,则只需检查1到1000,而不需要检查1到10000。您需要将方程中的变量值除以方程中的最小公分母,并将其用作上限,以减少迭代方法的负担。许多解决方案中,以下是最简单的:
for x in xrange(1, 10001):
y = float(value - (x * x_val)) / y_val
if int(y) == y and 10000 >= y >= 1:
print ("x={}, y={}".format(int(x), int(y)))
例如:
>>> x_val = 2
>>> y_val = 3
>>> value = 21
>>> for x in xrange(1, 10001):
... y = float(value - (x * x_val)) / y_val
... if int(y) == y and 10000 >= y >= 1:
... print ("x={}, y={}".format(int(x), int(y)))
...
x=3, y=5
x=6, y=3
x=9, y=1
一个优化的机会出现了,因为我们不希望出现负值
for x in xrange(1, 10001):
y = float(value - (x * x_val)) / y_val
if x * x_val > value:
break
if int(y) == y and 10000 >= y >= 1:
print ("x={}, y={}".format(int(x), int(y)))
许多解决方案中,以下是最简单的:
for x in xrange(1, 10001):
y = float(value - (x * x_val)) / y_val
if int(y) == y and 10000 >= y >= 1:
print ("x={}, y={}".format(int(x), int(y)))
例如:
>>> x_val = 2
>>> y_val = 3
>>> value = 21
>>> for x in xrange(1, 10001):
... y = float(value - (x * x_val)) / y_val
... if int(y) == y and 10000 >= y >= 1:
... print ("x={}, y={}".format(int(x), int(y)))
...
x=3, y=5
x=6, y=3
x=9, y=1
一个优化的机会出现了,因为我们不希望出现负值
for x in xrange(1, 10001):
y = float(value - (x * x_val)) / y_val
if x * x_val > value:
break
if int(y) == y and 10000 >= y >= 1:
print ("x={}, y={}".format(int(x), int(y)))
什么样的方程?@Blender这是一个线性方程。只有一个方程,你不可能不迭代就求解它。看看scipy.linalg包。。。它有一个solverPyomo(或任何其他线性编程工具)会更容易什么样的方程?@Blender它是一个线性方程。只有一个方程,你不能不迭代求解它。看看scipy.linalg包。。。它有一个solverPyomo(或任何其他线性规划工具)会更容易