Pregunta

Esto es lo que tengo hasta ahora pero no creo que sea correcto.

for (int i = 0 ; i < 5; i++)
{
    for (int j = 0;  j < 5; j++)
    {
        matrix[i][j] += matrix[i][j] * matrix[i][j];
    }
}
¿Fue útil?

Solución

No creo que se puede multiplicar una matriz por sí mismo en el lugar.

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

Incluso si se utiliza un producto de matrices menos ingenuo (es decir, algo que no sea esta O (n 3 ) algoritmo), que aún necesita más espacio de almacenamiento.

Otros consejos

Sugerencia:Si no es una tarea, no escriba sus propias rutinas de álgebra lineal, utilice cualquiera de las muchas bibliotecas revisadas por pares que existen.

Ahora, con respecto a tu código, si quieres hacer un producto término por término, entonces lo estás haciendo mal, lo que estás haciendo es asignarle a cada valor su cuadrado más el valor original (n*n+n o (1+n)*n, lo que más te guste)

Pero si quieres hacer una auténtica multiplicación de matrices en el sentido algebraico, recuerda que tenías que hacer el producto escalar de las primeras filas de la matriz por las segundas columnas de la matriz (o al revés, ahora no estoy muy seguro). .algo como:

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

y el producto escalar "·"

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

Por supuesto, con este método no puedes crear el producto in situ, porque necesitarás los valores que sobrescribirás en los siguientes pasos.

Además, explicando un poco más el comentario de Tyler McHenry, como consecuencia de tener que multiplicar filas por columnas, el "dimensiones interiores" (No estoy seguro si esa es la terminología correcta) de las matrices deben coincidir (si A es m x n, B es n x o y A*C es m x o), por lo que en su caso, una matriz se puede elevar al cuadrado solo si es cuadrada (je, je, je).

Y si sólo quieres jugar un poco con matrices, puedes probar Octave, por ejemplo;elevar al cuadrado una matriz es tan fácil como M*M o M**2.

Eso no es ninguna definición de multiplicación de matrices que he visto nunca. La definición estándar es

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)

para dar el algoritmo en una especie de pseudocódigo. En este caso, a es un matriz m x s y b es un s x n, el resultado es una m x n, y los subíndices comienzan con 1 ..

Tenga en cuenta que la multiplicación de una matriz en su lugar se va a conseguir la respuesta equivocada, ya que vas a ser sobrescribir los valores antes de usarlos.

Ya han pasado demasiado tiempo desde que he hecho matemáticas matriz (y sólo hice un poco de ella, en la parte superior), pero el operador += toma el valor de matrix[i][j] y se suma a que el valor de matrix[i][j] * matrix[i][j], que Don 't piensa es lo que quiere hacer.

Bueno, parece que lo que está haciendo es elevar al cuadrado la fila / columna, a continuación, añadir a la fila / columna. Es eso lo que quiere que haga? Si no, entonces cambiarlo.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top