Curso Java Intermedio #31 | Multiplicación de Matrices en Java
ฝัง
- เผยแพร่เมื่อ 12 พ.ย. 2024
- Curso Java intermedio con NetBeans - En esta entrega del curso de programación Java intermedio, aprenderás a multiplicar matrices en java al mismo tiempo que realizarás un ejercicio que te permitirá desarrollar tanto el análisis y resolución de problemas, así como tu lógica de programación.
¡¡Ayúdame a seguir creciendo, te invito a suscribirte!!
La Geekipedia de Ernesto
➞ Facebook / lageekipediadeernesto
➞ Instagram / lageekipedia
➞ Twitter / lageekipedia
═════════════════════════════════════════
Descarga de la practica: goo.gl/5YW7HR
Enlace al curso Java desde cero: goo.gl/JZu1Lx
¿Te gustaría que este contenido siga siendo gratuito?, puedes apoyar al canal de las siguientes maneras:
1. Donaciones: www.paypal.me/LaGeekipedia
2. Desactivando Adblock y Adblock Plus en TH-cam.
3. Compartiendo los vídeos del canal en foros y redes sociales.
Cualquier opción es de gran ayuda. ¡Muchas gracias!
La Geekipedia De Ernesto Hola Ernesto.. te pregunto, como se desactivan?. Gracias
Si, había que configurarlo, gracias
Lo hice en 75 pasos. Estoy Aprendiendo
El código bloque para multiplicar las dos matrices lo realicé de la siguiente forma para que sea mas dinámico; quedo atento a quien lo quiera complementar, saludos:
PD: Tener en cuenta que solo se puede multiplicar dos matrices si sus dimensiones son compatibles , lo que significa que el número de columnas en la primera matriz es igual al número de filas en la segunda matriz.
/* Multiplicación matrices: "matrizR" = "matrizF1" x "matrizF2"
* Dimensiones de las matrices:
* int [][] matrizF1 = new int[filasF1][columnasF1];
* int [][] matrizF2 = new int[columnasF1][columnasF2];
* int [][] matrizR = new int[filasF1][columnasF2];
*/
for (int i = 0; i < filasF1; i++) {
for (int j = 0; j < columnasF2; j++) {
for (int k = 0; k < columnasF1; k++) {
matrizR[i][j] += matrizF1[i][k] * matrizF2[k][j];
}
}
}
Hola me parece un gran aporte el que hiciste!!
Te quería preguntar : si el numero de columnas de la "MatrizF1" es 11, y el numero de filas de la "MatrizF2" es 7, daría una Matriz que debería tener 77 espacios de memoria...
Como es posible crear una Matriz de 77 espacios de memoria si lo máximo que se puede poner son 8 fila y 9 columnas?
Osea quedaría así:
* int [][] matrizF1 = new int[filasF1][11];
* int [][] matrizF2 = new int[7][columnasF2];
* int [][] MatrizResultante = new int[8][9];
Pero bien sabemos que 8 multiplicado por 9 es 72!!! y 9 por 9 es 81!! Como podría crear una matriz con 77 espacios de memoria??
Saludos.
Federico cordial saludo, si estás realizando una multiplicación entre matrices debes considerar que sus dimensiones sean compatibles, lo que significa que el número de columnas de la "matrizF1" debe ser igual al número de filas de la "matrizF2"; por tal motivo no es posible realizar la multiplicación que propones. Ahora bien, si lo que quieres es que la "matrizR" (matriz Resultado) contenga 77 espacios , las matrices deben tenes los siguientes parámetros:
int [][] matrizF1 = new int[11][n];
int [][] matrizF2 = new int[n][7];
int [][] MatrizResultante = new int[11][7];
Jhony gracias por tu ayuda amigo!! Ahora lo entendí bien!!!!
mucho mejor asi.
Muy buen aporte.
Estaba tratando de optimizar el código y me encontré con estas lineas, me resulto de ayuda.Gracias
Gracias por todo el conocimiento que nos das. He aprendido mucho.
Para multiplicar matrices creo más adecuado y funciona el siguiente código:
for(int i=0; i < 2; i++){
for(int j = 0; j < 2; j++){
for(int k=0; k
muy buena forma de hacerlo, yo me la complique usando dos fors, con 3 fors es mucho mas sencillo jajaja
Que estos ejercicios son sumamente sencillos!? Madre mía!... Si estoy echando humo por la cabeza! Jajaja....!!
xD Sólo practica un poco más :D
eres un crack Neto! Eres mi maestro desd que empece a ver tus tutoriales
Me Sirvió mucho para ejercitar la lógica de programación tu propuesta y he aprendido mucho con tus videos tanto del primer curso como de este de nivel intermedio. te envío el código que pude elaborar en el que no pude "acomodar" la presentación de impresión de las matrices operando como de la resultante; pero seguiré practicando. Un afectuoso saludo desde Argentina.
de aquí a 10 años seré un pvto pro en esto, empece gracias a ti Ernesto
Hola, dime que lo lograste en 2años...
Excelent video Ernesto, cada día aprendo más. Se me complicó un poco entender la parte de la impresión, pero poco a poco voy mejorando. Sigue así que tus videos son muy buenos.
Me hiciste un parote, espero puedas seguir subiendo videos así, me ayudó mucho y al final analice para saber cómo imprimia y no es tan complejo!!!!!muchísimas gracias!!!!!
¡Excelente!, por supuesto que seguiré creando más contenido.
Saludos.
Hola Ernesto, te felicito y te agradezco por tus videos, aparte de lo mucho que debes saber de programación eres excelente pedagógicamente. Hace poco más de tres semanas me empecé a interesar por la programación y debido al tiempo disponible por la pandemia ya he podido completar el curso de programación desde cero, java desde cero y voy por este capítulo del intermedio. Cuando planteas una situación problema trato de resolverla por mi cuenta para luego ver si coincide mí logics con la tuya.
En la carga de la matriz resultado(que yo he llamado "matr") he realizado tres estructuras repetitivas for() llegando a cumplir el objetivo de una manera diferente pero quizás por mi poca experiencia no pueda darme cuenta de si haya posibilidad de que el razonamiento que he empleado me pueda traer alguna complicación, la dejo aquí por si tienes tiempo de verla:
for (int i = 0; i < 2; i++) {
for (int j = 0; j < 2; j++) {
for (int k = 0; k < 3; k++) {
matr[i][j] += mat1[k][j] * mat2[i][k];
}
}
}
Muchas gracias por todo el material que brinda, te mando un abrazo desde argentina!
2020 todavia funciona jajaja, buen video, me salvaste
gracias a tu gran explicacion y video se me facilito
modificarlo para uno de 3 por 3
La posición 0-0 de este video, en álgebra es 1-1. Así la posicion 0-1 en algebra es 1-2. Quizás eso genera una dificultad al momento de entender la lógica que usa el autor en el video.
Así mismo, es excelente la explicación, muy útil y me hizo sacar humo del cerebro jaja
Gracias por el contenido!
excelente video
Excelente sigo tus videos desde el basico..... y seguire con este.. Gracias le doy like...y suscrito...
Que explicación tan sublime 👏
Espero algún día tener esa lógica de programación porque la verdad se me dificulto mucho xD
Excelente tutorial!!! Me encantan estos ejercicios :D
Que tal amigos, al igual que el vídeo pasado este lo hice a través de hilos y tambien es posible, obviamente considero sube la dificultad pero repito: me parece un excelente desafio para practicar los conceptos dados por Ernesto. los invito a desarrollarlo de esa manera ya que como dijo Ernesto hay varias formas de desarrollarlo. Cualquier pregunta con gusto les responderé.
Yo intenté hacer las dos matrices con un mismo método, pero no logro hacer que el .length me de una diferencia entre filas y columnas, no entiendo como funciona todavía xD
@@enriquebarragan212 trata de crear dos variables (filas y columnas) y les das el numero de filas y de columnas que aparecen en el video, despues crea las matrices, por ej matriz1 [filas][columnas] y asi, despues tienes que jugar con los for
pero hiciste la parte de imprimir o tambien la multiplicacion? es decir: hiciste la logica en el main y la impresion con hilos en otra clase ?
yo pensé que teniamos que hacer un llenado de la matriz resultante dinámico, pero fue manual , entonces así en teoría es más fácil
Excelente clase profe, una anotación. Creo que el algoritmo implementado presentará un pequeño bug cuando el resultado de alguno de los elementos de la matriz resultante sea cero, si esto pasa nunca se podrán calcular los elementos de la matriz resultante que le siguen, y tendíamos varios ceros en lugar del resultado de la multiplicación.
Hola Ernesto, me encantan tus cursos, voy en esta parte, aquí mi forma de hacer la multiplicación de matrices y la impresión de ellas:
//Multiplicación de matrices
for (int i = 0; i < 2; i++) {
for (int j = 0; j < 2; j++) {
int temporal = (matriz_uno[j][0] * matriz_dos[0][i])
+ (matriz_uno[j][1] * matriz_dos[1][i])
+ (matriz_uno[j][2] * matriz_dos[2][i]);
matriz_r[j][i] = temporal;
}
}
//Imprimir matrices
for (int i = 0; i < 3; i++) {
if (i < 2) {
for (int j = 0; j < 3; j++) {
System.out.print("[" + matriz_uno[i][j] + "]");
}
} else {
System.out.print(" ");
}
if (i == 1) {
System.out.print(" * ");
} else {
System.out.print(" ");
}
for (int j = 0; j < 2; j++) {
System.out.print("[" + matriz_dos[i][j] + "]");
}
if (i == 1) {
System.out.print(" = ");
} else {
System.out.print(" ");
}
if (i < 2) {
for (int j = 0; j < 2; j++) {
System.out.print("[" + matriz_r[i][j] + "]");
}
}
System.out.println("");
}
Gracias!
Mi cabeza explotó con este video
😂😂
En este video se me ha quemado el cerebro xD, Gran contenido muchas gracias, te sigo desde el curso desde 0
Saludos Ernesto, gracias por tan excelente contenido compartido.
Aunque no tendría porqué, pero me estaba confundiendo.
Cuando explicabas la parte gráfica del desarrollo del ejercicio, te referías a las columnas y filas desde la posición uno en adelante. Pero al momento de desarrollar el ejercicio en netbeans ya empezabas a contar o enumerar las filas y columnas desde la posición cero.
Repito, no tendría porqué pero ese detalle me estaba creando una tremenda confusión.
En la mayoría de lenguajes, los vectores comienzan en la posición [0]
Si tienes un vector de 3 elementos, sus componentes serán [0], [1] y [2].
Al principio del vídeo solo lo explico de la manera que lo hizo para que entendiéramos mejor lo de la multiplicación de matrices.
Excelente vídeo. Una pregunta Ernesto, ¿Java tiene librerías o clases (soy nuevo en este lenguaje) que te faciliten las operaciones con matrices, como la librería Numpy en Python?
LO ADOROOOOOO
Gracias
Muchas gracias por el video. Hice el programa para otros tamaños de matrices aunque sólo funciona si las filas de la matriz 2 son más que las filas de la matriz 1:
public class ClasePrincipal {
public static void main(String[] args) {
int matriz1[][] = new int[3][5];
int matriz2[][] = new int[5][3];
int matriz3[][] = new int[3][3];
//Llenar matriz1
for (int i = 0; i < matriz1.length; i++) {
for (int j = 0; j < matriz1[0].length; j++) {
matriz1[i][j] = (int) (Math.random() * 5 + 1);
}
}
//Llenar matriz2
for (int i = 0; i < matriz2.length; i++) {
for (int j = 0; j < matriz2[0].length; j++) {
matriz2[i][j] = (int) (Math.random() * 5 + 1);
}
}
//Multiplicar matrices
for (int i = 0; i < matriz1.length; i++) {
for (int j = 0; j < matriz2[0].length; j++) {
matriz3[i][j] = 0;
for (int k = 0; k < matriz2.length; k++) {
matriz3[i][j] += matriz1[i][k] * matriz2[k][j];
}
}
}
//Imprimir matrices
for (int i = 0; i < matriz2.length; i++) {
if (matriz1.length > i) {
for (int j = 0; j < matriz1[0].length; j++) {
System.out.print("[" + matriz1[i][j] + "]");
}
} else {
for (int j = 0; j < matriz1[0].length * 3; j++) {
System.out.print(" ");
}
}
if(i == 1){
System.out.print(" x ");
} else {
System.out.print(" ");
}
if (matriz2.length > i) {
for (int j = 0; j < matriz2[0].length; j++) {
System.out.print("[" + matriz2[i][j] + "]");
}
}
if(i == 1){
System.out.print(" = ");
} else {
System.out.print(" ");
}
if (matriz3.length > i) {
for (int j = 0; j < matriz3[0].length; j++) {
System.out.print("[" + matriz3[i][j] + "]");
}
}
System.out.println("");
}
}
}
Muy buenas tardes Ernesto. Lamentablemente, el autocompletado de NetBeans no me está funcionando, ya que al escribir "sout" no pasa absolutamente nada, y cuando escribo, por ejemplo, "java.util", no me sale la lista con las clases del JDK como Scanner y Random. Si usted o algun estudiante sabe como activarlo, le agradezco mucho su ayuda. Los programas que uso son NetBeans IDE 8.2, Java SE Development Kit 8 Update 361 (64-bit) y Java 8 Update 361 (64-bit). No se si tiene algo que ver pero uso Windows 10 MiniOS LTSC (64 Bits).
Excelente,. Lo mejor
Me detuvo un momento a analizar el ejercicio y me di cuenta que no es tan complicado como parece.
genial amigo exelente explicacion in like.
un curso de PHP estaria muy bueno, Gracias Ernesto
¡Hola!, las votaciones están abiertas en las redes sociales del canal y se cierran el próximo viernes 7 de Septiembre de 2018, entre los cursos disponible se encuentra el curso de PHP, puedes votar para apoyar a que este curso gane y sea parte de los cursos del próximo paquete que será publicado. Saludos.
yo uso eclipse, podias decirme como importarlo ?
Ya esta ya hackeo la nasa :v
jajajajajjaja eso mismo pense
Quiero compartir la lógica que utilicé para resolver este problema ya que es diferente a la del video y pienso que a alguno le podría interesar
public class MultiplicaciónDeMatrices {
public static void main(String[] args) {
int matriz1[][] = new int[2][3];
int matriz2[][] = new int[3][2];
int matrizResultante[][] = new int[2][2];
//llenado de matriz1
for (int i = 0; i < 2; i++) {
for (int j = 0; j < 3; j++) {
matriz1[i][j] = (int) (Math.random() * 5);
}
}
//llenado de matriz2
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 2; j++) {
matriz2[i][j] = (int) (Math.random() * 5);
}
}
//Multiplicación de matrices
for (int i = 0; i < 2; i++) {
for (int j = 0; j < 2; j++) {
int valorAcumulado = 0;
for (int k = 0; k < 3; k++) {
valorAcumulado += matriz1[i][k] * matriz2[k][j];
if (k == 2) {
matrizResultante[i][j] = valorAcumulado;
}
}
}
}
//impresion en pantalla
for (int i = 0; i < 3; i++) {
if (i < 2) {
for (int j = 0; j < 3; j++) {
System.out.print("[" + matriz1[i][j] + "]");
}
//******************************
if (i == 0) {
System.out.print(" x ");
} else {
System.out.print(" ");
}
//******************************
for (int j = 0; j < 2; j++) {
System.out.print("[" + matriz2[i][j] + "]");
}
//*****************************
if (i == 0) {
System.out.print(" = ");
} else {
System.out.print(" ");
}
//******************************
for (int j = 0; j < 2; j++) {
System.out.print("[" + matrizResultante[i][j] + "]");
}
System.out.println("");
} else {
System.out.print(" ");
for (int j = 0; j < 2; j++) {
System.out.print("["+matriz2[i][j]+"]");
}
System.out.println("");
}
}
}
}
El código para multiplicar las matrices la realice de la siguiente forma para que sea mas corto:
// Operations
for (int i = 0; i < 3; i++) {
Matrx_R[0][0] = Matrx_R[0][0] + (Matrx_1[0][i] * Matrx_2[i][0]);
Matrx_R[0][1] = Matrx_R[0][1] + (Matrx_1[1][i] * Matrx_2[i][0]);
Matrx_R[1][0] = Matrx_R[1][0] + (Matrx_1[0][i] * Matrx_2[i][1]);
Matrx_R[1][1] = Matrx_R[1][1] + (Matrx_1[1][i] * Matrx_2[i][1]);
}
Hola ernesto una pregunta porq cuado ud esta enseñando como realizar el ejercicio en minuto 1:20 y cuando vas a empezar a enseñar a sacar el resultado de la multiplicación estas enseñando otra manera de sacar el resultado?
Segun lo q estoy entendiendo es q ud esta agarrando dos filas de la primera matriz y dos columnas de la segunda matriz para asi crear la matriz resultantes es eso?
yo en la forma de calcular la matriz resultante lo hice utilizando solo variables del for, esa guevada me demoro horas pensando, pero valio la pena
aqui les dejo por si acaso :D
package clase;
public class Multiplicacion {
public static void main(String[] args) {
int matrizUno[][] = new int[2][3];
int matrizDos[][] = new int[3][2];
int r_matriz[][] = new int[2][2];
for (int i = 0; i < 2; i++) {
for (int j = 0; j < 3; j++) {
matrizUno[i][j] = (int)(Math.random() * 3);
}
}
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 2; j++) {
matrizDos[i][j] = (int)(Math.random() * 3);
}
}
//Estructura matriz resultante
for (int i = 0; i < 2; i++) {
if(i == 0){
for (int j = 0; j < 3; j++) {
r_matriz[i][0] += matrizUno[i][j] * matrizDos[j][i];
r_matriz[i][1] += matrizUno[i][j] * matrizDos[j][i+1];
}
}else if(i == 1){
for (int j = 0; j < 3; j++) {
r_matriz[i][1] += matrizUno[i][j] * matrizDos[j][i];
r_matriz[i][0] += matrizUno[i][j] * matrizDos[j][i-1];
}
}
}
for (int i = 0; i < 3; i++) {
if(i != 2){
for (int j = 0; j < 3; j++) {
System.out.print("[ " + matrizUno[i][j] + " ]");
}
}else if (i == 2) {
System.out.print(" ");
}
if (i == 1) {
System.out.print(" x ");
}else{
System.out.print(" ");
}
for (int j = 0; j < 2; j++) {
System.out.print("[ " + matrizDos[i][j] + " ]");
}
if (i == 1) {
System.out.print(" = ");
}else{
System.out.print(" ");
}
if(i != 2){
for (int j = 0; j < 2; j++) {
System.out.print("[ " + r_matriz[i][j] + " ]");
}
}
System.out.println("");
}
}
}
se me complico un poquito pero ya nada gracias lo analice y todo super facil ernesto
Hola ernesto, excelente video y gran curso.
Pregunta alguien sabe porque es esto? Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 2
edit: Ya esta ya lo solucione xd
Hola Ernesto, he escrito my versión del programa que funciona pidiendo el tamaño de las matrices al usuario, lo pongo aquí esperando ser de ayuda a alguien ;)
public static void main(String[] args) {
Scanner param = new Scanner(System.in);
System.out.println("Dame el n. de lineas: ");
int lineas = param.nextInt();
System.out.println("Dame el n. de columnas: ");
int columnas = param.nextInt();
// creo las 3 matrices
int matr_uno[][] = new int[lineas][columnas];
int matr_due[][] = new int[columnas][lineas];
int matr_tre[][] = new int[lineas][lineas];
// pongo los numeros aleatorios en las dos matrices
for (int linea = 0; linea < lineas; linea++) {
for (int col = 0; col < columnas; col++) {
matr_uno[linea][col] = (int) (Math.random() * 10);
matr_due[col][linea] = (int) (Math.random() * 10);
}
}
for (int linea = 0; linea < lineas; linea++) {
for (int col = 0; col < lineas; col++) {
matr_uno[linea][col] = (int) (Math.random() * 10);
matr_due[col][linea] = (int) (Math.random() * 10);
}
}
// calculo la matriz 3
for (int linea_3 = 0; linea_3 < lineas; linea_3++) {
for (int linea = 0; linea < lineas; linea++) {
for (int col = 0; col < columnas; col++) {
matr_tre[linea_3][linea] = matr_tre[linea_3][linea] + matr_uno[linea][col] * matr_due[col][linea_3];
}
}
}
// enseño la matriz 1
System.out.println("Matriz 1");
for (int linea = 0; linea < lineas; linea++) {
for (int col = 0; col < columnas; col++) {
System.out.print("[" + matr_uno[linea][col] + "] ");
}
System.out.println("");
}
// enseño la matriz 2
System.out.println("Matriz 2");
for (int linea = 0; linea < columnas; linea++) {
for (int col = 0; col < lineas; col++) {
System.out.print("[" + matr_due[linea][col] + "] ");
}
System.out.println("");
}
// enseño la matriz 3
System.out.println("Matriz 3");
for (int linea = 0; linea < lineas; linea++) {
for (int col = 0; col < lineas; col++) {
System.out.print("[" + matr_tre[linea][col] + "] ");
}
System.out.println("");
}
}
¡¡Por cierto!! Revisando tu código noté que da error cuando agregas Lineas > Columnas, por ejemplo:
lineas: 5
columnas: 3
¿qué tal si te propones a solucionarlo solo como práctica? le buscas más errores y así practicas hasta tener un programa perfecto :3 Yo lo solucionaré por mi parte para practicar y aprender a leer errores. ¡Saludos!
Verdad! era una tonteria, en la linea 24 debes poner "col < columnas", yo copiando y pegando puse "col
Gracias, me salvaste el pellejo con este código. 👍🏼
Buenos días, me percate de que este código contiene un error en dado caso de que de igual a 0 la multiplicación, si eso pasa para el primer resultado de la primera posición de la matriz resultante, los otros 3 espacios también tendrán un 0, ya que el ciclo for tomaría como referencia el primer caso y los demás no se cumplirían. Aquí dejo el código que hice con ese problema resuelto, repito, solo en caso de que la suma de las multiplicaciones de igual a 0 generaría un error. Espero les sirva :D
public class ClasePrincipal {
public static void main(String[] args) {
int matriz_uno [][] = new int [3][2];
int matriz_dos [][] = new int [2][3];
int matriz_resultante [][] = new int [3][3];
int temporal = 0;
//Llenado de la matriz_uno
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 2;j++) {
matriz_uno [i][j] = (int) (Math.random() * 5);
}
}
//Llenado de la matriz_dos
for (int i = 0; i < 2; i++) {
for (int j = 0; j < 3; j++) {
matriz_dos [i][j] = (int) (Math.random() * 5);
}
}
//Lenado de la matriz_resultante
for (int i = 0; i < 2; i++) {
for (int j = 0; j < 3; j++) {
temporal += matriz_uno [j][i] * matriz_dos [i][j];
}
matriz_resultante [i][i] = temporal;
temporal = 0;
if (i == 0) {
for (int j = 0; j < 3; j++) {
temporal += matriz_uno [j][1] * matriz_dos [i][j];
}
matriz_resultante [i][1] = temporal;
} else {
for (int j = 0; j < 3; j++) {
temporal += matriz_uno [j][0] * matriz_dos [i][j];
}
matriz_resultante [i][0] = temporal;
}
temporal = 0;
}
//Imprimir todo
for (int i = 0; i < 3; i++) {
if (i < 2) {
for(int j = 0; j < 3; j++) {
System.out.print("[" + matriz_uno[j][i] + "]");
}
} else {
System.out.print(" ");
}
System.out.print(" ");
if (i == 1) {
System.out.print("x ");
} else {
System.out.print(" ");
}
for(int j = 0; j < 2; j++) {
System.out.print("[" + matriz_dos[j][i] +"]");
}
System.out.print(" ");
if (i == 1) {
System.out.print("= ");
} else {
System.out.print(" ");
}
if (i < 2) {
for(int j = 0; j < 2; j++) {
System.out.print("[" + matriz_resultante[j][i] + "]");
}
}
System.out.println("");
}
}
}
Rayos, creo que me estoy volviendo loco y, así quiero llegar a marte...
Gente, para los que quieran, les dejo código que sirve para multiplicar 2 matrices sin importar la cantidad de filas o columnas que tengan (siempre respetando las reglas para multiplicar matrices).
Me costó pero salió, jeje.
Una vez que tenemos las dos matrices y la de resultado declaradas, y las dos matrices a multiplicar llenadas:
int rondas = matriz_1 [1].length * (matriz_resultado.length * matriz_resultado[1].length);
int ic1 = 0, if1 = 0, ic2 = 0, if2 = 0, icr = 0, ifr = 0;
int temporal = 0;
for (int i = 0; i < rondas; i++) {
temporal += matriz_1[if1][ic1] * matriz_2[if2][ic2];
ic1++;
if2++;
if (ic1 == matriz_1[1].length) {
matriz_resultado[ifr][icr] = temporal;
temporal = 0;
icr++;
if (icr == matriz_resultado[1].length) {
icr = 0;
ifr++;
}
ic1 = 0;
if2 = 0;
if (ic2 < matriz_2[1].length - 1) {
ic2++;
} else if (ic2 == matriz_2[1].length - 1) {
if1++;
ic2 = 0;
}
}
}
donde ic1 es el indice de columnas de la matriz 1, ifr es el indice de la matriz resultante, y así.
saludos!
Maquina :) Gracias
Ya habia pasado por estructuras de datos en c, asi que tengo un doctorado en bucles anidados 🤓.
public class MatrizResultante {
private final static int[][] matriz = new int[2][3];
private static void multiplicarMatrices(){
for(int i = 0; i
Hola Ernesto! Como haces para que el sistema solo te agregue el ciclo for apretanto tab?
yo lo hago y me tira otra estructura tengo que seleccionar con el mouse de la lista de opciones para agregar el for predefinido
escribes for y tabulas y listo
Pero si quiero hacer un programa mas dinamico no me funcionaria porque estoy llenando la matriz resultante manualmente....
Ayuda please 😅
-----------------Lo hice más corto----------------------
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("Introduce el numero de filas de la primer matriz: ");
int f1 = sc.nextInt();
System.out.println("Introduce el numero de columnas de la primer matriz: ");
int c1 = sc.nextInt();
System.out.println("Introduce el numero de filas de la segunda matriz: ");
int f2 = sc.nextInt();
System.out.println("Introduce el numero de columnas de la segunda matriz: ");
int c2 = sc.nextInt();
System.out.println("---Datos ingresados---");
System.out.println("-- Matriz 1 de: " + f1 + "x" + c1 + " --");
System.out.println("-- Matriz 2 de: " + f2 + "x" + c2 + " --");
System.out.println("----------------------");
if (c1 == f2) {
int[][] m1 = new int[f1][c1];
int[][] m2 = new int[f2][c2];
int[][] mR = new int[f1][c2];
System.out.println("-> Comineza matriz 1");
for (int i = 0; i < f1; i++) {
for (int j = 0; j < c1; j++) {
System.out.println("Introduce el valor del elemento " + i + "," + j + ": ");
m1[i][j] = sc.nextInt();
}
}
// Matriz 1
System.out.println("Matriz 1");
for (int i = 0; i < f1; i++) {
for (int j = 0; j < c1; j++) {
System.out.print(m1[i][j] + " ");
}
System.out.println("");
}
// Matriz 2
System.out.println("-> Comienza matriz 2");
for (int i = 0; i < f2; i++) {
for (int j = 0; j < c2; j++) {
System.out.println("Introduce el valor del elemento " + i + "," + j + ": ");
m2[i][j] = sc.nextInt();
}
}
System.out.println("Matriz 2");
for (int i = 0; i < f2; i++) {
for (int j = 0; j < c2; j++) {
System.out.print(m2[i][j] + " ");
}
System.out.println("");
}
// Matriz Resultante
System.out.println("-- Matriz Resultante --");
for (int i = 0; i < f1; i++) {
for (int j = 0; j < c2; j++) {
for (int h = 0; h < c1; h++) {
mR[i][j] += m1[i][h] * m2[h][j];
}
System.out.print(mR[i][j] + " ");
}
System.out.println("");
}
} else {
System.out.println("No se puede realizar la operación");
}
}
Hola Ernesto, te quería preguntar algo que ya se lo he hecho a un usuario que ha comentado tu video.
Ejemplo : si el numero de filas de la "Matriz1" es 11, y el numero de columna de la "Matriz2" es 7, daría una Matriz que debería tener 77 espacios de memoria...
Como es posible crear una Matriz de 77 espacios de memoria si lo máximo que se puede poner son 8 fila y 9 columnas?
Osea quedaría así:
* int [][] matriz1 = new int[11][columnas1];
* int [][] matriz2 = new int[filas2][7];
* int [][] MatrizResultante = new int[8][9];
Pero bien sabemos que 8 multiplicado por 9 es 72!!! y 9 por 9 es 81!! Como podría crear una matriz con 77 espacios de memoria??
Saludos.
Hola compañero ! Para multiplicar Matrices el numero de filas de la matriz uno debe ser igual al numero de columnas de la matriz dos,esa es la condición que se tiene que respetar. Una Matriz con 11 filas solo se puede multiplicar con una matriz de 11 columnas y resultaría en una Matriz de 11 x 11.
Un truco para saber que matrices se pueden multiplicar y que dimensiones va a tener la matriz resultante es el siguiente.
Las matrices se definen por el número de filas y columnas, es decir una matriz de 2 filas y 3 columnas es una matriz de 2X3. Entonces:
matriz 1 matriz 2
2 x 3 3 x 4 Números interioress iguales (3, 3) -> Se pueden Multiplicar.
| |______| |
|__________________| Dimensión matriz producto igual a números interiores 2 X 4
matriz 1 matriz 2
5 x 4 2 x 4 Números interiores diferentes (4, 2) -> No se pueden
| |______| |
multiplicar.
|__________________|
Saludos
@@juanignacio409 Es al revés, el número de columnas de la primera ha de ser igual al de filas de la segunda. Piensa que se multiplica el componente de cada vector de la primera matriz (columna) por cada uno de los términos de fila de la segunda Matriz.
@@juanfraucastro Es cierto!! Gracias por avisar, genial la técnica que pusiste arriba!! Saludos compañero!!
lo imprimi asi:
for (int i = 0; i < 2; i++) {
for (int j = 0; j < 3; j++) {
System.out.print("[" + matriz_uno[i][j] + "]");
}
if(i==0){
System.out.print(" " + "[ " + matriz_dos[0][0] + " ]" + "" + "[ " + matriz_dos[0][1] + " ]");
System.out.print(" " + "[ " + matriz_resultante[0][0] + " ]" + "" + "[ " + matriz_resultante[0][1] + " ]");
}else if(i==1){
System.out.print(" * " + "[ " + matriz_dos[1][0] + " ]" + "" + "[ " + matriz_dos[1][1]+ " ]");
System.out.print(" = " + "[ " + matriz_resultante[1][0] + " ]" + "" + "[ " + matriz_resultante[1][1] + " ]");
System.out.print("
" + "[ " + matriz_dos[2][0] + " ]" + "" + "[ " + matriz_dos[2][1]+ " ]");
}
System.out.println("");
}
Y si es una matriz de 2*2 seguiría los mismos pasos ?
Puedes hacer la lógica para matrices en general, sin importar el tamaño, siempre manteniendo las condiciones para la multiplicación. No es nada complicado. Saludos.
Algún día dará el curso c# desde cero ?
es casi lo mismo que java xd entonces creo que sobra
M parecio complicado darle forma al programa que la programacion del ejercicio
¿Para qué se suele isar esto?
Para Ingenieria sirve bastante.
Una de las aplicaciones de las matrices es cuando se trabaja con las bases de datos, cuando queremos traer grandes flujos de datos (de la base de datos) para después desplegarlos en la aplicación, es una gran idea usar matrices (siempre y cuando los sepas usar) ya que así ahorras recursos y peticiones al servidor.
ufffff ni se por donde empezar no encuentro un punto para empezar
Creo que hay un error en el código. En las estructuras if-else al comparar matriz_resultante[0][0], matriz_resultante[1][0], matriz_resultante[0][1], matriz_resultante[1][1] con el valor 0 para ver si están vacías, ¿no debería ser mejor comparalo con null? De hecho al ejecutarlo varias veces, me salió esto en una de ellas:
[ 3 ][ 3 ][ 0 ] [ 0 ][ 2 ] [ 9 ][ 0 ]
[ 2 ][ 0 ][ 0 ] x [ 3 ][ 2 ] = [ 0 ][ 0 ]
[ 0 ][ 2 ]
Aquí se ve que, si al hacer la suma de las multiplicaciones da 0, el programa lo toma como vacío, mostrando valores incorrectos. La matriz resultante en vez de ser
[ 9 ][ 0 ]
[ 0 ][ 0 ]
debería ser
[ 9 ][ 12 ]
[ 0 ][ 4 ]
Agradecería poder aclarar esto y muchas gracias Ernesto por todo el esfuerzo que haces por llevar este curso adelante 👍
Hola, yo no puse el if-else, tampoco el i
me da el mismo error asi q tratare de programarlo de otra manera
LO RESOLVI COLOCANDO UN PEQUEÑO RETRASO CON HILOS EN LA matriz_resultante,ya q parece q al correrlo varias veces el programa resuelve tan rapido y no se sincroniza bueno eso creo.porq con el retraso que le hice ya no volvvi a ver ese error
@@ezequiel2519 correrlo varias veces y veras que si hace errores como obviar algunos digitos y a saltarse el cero
Yo use for como algunos colegas por aqui para la multiplicacion.
Pero para imprimir use 24 System.out.print jajajajaja xD
JAJAJAJAJAJA x2. Me sentí estúpido al ver que se podía hacer con un for
👌 ok
sigo sin entender pk 22 espacios??
Cuando llegaremos a bases de datos :(
sdfsd Pensé que era el único que deseaba eso mientras veía esto :3
Una pregunta porque pone limite de 5
No entiendo
Para que solamente genere números aleatorios hasta 4, si pones 10 aparecerán valores entre 0 y 9
Yo apenas voy por el curso de Java v:
Yo hice la multiplicación de forma rudimentaria sin estructura condicional , solo le iba indicando el lugar donde guardar cada multiplicación 😧
ayudenme necesito saber multiplicar matrices por el metodo gauss jordan
El método Gauss Jordan sirve para reducir matrices, es decir, para simplificarla y posteriormente resolverla. No es para multiplicar.
Despues de este video a mi hay que quitarme la computadora para no hacer partir un misil intercontinental nuclear. Espero una propuesta de la NASA para no hackearla.
ya tengo los conocimientos necesarios para hackear la nasa
Hmm Álgebra.
logré hacer un código de mierda luego de mucho esfuerzo, donde meto dos matrices de distinto tamaño y las lleno con números aleatorios y luego las multiplico... aquí dejaré el código por si a alguien le interesa xd
import java.util.Scanner;
public class MultiplicacionMatrices {
//el número de filas debe ser igual al número de columnas
public static void main(String[] args) {
//[filas][columnas]
Scanner texto = new Scanner(System.in);
System.out.print("Filas de la Matriz #1: ");
int fila_1 = texto.nextInt();
System.out.print("Columnas de la Matriz #1: ");
int column_1 = texto.nextInt();
System.out.println("
La primera matríz es de " + fila_1 + " x " + column_1 + "
");
System.out.print("Filas de la Matriz #2: ");
int fila_2 = texto.nextInt();
System.out.print("Columnas de la Matriz #2: ");
int column_2 = texto.nextInt();
System.out.println("
La segunda matríz es de " + fila_2 + " x " + column_2 + "
");
System.out.print("Rango de números aleatorios: ");
int r = texto.nextInt() + 1;
/*
int fila_1= ;
int column_1= ;
int fila_2= ;
int column_2= ;
int r = ;
//Esto es para cuando quiera dejar de usar números aleatorios y comprobar que los calculos sí sean exactos
*/
int Matriz_1[][] = new int[fila_1][column_1];
int Matriz_2[][] = new int[fila_2][column_2];
int mult = 0;
//llenando la primera matriz
for (int i = 0; i < fila_1; i++) {
for (int j = 0; j < column_1; j++) {
Matriz_1[i][j] = (int) (Math.random() * r);
}
}
//llenando la segunda matriz
for (int i = 0; i < fila_2; i++) {
for (int j = 0; j < column_2; j++) {
Matriz_2[i][j] = (int) (Math.random() * r);
}
}
if (column_1 == fila_2) {
int Matriz_Resultante[][] = new int[fila_1][column_2];
for (int i = 0; i < column_2; i++) {
for (int j = 0; j < fila_1; j++) {
for (int k = 0; k < column_1; k++) {
Matriz_Resultante[j][i] += (Matriz_1[j][k] * Matriz_2[k][i]);
}
}
}
//imprimiendo
System.out.println("
Matriz 1:");
for (int i = 0; i < fila_1; i++) {
for (int j = 0; j < column_1; j++) {
System.out.print(Matriz_1[i][j] + " ");
}
System.out.println("");
}
System.out.println("
Matriz 2:");
for (int i = 0; i < fila_2; i++) {
for (int j = 0; j < column_2; j++) {
System.out.print(Matriz_2[i][j] + " ");
}
System.out.println("");
}
System.out.println("
Matriz resultante:");
for (int i = 0; i < fila_1; i++) {
for (int j = 0; j < column_2; j++) {
System.out.print(Matriz_Resultante[i][j] + " ");
}
System.out.println("");
}
System.out.println("
");
if (fila_1 >= fila_2) {
for (int i = 0; i < fila_1; i++) {
for (int j = 0; j < column_1; j++) {
if ((i >= fila_1) == false) {
System.out.print("[ " + Matriz_1[i][j] + " ] ");
} else {
System.out.print(" ");
}
}
if ((i == fila_1 / 2) == false) {
System.out.print(" ");
} else {
System.out.print(" x ");//*
}
for (int j = 0; j < column_2; j++) {
if ((i >= fila_2) == false) {
System.out.print("[ " + Matriz_2[i][j] + " ] ");
} else {
System.out.print(" ");
}
}
if ((i == fila_1 / 2) == false) {
System.out.print(" ");
} else {
System.out.print(" = ");//=
}
for (int j = 0; j < column_2; j++) {
if ((i >= fila_1) == false) {
System.out.print("[ " + Matriz_Resultante[i][j] + " ] ");
}
}
System.out.println("");
}
} else if (fila_1 < fila_2) {
//Esto es para cuando la segunda matriz tenga más filas y no se joda cuando se imprima
for (int i = 0; i < fila_2; i++) {
for (int j = 0; j < column_1; j++) {
if ((i >= fila_1) == false) {
System.out.print("[ " + Matriz_1[i][j] + " ] ");
} else {
System.out.print(" ");
}
}
if ((i == fila_2 / 2) == false) {
System.out.print(" ");
} else {
System.out.print(" x ");//*
}
for (int j = 0; j < column_2; j++) {
if ((i >= fila_2) == false) {
System.out.print("[ " + Matriz_2[i][j] + " ] ");
} else {
System.out.print(" ");
}
}
if ((i == fila_1 / 2) == false) {
System.out.print(" ");
} else {
System.out.print(" = ");//=
}
for (int j = 0; j < column_2; j++) {
if ((i >= fila_1) == false) {
System.out.print("[ " + Matriz_Resultante[i][j] + " ] ");
}
}
System.out.println("");
}
}
} else {
System.out.println("Estas matrices no se pueden multiplicar");
}
}
}
No jalo jajajaj’nt
jajaj a la primera...no sale nada xd lpm
joder me hace falta lógica
Creo que debes aprender a programar compañero, esa solución no te habría valido ni el 3 en un examen.