Ich gehe davon aus theta = exp
und l = r = 1
, so:
Nd_f <- function(a,t) exp(t-a)*exp(-(1-exp(-r*a)))
Funktion Nd <- function(s) integrate(Nd_f, lower = 0, upper = s, t=s)$value
zielt darauf ab, das Integral zu bewerten:

Beachten Sie, dass integrate
kein vektorisiert Funktion ist. Eine vektorisierte Funktion kann Vektoreingabe nehmen und einen Vektor zurückgeben. Zum Beispiel wird die exp
Funktion vektorisiert, weil:
exp(1:3)
# [1] 2.718282 7.389056 20.085537
Aber integrate
nicht. Sie dürfen nur einen Skalar für lower
und upper
übergeben. So gibt es kein Problem, wenn Sie tun:
Nd(1)
# [1] 1.273614
aber es funktioniert nicht, wenn Sie das tun:
Nd(1:2)
# [1] 2.286086
# There were 15 or more warnings (use warnings() to see the first 15)
# warnings()
# Warning messages:
# 1: In t - a : longer object length is not a multiple of shorter object length
Sie benötigen eine skalare Funktion einpacken Nd
eine vektorisiert Funktion zu erhalten. Wenn Sie wirklich neu für R sind, können Sie eine for
Schleife verwenden:
Nd_vectorized_for <- function(s) {
result <- numeric(length(s))
for (i in 1:length(s)) {
result[i] <- Nd(s[i])
}
result ## or `return(result)`
}
Jetzt kann diese Funktion Vektoreingang nehmen und einen Vektor zurück:
Nd_vectorized_for(1:2)
# [1] 1.273614 4.276839
erfahreneren mit R Menschen werden vorschlagen ersetzen for
Schleife mit *apply
Familie Funktion (lesen ?sapply
diese Familie zu sehen):
Nd_vectorized_sapply <- function(s) sapply(s, Nd)
Nd_vectorized_sapply(1:2)
# [1] 1.273614 4.276839
Aber integrate
ist kein billiger Betrieb, so gibt es keinen Leistungsgewinn von sapply
ist:
system.time(Nd_vectorized_for(sample(1:10,100000,replace=TRUE)))
# user system elapsed
# 6.256 0.004 6.268
system.time(Nd_vectorized_sapply(sample(1:10,100000,replace=TRUE)))
# user system elapsed
# 6.200 0.004 6.212
Mit einer vektorisiert Funktion geben Sie den Plot Sie produzieren können:
plot(Nd_vectorized_for(1:50), log = "y")

Can Verwenden Sie 'Vectorize', dh' Vectorize (Nd) (1: 2) # [1] 1.273614 4.276839' – akrun
Es ist aus Erfahrung. – akrun
@akrun Dies war hilfreich, insbesondere bei der Integration von multivariablen Argumenten. Vielen Dank! – VitalSigns