为此,最好使用Sage或其他一些合适的工具。
以下只是做某事的不复杂的非专家尝试,但是枢轴的高斯消去应该给出可逆性的确切结果:
import randomfrom scipy.linalg import toeplitzimport numpy as npdef 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 Truen = 10column = [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是
-对布尔,和一元运算
-是
+。但是,乘法是相同的。
>>> 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)
上面的高斯消除仅使用这些运算,因此可以正常工作。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)