Эффективная свертка (в R)

9

Я хочу рассчитать / оценить свертку

g(x)=Df(xt)ϕ(t)dt,

где является плотностью и гладкая функция с компактным носителем . Свертка недоступна в закрытом виде, и мне нужно интегрировать ее численно. Мой вопрос: есть ли эффективный способ сделать это? Я хочу реализовать это в R, поэтому я хотел бы посмотреть, есть ли лучший способ, чем использовать команду .fϕD integrate()

повар
источник
2
В зависимости от обстоятельств я обычно либо дискретизирую до большой степени 2 бинов, и использую быстрое преобразование Фурье ( ?fft), либо использую convolve. Подход fft требует немного больше работы для настройки, но лучше, если вам нужно что-то свернуть несколько раз. Иногда требуется определенное время, чтобы определить правильные параметры аргумента с помощью команды convolve.
Glen_b
@Glen_b Спасибо. Я думаю, что для одномерной функции прямая интеграция может быть быстрее. f
Кук
2
Вы попросили эффективный способ - FFT действительно быстро ; это просто требует немного настройки (биннинг, заполнение нулями).
Glen_b
@Glen_b Да, я согласен, что fft действительно быстр, но предыдущий шаг может замедлить процесс. В любом случае я буду сравнивать оба метода. Спасибо.
Кук
Я помню, как использовал convolveдля этой цели несколько раз. Простые рабочие примеры приведены по адресу stats.stackexchange.com/a/41263 , stats.stackexchange.com/a/41255 и stats.stackexchange.com/a/49444 .
whuber

Ответы:

9

Вы смотрели на специальные пакеты R для этого? Например convolve, https://stat.ethz.ch/R-manual/R-devel/library/stats/html/convolve.html.

jmnavarro
источник
Спасибо. Если я правильно понимаю, этот пакет предназначен для свертки числовых последовательностей, а не для двух функций. Я что-то пропустил?
Кук
2
Ну, я не использовал этот пакет, но если вы пытаетесь выполнить свертку в R, тогда у вас будут две числовые последовательности, которые будут значениями ваших функций, не так ли? Я не думаю, что R позволяет вам работать с определением функции.
Jmnavarro