Commit 0118ba90 authored by Weng's avatar Weng
Browse files

Upload New File

parent 424ebd89
%% Cell type:markdown id: tags:
# Ein chinesisches Orakel und zyklische Matrizen über $\mathbb{Z}/2\mathbb{Z}$
%% Cell type:markdown id: tags:
Notebook zum gleichnamigen Artikel
enthält Untersuchungen der auftretenden Matrizen, erlaubt Verallgemeinerung der Zaubertricks in P. Diaconis, R. Graham, Magical Mathematics, Princeton University Press (2012), DOI: 10.1515/978-1-400-83938-4
%% Cell type:markdown id: tags:
## Der ursprüngliche Zaubertrick
%% Cell type:code id: tags:
``` sage
MS = MatrixSpace(GF(2),14)
M14=MS([[1,1,0,1,0,0,0,0,0,0,0,0,0,0],[0,1,1,0,1,0,0,0,0,0,0,0,0,0],[0,0,1,1,0,1,0,0,0,0,0,0,0,0],[0,0,0,1,1,0,1,0,0,0,0,0,0,0],
[0,0,0,0,1,1,0,1,0,0,0,0,0,0],[0,0,0,0,0,1,1,0,1,0,0,0,0,0],[0,0,0,0,0,0,1,1,0,1,0,0,0,0],[0,0,0,0,0,0,0,1,1,0,1,0,0,0],
[0,0,0,0,0,0,0,0,1,1,0,1,0,0],[0,0,0,0,0,0,0,0,0,1,1,0,1,0],[0,0,0,0,0,0,0,0,0,0,1,1,0,1],[1,0,0,0,0,0,0,0,0,0,0,1,1,0],
[0,1,0,0,0,0,0,0,0,0,0,0,1,1],[1,0,1,0,0,0,0,0,0,0,0,0,0,1]])
```
%% Cell type:markdown id: tags:
Die letzten drei Zeilen sind linear abhängig:
%% Cell type:code id: tags:
``` sage
print(M14[11]+M14[0]+M14[1]+M14[2]+M14[4]+M14[7]+M14[8]+M14[9])
print(M14[12]+M14[1]+M14[2]+M14[3]+M14[5]+M14[8]+M14[9]+M14[10])
print(M14[13]+M14[2]+M14[3]+M14[4]+M14[6]+M14[9]+M14[10]+M14[11])
```
%% Output
(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0)
(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0)
(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0)
%% Cell type:code id: tags:
``` sage
kernel=M14.right_kernel()
kernel
```
%% Output
Vector space of degree 14 and dimension 3 over Finite Field of size 2
Basis matrix:
[1 0 0 1 0 1 1 1 0 0 1 0 1 1]
[0 1 0 1 1 1 0 0 1 0 1 1 1 0]
[0 0 1 0 1 1 1 0 0 1 0 1 1 1]
%% Cell type:markdown id: tags:
## Verallgemeinerung
%% Cell type:markdown id: tags:
Die folgende Funktion erlaubt die Konstruktion der Matrix $M$ für beliebige Muster.
%% Cell type:code id: tags:
``` sage
def konstruiereGscamMatrix(n,pattern):
MS = MatrixSpace(GF(2),n)
m=copy(MS.zero_matrix())
k=len(pattern)
for i in range(0,n):
for j in range(0,len(pattern)):
if (i+j<n):
m[i,i+j]=pattern[j]
else:
k=(i+j)%n
m[i,k]=pattern[j]
return m
```
%% Cell type:markdown id: tags:
Ein Beispiel:
%% Cell type:code id: tags:
``` sage
M21=konstruiereGscamMatrix(21,[1,1,0,1])
M21.right_kernel()#gibt die Basis des Vektorraums der Vektoren v an mit M21*v=0
```
%% Output
Vector space of degree 21 and dimension 3 over Finite Field of size 2
Basis matrix:
[1 0 0 1 0 1 1 1 0 0 1 0 1 1 1 0 0 1 0 1 1]
[0 1 0 1 1 1 0 0 1 0 1 1 1 0 0 1 0 1 1 1 0]
[0 0 1 0 1 1 1 0 0 1 0 1 1 1 0 0 1 0 1 1 1]
%% Cell type:markdown id: tags:
Hilfsfunktionen, um alle Muster der Länge $k$ aufzuzählen, die von der Form $m=[1,\tilde{m},1]$ mit $\tilde{m}\in \{0,1\}^{k-2}$ beliebig ist:
%% Cell type:code id: tags:
``` sage
import math as m
import numpy as np
def binary(number,total):
#konvertiert eine Zahl zu einer Binärzahl von rechts nach links
bits = int(m.log(total,2))
N = number
b_num = np.zeros(bits)
for i in np.arange(bits):
if( N/((2)**(bits-i-1)) >= 1 ):
b_num[i] = 1
N = N - 2 ** (bits-i-1)
B = []
for j in np.arange(len(b_num)):