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

Python求解带约束代数问题:找出所有符合条件的数对

解决方法:生成符合条件的数对

首先明确数学关系:数对(a, b)满足平均值为54,即(a + b)/2 = 54,等价于a + b = 108。结合约束条件2 ≤ a ≤75、2 ≤ b ≤75,可推导出a的有效范围:

  • 由b = 108 - a代入b的约束:2 ≤ 108 - a ≤75
  • 解不等式得33 ≤ a ≤106,再结合a ≤75,最终a的范围是33 ≤ a ≤75,对应的b = 108 - a会自动满足2 ≤ b ≤75(当a=33时b=75,a=75时b=33)。

以下是两种实现方式:

方法1:直接生成离散数对(无需SymPy)

若要生成所有保留6位小数的数对,直接遍历a在[33,75]区间内、步长为0.000001的数值,计算对应b并格式化即可:

step = 1e-6  # 对应6位小数精度
start = 33.0
end = 75.0

pairs = []
a = start
# 加1e-10避免浮点精度问题导致漏掉end值
while a <= end + 1e-10:
    b = 108.0 - a
    # 保留6位小数
    a_rounded = round(a, 6)
    b_rounded = round(b, 6)
    pairs.append((a_rounded, b_rounded))
    a += step

# 验证前5组结果
print(pairs[:5])

方法2:用SymPy处理代数约束

如果需要用SymPy推导约束范围,再生成数对:

from sympy import symbols, Eq, solve, Interval

a, b = symbols('a b')
# 定义平均值方程
eq = Eq((a + b)/2, 54)
# 解出b关于a的表达式
b_expr = solve(eq, b)[0]  # 得到b = 108 - a

# 定义约束条件
a_constraint = (a >= 2) & (a <= 75)
b_constraint = (b_expr >= 2) & (b_expr <= 75)

# 合并约束,解出a的有效区间
combined_constraint = a_constraint & b_constraint
a_valid_range = solve(combined_constraint, a)  # 结果为33 ≤ a ≤75

# 基于区间生成离散数对
start = float(a_valid_range.left)
end = float(a_valid_range.right)
step = 1e-6
pairs = []
current_a = start
while current_a <= end + 1e-10:
    current_b = 108.0 - current_a
    pairs.append((round(current_a, 6), round(current_b, 6)))
    current_a += step

注意:满足条件的数对在连续区间内是无限多的,上述代码生成的是离散的、保留6位小数的所有可能数对。若仅需明确数对的形式,结论为:所有数对为(a, 108 - a),其中a属于[33,75]且最多保留6位小数。

内容的提问来源于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 10:17:15