Sympy求解正实数域指数方程未自动化简(b^x)^(1/x)为b的问题
Sympy指数方程求解结果未化简的解决方案
问题原因
你在定义符号时使用了大写的Positive参数,属于拼写错误,Sympy无法识别该参数,因此不会默认变量为正实数。出于化简严谨性考虑,Sympy不会对未明确属性的变量执行(c^m)^n = c^{m*n}类的幂运算化简(该化简仅在底数为正、指数为实数时恒成立)。
解决方法
方法1:修正符号定义后化简
将符号定义的Positive改为Sympy可识别的小写positive参数,再对求解结果调用powsimp幂化简函数即可得到预期结果:
from sympy import symbols, solve, powsimp # 正确设置正实数属性 a, b, x = symbols('a b x', positive=True, real=True) res = solve(a**x - b**x, a) # 执行幂化简 simplified_res = [powsimp(item) for item in res] print(simplified_res)
运行输出:
[b]
方法2:强制化简
如果不想修改符号定义,也可以给powsimp传入force=True参数,强制Sympy按照底数为正的规则执行化简:
from sympy import symbols, solve, powsimp a, b, x = symbols('a b x') res = solve(a**x - b**x, a) # 强制执行幂化简 simplified_res = [powsimp(item, force=True) for item in res] print(simplified_res)
运行输出同样为[b]。
内容的提问来源于stack exchange,提问作者user191919
相关产品推荐
相关产品推荐

