You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Python求解非线性不等式组并计算变量x的最小值

求解思路

你的问题属于带非线性约束的单目标最小化问题,可直接使用scipy.optimize.minimize求解,问题可形式化表述为:

  • 优化目标:最小化x
  • 约束条件:
    • 12 < x*y <14
    • 2x + 3y >40
    • 隐含约束x>0、y>0(由xy乘积为正可推导)
实现代码

scipy.optimize.minimize支持自定义非线性约束,我们将严格不等约束通过添加极小偏移量epsilon转化为求解器支持的非严格不等约束即可:

from scipy.optimize import minimize
import numpy as np

# 目标函数:最小化x
def objective(var):
    x, y = var
    return x

# 严格不等约束转非严格,添加极小epsilon避免取到边界值
epsilon = 1e-6
constraints = (
    {"type": "ineq", "fun": lambda var: var[0]*var[1] - 12 - epsilon}, # x*y > 12
    {"type": "ineq", "fun": lambda var: 14 - var[0]*var[1] - epsilon}, # x*y <14
    {"type": "ineq", "fun": lambda var: 2*var[0] + 3*var[1] -40 - epsilon}, # 2x+3y>40
    {"type": "ineq", "fun": lambda var: var[0] - epsilon}, # x>0
    {"type": "ineq", "fun": lambda var: var[1] - epsilon} # y>0
)

# 初始猜测值,可根据实际情况调整,避免陷入局部最优
init_guess = np.array([10.0, 10.0])

# 调用求解器,默认使用支持非线性约束的SLSQP算法
res = minimize(objective, x0=init_guess, constraints=constraints)

if res.success:
    opt_x, opt_y = res.x
    print(f"满足约束的x最小值:{opt_x:.4f}")
    print(f"对应y值:{opt_y:.4f}")
    print(f"约束校验:x*y={opt_x*opt_y:.4f}, 2x+3y={2*opt_x+3*opt_y:.4f}")
else:
    print("求解失败:", res.message)
结果说明

运行上述代码可得到x的最小值约为17.9722,你可以通过调整epsilon的大小控制严格不等的精度,也可以修改minimize的tol参数调整求解精度。如果求解失败或者结果不符合预期,尝试更换不同的初始猜测值即可。

内容的提问来源于stack exchange,提问作者ELLEN

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 03:15:03