r-help-es@r-project.org Hola!! Estoy trabajando con una función del tipo h(x)''B, donde h(x) es un vector columna de q entradas, de igual manera B es un vector columna de dimensión q. Quiero graficar h(x)''B para alguna h(x), por ejemplo h<-function(x) matrix(c(1,x,x^2,x^3), ncol=1) B es un vector columna fijo B=matrix(c(1,2,1,3),ncol=1) Para graficar la función h(x)''B lo que hago es hacer una función nueva hB<-function(x){t(h(x))%*%B} para valores particulares de x la función hace lo que busco> h<-function(x) matrix(c(1,x,x^2,x^3), ncol=1)> B=matrix(c(1,2,1,3),ncol=1)> hB<-function(x){t(h(x))%*%B}> hB(1)[,1] [1,] 7> hB(2)[,1] [1,] 33 Sin embargo cuando intento graficar, me marca un error> y1=seq(-2,2,0.01)> plot(y1,hB(y1))Error in t(h(x)) %*% B : non-conformable arguments Entiendo que primero evalúa en la función h y después multiplica por B y por ende hay un error en las dimensiones. Pero no se que hacer para que la función se evalúe entrada por entrada del vector y1, creo que usar alguna forma vectorizada ayudaría, pero no se como hacerlo. Ayuda por favor :) -- Atte Irma [[alternative HTML version deleted]]
Estimada Irma Zavala Yo tengo los datos en un data.frame, y desde este grafico. Es mi forma, de pronto bastante básica pero de esa forma tengo resutlados. Sin embargo es posible graficar matrices, hay un ejemplo en: http://www.phaget4.org/R/image_matrix.html Javier Marcuzzi On mié, 2013-02-27 at 21:32 -0600, Irma Zavala wrote:> r-help-es en r-project.org > > Hola!! > > Estoy trabajando con una funcin del tipo h(x)'B, donde h(x) es un vector > columna de q entradas, de igual manera B es un vector columna de dimensin > q. > > Quiero graficar h(x)'B para alguna h(x), por ejemplo > > > > h<-function(x) matrix(c(1,x,x^2,x^3), ncol=1) > > B es un vector columna fijo > > B=matrix(c(1,2,1,3),ncol=1) > > > > Para graficar la funcin h(x)'B lo que hago es hacer una funcin nueva > > hB<-function(x){t(h(x))%*%B} > > para valores particulares de x la funcin hace lo que busco > > > > h<-function(x) matrix(c(1,x,x^2,x^3), ncol=1) > > > B=matrix(c(1,2,1,3),ncol=1) > > > hB<-function(x){t(h(x))%*%B} > > > hB(1) > > [,1] > > [1,] 7 > > > hB(2) > > [,1] > > [1,] 33 > > Sin embargo cuando intento graficar, me marca un error > > > y1=seq(-2,2,0.01) > > > plot(y1,hB(y1)) > > Error in t(h(x)) %*% B : non-conformable arguments > > Entiendo que primero evala en la funcin h y despus multiplica por B y > por ende hay un error en las dimensiones. Pero no se que hacer para que la > funcin se evale entrada por entrada del vector y1, creo que usar alguna > forma vectorizada ayudara, pero no se como hacerlo. > > Ayuda por favor :) > > > > > > > > > > > > > _______________________________________________ > R-help-es mailing list > R-help-es en r-project.org > https://stat.ethz.ch/mailman/listinfo/r-help-es
Hola, La traspuesta en la función hB la tienes que aplicar sobre "B", si no no puedes multiplicar los dos vectores/matrices. Y luego antes de hacer el plot, tienes que revisar las dimensiones de tanto y1 y del resultado hB(y1) porque no son iguales y la función plot te dará un nuevo error... Mira el código:> h<-function(x) matrix(c(1,x,x^2,x^3), ncol=1) > B=matrix(c(1,2,1,3),ncol=1) > hB<-function(x){(h(x))%*%*t*(B)} > y1=seq(-2,2,0.01) > y2 <- hB(y1) > > length(y1)[1] *401*> dim(y2)[1] *1204* 4> plot(y1, y2)Error en xy.coords(x, y, xlabel, ylabel, log) : ''x'' and ''y'' lengths differ Saludos, Carlos Ortega www.qualityexcellence.es El 28 de febrero de 2013 04:44, Marcuzzi, Javier Ruben < javier.ruben.marcuzzi@gmail.com> escribió:> Estimada Irma Zavala > > Yo tengo los datos en un data.frame, y desde este grafico. Es mi forma, > de pronto bastante básica pero de esa forma tengo resutlados. > > Sin embargo es posible graficar matrices, hay un ejemplo en: > http://www.phaget4.org/R/image_matrix.html > > Javier Marcuzzi > > On mié, 2013-02-27 at 21:32 -0600, Irma Zavala wrote: > > r-help-es@r-project.org > > > > Hola!! > > > > Estoy trabajando con una funcin del tipo h(x)''B, donde h(x) es un vector > > columna de q entradas, de igual manera B es un vector columna de > dimensin > > q. > > > > Quiero graficar h(x)''B para alguna h(x), por ejemplo > > > > > > > > h<-function(x) matrix(c(1,x,x^2,x^3), ncol=1) > > > > B es un vector columna fijo > > > > B=matrix(c(1,2,1,3),ncol=1) > > > > > > > > Para graficar la funcin h(x)''B lo que hago es hacer una funcin nueva > > > > hB<-function(x){t(h(x))%*%B} > > > > para valores particulares de x la funcin hace lo que busco > > > > > > > h<-function(x) matrix(c(1,x,x^2,x^3), ncol=1) > > > > > B=matrix(c(1,2,1,3),ncol=1) > > > > > hB<-function(x){t(h(x))%*%B} > > > > > hB(1) > > > > [,1] > > > > [1,] 7 > > > > > hB(2) > > > > [,1] > > > > [1,] 33 > > > > Sin embargo cuando intento graficar, me marca un error > > > > > y1=seq(-2,2,0.01) > > > > > plot(y1,hB(y1)) > > > > Error in t(h(x)) %*% B : non-conformable arguments > > > > Entiendo que primero evala en la funcin h y despus multiplica por B y > > por ende hay un error en las dimensiones. Pero no se que hacer para que > la > > funcin se evale entrada por entrada del vector y1, creo que usar alguna > > forma vectorizada ayudara, pero no se como hacerlo. > > > > Ayuda por favor :) > > > > > > > > > > > > > > > > > > > > > > > > > > _______________________________________________ > > R-help-es mailing list > > R-help-es@r-project.org > > https://stat.ethz.ch/mailman/listinfo/r-help-es > > _______________________________________________ > R-help-es mailing list > R-help-es@r-project.org > https://stat.ethz.ch/mailman/listinfo/r-help-es >-- Saludos, Carlos Ortega www.qualityexcellence.es [[alternative HTML version deleted]]
Otra alternativa es usar vectorizacion: # funciones h <- function(x) x^(0:3) # nota el cambio B <- c(1,2,1,3) hB <- function(x) sum(h(x) * B) # nota el cambio hB <- Vectorize(hB) # con esto, x puede ser un vector hB(1) hB(2) hB(c(1,2)) # vector # grafico y1 <- seq(-2,2,0.01) plot(y1, hB(y1), type = ''l'', las = 1) Saludos, Jorge.- 2013/2/28 Carlos Ortega <>> Hola, > > La traspuesta en la función hB la tienes que aplicar sobre "B", si no no > puedes multiplicar los dos vectores/matrices. > Y luego antes de hacer el plot, tienes que revisar las dimensiones de tanto > y1 y del resultado hB(y1) porque no son iguales y la función plot te dará > un nuevo error... > > Mira el código: > > > h<-function(x) matrix(c(1,x,x^2,x^3), ncol=1) > > B=matrix(c(1,2,1,3),ncol=1) > > hB<-function(x){(h(x))%*%*t*(B)} > > y1=seq(-2,2,0.01) > > y2 <- hB(y1) > > > > length(y1) > [1] *401* > > dim(y2) > [1] *1204* 4 > > > plot(y1, y2) > Error en xy.coords(x, y, xlabel, ylabel, log) : > ''x'' and ''y'' lengths differ > > > Saludos, > Carlos Ortega > www.qualityexcellence.es > > > > El 28 de febrero de 2013 04:44, Marcuzzi, Javier Ruben < > > escribió: > > > Estimada Irma Zavala > > > > Yo tengo los datos en un data.frame, y desde este grafico. Es mi forma, > > de pronto bastante básica pero de esa forma tengo resutlados. > > > > Sin embargo es posible graficar matrices, hay un ejemplo en: > > http://www.phaget4.org/R/image_matrix.html > > > > Javier Marcuzzi > > > > On mié, 2013-02-27 at 21:32 -0600, Irma Zavala wrote: > > > r-help-es@r-project.org > > > > > > Hola!! > > > > > > Estoy trabajando con una funcin del tipo h(x)''B, donde h(x) es un > vector > > > columna de q entradas, de igual manera B es un vector columna de > > dimensin > > > q. > > > > > > Quiero graficar h(x)''B para alguna h(x), por ejemplo > > > > > > > > > > > > h<-function(x) matrix(c(1,x,x^2,x^3), ncol=1) > > > > > > B es un vector columna fijo > > > > > > B=matrix(c(1,2,1,3),ncol=1) > > > > > > > > > > > > Para graficar la funcin h(x)''B lo que hago es hacer una funcin nueva > > > > > > hB<-function(x){t(h(x))%*%B} > > > > > > para valores particulares de x la funcin hace lo que busco > > > > > > > > > > h<-function(x) matrix(c(1,x,x^2,x^3), ncol=1) > > > > > > > B=matrix(c(1,2,1,3),ncol=1) > > > > > > > hB<-function(x){t(h(x))%*%B} > > > > > > > hB(1) > > > > > > [,1] > > > > > > [1,] 7 > > > > > > > hB(2) > > > > > > [,1] > > > > > > [1,] 33 > > > > > > Sin embargo cuando intento graficar, me marca un error > > > > > > > y1=seq(-2,2,0.01) > > > > > > > plot(y1,hB(y1)) > > > > > > Error in t(h(x)) %*% B : non-conformable arguments > > > > > > Entiendo que primero evala en la funcin h y despus multiplica por B y > > > por ende hay un error en las dimensiones. Pero no se que hacer para que > > la > > > funcin se evale entrada por entrada del vector y1, creo que usar alguna > > > forma vectorizada ayudara, pero no se como hacerlo. > > > > > > Ayuda por favor :) > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > _______________________________________________ > > > R-help-es mailing list > > > R-help-es@r-project.org > > > https://stat.ethz.ch/mailman/listinfo/r-help-es > > > > _______________________________________________ > > R-help-es mailing list > > R-help-es@r-project.org > > https://stat.ethz.ch/mailman/listinfo/r-help-es > > > > > > -- > Saludos, > Carlos Ortega > www.qualityexcellence.es > > [[alternative HTML version deleted]] > > > _______________________________________________ > R-help-es mailing list > R-help-es@r-project.org > https://stat.ethz.ch/mailman/listinfo/r-help-es > >[[alternative HTML version deleted]]