elevar matrices a una potencia

22/10/2008 - 19:26 por jorge c | Informe spam
Estoy trabajando problemas de cadenas de Markov, deseo conocer ¿Cómo excel
puede devolver el resultado de elevar una matriz a cualquier potencia?
Simplicar el proceso de mmult, el cual lo hace progresivamente multiplicando
la matriz por si misma las veces que se desee.

Gracias por la ayuda...

Preguntas similare

Leer las respuestas

#1 Héctor Miguel
22/10/2008 - 19:54 | Informe spam
hola, jorge !

Estoy trabajando problemas de cadenas de Markov, deseo conocer
Como excel puede devolver el resultado de elevar una matriz a cualquier potencia?
Simplicar el proceso de mmult, el cual lo hace progresivamente multiplicando la matriz por si misma las veces que se desee.



visita esta pagina: -> http://www.me.utexas.edu/~jensen/ORMM/instruction/units/models/stoch_resources.html
y/o descarga ejemplos de: -> http://www.me.utexas.edu/~jensen/ORMM/frontpage/jensen.lib/index.html
(revisa la seccion de probabilidades)

si cualquier duda (o informacion adicional)... comentas ?
saludos,
hector.
Respuesta Responder a este mensaje
#2 Héctor Miguel
22/10/2008 - 19:54 | Informe spam
hola, jorge !

Estoy trabajando problemas de cadenas de Markov, deseo conocer
Como excel puede devolver el resultado de elevar una matriz a cualquier potencia?
Simplicar el proceso de mmult, el cual lo hace progresivamente multiplicando la matriz por si misma las veces que se desee.



visita esta pagina: -> http://www.me.utexas.edu/~jensen/ORMM/instruction/units/models/stoch_resources.html
y/o descarga ejemplos de: -> http://www.me.utexas.edu/~jensen/ORMM/frontpage/jensen.lib/index.html
(revisa la seccion de probabilidades)

si cualquier duda (o informacion adicional)... comentas ?
saludos,
hector.
Respuesta Responder a este mensaje
#3 Cacho
22/10/2008 - 22:49 | Informe spam
Hola! Jorge C

Quizás también te ayude la siguiente macro que eleva matrices a potencias
enteras:
_____________________________________

Sub MatrizAlaN()
Dim Rng As Range, Pot, ii As Integer
Dim MiForm As String

On Error Resume Next
Set Rng = Application.InputBox(Prompt:="Seleccione una matriz cuadrada",
Type:=8)
If Rng Is Nothing Then Exit Sub
If Rng.Columns.Count <> Rng.Rows.Count Then
MsgBox "La matriz seleccionada no es cuadrada."
Rng.Select: Set Rng = Nothing: Exit Sub
End If
If Evaluate("COUNT(" & Rng.Address & ")") <> (Rng.Columns.Count *
Rng.Columns.Count) Then
MsgBox "La matriz seleccionada contiene términos no numéricos."
Rng.Select: Set Rng = Nothing: Exit Sub
End If

Pot = Application.InputBox(Prompt:="Indique la potencia", Type:=1)
If Pot = 0 Then
Set Rng = Nothing: Exit Sub
End If
On Error GoTo 0

If Int(Pot) <> Pot Or Pot < 2 Then
MsgBox "La potencia debe ser un entero positivo mayor que 1"
Set Rng = Nothing: Exit Sub
End If

MiForm = "="
For ii = 1 To Pot - 1: MiForm = MiForm & "MMULT(": Next ii
MiForm = MiForm & Rng.Address(ReferenceStyle:=xlR1C1)

For ii = 1 To Pot - 1
MiForm = MiForm & ", " & Rng.Address(ReferenceStyle:=xlR1C1) & ")"
Next ii

With Rng.CurrentRegion.Offset(1 + Rng.CurrentRegion.Rows.Count)
.CurrentRegion.ClearContents
Range(.Item(1), .Cells(Rng.Rows.Count, Rng.Columns.Count)).FormulaArray =
MiForm
.Replace What:="$", Replacement:="", LookAt:=xlPart
End With

Set Rng = Nothing
End Sub
_____________________________________

Saludos, Cacho.
Respuesta Responder a este mensaje
#4 Cacho
22/10/2008 - 23:01 | Informe spam
Hola! Jorge C
Como el editor del Foro "corta" algunas líneas del código, la re-envío:

___________________________________________

Sub MatrizAlaN()
Dim Rng As Range, Pot, ii As Integer
Dim MiForm As String

On Error Resume Next
Set Rng = Application.InputBox( _
Prompt:="Seleccione una matriz cuadrada", Type:=8)
If Rng Is Nothing Then Exit Sub
If Rng.Columns.Count <> Rng.Rows.Count Then
MsgBox "La matriz seleccionada no es cuadrada."
Rng.Select: Set Rng = Nothing: Exit Sub
End If
If Evaluate("COUNT(" & Rng.Address & ")") <> _
(Rng.Columns.Count * Rng.Columns.Count) Then
MsgBox "La matriz seleccionada contiene términos no numéricos."
Rng.Select: Set Rng = Nothing: Exit Sub
End If

Pot = Application.InputBox(Prompt:="Indique la potencia", Type:=1)
If Pot = 0 Then
Set Rng = Nothing: Exit Sub
End If
On Error GoTo 0

If Int(Pot) <> Pot Or Pot < 2 Then
MsgBox "La potencia debe ser un entero positivo mayor que 1"
Set Rng = Nothing: Exit Sub
End If

MiForm = "="
For ii = 1 To Pot - 1: MiForm = MiForm & "MMULT(": Next ii
MiForm = MiForm & Rng.Address(ReferenceStyle:=xlR1C1)

For ii = 1 To Pot - 1
MiForm = MiForm & ", " & Rng.Address(ReferenceStyle:=xlR1C1) & ")"
Next ii

With Rng.CurrentRegion.Offset(1 + Rng.CurrentRegion.Rows.Count)
.CurrentRegion.ClearContents
Range(.Item(1), .Cells(Rng.Rows.Count, _
Rng.Columns.Count)).FormulaArray = MiForm
.Replace What:="$", Replacement:="", LookAt:=xlPart
End With

Set Rng = Nothing
End Sub
___________________________________________


Saludos, Cacho.
Respuesta Responder a este mensaje
#5 Cacho
23/10/2008 - 05:40 | Informe spam
Hola! Jorge C
Aquí te dejo una versión "masterizada" de la macro anterior:

http://www.mediafire.com/file/1mxus...trices.xls

En efecto, en esta versión no se observan los problemas de la versión
anterior cuando la potencia es mayor a 30.

Saludos, Cacho.
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida