#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
даст гораздо более точные результаты, даже для пошаговых функций, подобных вашему тестовому примеру.