извлечение коэффициента `sqrt (s)` - PullRequest
0 голосов
/ 13 апреля 2019

Я начинаю с выражения x*(A*x*x + B*x + C*x), а после замены x -> r + sqrt(s) я хочу собрать термины, чтобы они имели вид a + sqrt(s)*b, где a не имеет sqrt(s) терминов.Затем я хочу извлечь выражения a и b.

. Явно хочу, чтобы sympy уменьшил s**(3/2) до s*sqrt(s), чтобы он стал частью выражения b.

Я пробовал что-то в этом роде.Я могу извлечь коэффициент sqrt(s), но он не включает термин s**3/2:

In [1]: import sympy as sp

In [2]: r, A, B, C, a, b, c, x = sp.symbols("r A B C a b c x")

In [3]: s = sp.Symbol("s", positive=True)

In [4]: f1 = x*(A*x*x + B*x + C)

In [5]:  f2 = f1.subs(x, r + sp.sqrt(s)).expand()

In [6]: f2
Out[6]: A*r**3 + 3*A*r**2*sqrt(s) + 3*A*r*s + A*s**(3/2) + B*r**2 + 2*B*r*sqrt(s) + B*s + C*r + C*sqrt(s)

In [7]: f2.coeff(sp.sqrt(s))
Out[7]: 3*A*r**2 + 2*B*r + C

Обновление: я обнаружил, что могу получить нужный ответ, рассматривая выражение как многочлен вдругую переменную Z и затем делать замены Z*Z -> s и Z*Z*Z -> Z*s, например:

r, s, A, B, C, a, b, c = sp.symbols("r s A B C a b c")
Z = sp.symbols("Z")
f1 = x*(A*x*x + B*x + C)
f2 = f1.subs(x, r+Z).expand().subs(Z**3, Z*s).subs(Z**2, s)

Тогда f2.coeff(Z) вернет то, что я хочу.Я думаю, что мне еще хотелось бы знать, как я могу объединить две замены Z*Z*Z -> Z*s и Z*Z -> s в одну?Например, это было бы удобно, если бы многочлен имел более высокую степень, и мне нужно было уменьшить более высокие степени на Z.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...