Ver Mensaje Individual
Antiguo 10-11-2008 , 21:53:40   #12
DIEGOTATA
Denunciante Notable
No Tiene Avatar Configurado
Me Gusta
Estadisticas
Mensajes: 744
Me Gusta Recibidos: 3
Me Gustas Dados: 28
Ingreso: 26 sep 2008

Temas Nominados a TDM
Temas Nominados Temas Nominados 0
Nominated Temas Ganadores: 0
Reputacion Poder de Credibilidad: 17
Puntos: 3458
DIEGOTATA tiene mucho para estar orgullosoDIEGOTATA tiene mucho para estar orgullosoDIEGOTATA tiene mucho para estar orgullosoDIEGOTATA tiene mucho para estar orgullosoDIEGOTATA tiene mucho para estar orgullosoDIEGOTATA tiene mucho para estar orgullosoDIEGOTATA tiene mucho para estar orgullosoDIEGOTATA tiene mucho para estar orgullosoDIEGOTATA tiene mucho para estar orgullosoDIEGOTATA tiene mucho para estar orgullosoDIEGOTATA tiene mucho para estar orgulloso
  
Shocked 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.



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:



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

__________________
Me sali de denunciando por que me volvi GAY








DIEGOTATA no está en línea   Responder Citando
 
Page generated in 0,07891 seconds with 11 queries