Domanda

Questo è quello che ho finora, ma non credo che sia giusto.

for (int i = 0 ; i < 5; i++)
{
    for (int j = 0;  j < 5; j++)
    {
        matrix[i][j] += matrix[i][j] * matrix[i][j];
    }
}
È stato utile?

Soluzione

Non credo che si può moltiplicare una matrice da solo sul posto.

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];
        }
    }
}

Anche se si utilizza una moltiplicazione di matrici meno ingenua (vale a dire qualcosa di diverso da questo O (n 3 ) algoritmo), è ancora necessario l'extra storage.

Altri suggerimenti

Suggerimento: se non è un compito non scrivere i propri routine di algebra lineare, utilizzare uno dei tanti librerie peer reviewed che sono là fuori

.

Ora, circa il codice, se si vuole fare un termine per prodotto termine, allora si sta facendo male, quello che stai facendo è assegnando a ciascun valore è piazza più il valore originale (n*n+n o (1+n)*n, qualunque ti piace di più)

Ma se si vuole fare un autentico moltiplicazione di matrici in senso algebrico, ricordate che si doveva fare il prodotto scalare dei primi righe della matrice dalle seconde colonne di matrice (o il contrario, io non sono molto sicuro che ora ) ... qualcosa come:

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

e il prodotto scalare "·"

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

Naturalmente, con questo metodo non si può fare il prodotto in luogo, perché avrete bisogno di valori che si sta sovrascrivendo nelle fasi successive.

Inoltre, spiegare un po 'più il commento di Tyler McHenry, come consecuence di dover moltiplicare le righe per colonne, il " dimensioni interne " (non sono sicuro se questo è la terminologia corretta) di le matrici devono corrispondere (se A è m x n, B è n x o e A*C è m x o), quindi nel caso di una matrice può essere quadrato solo se è quadrato (he he he).

E se si vuole solo giocare un po 'con le matrici, allora si può provare Octave, per esempio; squadratura una matrice è facile come M*M o M**2.

Non è una definizione moltiplicazione di matrici che abbia mai visto. La definizione standard è

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)

per dare l'algoritmo in una sorta di pseudocodice. In questo caso, una matrice è un m x s e b è un s x n, il risultato è un m x n, e pedici iniziano con 1 ..

Si noti che moltiplicare una matrice in atto sta per arrivare la risposta sbagliata, dal momento che si sta andando ad essere sovrascrivendo i valori prima del loro utilizzo.

E 'passato troppo tempo da quando ho fatto la matematica matrice (ed ho fatto solo un po' di esso, in alto), ma l'operatore += assume il valore di matrix[i][j] e aggiunge ad esso il valore di matrix[i][j] * matrix[i][j], che don 't pensare è quello che si vuole fare.

Beh, sembra che quello che sta facendo è la quadratura del riga / colonna, quindi aggiungendolo alla riga / colonna. E 'questo quello che vuoi fare? Se no, allora cambiarlo.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top