Splinefun türevi argümanının kullanımı mantıklıdır ve ikinci ve üçüncü türevlerin kullanılabilir olduğu varsayılmalı, ancak örnekler üzerinde çalışırsanız, doğrusal yaklaşımların pürüzlü olduğunu veya yüksek derecelerde süreksiz.
Analitik bir ifadeye sahip olduğunuz durumda, algoritmik farklılaşma için kabul edilebilir sınırlı bazı hükümler vardır. Daha fazla bilgi için yardım (deriv) sayfasına bakınız.
> deriv(~sin(pi/x), "x")
expression({
.expr1 <- pi/x
.value <- sin(.expr1)
.grad <- array(0, c(length(.value), 1L), list(NULL, c("x")))
.grad[, "x"] <- -(cos(.expr1) * (pi/x^2))
attr(.value, "gradient") <- .grad
.value
})
Ve bu sonuçla ardından "elle" inşa ikinci fonksiyonu. Bu bir "==" operatörü değil
DD <- function(expr,name, order = 1) {
if(order < 1) stop("'order' must be >= 1")
if(order == 1) D(expr,name)
else DD(D(expr, name), name, order - 1)
}
DD(expression(sin(pi/x)), "x", 2)
-(sin(pi/x) * (pi/x^2) * (pi/x^2) - cos(pi/x) * (pi * (2 * x)/(x^2)^2))
DD(expression(sin(pi/x)), "x")
-(cos(pi/x) * (pi/x^2))
funD<- function(x){}
body(funD) <- DD(expression(sin(pi/x)), "x")
funD
#function (x)
#-(cos(pi/x) * (pi/x^2))
funD(2)
# [1] -4.809177e-17 as it should be at a maximum
funDD <- function(x){}
body(funDD) <- DD(expression(sin(pi/x)), "x", 2)
funDD(2)
# [1] -0.6168503 as it should be at a maximum.
ama "=": Ya da biraz daha sürecini otomatikleştirmek için yardım (D zm) sayfasında sağlanan DD örneğini kullanabilirsiniz. –
@DWin: Sabit, teşekkürler. –