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
davy.ai
Para aplicar la función
uniroot
a los valores correspondientes en las matricesa
,b
,event
ypop
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
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.