gpt4 book ai didi

python - 收集系数 MPolynomial_libsingular

转载 作者:太空宇宙 更新时间:2023-11-03 18:13:31 25 4
gpt4 key购买 nike

我想获得翻译后的 GF(2^n)[X0, ..., X{N-1}] 中多项式 p 的符号系数到 GF(2)[t]

例如,n = 2p = X0*X1 = (x_00+x_01*t)*(x_10+x_11*t) = (x_00*x_10+x_01*x_11 ) + (x_01*x_11+x_01*x_10 + x_00*x_11)*t,该方法应给出 [(x_00*x_10 + x_01*x_11), (x_01*x_11 + x_01*x_10 + x_00 *x_11)]

在下面的代码中,我的问题是当我想要收集t的系数时。如何以有效的方式收集这些系数?

sage: q = 2
sage: N = 2
sage: k.<t> = GF(2^q)
sage: Xi = []
sage: xij = []
sage: for i in range(N):
....: Xi.append(var('X' + str(i)))
....: for j in range(q):
....: xij.append(var('x' + str(i) + '' + str(j)))
sage: Xi.append(t)
sage: P = PolynomialRing(k, names=Xi)
sage: R = PolynomialRing(k, names=xij)
sage: S = PolynomialRing(R, 't')
sage: p = P.random_element(degree=2)
sage: subsvar = [sum((t^i*R.gen(i+q*j) for i in range(q))) for j in range(N)]
sage: subsvar.append(t)
sage: p = p(subsvar)
sage: p
(t + 1)*x00*x10 + x01*x10 + x00*x11 + (t)*x01*x11 + (t)*x10 + (t + 1)*x11 + (t + 1)

最佳答案

这是一种方法。作为引用,我使用的是 Sage 6.3。

设置,用下划线区分例如,对于较大的 q 和 nvar,x1_11x11_1

q = 2
nvars = 2
k.<t> = GF(2^q)
Xi = []
xij = []
for i in range(nvars):
Xi.append(var('X'+str(i)))
for j in range(q):
xij.append(var('x'+str(i)+'_'+str(j)))
P = PolynomialRing(k,names=Xi)
R = PolynomialRing(k,names=xij)
S = PolynomialRing(R,'t')
subsvar = [sum((t^i*R.gen(i+q*j) for i in range(q))) for j in range(nvars)]

将环P中的多项式变换为多项式在 t 中,系数在 R 中:

p = P('X0*X1')
pp = sum(b*S(a.polynomial()) for (a,b) in p(subsvar))
pp

输出自然地以t的幂形式收集。

(x0_1*x1_0 + x0_0*x1_1 + x0_1*x1_1)*t + x0_0*x1_0 + x0_1*x1_1

示例 X0*X1 的计时:

sage: timeit('pp = sum(b*S(a.polynomial()) for (a,b) in p(subsvar))')
625 loops, best of 3: 469 µs per loop

关于python - 收集系数 MPolynomial_libsingular,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25428677/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com