[R-es] Potencia de una matriz

Kjetil Halvorsen kjetil1001 en gmail.com
Sab Nov 14 00:27:51 CET 2009


2009/11/13 Cesar Escalante <c.escalante.c en gmail.com>:
> Jorge, Kjetil, muchas gracias.
> No sabía de la existencia de otras bibliotecas.

R-Forge es un lugar para paquetes "bajo trabajo" . Cuando llegeun, un
día, a CRAN, son
más "oficiales". Mientras solo esta en R-Forge puede ocurrir grandes
cambios de gui, etc.

Kjetil

>
> Al ejecutar el comando
> install.packages("expm", repos="http://R-Forge.R-project.org")
>
> sale el siguiente mensaje:
>
> Warning: unable to access index for repository
> http://R-Forge.R-project.org/bin/windows/contrib/2.9
> Warning message:
> In getDependencies(pkgs, dependencies, available, lib) :
>   package ‘expm’ is not available
>
> Jorge no estoy desarrollando una aplicación concreta. Estaba estudiando y
> tuve esa necesidad. Ya había escrito una función, pero es mejor saber si
> existe una escrita en una biblioteca especializada.
>
> Miré Matrix y no encuentro la función.
>
> Gracias de nuevo.
>
> Saludos.
>
> César Escalante C.
>
>
> El 13 de noviembre de 2009 10:16, Jorge Ivan Velez
> <jorgeivanvelez en gmail.com> escribió:
>>
>> Buenos dias Kjetil y César,
>> Sólo para los archivos:  si la eficiencia es importante en la aplicación,
>> el utilizar la función matpow en la libreria expm de R-Forge es muchísimo
>> mejor. Este es un ejemplo de una matriz A de orden 2x2 cuando k=2 y se
>> realizan 100000 repeticiones:
>> # install.packages("expm", repos="http://R-Forge.R-project.org")
>> require(expm)
>> # matpow
>> system.time(replicate(100000, A %^% 2))
>> #   user  system elapsed
>> #   0.71    0.02    0.72
>> # f2
>> system.time(replicate(100000, f2(A,2)))
>> #   user  system elapsed
>> #   8.92    0.00    8.96
>> Saludos a ambos,
>>                Jorge Ivan Velez
>> 2009/11/13 Kjetil Halvorsen <>
>>>
>>> El paquete expm, no en CRAN, pero en R-forge, tiene una funci'on
>>> matpow
>>>
>>> Kjetil
>>>
>>> 2009/11/13 Jorge Ivan Velez <>:
>>> > Buenas noches César,
>>> >
>>> > Si te refieres a tomar cada elemento de una matriz, digamos A, y
>>> > elevarlos a
>>> > una potencia k, entonces escribir
>>> >
>>> > A^k
>>> >
>>> > en la consola del R es más que suficiente.
>>> >
>>> > Sea k = 2. Si en vez de lo anterior lo que necesitas es B = A x A
>>> > (porque
>>> > k=2), entonces podrías construir una función que lo realice. "A mano"
>>> > escribirías lo siguiente en la consola:
>>> >
>>> > B <- A %*% A
>>> > B
>>> >
>>> > El problema es que cuando k es por ejemplo 10, lo anterior es bastante
>>> > ineficiente.
>>> >
>>> > A continuación te doy varios ejemplos de ambas situaciones. El uso de
>>> > f1 o
>>> > f2 depende de tu aplicación. Si ninguna de las dos opciones es lo que
>>> > buscas, quizás un poco más de detalle podría ayudarnos a ayudarte. De
>>> > qué
>>> > dimensión es la matriz A de tu aplicación y qué valores puede tomar k?
>>> >
>>> > Una librería que podría ser de utilidad podría ser "Matrix", aunque no
>>> > la he
>>> > revisado detalladamente.
>>> >
>>> > # Creando una matriz A
>>> > set.seed(123)
>>> > A <- matrix(rnorm(4), ncol = 2)
>>> > A
>>> >
>>> > # Elevando cada elemento de A a la potencia k
>>> > f1 <- function(x,k) x^k
>>> > f1(A, 2)     # A^2
>>> > f1(A, 5)     # A^5
>>> >
>>> > # Producto matricial de A por si misma k veces
>>> > f2 <- function(x, k){
>>> >        r <- diag(dim(x)[2])
>>> >        for(i in 1:k) r <- r %*% x
>>> >        r
>>> >        }
>>> > f2(A,2) # A x A
>>> > f2(A,3) # A x A x A
>>> > f2(A,5) # A x A x A x A x A
>>> >
>>> > Saludos,
>>> >
>>> >                     Jorge Ivan Velez
>>> >
>>> >
>>> > 2009/11/12 Cesar Escalante <>
>>> >
>>> >> Cordial saludo.
>>> >>
>>> >> Les agradecería que me ayudaran con una función eficiente para
>>> >> calcular
>>> >> potencias de una matriz. ¿Cuál biblioteca la tiene?
>>> >>
>>> >> Gracias de antemano
>>> >>
>>> >>
>>> >> César Escalante C.
>>> >>
>>> >>        [[alternative HTML version deleted]]
>>> >>
>>> >>
>>> >> _______________________________________________
>>> >> R-help-es mailing list
>>> >> R-help-es en r-project.org
>>> >> https://stat.ethz.ch/mailman/listinfo/r-help-es
>>> >>
>>> >>
>>> >
>>> >        [[alternative HTML version deleted]]
>>> >
>>> >
>>> > _______________________________________________
>>> > R-help-es mailing list
>>> > R-help-es en r-project.org
>>> > https://stat.ethz.ch/mailman/listinfo/r-help-es
>>> >
>>> >
>>>
>>>
>>>
>>> --
>>> "... an entire human genome would fit on a music CD."
>>>
>>> --- www.thinkgene.com
>>
>
>



-- 
"... an entire human genome would fit on a music CD."

--- www.thinkgene.com



Más información sobre la lista de distribución R-help-es