求解单变量不等式 python
Solving for single variable inequalities python
我有一个简单的方程式,可以很容易地用手求解,但我需要用 python 来求解。
求解 x:
x < 9
x > 4.5
x < 5.6
x > 4.8
所以我们很容易看出 x=5 是可接受的解决方案之一。但是我将如何着手使用 python 来解决 x 和 return 一个单一的价值?谢谢。
您可以使用 SciPy linprog 获得通用解决方案。
他们也在底部给出了一个例子。这是 Python 代码:
c = [1]
A = [[1], [-1], [1], [-1]]
b = [9, -4.5, 5.6, -4.8]
x0_bounds = (-4.5, 9)
from scipy.optimize import linprog
res = linprog(c, A_ub=A, b_ub=b, bounds=[x0_bounds])
print(res)
打印 4.8 作为最小解决方案,在您的情况下 > 4.8。
设置最小值和最大值(最初为 None)。然后遍历不等式,如果它们的范围发生变化则更新它们:
min_val = None
max_val = None
ineqs = (('<', 9), ('>', 4.5), ('<', 5.6), ('>', 4.8))
for i in ineqs:
if i[0] == '<':
# Smaller than:
if max_val is None:
max_val = i[1]
else:
max_val = min(max_val, i[1])
elif i[0] == '>':
# Greater than
if min_val is None:
min_val = i[1]
else:
min_val = max(min_val, i[1])
print(f'The value is between {min_val} and {max_val}')
根据您在答案中需要的小数精度,您可以在下面的 arange
中增加或减少步长。这是使用列表理解解决问题的 pythonic 方法:
示例:
import numpy as np
nums = np.arange(0, 6, 0.1)
answers = [x for x in nums if x < 9 and x > 4.5 and x < 5.6 and x > 4.8]
print(answers)
输出:
[4.800000000000001, 4.9, 5.0, 5.1000000000000005, 5.2, 5.300000000000001, 5.4, 5.5]
如果您只关心整数答案,请使用整数步长:
import numpy as np
nums = np.arange(0, 6, 1)
answers = [x for x in nums if x < 9 and x > 4.5 and x < 5.6 and x > 4.8]
print(answers)
输出:
[5]
我有一个简单的方程式,可以很容易地用手求解,但我需要用 python 来求解。
求解 x:
x < 9
x > 4.5
x < 5.6
x > 4.8
所以我们很容易看出 x=5 是可接受的解决方案之一。但是我将如何着手使用 python 来解决 x 和 return 一个单一的价值?谢谢。
您可以使用 SciPy linprog 获得通用解决方案。
他们也在底部给出了一个例子。这是 Python 代码:
c = [1]
A = [[1], [-1], [1], [-1]]
b = [9, -4.5, 5.6, -4.8]
x0_bounds = (-4.5, 9)
from scipy.optimize import linprog
res = linprog(c, A_ub=A, b_ub=b, bounds=[x0_bounds])
print(res)
打印 4.8 作为最小解决方案,在您的情况下 > 4.8。
设置最小值和最大值(最初为 None)。然后遍历不等式,如果它们的范围发生变化则更新它们:
min_val = None
max_val = None
ineqs = (('<', 9), ('>', 4.5), ('<', 5.6), ('>', 4.8))
for i in ineqs:
if i[0] == '<':
# Smaller than:
if max_val is None:
max_val = i[1]
else:
max_val = min(max_val, i[1])
elif i[0] == '>':
# Greater than
if min_val is None:
min_val = i[1]
else:
min_val = max(min_val, i[1])
print(f'The value is between {min_val} and {max_val}')
根据您在答案中需要的小数精度,您可以在下面的 arange
中增加或减少步长。这是使用列表理解解决问题的 pythonic 方法:
示例:
import numpy as np
nums = np.arange(0, 6, 0.1)
answers = [x for x in nums if x < 9 and x > 4.5 and x < 5.6 and x > 4.8]
print(answers)
输出:
[4.800000000000001, 4.9, 5.0, 5.1000000000000005, 5.2, 5.300000000000001, 5.4, 5.5]
如果您只关心整数答案,请使用整数步长:
import numpy as np
nums = np.arange(0, 6, 1)
answers = [x for x in nums if x < 9 and x > 4.5 and x < 5.6 and x > 4.8]
print(answers)
输出:
[5]