我正在尝试使用R pracma软件包中的积分2函数对以下双整数进行数值评估。对于那些对上下文感兴趣的人,它与欧拉问题“毕达哥拉斯的蚂蚁”有关。以下是我尝试过的代码段:
library(pracma)
f <- function(x, y) (2*pi - pi/2 - atan((40-y)/x) - atan((30-x)/y))/(2*pi)
xmin <- 0
xmax <- function(y) (30 - 0.75*y)
ymin <- 0
ymax <- 40
prob_integral <- integral2(f, xmin, xmax, ymin, ymax)
它返回以下错误消息:
> Error in integral2(f, xmin, xmax, ymin, ymax) : is.numeric(xmax) is > not TRUE
我已经尝试了他们的示例代码,并且可以正常工作。
f <- function(x, y) sqrt(1 -x^2 - y^2)
xmin <- 0; xmax <- 1
ymin <- 0; ymax <- function(x) sqrt(1 - x^2)
I <- integral2(f, xmin, xmax, ymin, ymax)
I$Q # 0.5236076 - pi/6 => 8.800354e-06
我想知道我的代码是否由于某些点无法使用积分中的arctan函数进行评估而无法正常工作。例如(0,40),(30,0)。如果是这样,我可以使用什么替代解决方案?
感谢您的帮助!
布莱恩
答案 0 :(得分:0)
我做了些改动,并且按预期工作。我认为该函数的作用是首先将相对于y的f(x,y)从ymin = 0到ymax = 40 *(30-x)/ 30进行积分。这将提供一个仅取决于x的新函数(例如g(x))。然后,将x的g(x)积分从0到30进行积分。由于只能用函数表示y边界,因此它必须首先对y进行内部积分。请让我知道这是否有意义。谢谢!
library(pracma)
f <- function(x, y) (2*pi - pi/2 - atan((40-y)/x) - atan((30-x)/y))/(2*pi)
xmin <- 0;
xmax <- 30;
ymin <- 0;
ymax <- function(x) 40*(30-x)/30;
prob_integral <- integral2(f, xmin, xmax, ymin, ymax)