擅长:python、mysql、java
<p>最好使用Sage或其他合适的工具。在</p>
<p>以下只是简单的非专家尝试,但是旋转高斯消去法应该给出可逆性的确切结果:</p>
<pre><code>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)
</code></pre>
<p>请注意,<code>np.bool_</code>仅在有限的意义上与F_2相似——Fୱ2中的二进制运算<code>+</code>是bool的<code>-</code>,一元运算<code>-</code>是{<cd2>}。不过,乘法是一样的。在</p>
^{pr2}$
<p>上面的高斯消去法只使用这些运算,所以它是有效的。在</p>