У меня есть рациональное выражение (здесь: билинейное) и хочу, чтобы я симплицировал для сбора коэффициентов . Но как?В sympy, как мне получить коэффициенты рационального выражения?
from sympy import symbols, Wild, pretty_print
a, b, c, d, x, s = symbols("a b c d x s")
def coeffs(expr):
n0 = Wild("n0", exclude=[x])
n1 = Wild("n1", exclude=[x])
d0 = Wild("d0", exclude=[x])
d1 = Wild("d1", exclude=[x])
match = expr.match((n0 + n1*x)/(d0 + d1*x))
n0 = n0.xreplace(match)
n1 = n1.xreplace(match)
d0 = d0.xreplace(match)
d1 = d1.xreplace(match)
return [n0, n1, d0, d1]
if __name__ == '__main__':
pretty_print(coeffs((a + b*x)/(c + d*x)))
pretty_print(coeffs(2 * (a + b*x)/(c + d*x)))
pretty_print(coeffs(s * (a + b*x)/(c + d*x)))
Я попытался это с помощью match
, но она не почти всегда, например, в последней строке (один с символическими предэкспонентами в «с») Я получаю
Traceback (most recent call last):
File "...", line 20, in <module>
pretty_print(coeffs(s * (a + b*x)/(c + d*x)))
File "...", line 11, in coeffs
n0 = n0.xreplace(match)
File "/usr/lib/python3/dist-packages/sympy/core/basic.py", line 1626, in xreplace
return rule.get(self, self)
AttributeError: 'NoneType' object has no attribute 'get'
поэтому матч сделал не работа.