Ich bin ein Universitätsstudent der Landwirtschaftlichen Fakultät, der Mathematik als Hobby studiert. Ich habe immer noch viele Mathematik- und Programmierkenntnisse, daher würde ich mich freuen, wenn Sie mir> <beibringen könnten
Bitte überprüfen Sie eine andere Website für Details. Wenn du sprichst 1+1=0 1+0=1 0+1=1 0+0=0 Wenn Sie es als eine Welt betrachten, in der Operationen definiert sind (algebraisch gesehen ist es die Summe auf $ \ mathbb {F_2} $.)
Es ist eine Arbeit, sich in eine bequeme Form zu verwandeln und dabei den Rang der Matrix beizubehalten. Es ist oft schön, den Rang zu kennen (Verschiedenes) Wenn es im Prozess der Vereinfachung existiert, kann die inverse Matrix erhalten werden, so dass die Vereinfachung ziemlich wichtig ist.
Bestimmen Sie zunächst die Berechnung
def cal(a,b):
if a==1 and b==1:
return 0
elif a==1 and b==0:
return 1
elif a==0 and b==1:
return 1
else:
return 0
Definieren Sie als Nächstes das Hinzufügen von Zeilen in der Matrix (da diese häufig verwendet wird).
def matcal(line1,line2):
ans=[0]*(len(line1))
for i in range(len(line1)):
ans[i]+=cal(line1[i],line2[i])
return ans
Alles was Sie tun müssen, ist das zu schreiben, das vereinfacht (aber nur bis zum oberen Dreieck)
def simple(mat):
ans=copy.copy(mat)
rank=0
for i in range(len(mat[0])):
for j in range(rank,len(mat)):
if ans[j][i]==1:
for k in range(rank,len(mat)):
if ans[k][i]==1 and k!=j:
ans[k]=matcal(ans[k],ans[j])
if j==rank:
pass
else:
ans[j],ans[rank]=ans[rank],ans[j]
rank+=1
if rank==len(mat)-1:
return ans
break
else:
pass
return ans
Um den Fluss grob zu erklären Tauschen Sie Zeilen aus, wenn Sie in der Spalte rankth nach Einsen suchen, und löschen (fügen Sie) Einsen in den Zeilen unter Ihnen hinzu. Es fühlt sich an wie zu wiederholen. Dies ist ausreichend, wenn Sie den Rang ohne eine saubere Vereinfachung wollen.
print(simple([[1,1,1],[1,1,0],[0,1,0]]))
>>>[[1, 1, 1], [0, 1, 0], [0, 0, 1]]
print(simple([[1,1,0],[1,1,0],[0,1,0]]))
>>>[[1, 1, 0], [0, 1, 0], [0, 0, 0]]
print(simple([[0,0,1],[0,1,0],[1,0,0]]))
>>>[[1, 0, 0], [0, 1, 0], [0, 0, 1]]
Es ist ein gutes Gefühl.
Sie können den Rang bestimmen, wenn Sie zur Vereinfachung mit der obigen gehen.
def rank(mat):
l=len(mat[0])
che=[0]*l
cnt=0
for i in range(len(mat)):
if mat[i]!=che:
cnt+=1
return cnt
Ich möchte es mit $ Z / nZ $ anstelle von $ \ mathbb {F_2} $ tun können. Diesmal ist das umgekehrte Element von 1 jedoch 1, also hätte ich mich hinzufügen sollen, aber wenn es $ Z / nZ $ ist, kann es ein wenig schwierig sein, weil ich ein Programm vorbereiten muss, das nach dem umgekehrten Element sucht.
Recommended Posts