将带有(z)的多项式转换为w((1-z)/(1 + z))

时间:2014-04-11 13:01:27

标签: python symbolic-math

我正在编写一个代码,它以“代码”(Coding Theory)作为输入,我已经计算了它的权重枚举器。我想使用MacWilliams Identity找到双重代码的重量枚举器。

我有W(z),代码的权重枚举器,我想使用python将其转换为W((1-z)/(1+z))

1 个答案:

答案 0 :(得分:3)

如果您要以扩展的方式使用多项式,您应该使用适当的计算机代数系统(CAS)。 sympy非常适合像这样的操纵。例如:

from sympy import poly
from sympy.abc import x,z

W1 = poly(x**2 + 3*x)

# Evaluate the polynomial at x=(1-z)/(1+z)
W2 = W1((1-z)/(1+z))

print W1
print W2

>>> Poly(x**2 + 3*x, x, domain='ZZ')
>>> (-2*z**2 - 2*z + 4)/(z**2 + 2*z + 1)

您可以使用sympy.simplify.expand简化任何答案,例如:

import sympy

expr = (4*x**2 - 4*x + 4)*(x**3 + 3*x**2 + 3*x + 1)/(4*(x**2 + 2*x + 1))
print sympy.simplify(sympy.expand(expr))
>>> x**3 + 1