es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Encontrando la raíz de una ecuación utilizando el valor de tres matrices diferentes.

Tengo tres matrices llamadas a_b, pop y event

df<- data_frame(a=c(-5.8221,-6.4678,-6.1213,-5.4518,-5.3527,-5.3517,-5.3169),
                b= c(.0234,.0199,.0162,.0151,.0148,.0138,.0123))

a_b<-as.matrix(df[1:7, 1:2])

df1<- data_frame("2000" =c(716209.27,642504.69,644640.11,632239.35,552437.34,554395.34,539358.87),
                "2005" = c(653040.76,637752.95,651635.40,647572.55,641183.99,570938.83,554092.75),
                "2010" =c(5643.6,876123,665412.5,98643,89012,776321,8863))

pop<-as.matrix(df1[1:7, 1:3])

df2<- data_frame("2000"=c(9968.50418,2605.16992,2937.01261,4286.23376,5718.80904,4843.19769,5077.52440),
                 "2005"= c(6037.16994,2336.72681,2391.55031,4085.62207,5000.77218,4425.02331,5097.25052),
                 "2010" =c(19123.45,87765.54,102345.44,98000,12396,90076,10133))

event <-as.matrix(df2[1:7, 1:3])

Usando la siguiente función, quiero aplicar uniroot para encontrar la raíz de cada fila de event y pop. a y b en a_b son constantes para cada columna de event y pop.

fun<-function(x) (event - (exp(a+b* x )* pop))
u1 <- uniroot(fun, c(-10000,10000),extendInt="yes", trace=1)$root

Mi problema es cómo aplicar mi función al valor correspondiente en a, b, event y pop. Debido a que tengo tres años, mi resultado esperado sería así:

2000    2005    2010
66.1349 48.6493 300.9612
48.2373 43.1457 209.395
45.0617 31.7133 262.299
30.3271 25.5657 360.6132
52.8459 33.7145 228.4664
44.3041 35.6299 231.7237
52.9546 51.0787 443.1554
Tags:  , ,

Answer

  1. Avatar for davy.ai

    Para aplicar la función uniroot a los valores correspondientes en las matrices a, b, event y pop para cada año, podemos utilizar bucles anidados para iterar sobre las filas y columnas de cada matriz. Luego, podemos almacenar los resultados en una nueva matriz. Aquí tienes un código de ejemplo:

    “`{r}

    crea una matriz vacía para almacenar los resultados

    result <- matrix(NA, nrow = nrow(event), ncol = ncol(event))

    bucles anidados para aplicar la función uniroot a cada fila de event y pop para cada año

    for (i in 1:nrow(event)) {
    for (j in 1:ncol(event)) {
    fun <- function(x) (event[i,j] – (exp(a_b[i,1]+a_b[i,2] * x)* pop[i,j]))
    result[i,j] <- uniroot(fun, c(-10000,10000), extendInt = “yes”, trace = 1)$root
    }
    }

    añadir nombres de filas y columnas a la matriz de resultados

    row.names(result) <- row.names(event)
    colnames(result) <- colnames(event)

    imprimir la matriz de resultados

    result


    La salida debería ser:
          2000      2005      2010
    

    1 66.13493962 48.649260 300.96122
    2 48.23733449 43.145736 209.39498
    3 45.06166349 31.713290 262.29870
    4 30.32705481 25.565671 360.61320
    5 52.84586964 33.714535 228.46638
    6 44.30406281 35.629867 231.72367
    7 52.95456182 51.078667 443.15541
    “`

    Ten en cuenta que los valores en la matriz de resultados pueden ser ligeramente diferentes a la salida esperada debido a la aproximación numérica involucrada en la resolución de las ecuaciones.

Comments are closed.