python - 如何使用 Sympy 自动简化二值有限域上的表达式?
问题描述
我正在尝试在二值有限域 {0, 1} 上构造多项式,并且我希望它们使用此设置中存在的一些恒等式自动简化。
我尝试了以下方法:
from sympy import *
from sympy.polys.domains.finitefield import FiniteField
x, y, z, t = symbols('x y z t')
k = Poly(x+y * z*z + (x + y) + y + 1, domain=FiniteField(2))
这已经简化为:
Poly(y*z**2 + 1, x, y, z, modulus=2)
但是, z**2 实际上与我要使用的字段中的 z 相同。它似乎确实自动识别出 y + y = 0。如何实现另一个身份 z * z = z(幂等性)?
解决方案
您想要的似乎没有为 poly 实现,但也许您可以模拟效果:
In [54]: normalise = lambda p: Poly(ratsimpmodprime(p, [n**2-n for n in p.free_symbols]), modulus=2)
In [55]: e = x+y * z*z + (x + y) + y + 1
In [56]: normalise(e)
Out[56]: Poly(y*z + 1, x, y, z, modulus=2)
推荐阅读
- javascript - 如何删除传单地图末尾的空白
- php - Google oAuth javascript to PHP - 如何获取刷新和访问令牌
- sortablejs - Sortable.js/Vue 可拖动光标
- kubernetes - 从本地网络连接到内部 Kubernetes 服务
- scala - 基于列值分区后将 Bucketizer 应用于 Spark 数据帧
- typescript - 打字稿通用对象属性常量名称在映射后丢失
- php - Laravel 工厂并选择了一个唯一的 belongsTo 实例
- javascript - JavaScript“If 语句”不返回真值
- php - Laravel Nova:在保存到数据库之前修改值(多次)
- r - xgboost R 返回的目标值