splinefun के लिए deriv = तर्क का उपयोग समझदार है, और यह जोड़ा जाना चाहिए कि दूसरे और तीसरे डेरिवेटिव उपलब्ध होने चाहिए, लेकिन यदि आप उदाहरणों के माध्यम से काम करते हैं तो आपको पता चलेगा कि रैखिक अनुमानों को झुका हुआ है और उच्च डिग्री पर असंतुलित।
जिस स्थिति में आपके पास विश्लेषणात्मक अभिव्यक्ति है, वहां कुछ स्वीकार्य रूप से एल्गोरिदमिक भेदभाव के लिए सीमित प्रावधान हैं। अधिक जानकारी के लिए सहायता (डेरिव) पृष्ठ देखें।
> 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
})
और फिर उस परिणाम के साथ "हाथ से" एक दूसरे समारोह का निर्माण। या फिर आप मदद (deriv) पृष्ठ पर दिए गए डीडी उदाहरण का उपयोग प्रक्रिया में थोड़ा और अधिक स्वचालित करने के लिए कर सकते हैं:
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.
स्रोत
2010-12-02 20:25:55
यह एक "==" ऑपरेटर नहीं है, लेकिन "="। –
@DWin: फिक्स्ड, धन्यवाद। अंतर्दृष्टि के लिए –