gpt4 book ai didi

python - 测试矩阵在有限域上是否可逆

转载 作者:太空狗 更新时间:2023-10-30 01:09:08 27 4
gpt4 key购买 nike

我想测试特定类型的随机矩阵在有限域上是否可逆,尤其是 F_2。我可以使用以下简单代码测试矩阵是否在实数上可逆。

import random
from scipy.linalg import toeplitz
import numpy as np
n=10
column = [random.choice([0,1]) for x in xrange(n)]
row = [column[0]]+[random.choice([0,1]) for x in xrange(n-1)]
matrix = toeplitz(column, row)
if (np.linalg.matrix_rank(matrix) < n):
print "Not invertible!"

有没有办法在 F_2 上实现同样的事情?

最佳答案

为此最好使用 Sage 或其他一些合适的工具。

以下只是简单的非专家尝试做某事,但旋转高斯消去应该给出可逆性的确切结果:

import random
from scipy.linalg import toeplitz
import numpy as np

def is_invertible_F2(a):
"""
Determine invertibility by Gaussian elimination
"""
a = np.array(a, dtype=np.bool_)
n = a.shape[0]
for i in range(n):
pivots = np.where(a[i:,i])[0]
if len(pivots) == 0:
return False

# swap pivot
piv = i + pivots[0]
row = a[piv,i:].copy()
a[piv,i:] = a[i,i:]
a[i,i:] = row

# eliminate
a[i+1:,i:] -= a[i+1:,i,None]*row[None,:]

return True

n = 10
column = [random.choice([0,1]) for x in xrange(n)]
row = [column[0]]+[random.choice([0,1]) for x in xrange(n-1)]
matrix = toeplitz(column, row)

print(is_invertible_F2(matrix))
print(int(np.round(np.linalg.det(matrix))) % 2)

请注意,np.bool_ 仅在有限的意义上类似于 F_2 --- F_2 中的二元运算 +- bool,一元运算 -+。不过,乘法是一样的。

>>> x = np.array([0, 1], dtype=np.bool_)
>>> x[:,None] - x[None,:]
array([[False, True],
[ True, False]], dtype=bool)
>>> x[:,None] * x[None,:]
array([[False, False],
[False, True]], dtype=bool)

上面的高斯消元法只使用了这些操作,所以它有效。

关于python - 测试矩阵在有限域上是否可逆,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16254654/

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