Симпийное упрощение полинома с комплексными коэффициентами - PullRequest
0 голосов
/ 23 июня 2018

Работая над задачей с полиномами с комплексными коэффициентами, я застрял в следующей задаче:

Допустим, у меня есть полином P = λ ^ 16 * z + λ ^ 15 * z ^ 2, гдеλ сложен.Я хочу упростить следующее ограничение: λ ^ 14 = 1. Итак, подключившись, мы должны получить:

P = λ ^ 2 * z + λ * z ^ 2.

Я пробовал P.subs (λ ** 14,1), но он не работает, потому что он предполагает, что λ является реальным, я думаю.Таким образом, он возвращает исходное выражение: P = λ ^ 16 * z + λ ^ 15 * z ^ 2, без учета λ ^ 14 ...

Любая подсказка будет принята с благодарностью.Спасибо!

Ответы [ 3 ]

0 голосов
/ 01 июля 2018

Если вы предполагаете, что λ является действительным, это работает:

lambda_, z = sym.symbols('lambda z', real=True)
print((lambda_**16*z + lambda_**15*z**2).subs(lambda_**14, 1))
z**2 + z

Редактировать:
Это на самом деле не должно работать, потому что λ может быть отрицательным.То, что вы хотите, верно только в том случае, если λ - положительное число.

0 голосов
/ 01 июля 2018

Решение

Я не знаю простого способа добиться того, чего вы хотите в sympy, но вы могли бы заменить каждое значение явно:

p = (λ**16)*z + (λ**15)*(z**2)

p = p.subs(λ**16, λ**2).subs(λ**15, λ**1)
>>> z**2*λ + z*λ**2

Почему subs не работает здесь

subs подставляет только выражение x**m в x**n, когда m имеет коэффициент n, например ::

p.subs(λ, 1)
>>> z**2 + z

p.subs(λ**2, 1)
>>> z**2*λ**15 + z

p.subs(λ**3, 1)
>>> z**2 + z*λ**16

p.subs(λ**6, 1)
>>> z**2*λ**15 + z*λ**16

и т.д.

0 голосов
/ 24 июня 2018

Это работает:

P.simplify().subs(λ**15,1).expand()

...