如何计算R中偏导数的积分?
How to compute integral of partial derivative in R?
第一次尝试 Deriv
包。我试图计算一个非常简单的偏导数积分作为开始:
这是我的尝试:
junk <- function (m) {
-m*eval(deriv(~((exp(0.1*(100-94.5)^2))/(exp(0.1*(100-94.5)^2)+exp(0.1*
(m-95)^2)+exp(0.1*(m-96)^2))),"m"))
}
integrate(junk, lower = 100, upper = 100.5)
这给了我 -24.30757 的错误答案,而不是 12.383。任何人都可以阐明如何解决这个问题吗?谢谢!
这里的问题是,deriv()
不是 return 表达式。对于单变量推导,使用 D()
junk <- function (m) {
-m*eval(D(expression((exp(0.1*(100-94.5)^2))/(exp(0.1*(100-94.5)^2)+exp(0.1*(m-95)^2)+exp(0.1*(m-96)^2))),"m")
}
integrate(junk, lower = 100, upper = 100.5)
12.38271 with absolute error < 1.4e-13
比较:
return of deriv()
- 呼叫
deriv(expression((exp(0.1*(100-94.5)^2))/(exp(0.1*(100-94.5)^2)+exp(0.1*
(m-95)^2)+exp(0.1*(m-96)^2))),"m"))
expression({
.expr4 <- exp(0.1 * (100 - 94.5)^2)
.expr5 <- m - 95
.expr8 <- exp(0.1 * .expr5^2)
.expr10 <- m - 96
.expr13 <- exp(0.1 * .expr10^2)
.expr14 <- .expr4 + .expr8 + .expr13
.value <- .expr4/.expr14
.grad <- array(0, c(length(.value), 1L), list(NULL, c("m")))
.grad[, "m"] <- -(.expr4 * (.expr8 * (0.1 * (2 * .expr5)) +
.expr13 * (0.1 * (2 * .expr10)))/.expr14^2)
attr(.value, "gradient") <- .grad
.value })
return of D()
- 表达式
D(expression((exp(0.1*(100-94.5)^2))/(exp(0.1*(100-94.5)^2)+exp(0.1*(m-95)^2)+exp(0.1*(m-96)^2))),"m")
-((exp(0.1 * (100 - 94.5)^2)) * (exp(0.1 * (m - 95)^2) * (0.1 *
(2 * (m - 95))) + exp(0.1 * (m - 96)^2) * (0.1 * (2 * (m -
96))))/(exp(0.1 * (100 - 94.5)^2) + exp(0.1 * (m - 95)^2) +
exp(0.1 * (m - 96)^2))^2)
因此,根据您的语法和 eval()
,您需要 D()
提供的另一个表达式。或者你使用调用对象,两种方式都可以。
第一次尝试 Deriv
包。我试图计算一个非常简单的偏导数积分作为开始:
这是我的尝试:
junk <- function (m) {
-m*eval(deriv(~((exp(0.1*(100-94.5)^2))/(exp(0.1*(100-94.5)^2)+exp(0.1*
(m-95)^2)+exp(0.1*(m-96)^2))),"m"))
}
integrate(junk, lower = 100, upper = 100.5)
这给了我 -24.30757 的错误答案,而不是 12.383。任何人都可以阐明如何解决这个问题吗?谢谢!
这里的问题是,deriv()
不是 return 表达式。对于单变量推导,使用 D()
junk <- function (m) {
-m*eval(D(expression((exp(0.1*(100-94.5)^2))/(exp(0.1*(100-94.5)^2)+exp(0.1*(m-95)^2)+exp(0.1*(m-96)^2))),"m")
}
integrate(junk, lower = 100, upper = 100.5)
12.38271 with absolute error < 1.4e-13
比较:
return of deriv()
- 呼叫
deriv(expression((exp(0.1*(100-94.5)^2))/(exp(0.1*(100-94.5)^2)+exp(0.1*
(m-95)^2)+exp(0.1*(m-96)^2))),"m"))
expression({ .expr4 <- exp(0.1 * (100 - 94.5)^2) .expr5 <- m - 95 .expr8 <- exp(0.1 * .expr5^2) .expr10 <- m - 96 .expr13 <- exp(0.1 * .expr10^2) .expr14 <- .expr4 + .expr8 + .expr13 .value <- .expr4/.expr14 .grad <- array(0, c(length(.value), 1L), list(NULL, c("m"))) .grad[, "m"] <- -(.expr4 * (.expr8 * (0.1 * (2 * .expr5)) + .expr13 * (0.1 * (2 * .expr10)))/.expr14^2) attr(.value, "gradient") <- .grad .value })
return of D()
- 表达式
D(expression((exp(0.1*(100-94.5)^2))/(exp(0.1*(100-94.5)^2)+exp(0.1*(m-95)^2)+exp(0.1*(m-96)^2))),"m")
-((exp(0.1 * (100 - 94.5)^2)) * (exp(0.1 * (m - 95)^2) * (0.1 * (2 * (m - 95))) + exp(0.1 * (m - 96)^2) * (0.1 * (2 * (m - 96))))/(exp(0.1 * (100 - 94.5)^2) + exp(0.1 * (m - 95)^2) + exp(0.1 * (m - 96)^2))^2)
因此,根据您的语法和 eval()
,您需要 D()
提供的另一个表达式。或者你使用调用对象,两种方式都可以。