Frage

Dies ist, was ich habe, so weit, aber ich glaube nicht, dass es richtig ist.

for (int i = 0 ; i < 5; i++)
{
    for (int j = 0;  j < 5; j++)
    {
        matrix[i][j] += matrix[i][j] * matrix[i][j];
    }
}
War es hilfreich?

Lösung

Ich glaube nicht, dass Sie eine Matrix von selbst an Ort und Stelle vermehren können.

for (i = 0; i < 5; i++) {
    for (j = 0; j < 5; j++) {
        product[i][j] = 0;
        for (k = 0; k < 5; k++) {
            product[i][j] += matrix[i][k] * matrix[k][j];
        }
    }
}

Auch wenn Sie eine weniger naive Matrixmultiplikation verwenden (das heißt etwas anderes als dieses O (n 3 ) Algorithmus), müssen Sie noch zusätzlichen Stauraum.

Andere Tipps

Vorschlag: wenn es keine Hausaufgaben ist nicht Ihre eigene lineare Algebra Routinen schreiben, verwenden Sie einen der vielen Peer-Review-Bibliotheken, die es gibt

.

Nun, über den Code, wenn Sie einen Begriff von Begriff Produkten tun wollen, dann sind Sie es falsch zu machen, was Sie tun, um jeden Wert zuweist es ist quadratisch und der ursprüngliche Wert (n*n+n oder (1+n)*n, was auch immer Ihnen am besten gefällt)

Aber wenn Sie eine authentische Matrixmultiplikation in der algebraischen Sinn machen wollen, denken Sie daran, dass Sie das Skalarprodukt der ersten Matrixzeilen durch die zweite Matrix Spalten (oder die andere Weise zu tun hatte, ich bin nicht ganz sicher jetzt ) ... so etwas wie:

for i in rows:
    for j in cols:
        result(i,j)=m(i,:)·m(:,j)

und das Skalarprodukt "·"

v·w = sum(v(i)*w(i)) for all i in the range of the indices.

Natürlich mit dieser Methode können Sie das Produkt an Ort und Stelle nicht tun, weil Sie die Werte benötigen, die Sie in den nächsten Schritten sind überschrieben werden.

Auch ein wenig weiter Tyler McHenry Kommentar zu erklären, als consecuence von Zeilen durch Spalten zu multiplizieren, wobei die „ Innenmaß “ (Ich bin nicht sicher, ob das die richtige Terminologie ist) von die Matrizen übereinstimmen müssen (wenn A m x n ist, B ist n x o und A*C ist m x o), so in Ihrem Fall kann eine Matrix nur quadriert werden, wenn es Platz (he he he).

Und wenn Sie nur wollen, ein wenig mit Matrizen spielen, dann können Sie Octave versuchen, zum Beispiel; eine Matrix quadriert ist so einfach wie M*M oder M**2.

Das ist keine Matrix-Multiplikation Definition, die ich je gesehen habe. Die Standard-Definition ist

for (i = 1 to m)
   for (j = 1 to n)
      result(i, j) = 0
      for (k = 1 to s)
         result(i, j) += a(i, k) * b(k, j)

dem Algorithmus in einer Art Pseudo-Code zu geben. In diesem Fall wird ein eine Matrix ist, s x m und b eine n x n ist, ist das Ergebnis eine m x n, und tiefgestellten Indizes beginnen mit 1 ..

Beachten Sie, dass eine Matrix anstelle Multiplikation wird die falsche Antwort bekommen, da Sie Werte werden wirst überschreiben, bevor sie verwendet wird.

Es ist zu lange her, dass ich Matrix Mathe gemacht habe (und ich habe nur ein wenig davon, oben), aber der += Operator nimmt den Wert von matrix[i][j] und fügt sie den Wert von matrix[i][j] * matrix[i][j], die ich don ‚t denken, ist das, was Sie tun mögen.

Nun, es sieht aus wie das, was es tut die Zeile / Spalte wird quadriert, dann es auf die Zeile / Spalte hinzufügen. Ist das, was Sie wollen damit zu tun? Wenn nicht, dann ändern Sie es.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top