2017-09-13 9 views
0

Ich lerne die Io-Sprache und würde gerne wissen, wie man mehrere Matrizen mithilfe von Listen zusammenstellt.Wie multipliziert man zwei Matrizen mit einer Liste von Listen in der Io-Sprache?

Hier ist mein Code so weit:

mA := List clone 
mA := list(list(1, 2, 3), list(4, 5, 6), list(7, 8, 9)) 
mB := List clone 
mB := list(list(1, 2, 3), list(4, 5, 6), list(7, 8, 9)) 
mC := List clone 
mC := list(list(0, 0, 0), list(0, 0, 0), list(0, 0, 0)) 

i := 0 
j := 0 
k := 0 

for(i, 0, mA size, 
    for(j, 0, mB size (at(0)), 
     for(k, 0, mB size, 
      mC atPut(mC at(i) at(j), mC at(i) at(j) + mA at(i) at(k) * mB at(k) at(j)) 
     ) 
    ) 
) 

Wenn ich diesen Code ausführen durch sagt es ein Fehler ist, sagen: „nil‚*‘nicht reagiert“. Wo ich also tatsächlich innerhalb der verschachtelten for-Schleifen multipliziere, geht es in die Liste außerhalb der Grenzen. Zumindest ist es das, was ich denke, es ist daher der Fehler. Ich bin mir nicht sicher, wofür ich die for-Schleifen noch ändern soll. Ich habe sie sogar auf 2 und 3 geändert, da dies die Größe der Matrixlisten ist, die ich testen möchte, aber den gleichen Fehler bekommen habe.

Antwort

2

Zunächst tritt dieser Fehler auf, wenn der Index versucht, nach einer Position zu suchen, die nicht im Array ist.

Set es um Größe-1 so erhalten Sie keine 'keine' Wert

Das andere Problem ist, dass die Ausgabe wie folgt aussehen endet:

Liste (81, 55, Liste (0, 0, 0))

wie ich regelte es war durch eine temporäre Liste, einen temporären Summenwert verwendet wird, und die Append-Methode:

  for(i, 0, mA size-1, 
       tempList := List clone 
       for(j, 0, mB size (at(0))-1, 
       sum := 0 
       for(k, 0, mB size-1, 
        sum = sum + mA at(i) at(k) * mB at(k) at(j) 
        ) 
        tempList append(sum) 
       ) 
       mC atPut(i,tempList) 
       ) 

Damit sollten Sie dies als Ihr Ende Matrix:

Liste (Liste (30, 36, 42), Liste (66, 81, 96), Liste (102, 126, 150))

Verwandte Themen