Sympy自动改写方程问题:如何保留期望的表达式形式?
解决SymPy表达式自动改写问题
方法1:用UnevaluatedExpr锁定原始结构
如果要强制SymPy不自动化简特定部分,可使用UnevaluatedExpr包裹目标项,让表达式保持你定义的原始结构,直到主动触发化简操作。
示例代码:
import sympy as smp Pp, T = smp.symbols('Pp T') # 用UnevaluatedExpr包裹不想被自动改写的部分 A = smp.UnevaluatedExpr(300 + 25*T + 0.05*T**3) ET = Pp / smp.sqrt(0.9 + Pp**2 / (A**2)) # 打印保留原始结构的表达式 print(ET) # 后续需要化简时,调用.doit() # print(ET.doit())
方法2:自定义输出格式
如果仅需输出时显示为预期格式,不改变内部表达式结构,可手动构造输出内容,或借助latex()函数调整显示样式:
import sympy as smp from sympy import latex Pp, T = smp.symbols('Pp T') A = 300 + 25*T + 0.05*T**3 ET = Pp / smp.sqrt(0.9 + Pp**2 / (A**2)) # 手动构造符合需求的LaTeX格式输出 custom_latex = f"\\frac{{{latex(Pp)}}}{{\\sqrt{{0.9 + \\frac{{{latex(Pp)}^2}}}{{{latex(A)}^2}}}}}" print(custom_latex) # 若在Jupyter环境,可直接渲染成公式: # from IPython.display import display, Math # display(Math(custom_latex))
方法3:用together引导化简方向
SymPy的自动化简可能偏离预期,使用smp.together()可以将分母内的分式合并为有理式,维持你想要的整体结构:
import sympy as smp Pp, T = smp.symbols('Pp T') A = 300 + 25*T + 0.05*T**3 ET = Pp / smp.sqrt(smp.together(0.9 + Pp**2 / (A**2))) print(ET)
内容的提问来源于stack exchange,提问作者Tomas
相关产品推荐
相关产品推荐

