решение свертки для символов и функций в Matlab

Я хочу решить свертку в Matlab для двух функций heaviside, проблема в том, что Matlab не позволит мне это сделать и выдает ошибку:

??? Undefined function or method 'conv2' for input arguments of type 'sym'.

это то, что я пытаюсь сделать:

syms x;
conv(heaviside(-1-x), heaviside(x+3))

Я думаю, я могу создать вектор со значениями, которые может иметь x, и преобразовать его с помощью вектора, но я не хочу заранее определять диапазон, поэтому я хочу сохранить его как символ.

какие-либо предложения?


person Anton.P    schedule 25.04.2013    source источник
comment
Может быть, это работает: mathworks.com/matlabcentral/fileexchange/28157-convolution?   -  person Dan    schedule 25.04.2013


Ответы (1)


Вы можете вычислить свертку непосредственно из определения (http://en.wikipedia.org/wiki/Convolution), напр. вычислить интеграл:

syms x t  
symb_conv = int(heaviside(-1-(t-x)) * heaviside(x+3), x, -inf, inf)

Изменить:

Действительно, кажется, что ваша свертка всегда будет бесконечной в этих условиях.

Графики для исходных функций будут следующими:

ezplot(heaviside(-1-x), [-10 10])
ezplot(heaviside(x+3), [-10 10])

heaviside(-x-1)heaviside(x+3)

Нам нужно отразить одну из функций, чтобы получить свертку. Пусть это будет вторая функция:

введите здесь описание изображения

Если мы сравним первый и последний график, мы увидим, что эти две функции имеют бесконечное ненулевое пересечение для x‹-3. Это означает, что свертка для t=0 будет бесконечной.

Если мы попытаемся сдвинуть последний график в любом направлении, у нас также будет бесконечное ненулевое пересечение для x‹(-3-t). Следовательно, окончательная функция свертки будет бесконечной для любого t.

person Danil Asotsky    schedule 25.04.2013
comment
привет и спасибо за ваш ответ, я сделал это, но это дает мне ошибку Предупреждение: не удалось найти явный интеграл. и я не могу использовать его каким-либо образом, я имею в виду, что пытаюсь построить его, но безуспешно .. вы можете мне помочь? как бы вы построили эту функцию? - person Anton.P; 25.04.2013
comment
эй, спасибо за пример, я тоже это понял, но проблема в том, что легко построить хевисайды, но мне нужна свертка между двумя функциями, не обязательно хевисайдами... - person Anton.P; 26.04.2013
comment
@Anton.P Проблема с предупреждением: не удалось найти явный интеграл. существует для функций Хевисайда. Для реальных функций этой проблемы, вероятно, не будет. Кроме того, вы всегда можете вычислить этот символьный интеграл для некоторого фиксированного набора t. - person Danil Asotsky; 26.04.2013