Свертка функций Matlab - PullRequest
       52

Свертка функций Matlab

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

Я хочу вычислить свертку в Matlab, где я объявляю функции внутри файла скрипта. MWE -

a = 0.9; b = 0.5;

X = @(t) exp(-(b*t).^2);
Y = @(t) exp(-a*b*t.^2);

Z = convnfft(X,Y,'same'); % this is how you usually do convolution when t=linspace(-20,20,1000)

my_integral = integral(Z,-Inf,Inf)

Я использую эту процедуру свертки, взятую с сайта MathWorks.

Существуют ли эффективные процедуры / программы свертки Matlab, которые могут свертывать функции X и Y? Если я явно вычислю * интеграл свертки , используя symboli c math, это займет много времени для этих MWE X и Y, и это займет еще больше времени для вычисления моих реальных функций.

Моя цель - интегрировать результат свертки с -Inf до Inf.

1 Ответ

1 голос
/ 24 февраля 2020

Может быть, вы можете попробовать код ниже

a = 0.9; b = 0.5;

X = @(t) exp(-(b*t).^2);
Y = @(t) exp(-a*b*t.^2);

% convolution is formulated as `integral(@(u) X(z-u).*Y(u),-Inf,Inf)` at any given value `z`, and we can vectorize the convolution by `arrayfun`
fconv = @(t) arrayfun(@(z) integral(@(u) X(z-u).*Y(u),-Inf,Inf), t);

и вы можете вызвать функцию fconv как показано ниже

>> fconv(1:5)
ans =

   1.803967   1.113875   0.498712   0.161908   0.038115
...