тройное интегрирование для блока в R: числовая ошибка

#r #numerical-methods

#r #численные методы

Вопрос:

Я пытаюсь выяснить, как надежно вычислить массу твердого тела с переменной плотностью, которую я моделирую с использованием функции регрессии.

Мой блок имеет следующие размеры:

 w = 50
l = 150
h = 15
  

Чтобы помочь мне получить представление об использовании числового интегратора в pracma , я представил, что блок имеет две области плотности (h < 10 -> 50, h > = 10 -> 100).

 l*w*(5*100   10*50) # => 7500000
  

Тем не менее, когда я передаю это числовому интегратору, я получаю:

 library(pracma)
density = function(x, y, z) ifelse(z > 10, 100, 50)
integral3(density, xmin = 0, xmax = 50, ymin = 0, ymax = 150, zmin = 0, zmax = 15)
  

Это возвращает 7530340 . Можете ли вы помочь мне подсказать, что здесь происходит и как я мог бы улучшить вычисление интеграла?

Комментарии:

1. Из того, что я знаю, многие численные методы предполагают гладкие функции и используют некоторое правило для аппроксимации взаимосвязи на основе этой функции. Здесь у вас резкое изменение плотности, которое, вероятно, и является причиной проблемы

2. Попробуйте другой пакет, например, cubature . Это adaptIntegrate даст гораздо более точные результаты, даже для пошаговых функций, подобных вашему тестовому примеру.