Функция R integra2 не принимает аргумент xmax - PullRequest
0 голосов
/ 24 февраля 2019

Я пытаюсь оценить следующий двойной интеграл численно с помощью функции Integral2 из пакета R pracma.Для тех, кто интересуется контекстом, это связано с прообразом проблемы Эйлера «Пифагорейский муравей».Ниже приведен фрагмент кода, который я пробовал:

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).Если это так, то какое альтернативное решение я могу использовать?

Спасибо за вашу помощь!

Брайан

1 Ответ

0 голосов
/ 24 февраля 2019

Я немного изменил вещи, и это сработало, как и ожидалось.Я думаю, что функция делает, чтобы сначала интегрировать f (x, y) по y от ymin = 0 до ymax = 40 * (30-x) / 30.Это даст новую функцию (скажем, g (x)), которая зависит только от x.Затем он интегрирует g (x) по x от 0 до 30, чтобы получить значение.Поскольку только у границ могут быть выражены через функции, он должен был сначала выполнить внутреннюю интеграцию по у.Пожалуйста, дайте мне знать, если это имеет смысл.Спасибо!

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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...