Foro de debate

Consulta para mejorar un ciclo for

Consulta para mejorar un ciclo for

by Mauricio Alberini -
Number of replies: 1

Estimados quería saber si alguien me puede sugerir como mejorar el siguiente codigo:

Tengo la siguiente ecuación:

r = s * (1/fw - tw) * (1 - tw / tp) * ( A * (rd - 36))

y calculo las derivadas parciales  respecto de:  s; fw; tw; tp; A; rd;

cada una estas variables tiene 20 valores diferententes y lo que tengo que determinar es todos los valores posibles de las derivadas parciales. Lo que hago es primero calcular las derivas parciales y luego mediante 6 ciclos for calculo todos los valores posibles de las derivadas parciales. Esto insume mucho tiempo, queria saber si se puede mejorar la forma de calculo. 

Muchas gracias

In reply to Mauricio Alberini

Re: Consulta para mejorar un ciclo for

by Manuel Muñoz Márquez -

Buenas:

Una forma de hacerlo es construir una matriz colocando en cada fila un conjunto de valores para los parámetros, definir la función r y usando la función apply aplicársela a cada fila.

La matriz de valores la puedes construir usando la función rep. Te muestro un ejemplo con 5 valores y tres variables

x<-1:5
y<-11:15
z<-21:25
m<-matrix(0, ncol = 3, nrow = 125)
m[,1] <- rep(x, 9)
m[,2] <- rep(rep(y, 3), each = 3)
m[,3] <- rep(z, each = 9)

La matriz m tiene en cada fila una de las 125 combinaciones posibles de los cinco valores de x, y y z.

Basta con que ejecutar

apply(m, 1, FUN=f)

siendo f la función que hace el cálculo para cada fila.

Un saludo.