Sympy:获取表达式中泛型函数的系数

问题描述 投票:0回答:1

我有方程 (1),它与 x、p、q、r 的 3 个函数线性相关。 我有方程 (2),它与 x、s、q、r 的其他 3 个函数线性相关。 我想从(1) r 中得到p,q 的形式,然后将r 代入等式中。 (2)、得到s,p,q之间的关系。 这就是我在

sympy
中所做的。

p = sym.Function('p', real=True)
q = sym.Function('q', real=True)
r = sym.Function('r', real=True)
a1, a2, a3 = sym.symbols('a1, a2, a3', real=True, positive=True)

# 1. Solve for r in terms of p, q, from Eqn. (1)
# (2*a2+1)*(a1-1)*px = (2*a2+1)*B*qx + (2*a2+1)*B*(a3-1)*rx
px = p(x)
qx = q(x)
rx = r(x)
expr_p_qr = (2*a2+1)*B*qx + (2*a2+1)*B*(a3-1)*rx
r_sol = sym.simplify(sym.solve((2*a2+1)*(a1-1)*px - expr_p_qr, rx, dict=True))
r1 = r_sol[0][rx]
print('r(x) =', r1)

# 2. Substitute r in Eqn. (2)
# sx + qx - rx = 0
s = sym.Function('s', real=True)
sx = s(x)
expr_sqr = sx + qx - rx
expr_sqrb = sym.simplify(expr_sqr.subs([(rx, r1)]))
print('expr_sqr:', expr_sqrb, '= 0')

我明白了

r(x) = (-B*q(x) + a1*p(x) - p(x))/(B*(a3 - 1))
expr_sqr: (B*(a3 - 1)*(q(x) + s(x)) + B*q(x) - a1*p(x) + p(x))/(B*(a3 - 1)) = 0

现在我想得到 (s,p,q)(x) 的简化系数。 我无法在整个表情上做到这一点。

此外,我尝试通过提取系数来“手动”完成此操作。 我也失败了,

cs = expr_sqrb.coeff(sx)
cp = expr_sqrb.coeff(px)
cq = expr_sqrb.coeff(qx)
print(cs, cp, cq)

这给出了

0 0 0

我该如何解决这个问题?

相关

  1. SymPy:如何收集多变量术语?
  2. 在 sympy 中分离多元多项式的一个系数的最佳方法
python sympy
1个回答
0
投票

如何提取 sympy 中的所有系数是一个相关的问题,与这个问题有一些重叠,尽管它不完全相同。 证明: 投票最多的答案(包含已接受的答案)在这种情况下不起作用,错误:

PolynomialError: multivariate polynomials not supported

一个投票较少的答案,涵盖了多元多项式的更一般情况,在这里效果很好。

© www.soinside.com 2019 - 2024. All rights reserved.