Добрый день.
У меня есть следующая задача, которую я пытаюсь решить уже несколько дней:
Существует пространство
.
На этом пространстве имеется функция плотности вероятности -
-мерное нормальное распределение
, где
- матожидание, а
- матрица ковариации распределения.
Все компоненты вектора
лежат в пределах от 0 до 1.
Число измерений
может равняться десяткам или нескольким сотням.
Данное распределение модифицированно следующим образом:
1) Распределение домножено на каждый компонент вектора
в некоторой натуральной степени, и разницу единицы и этого компонента, тоже в какой-то натуральной степени.
2) В любых точках, хотя бы одна координата которых меньше 0 или больше 1 значение функции равно нулю.
Более наглядно напишу формулой:
- вектор, для которого вычисляется значение функции плотности вероятности.
- модифицированное распределение
- компоненты вектора
.
- степени компонентов
.
- степени разниц 1 и компонентов
.
Степени могут достигать десятков, и даже сотен.
1)
2)
, если, для какого либо
,
, или
Мне нужно найти математическое ожидание получившейся функции распределения. То есть, решить задачу - чему будет равно матожидание вектора
, если он распределен согласно фукнции плотности вероятности
.
Аналитический подход - взять интергал
. Учитывая, что функция весьма сложная, развести переменные по сомножителям нельзя, и нет интегралов в элементарных функциях - это вряд ли можно считать тривиальной задачей.
Я пытался развести переменные по разным сомножителям, чтобы взять интеграл, но если я ввожу замену переменных, которая делает матрицу ковариации диагональной, то множители полиномной части функции становятся зависимыми от нескольких переменных. Для того, чтобы перемножить все в один полином, и поодиночке взять интегралы вида
(в данном случае,
- не вектор, а обычная вещественная переменная) - нужно астрономически много времени, так как степени могут быть достаточно большие - десятки, или даже сотни. Если у кого-то есть идеи, как взять такой интеграл - я буду очень благодарен.
Но в целом, мне хватит и численного решения этой задачи. Однако, проблемы возникают и тут. Учитывая, что число измерений
может быть достаточно большим, методы вычисления интегралов, вроде метода прямоугольника и его вариаций не подходят.
Остается Монте-Карло. Однако, специфика фукнции
такова, что у нее часто будет один узкий пик, а остальная часть функции будет иметь на десятки порядков меньшее значение. Для того, чтобы в этот пик попало много значений (чтобы точность была удовлетворительной (мне нужна точность порядка 0.1%)), мне придется моделировать гигантское число значений. Это весьма нежелательно вычислительно.
Возможно, я как-то смогу ускорить выполнение Монте-Карло, если буду знать, где находится пик. Возможно, следует в его окрестность провести более тщательную симуляцию. Пока я остановился на этом, но вариант далек от идеального. Так что, был бы рад услышать советы и по более эффективному численному решению этой задачи.