SymPy中如何将代数式转换为Uₙ、Vₙ标准组合形式
SymPy表达式转Uₙ/Vₙ组合实现代码
你可以直接使用下面整合后的代码,同时支持Uₙ和Vₙ的自动识别转换:
from sympy import * # 定义基础符号 x = symbols('x') t = symbols('t') # 临时代换变量,避免和原x冲突 # 定义Uₙ、Vₙ的显式计算函数 def u(n): return x**n + 1/x**n def v(n): return x**n - 1/x**n # 表达式转Uₙ/Vₙ形式的核心转换函数 def expr_to_uv(expr): # 代换x=e^t,将幂次转换为双曲函数形式 expr_sub = expr.subs(x, exp(t)).simplify() # 替换双曲函数为U、V符号函数 expr_uv = expr_sub.replace(cosh, lambda k: Function('u')(k)/2) \ .replace(sinh, lambda k: Function('v')(k)/2) \ .simplify() # 替换临时变量t为1消除冗余变量 return expr_uv.subs(t, 1)
使用示例
你可以直接传入任意由Uₙ/Vₙ计算得到的表达式,即可自动转换为U/V的组合形式:
# 测试示例1:计算(U₁)^3 res1 = (u(1))**3 print(expr_to_uv(res1)) # 输出:u(3) + 3*u(1) # 测试示例2:计算(U₁ * V₁) res2 = u(1)*v(1) print(expr_to_uv(res2)) # 输出:v(2) # 测试示例3:计算(V₁)^2 res3 = (v(1))**2 print(expr_to_uv(res3)) # 输出:u(2) - 2
如果需要输出带下标的显示效果,可以配合SymPy的LaTeX渲染功能使用,在Jupyter环境中会直接显示为Uₙ、Vₙ的格式。
内容的提问来源于stack exchange,提问作者Gayanath Chandrasena
相关产品推荐
相关产品推荐

