Multiplicar matrices en java

RoBoCoCo

Alguien me puede decir como se hace, se ke se ace con tres for, , pero no se ke ahi ke poner en cada uno, si alguien me pudiera ayudar se lo agradeceria

Czhincksx

LOL!!! eso mismo iba a postear yo ahora mismo XDD pero lo mio en C. estoy fatal. nunca habia tenido un problema de este tipo... siempre acaban saliendo, pero llevo toda la tarde pensado y no me sale. supongo q sera igual q en java solo q con los for escritos de otra forma.

Kaos-Etiliko

create dos tablas, y las vas recorriendo con dos variables "i" y "j" por ejemplo, con eso vas introduciendo los valores q qieras darlas y para multiplicarlas = con for como tu dices haciendo un contador de filas y columnas las recorres y listo.

RoBoCoCo

Pero multiplicar matrices como se multiplican en algebra no multiplicar los dos numeros de una posicion

Czhincksx

Vamos a intentar hacerlo entre los dos. a ver, pensemos como seria para dos matrices 3x3:

#define N 3 (esto es pa sustituir N por 3)

for(i=0;i<N;i++)
for(j=0;j<N;j++)
for(k=0;k<N;k++)
M3][]+=M1[][]*M2[][];

lo q va entre corchetes no se q es... porq lo he preovao un millon de veces y me da numeros altisimos siempre.

Czhincksx

creo q lo mejor es hacerlo por pasos.

1º para multiplicar 2 vectores:

for(i=0;i<N;i++)
num=V1*V2;


2º matriz NxN por Vector N

for(j=0;j<N;j++)
for(i=0;i<N;i++)
V3[j]=V1[j]*V2;


ahora matriz NxN por matriz NxN....estoy pillao



prueba esto a ver...


for(i=0;i<n;i++)
for(j=0;j<n;j++)
for(k=0;k<n,k++)
f[j]+=p[k]*q[k][j];

solo q java no se sorry :D PD inicializa la matriz final a 0

RoBoCoCo

Yo tengo esto, pero creo ke no esta bien, se ke es algo parecido pero algo falla y no se ke es

for(int i=0;i<matriz1.length;i++){
for(int j=0;j<matriz2[0].length;j++){
for(int k=0;k<matriz1.length;k++){
multi[j]=multi[j] + (matriz1[k]*matriz2[k][j]);
}
}

uNd3aD

le falta un }

RoBoCoCo

No eso no es si la tengo puesto solo ke al pasarlo aki se ma colao :P, lo ke pasa es ke el resultado te tendria ke dar otra matriz con el nº de filas de la primera matriz y el nº de columnas de las segunda matriz, pero no me sale y no se por ke :S

cabron

Bueno, conociendo el foro, no tardará en aparecer gente que te ponga el código completo, y luego se peleen por cual está mejor xD

Yo creo que lo suyo sería que aprendieras tú mismo, y si quieres te ayudo en eso. Lo primero, ¿te has molestado en mirar como se multiplican matrices, para luego pensar el algoritmo?

RoBoCoCo

Si, me lo e mirado y creo ke ya kasi lo tengo, lo ke no se es por ke a veces me da este error "ArrayIndexOutOfBoundsException" es es ke me salgo de la matriz o algo asi no?

cabron

Sí, te has salido del límite de la matriz.

Bueno, si has mirado como se multiplican matrices, antes de escribir el código, haz una lista de todas las acciones que tiene que realizar tú código. Si pones la lista en otro post te sigo ayudando, y te digo si está bien o mal.

Czhincksx

el ultimo trozo d codigo q puse antes es la solucion del problema en C. si lo pasas a java pues ya lo tienes.

PD: las matrices en C son matriz[fila][columna]

me parece q la tienes igual. por cierto no olvides inicializar la matriz final a 0 en todas las posiciones. mejor hazlo fuera del bucle para no liarte

RoBoCoCo

int [][] matriz1=new int[filas1][columnas1];
int [][] matriz2=new int[filas2][columnas2];
int [][] multi=new int[filas1][columnas2];

for(int i=0;i<matriz1.length;i++){
for(int j=0;j<matriz2.length;j++){
for(int k=0;k<matriz1.length;k++){
multi[j]=multi[j] + (matriz1[k]*matriz2[k][j]);
}
}
}

Este es el codigo ke tengo yo, pero me sigue dando el error ke me salgo de la matriz cuando no lo ago con matrices cuadradas y no se por ke :S, tambien le tengo puesto para ke detecte si el nº de columnas de la 1ª matriz es = al nº de columnas de la 2ª para ke no aga nada si no son =les

maRc

Haz la traza de tu algoritmo con un depurador para ver donde te falla.

cabron

Mira, con nombres largos para que lo veas más claro:

for (FilaMatriz1 = 0; filamatriz1 < numero_filas_matriz1; FilaMatriz1++)

&nbsp;  for (ColumnaMatriz2 = 0; ColumnaMatriz2 < numero_columnas_matriz2; ColumnaMatriz2++)

  &nbsp; &nbsp;   for(ColumnaMatriz1=0; ColumnaMatriz1 < numero_columnas_matriz1, i++)

  &nbsp;   &nbsp;   &nbsp;               matriz_producto[filamatriz1,columnamatriz2] += matriz1[FilaMatriz1,ColumnaMatriz1] * matriz2[ColumnaMatriz1,ColumnaMatriz2];

En tú código tienes:

for(int i=0;i<matriz1.length;i++){
for(int j=0;j<matriz2.length;j++){
for(int k=0;k<matriz1.length;k++){

Utilizas lo mismo en los 2, mientras que en uno es el número de filas, y en otro el número de columnas. En matrices cuadradas no te peta por que el numero de filas y el de columnas es el mismo.

RoBoCoCo

anda.. vaya fallo, y yo ya to kemao por ke no salia si estaba bien ^!, gracias por la ayuda xD

Usuarios habituales

  • RoBoCoCo
  • cabron
  • maRc
  • Czhincksx
  • uNd3aD
  • Kaos-Etiliko