DeNunCianDo

DeNunCianDo (https://www.denunciando.com/)
-   Programacion (https://www.denunciando.com/programacion-115/)
-   -   sugerencia (ACLARO DUDAS SOBRE PROGRAMACIÓN) (https://www.denunciando.com/programacion-115/66794-sugerencia-aclaro-dudas-sobre-programacion.html)

DIEGOTATA 10-11-2008 21:26:22

otro ejemplo en c++
 
otro ejemplo realizado en c++

DIEGOTATA 10-11-2008 21:53:40

producto de matrices en vb
 
Producto de matrices

Sólo se pueden multiplicar dos matrices si el número de columnas de la primera coincide con el número de filas de la segunda. El resultado es una matriz de tantas filas como tiene la primera y tantas columnas la segunda. Además, esta operación no es conmutativa, es decir, el orden de los factores sí altera el producto. Expresado algebraicamente:

A(m,n) x B(n,p) = R(m,p)

De ello se deduce que para que dos matrices se puedan multiplicar en los dos sentidos, es decir, para que podamos efectuar A x B y B x A, las matrices deben ser cuadradas. Ahora bien, la matriz resultante en cada caso sería diferente, porque no es lo mismo A x B que B x A. Esto, como veremos más adelante, tiene una importancia crucial en GDI+, y veremos que variando el orden en que multipliquemos las matrices obtendremos transformaciones diferentes.

Los elementos de la matriz producto R no se calculan multiplicando los correspondientes de las matrices A y B, como es el caso de la suma. Requiere alguna cuenta más. Hemos preparado un pequeño truco fácil de seguir que, además de calcular el producto de matrices, nos servirá de guía para escribir, al igual que hemos hecho en el apartado anterior, una función en Visual Basic que, dadas dos matrices cualesquiera que cumplan los requisitos arriba expuestos, nos calculará su matriz producto.

Vamos a multiplicar las siguientes matrices A x B y obtendremos la matriz R, cuyo número de filas es igual al número de filas de A (2) y cuyo número de columnas es igual al número de columnas de B (2). Asímismo, el número de filas de A coincide con el de columnas de B (2). Puesto que vamos a basarnos en este truco para escribir una función en Visual Basic, numeraremos los índices de cada elemento en base 0.

http://www.elguille.info/colabora/pu...s/image065.gif

El truco siguiente halla uno a uno los elementos de la matriz producto R.
Hallaremos, para ejemplificarlo, el elemento R(1,0).

Primero escribirmos:

A( , ) * B( , )

Y lo repetimos tantas veces como el número de columnas de la matriz A = número de filas de la matriz B = 3

A( , ) * B( , )
A( , ) * B( , )
A( , ) * B( , )

El primer índice del elemento que estamos hallando R(1,0) será el primer índice de todos los elementos de A, y el segundo índice R(1,0) será el segundo índice de todos los elementos B:

A(1, ) * B( ,0)
A(1, ) * B( ,0)
A(1, ) * B( ,0)

Añadimos los índices que faltan empezando por cero (o por 1, si hubiésemos definido los índices en base 1) e incrementándolos en una unidad de arriba a abajo:

A(1,0) * B(0 ,0)
A(1,1) * B(1 ,0)
A(1,2) * B(2 ,0)

Localizamos el valor de cada elemento en las matrices A y B, efectuamos las multiplicaciones y sumamos los resultados:

A(1,0) * B(0 ,0) = 3 * 1 = 3
A(1,1) * B(1 ,0) = 2 * 3 = 6
A(1,2) * B(2 ,0) = 1 * 2 = 2

R(1,0) = 3 + 6 + 2 = 11

Aplicando este sencillo truco a cada uno de los elementos de R obtenemos la matriz producto R = A x B:

http://www.elguille.info/colabora/pu...s/image067.gif

He aquí la función:

Public Function Producto(ByVal A(,) As Decimal, ByVal B(,) As Decimal) As Decimal(,)

'Comprobamos que las matrices cumplen los requisitos
If A.GetUpperBound(1) <> B.GetUpperBound(0) Then
Exit Function
End If

Dim i, j, k As Short
'Creamos la matriz producto
Dim R(A.GetUpperBound(0), B.GetUpperBound(1)) As Decimal

'Este array de dos columnas
'es meramente operativo
'equivale a las dos columnas
'que hemos creado en el ejemplo:
'A(1,0) * B(0 ,0)
'A(1,1) * B(1 ,0)
'A(1,2) * B(2 ,0)
Dim T(A.GetUpperBound(1), 1) As Decimal

'Los dos primeros bucles For
'sirven para ir visitando
'todas las posiciones de la matriz R
For i = 0 To R.GetUpperBound(0)
For j = 0 To R.GetUpperBound(1)

'i contiene el primer índice de R
'que colocamos en todas las posiciones
'A(i, ) de los elementos de la primera matriz
'A la vez, en la segunda posción A( ,k)
'vamos aumentando el índice desde cero
'hasta el número de columnas de A,
'que coincide con el de filas de B
'igual que hemos hecho en el ejemplo
For k = 0 To A.GetUpperBound(1)
T(k, 0) = A(i, k)
Next

'j contiene el segundo índice de R
'que colocamos en todas las posiciones
'B(,j) de los elementos de la segunda matriz
'A la vez, en la primera posción B(k, )
'vamos aumentando el índice desde cero
'hasta el número de filas de B,
'que coincide con el de columnas de A
'igual que hemos hecho en el ejemplo
For k = 0 To B.GetUpperBound(0)
T(k, 1) = B(k, j)
Next

'Ya tenemos definidos todos los elementos.
'Multiplicamos cada pareja del array T
'y vamos acumulando los resultados.
'El resultado final lo colocamos en su posición
'en la matriz producto R
'exactamente igual que en el ejemplo
For k = 0 To T.GetUpperBound(0)
R(i, j) += T(k, 0) * T(k, 1)
Next

Next
Next

Return R

End Function

Pruebe el lector a multiplicar las matrices del ejemplo:

Private Sub Prueba_de_producto()
Dim A(,) As Decimal = {{1, 2, 3}, {3, 2, 1}}
Dim B(,) As Decimal = {{1, 2}, {3, 1}, {2, 1}}

Dim R(,) As Decimal = Producto(A, B)

MessageBox.Show(String.Format("{0} {1}" _
& ControlChars.CrLf & "{2} {3}", _
R(0, 0), R(0, 1), R(1, 0), R(1, 1)))

End Sub

Tipos de matrices

hernanal321 12-11-2008 01:10:19

muchas gracias me sirvio mucho

*KpErUzZa* 12-11-2008 15:17:11

eso que eeeessss

scrusher 13-11-2008 15:47:15

diego excelente aporte men, se le agradece bastante en verdad me sirve bastnate, pronto les estare publicando como trabajar con redes neuronales artificiales a punta de matrices, diego de neuvo gracias por el aportazo............kaperuza eso es codigo de programacion hecho en visual basic para multiplicar matrices.....

Sasuke. 13-11-2008 20:07:22

ayudeme a conseguir un programa para volver el windows otra ves original

mas info leete http://www.denunciando.com/showthread.php?t=67786

-[-MagoDark-]- 07-01-2009 02:54:14

tiago no tenes el windows original :L ???

KARONTE 14-01-2009 13:09:21

pregunta.

Como hago en .net (visual basic) la salida para windows mobile 4.0 o superior? y claro la compilacion.

chisto23 14-01-2009 13:38:49

no entendi la sugerencia explique mas


La franja horaria es GMT -5. Ahora son las 03:48:59.

Desarrollado por: vBulletin® Versión 3.8.9
Derechos de Autor ©2000 - 2026, Jelsoft Enterprises Ltd.

DeNunCianDo.CoM ©

Page generated in 0,03841 seconds with 8 queries

SEO by vBSEO