python - sympy中函数的模块化逆

标签 python sympy

对于某个项目,我使用 sympy 来计算对另一个函数求模的表达式。这些函数都有二进制系数(所以 x^2 + 2x = x^2$)。他们的应用在 Galois Fields 中。

我的问题是,当将 sympy rem 函数与反函数(例如 x**-1)一起使用时,只是返回数字的倒数(所以在这种情况下,答案是 1/x) 而不是返回模逆。

由于下面的评论,这里有一些进一步的澄清。我正在做的事情的一个过于简化的版本是:

from sympy import *
x = symbols('x')
f = raw_input() #here f = '(x^3 + x)*(x + 1)^2 + (x^2 + x)/(x^3) + (x)^-1'
expand(f)
>>> x**5 + 2*x**4 + 2*x**3 + 2*x**2 + x + 2/x + x**(-2)

#this is what I'm currently doing
rem(expand('(x^3 + x)*(x + 1)^2 + (x^2 + x)/(x^3) + (x)^-1'), 'x^2')
>>> x + 2/x + x**(-2)
#not the answer I am looking for, as I want all the degrees to be positive

此余数函数不充当模函数(即不保留 x 的正幂),我正试图找到它的替代品。我想避免通过搜索反向 mod 的表达式进行解析,而只是让函数自己处理它。我可能缺少一个参数,或者只是在看一个完全不同的函数。

PS:我知道在 sympy 中存在计算一个表达式 mod 另一个表达式的能力,同时将逆作为模逆处理,因为我在测试 sympy 足以满足我们的目的时这样做了,但没有保存代码那么。

最佳答案

首先,最好立即使用 sympify 将您的字符串转换为 SymPy 表达式。将字符串传递给 SymPy 函数是不好的做法。

当您使用像 x + 1/x 这样的多项式时,SymPy 将其视为 x1/x 中的多项式。

In [73]: Poly(x + 1/x)
Out[73]: Poly(x + (1/x), x, 1/x, domain='ZZ')

我相信 ratsimpmodprime 可以满足您的需求。您还应该能够传递 domain=GF(2),但似乎有一些错误阻止了它的工作。

关于python - sympy中函数的模块化逆,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36987263/

相关文章:

Python保存一个(稀疏)矩阵,里面有一个变量

python - 如何在 python 中替换数学方程式中的值?

python - 从数据库中获取数据并将其放入 GUI 中的表中

python - 用python编码元组列表?

python - 在 Mountain Lion 操作系统上安装 PyGame

python - 如何用python和sympy解决多元不等式?

python - 可以用 Python 中的上下文管理器全局替换函数吗?

具有偏移量管理的 Python Kafka 消费者

python - 如何转置 sympy 矩阵

python - 如何在 sympy 中对向量求导?