Foros del Web » Programación para mayores de 30 ;) » C/C++ »

Multiplicar 2 matrices en C

Estas en el tema de Multiplicar 2 matrices en C en el foro de C/C++ en Foros del Web. Multiplicacion de matrices--- please no entiendo la multiplicacion de las matrices,si me podeis hechar un cable os lo agradeceria ... @import url("http://static.forosdelweb.com/clientscript/vbulletin_css/geshi.css"); Código C: Ver ...
  #1 (permalink)  
Antiguo 14/04/2010, 09:50
 
Fecha de Ingreso: marzo-2010
Mensajes: 127
Antigüedad: 14 años, 8 meses
Puntos: 2
Busqueda Multiplicar 2 matrices en C

Multiplicacion de matrices---
please no entiendo la multiplicacion de las matrices,si me podeis hechar un cable os lo agradeceria ...

Código C:
Ver original
  1. /*5.    Dadas dos matrices de flotantes de 3 filas y 2 columnas y 2 columnas y
  2. 3 filas respectivamente. Crear un programa para darles valor inicial y obtener
  3.  la matriz producto de las dos iniciales. El programa
  4.  finalizará mostrando las tres matrices en pantalla con una visualización en forma
  5.   de matriz.*/
  6.  
  7.  
  8.   #include<stdio.h>
  9.  
  10.   void main(void){
  11.  
  12.     float mat[3][2],mat2[2][3];
  13.     int i,j;
  14.         printf("Introduce 6 valores para la primera matriz:\n");
  15.     for(i=0;i<3;i++){
  16.         for(j=0;j<2;j++){
  17.         scanf("%f",&mat[i][j]);
  18.             }
  19.         }
  20.  
  21.         printf("Introduce 6 valores para la segunda matriz:\n");
  22.         for(i=0;i<2;i++){
  23.             for(j=0;j<3;j++){
  24.              scanf("%f",&mat2[i][j]);
  25.             }
  26.             }
  27.             printf("***LA MATRIZ PRODUCTO DE LAS 2 INDICADAS ES:\n");
  28.  
  29.  
  30. // AQUI ME KEDO,NO se como realizarlo...


segun un pdf que vi por internet ponian un ejemplo pero no lo entendi ,si me podierais indicar el proceso mil gracias
  #2 (permalink)  
Antiguo 14/04/2010, 12:14
aguirremanuel
Invitado
 
Mensajes: n/a
Puntos:
Información Respuesta: Multiplicar 2 matrices en C

Aquí está la parte de la multiplicacion mi pana :

Código C:
Ver original
  1. for (i = 0 ; i < 3 ; i++ ) //i para las filas de la matriz resultante
  2. {
  3.     for (k = 0 ; k < 3 ; k++ ) // k para las columnas de la matriz resultante
  4.     {
  5.         temporal = 0 ;
  6.         for (j = 0 ; j < 2 ; j++ ) //j para realizar la multiplicacion de
  7.                 {                                   //los elementos   de la matriz
  8.             temporal += mat[i][j] * mat2[j][k];
  9.             resultado[i][k] = temporal ;
  10.         }
  11.         }
  12. }

Suerte...!!!
  #3 (permalink)  
Antiguo 14/04/2010, 12:56
 
Fecha de Ingreso: marzo-2010
Mensajes: 127
Antigüedad: 14 años, 8 meses
Puntos: 2
Respuesta: Multiplicar 2 matrices en C

hola gracias por el codigo.. mi pregunta es como se el numero de filas y columnas de la matriz resultante si en el enunciado no me lo dice?,y las 2 primeras matrices tienen diferente numero de filas y columnas..
  #4 (permalink)  
Antiguo 14/04/2010, 15:51
aguirremanuel
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Multiplicar 2 matrices en C

Bueno para poder multiplicar dos matrices, debe cumplirse la condicion de que el numero de columnas de la primera matriz sea igual al numero de filas de la segunda matriz y en tu caso se cumple. luego la multiplicacion es un poco complicada, te paso unos links para que veas como se hace la multiplicacion :

[URL="http://es.wikipedia.org/wiki/Matriz_%28matem%C3%A1tica%29#Producto"]http://es.wikipedia.org/wiki/Matriz_%28matem%C3%A1tica%29#Producto[/URL]
[URL="http://es.wikipedia.org/wiki/Multiplicaci%C3%B3n_de_matrices"]http://es.wikipedia.org/wiki/Multiplicaci%C3%B3n_de_matrices[/URL]
[URL="http://es.wikibooks.org/wiki/%C3%81lgebra_Lineal/Multiplicaci%C3%B3n_de_matrices"]http://es.wikibooks.org/wiki/%C3%81lgebra_Lineal/Multiplicaci%C3%B3n_de_matrices[/URL]
  #5 (permalink)  
Antiguo 15/04/2010, 11:03
 
Fecha de Ingreso: abril-2010
Mensajes: 5
Antigüedad: 14 años, 7 meses
Puntos: 0
Respuesta: Multiplicar 2 matrices en C

Cita:
Iniciado por aguirremanuel Ver Mensaje
Aquí está la parte de la multiplicacion mi pana :

Código C:
Ver original
  1. for (i = 0 ; i < 3 ; i++ ) //i para las filas de la matriz resultante
  2. {
  3.     for (k = 0 ; k < 3 ; k++ ) // k para las columnas de la matriz resultante
  4.     {
  5.         temporal = 0 ;
  6.         for (j = 0 ; j < 2 ; j++ ) //j para realizar la multiplicacion de
  7.                 {                                   //los elementos   de la matriz
  8.             temporal += mat[i][j] * mat2[j][k];
  9.             resultado[i][k] = temporal ;
  10.         }
  11.         }
  12. }

Suerte...!!!


Buenas tardes!! Soy nuevo por el foro, estaba buscando algún sitio dónde gente que sepa del tema pudiera ayudarme a resolver las dudas que tengo sobre C++

Resulta que estoy intentando hacer el Método de los Mínimos cuadrados, y he llegado a la siguiente ecuación de matrices At*A*X=At*B

A es una matriz de orden 2x10
B es una matriz de orden 10x2
X es la matriz de los coeficientes (a)
(b)
At es la traspuesta de A, por lo tanto de orden 10x2


Esto es lo que llevo de código:

#include <iostream>
using namespace std;

int main ()
{
int a[10][2],b[10][1],x[2][1],at[2][10];
int i, j, k,sol[2][2],sol2[2][2];
cout << "MATRIZ A." << endl; // Introduce los elementos de la matriz A
for(i = 0 ; i < 10 ; i++){
for(j = 0 ; j < 2 ; j++){
cout << "Introduzca el valor del elemento [" << i << "]["
<< j << "]: ";
cin >> a[i][j];
}
}
cout << endl;
for(i = 0 ; i < 10 ; i++){ // Imprime los elementos de la matriz A
for(j = 0 ; j < 2 ; j++){
cout << a[i][j] << " ";
if(j == 1)
cout << "\n";
}
}
cout << endl;
cout << "MATRIZ B." << endl; // Introduce los elementos de la matriz B
for(i = 0 ; i < 10 ; i++){
for(j = 0 ; j < 1 ; j++){
cout << "Introduzca el valor del elemento [" << i << "]["
<< j << "]: ";
cin >> b[i][j];
}
}
cout<<"MATRIZ B";
cout << endl;
for(i = 0 ; i < 10 ; i++){ // Imprime los elementos de la matriz B
for(j = 0 ; j < 1 ; j++){
cout << b[i][j] << " ";
if(j == 0)
cout << endl;
}
}



// Averiguamos la matriz traspuesta de A, At
cout << endl;
for(i=0;i<10;i++){
for(j=0;j<2;j++){
at[j][i]=a[i][j]; }
}
cout << "\nMATRIZ A traspuesta.\n\n" << endl;
for(i = 0 ; i < 2 ; i++){ // Imprime los elementos de la matriz At
for(j = 0 ; j < 10 ; j++){
cout << at[i][j] << " ";
if(j == 9)
cout << endl;
}
}



for(i=0;i<2;i++){ /* Realiza el producto de At*B*/
for(j=0;j<1;j++){
sol[i][j]=0;
for(k=0;k<10;k++){
sol[i][j]=sol[i][j]+(at[i][k]*a[k][j]);
}
}
}


cout << endl << "MATRIZ C (Matriz At*B)." << endl;
cout << endl;
for(i=0;i<2;i++){ // Imprime la matriz resultado
for(j=0;j<1;j++){
cout << sol[i][j] << " ";
if(j==0)
cout << endl;
}
}






for(i=0;i<2;i++){ /* Realiza el producto de At*A*/
for(j=0;j<2;j++){
sol[i][j]=0;
for(k=0;k<10;k++){
sol2[i][j]=sol2[i][j]+(at[i][k]*b[k][j]);
}
}
}


cout << endl << "MATRIZ D (Matriz At*A)." << endl;
cout << endl;
for(i=0;i<2;i++){ // Imprime la matriz resultado
for(j=0;j<2;j++){
cout << sol2[i][j] << " ";
if(j==0)
cout << endl;
}
}

system("PAUSE");
return 0;
}



Mi problema es que no se bien como hacer la multiplicación, he segido los pasos que ponen ahí pero no me sale correctamente, a ver si alguien le puede echar un vistazo y decirme dónde me estoy equivocando.

Un saludo y muchas gracias de antemano!!
  #6 (permalink)  
Antiguo 15/04/2010, 12:21
 
Fecha de Ingreso: marzo-2010
Mensajes: 127
Antigüedad: 14 años, 8 meses
Puntos: 2
Información Respuesta: Multiplicar 2 matrices en C

Hola,POR lo que he podido ver de lo que voy teniendo claro es que la matriz resultante del producto no deberia de ser como la indicas
haber ...
si una matriz a[3][2] y una matriz B[2][3] la matriz resultante del multiplicacion sera mult[3][3]; es decir coges el numero de filas de la primera y el numero de columnas de la segunda.. esa es la conclusion que saque de ir buscandoo por internet el algoritmo..

luego lo de la multiplicacion ... pues yo aunn tengo dudas como el orden de los for para la multiplicacion porque i k y j ..... pero sigo investigando.. Salu2
  #7 (permalink)  
Antiguo 15/04/2010, 13:04
 
Fecha de Ingreso: marzo-2010
Mensajes: 127
Antigüedad: 14 años, 8 meses
Puntos: 2
Respuesta: Multiplicar 2 matrices en C

#include <stdio.h>

void main(void)
{

float mat1[3][2],mat2[2][3],resultado=0, resul[3][3];
int i,j,c;
for(i=0;i<3;i++)
for(j=0;j<3;j++)
resul[i][j]=0;
for(i=0;i<3;i++){
for(j=0;j<2;j++){
printf("\nintroduzca un valor mat1[%d][%d]: ",i,j);
scanf("%f", &mat1[i][j]);
}
}
for(i=0;i<2;i++){
for(j=0;j<3;j++){
printf("\nintroduzca un valor mat2[%d][%d]: ",i,j);
scanf("%f", &mat2[i][j]);
}
}
for(i=0;i<3;i++){
for(c=0;c<3;c++){
for(j=0;j<2;j++){
resultado=resultado+(mat1[i][j]*mat2[j][c]);
}
resul[i][c]=resultado;
resultado=0;
}
}
/*Matriz 1*/
printf("\nMatriz 1\n");
for(i=0;i<3;i++){
for(j=0;j<2;j++){
printf("\t%.2f",mat1[i][j]);
}
printf("\n");
}
/*Matriz 2*/
printf("\nMatriz 2\n");
for(i=0;i<2;i++){
for(j=0;j<3;j++){
printf("\t%.2f",mat2[i][j]);
}
printf("\n");
}
/*Matriz multiplicación*/
printf("\nMatriz resultado\n");
for(i=0;i<3;i++){
for(c=0;c<3;c++){
printf("\t%.2f",resul[i][c]);
}
printf("\n");
}
}
  #8 (permalink)  
Antiguo 16/04/2010, 06:45
 
Fecha de Ingreso: abril-2010
Mensajes: 11
Antigüedad: 14 años, 7 meses
Puntos: 0
Respuesta: Multiplicar 2 matrices en C

Cita:
Iniciado por guzmy5 Ver Mensaje
Buenas tardes!! Soy nuevo por el foro, estaba buscando algún sitio dónde gente que sepa del tema pudiera ayudarme a resolver las dudas que tengo sobre C++

Resulta que estoy intentando hacer el Método de los Mínimos cuadrados, y he llegado a la siguiente ecuación de matrices At*A*X=At*B

A es una matriz de orden 2x10
B es una matriz de orden 10x2
X es la matriz de los coeficientes (a)
(b)
At es la traspuesta de A, por lo tanto de orden 10x2

Esto es lo que llevo de código:

Mi problema es que no se bien como hacer la multiplicación, he segido los pasos que ponen ahí pero no me sale correctamente, a ver si alguien le puede echar un vistazo y decirme dónde me estoy equivocando.

Un saludo y muchas gracias de antemano!!
Buenas Guzmy, no he entrado en profundidad a comprobar que has realizado bien las multiplicaciones de A*At y de At*b, aunque por las dimensiones de las matrices resultantes parecen estar bien.

Ahora bien, con esos productos calculados, lo siguiente sería que resolvieras el Sistema de Ecuaciones Lineales Determinado que resulta. Tendrías que coger A ampliada, es decir: (A*At|At*b), y triangularizarla.

Ahora mismo no tengo ni idea de como triangularizar una matriz, pero seguro que en San Google está.

Un último apunte, la matriz A tiene que ser base, por lo que no estaría de más introducir una comprobación después de que el usuario introduzca los valores de A, que verificara que los vectores de la matriz resultante son linealmente independientes.

Etiquetas: matrices, multiplicar
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 16:32.