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

如何用SymPy的solve()求解带约束的反向均值计算问题

用SymPy求解带约束的均值极值配对问题

问题分析

我们需要找到满足以下条件的XX和YY的极值配对(差值最大):

  • 均值约束:$\frac{XX + YY}{2} = 42$(等价于$XX + YY = 84$)
  • 范围约束:$2 < XX < 104$,$2 < YY < 104$

差值最大的核心逻辑是让其中一个变量尽可能取约束边界值,另一个变量通过均值公式计算,同时保证计算结果落在约束范围内。

推导过程

  1. 若XX取约束下限2,代入均值公式得:$YY = 84 - 2 = 82$,82处于(2,104)范围内,符合要求。
  2. 若XX取约束上限104,代入得:$YY = 84 - 104 = -20$,小于约束下限2,不符合要求。
  3. 同理,YY取下限2时,XX=82,符合要求;YY取上限104时,XX=-20,不符合要求。

因此,有效的极值配对是$(2, 82)$和$(82, 2)$,两者差值均为80,是当前约束下的最大可能值。

SymPy实现代码

我们可以用SymPy结合等式与不等式约束来验证并求解结果:

from sympy import symbols, solve, Eq, And, Ge, Le

# 定义符号变量
xx, yy = symbols('xx yy')

# 均值约束等式
mean_equation = Eq((xx + yy)/2, 42)

# 范围约束条件
range_constraints = And(Ge(xx, 2), Le(xx, 104), Ge(yy, 2), Le(yy, 104))

# 求解均值等式,得到yy关于xx的表达式
yy_from_xx = solve(mean_equation, yy)[0]

# 将yy的表达式代入约束,得到xx的有效取值范围
valid_xx_range = solve(And(range_constraints.subs(yy, yy_from_xx)), xx)
print("XX的有效取值范围:", valid_xx_range)

# 计算XX取边界值时对应的YY
# XX取最小值2
yy_when_xx_min = yy_from_xx.subs(xx, 2)
print(f"XX=2时,YY={yy_when_xx_min},符合约束")

# XX取有效范围的最大值82
yy_when_xx_max = yy_from_xx.subs(xx, 82)
print(f"XX=82时,YY={yy_when_xx_max},符合约束")

# 输出最终极值配对
print("差值最大的配对为:(2, 82) 和 (82, 2)")

代码说明

  1. 用Eq定义均值等式,And+Ge/Le组合表示变量的范围约束。
  2. 通过求解均值等式得到YY与XX的关系,代入约束后推导出XX的有效范围为$2 \leq xx \leq 82$。
  3. 取XX的边界值代入表达式,得到对应的YY值,验证均符合约束条件,即为所求的极值配对。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 01:57:34