将附加参数传递给 pracma::integral2
Passing additional parameters to pracma::integral2
我正在使用pracma::integral2
集成一个有时需要额外参数的函数,但integral2
似乎无法识别我提供的参数。
考虑这两个函数:
fun1 <- function(x, y) exp(-x^2 - y^2)
fun2 <- function(x, y, a) (1 / a) * exp(-x^2 - y^2)
如果我那么运行
integral2(fun1,
xmin = 0,
xmax = 1,
ymin = 0,
ymax = 1)$Q
我得到了预期的 0.5577463。但是如果我 运行:
integral2(fun2,
xmin = 0,
xmax = 1,
ymin = 0,
ymax = 1,
a = 1)$Q
我得到:
Error in fun(x, y, ...) : argument "a" is missing, with no default
引用通告显示如下:
- fun(x, y, ...)
- FUN(X, Y)
- .tensor(xmin, xmax, thetaL, thetaR, phiB, phiT, FUN, phiBvar,
phiTvar, vectorized = vectorized, singular = singular)
- integral2(fun2, xmin = 0, xmax = 1, ymin = 0, ymax = 1, a = 1)
我不知道 .tensor
是什么,但它的产品 FUN(X,Y)
好像失去了 ...
。
这里出了什么问题?
a
正在匹配 integral2
的 abstol
参数。只需将 a
重命名为 fun2
中的其他名称,如下面的解决方案 1 中所示,或者明确指定 abstol
,这样它就不会像下面的解决方案 2 中那样混淆。
library(pracma)
# solution 1
fun2aa <- function(x, y, aa) (1 / aa) * exp(-x^2 - y^2)
integral2(fun2aa,
xmin = 0,
xmax = 1,
ymin = 0,
ymax = 1,
aa = 1)$Q
## [1] 0.5577463
# solution 2
fun2 <- function(x, y, a) (1 / a) * exp(-x^2 - y^2) # same as in question
integral2(fun2,
xmin = 0,
xmax = 1,
ymin = 0,
ymax = 1,
abstol = 0, # added
a = 1)$Q
## [1] 0.5577463
请注意,如果 integral2 将点点点点 放在 abstol
之前,那么它就不会成为问题。这里 integral2a
与 integral2
相同,只是 dot 点放在 ymax
之后。
# solution 3
fun2 <- function(x, y, a) (1 / a) * exp(-x^2 - y^2) # same as in question
integral2a <- function (fun, xmin, xmax, ymin, ymax, ...,
sector = FALSE, reltol = 1e-06, abstol = 0, maxlist = 5000,
singular = FALSE, vectorized = TRUE) {}
body(integral2a) <- body(integral2)
environment(integral2a) <- environment(integral2)
integral2a(fun2,
xmin = 0,
xmax = 1,
ymin = 0,
ymax = 1,
a = 1)$Q
## [1] 0.5577463
我正在使用pracma::integral2
集成一个有时需要额外参数的函数,但integral2
似乎无法识别我提供的参数。
考虑这两个函数:
fun1 <- function(x, y) exp(-x^2 - y^2)
fun2 <- function(x, y, a) (1 / a) * exp(-x^2 - y^2)
如果我那么运行
integral2(fun1,
xmin = 0,
xmax = 1,
ymin = 0,
ymax = 1)$Q
我得到了预期的 0.5577463。但是如果我 运行:
integral2(fun2,
xmin = 0,
xmax = 1,
ymin = 0,
ymax = 1,
a = 1)$Q
我得到:
Error in fun(x, y, ...) : argument "a" is missing, with no default
引用通告显示如下:
- fun(x, y, ...)
- FUN(X, Y)
- .tensor(xmin, xmax, thetaL, thetaR, phiB, phiT, FUN, phiBvar, phiTvar, vectorized = vectorized, singular = singular)
- integral2(fun2, xmin = 0, xmax = 1, ymin = 0, ymax = 1, a = 1)
我不知道 .tensor
是什么,但它的产品 FUN(X,Y)
好像失去了 ...
。
这里出了什么问题?
a
正在匹配 integral2
的 abstol
参数。只需将 a
重命名为 fun2
中的其他名称,如下面的解决方案 1 中所示,或者明确指定 abstol
,这样它就不会像下面的解决方案 2 中那样混淆。
library(pracma)
# solution 1
fun2aa <- function(x, y, aa) (1 / aa) * exp(-x^2 - y^2)
integral2(fun2aa,
xmin = 0,
xmax = 1,
ymin = 0,
ymax = 1,
aa = 1)$Q
## [1] 0.5577463
# solution 2
fun2 <- function(x, y, a) (1 / a) * exp(-x^2 - y^2) # same as in question
integral2(fun2,
xmin = 0,
xmax = 1,
ymin = 0,
ymax = 1,
abstol = 0, # added
a = 1)$Q
## [1] 0.5577463
请注意,如果 integral2 将点点点点 放在 abstol
之前,那么它就不会成为问题。这里 integral2a
与 integral2
相同,只是 dot 点放在 ymax
之后。
# solution 3
fun2 <- function(x, y, a) (1 / a) * exp(-x^2 - y^2) # same as in question
integral2a <- function (fun, xmin, xmax, ymin, ymax, ...,
sector = FALSE, reltol = 1e-06, abstol = 0, maxlist = 5000,
singular = FALSE, vectorized = TRUE) {}
body(integral2a) <- body(integral2)
environment(integral2a) <- environment(integral2)
integral2a(fun2,
xmin = 0,
xmax = 1,
ymin = 0,
ymax = 1,
a = 1)$Q
## [1] 0.5577463