Python 如何找到2个';解决';线性方程快吗?

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如果没有整数解或多个解

我需要一种方法来找到满足两个未知数方程的整数。约束条件是两个整数都在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
如果没有整数解或多个解,则输出应为
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(或任何其他线性规划工具)会更容易