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

Sympy.solve处理不等式无法分离目标变量b的解决方法

使用SymPy将不等式转换为指定变量形式的正确方法

问题场景

需要将不等式 a >= ((b-c)/2)*tan(d) 转换为以b为主体的形式,当前代码输出未达到预期:

用户原代码:

import numpy as np
import math
import sympy as sy
a = sy.symbols('a')
b = sy.symbols('b')
c = sy.symbols('c')
d = sy.symbols('d')

eq = sy.Ge(a, ((b-c)/2)*sy.tan(d))
result = sy.solve(eq, 'b')
print(result)

运行输出:

-b*tan(d)/2 >= -a - c*tan(d)/2

期望输出:

b >= (2*a + c*tan(d))/tan(d)

解决方法

SymPy的solve函数处理不等式时仅返回初步解,不会自动完成最终的移项化简。可以通过以下两种方式实现需求:

方法1:手动化简solve的结果

对solve返回的不等式进行移项和符号处理(注意乘以负数时不等号方向反转):

import sympy as sy

a, b, c, d = sy.symbols('a b c d')

# 定义不等式
ineq = sy.Ge(a, ((b - c)/2)*sy.tan(d))
# 求解得到初步结果
raw_result = sy.solve(ineq, b)[0]

# 对初步不等式进行变形:两边乘以-2,反转不等号方向
processed_ineq = sy.Ge(-2 * raw_result.rhs, -2 * raw_result.lhs)
# 化简得到最终形式
final_result = sy.simplify(processed_ineq)

print(final_result)

方法2:使用reduce_inequalities直接求解

reduce_inequalities会自动完成更彻底的化简,直接得到变量单独在一侧的结果:

import sympy as sy

a, b, c, d = sy.symbols('a b c d')

ineq = sy.Ge(a, ((b - c)/2)*sy.tan(d))
# 直接求解并整理为以b为主体的形式
result = sy.reduce_inequalities(ineq, b)

print(result)

两种方法运行后都会输出预期的:b >= (2*a + c*tan(d))/tan(d)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 18:42:37