我有方程 (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
我该如何解决这个问题?
相关:
如何提取 sympy 中的所有系数是一个相关的问题,与这个问题有一些重叠,尽管它不完全相同。 证明: 投票最多的答案(包含已接受的答案)在这种情况下不起作用,错误:
PolynomialError: multivariate polynomials not supported
。
一个投票较少的答案,涵盖了多元多项式的更一般情况,在这里效果很好。