微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

解决单变量不等式python

如何解决解决单变量不等式python

我有一个简单的方程,可以很容易地用手求解,但我需要使用 python 求解。

求解 x:

x < 9
x > 4.5
x < 5.6
x > 4.8

所以我们可以很容易地看到 x=5 是可接受的解决方案之一。但是我将如何使用 python 来求解 x 并返回单个值?谢谢。

解决方法

您可以使用 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。

,

设置最小值和最大值(最初为无)。然后遍历不等式,如果它们的范围发生变化,则更新它们:

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,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]

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。