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

SymPy中嵌套平方根的格式化输出问题

调整SymPy中嵌套平方根的输出格式(内层根号移至右侧)

问题背景

使用SymPy求解方程 $L_3(x) = \left(\left(x^2 - 2\right)^2 - 2\right)^2 - 2 = 0$ 的正实数解时,SymPy默认输出的嵌套平方根格式会将内层根号放在常数项左侧(如sqrt(sqrt(2 - sqrt(2)) + 2)),但希望调整为常数项在前、内层根号在后的形式(如sqrt(2 + sqrt(2 - sqrt(2))))。

原因分析

SymPy会将表达式转换为标准规范形式,默认按表达式复杂度排序,把结构更复杂的嵌套根号项放在常数项之前,因此出现了不符合预期的格式。本质上两种形式等价(加法交换律),仅需调整加法项的顺序即可。

解决方案

定义一个递归处理函数,遍历表达式结构,针对sqrt内层的加法项,将常数2移至前面,嵌套根号项移至后面。

修改后的完整代码

import sympy as sp

# 定义符号变量
x = sp.symbols('x')

# 定义方程
f = ((x**2 - 2)**2 - 2)**2 - 2

# 求解方程
solutions = sp.solve(f, x)

# 筛选正实数解
positive_solutions = [sol for sol in solutions if sol.is_real and sol > 0]

# 递归调整嵌套平方根的格式
def rearrange_sqrt(expr):
    if isinstance(expr, sp.sqrt):
        inner = rearrange_sqrt(expr.args[0])
        # 处理内层的加法项
        if isinstance(inner, sp.Add):
            terms = list(inner.args)
            constant = None
            sqrt_term = None
            # 分离常数项2和根号项
            for term in terms:
                if term.is_number and term == 2:
                    constant = term
                elif isinstance(term, sp.sqrt):
                    sqrt_term = rearrange_sqrt(term)
            # 重新构造加法,常数在前
            if constant and sqrt_term:
                return sp.sqrt(constant + sqrt_term)
            return sp.sqrt(inner)
        return sp.sqrt(inner)
    # 递归处理其他嵌套表达式
    elif isinstance(expr, sp.Add):
        return sp.Add(*[rearrange_sqrt(term) for term in expr.args])
    elif isinstance(expr, sp.Mul):
        return sp.Mul(*[rearrange_sqrt(term) for term in expr.args])
    else:
        return expr

# 打印调整后的结果
print("调整格式后的正实数解:")
for sol in positive_solutions:
    print(rearrange_sqrt(sol))

输出结果

sqrt(2 - sqrt(2 - sqrt(2)))
sqrt(2 - sqrt(sqrt(2) + 2))
sqrt(2 + sqrt(2 - sqrt(2)))
sqrt(2 + sqrt(sqrt(2) + 2))

注意事项

  • 上述函数是针对当前问题的特定场景(仅涉及常数2与嵌套根号的加法),若需处理其他常数或更复杂的表达式,可修改constant的判断条件。
  • 调整后的表达式与原表达式数学上完全等价,仅改变了加法项的显示顺序。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 21:02:42