Sympy提取三角函数系数时coeff返回0、as_coefficient返回None如何解决
问题原因
coeff方法需要先将表达式展开为显式的多子项相加结构,未展开的分式结构会导致Sympy无法识别cos项的从属关系,因此返回0as_coefficient仅当整个表达式是「目标项 × 常数」的结构时才会返回对应系数,你的表达式同时包含sin和cos两个独立项,所以返回None
正确提取方法
你可以选择以下任意一种方案实现:
方案1:先展开表达式再调用coeff
import sympy as sy x1 = sy.symbols('x1') A, B = sy.symbols('A,B') L = sy.symbols('L', positive=True) f = (A * sy.sin(sy.pi * x1 / (2 * L)) + B * sy.cos(sy.pi * x1 / (2 * L))) / L ** 2 # 先对表达式做完全展开 f_expanded = f.expand() c1 = f_expanded.coeff(sy.cos(sy.pi * x1 / (2 * L))) display(c1) # 输出 B/L²
方案2:用collect方法按目标项聚合后提取
# 按三角函数项归类合并表达式 collected = sy.collect(f, [sy.sin(sy.pi * x1/(2*L)), sy.cos(sy.pi * x1/(2*L))]) c1 = collected.coeff(sy.cos(sy.pi * x1/(2*L))) display(c1) # 输出 B/L²
方案3:用模式匹配提取
# 定义通配符和匹配模式 a,b = sy.symbols('a b', cls=sy.Wild) pattern = a * sy.sin(sy.pi * x1/(2*L)) + b * sy.cos(sy.pi * x1/(2*L)) match_res = f.expand().match(pattern) c1 = match_res[b] display(c1) # 输出 B/L²
内容的提问来源于stack exchange,提问作者Salil S. Kulkarni
相关产品推荐
相关产品推荐

