Математическая свертка¶
Математическая свёртка — это операция, которая объединяет две функции для получения новой функции, описывающей, как одна из них «размывает» или модифицирует другую. Эта операция часто используется в анализе сигналов, обработке изображений, теории управления и машинном обучении. В данном примере мы сравним простой вызов этой функции в Engee и MATLAB.
Начнём с Engee. В этой среде conv является функцией пакета DSP (Digital Signal Processing), которая вычисляет дискретную свертку двух массивов. В данном примере массивы x и h представляют собой исходные сигналы, результат свертки сохраняется в переменной y.
Pkg.add(["TickTock", "DSP"])
using DSP
using TickTock
tick()
# Исходные сигналы
x = [1, 2, 3]
h = [0.2, 0.5, 0.75]
# Выполнение свертки
y = conv(x, h)
tock()
Перейдём к функции MATLAB. conv в данном случае работает точно так же и синтаксичиских различий не имеет. Поэтому сравним скорость выполнения этих двух скриптов и точность выполнения.
using MATLAB
tick()
mat"""
% Исходные сигналы
x = [1, 2, 3];
h = [0.2, 0.5, 0.75];
% Выполнение свертки
y = conv(x, h);
"""
tock()
Как мы можем видеть, скорость выполнения в Engee значительно выше, чем в MATLAB.
println("Результат свертки в Engee:")
println(y)
mat"""
disp('Результат свертки в MATLAB:')
disp(y)
"""
При сравнении результатов видно, что они идентичны. Разница в том, что Engee не округляет ответы, и это позволяет получить более высокую точность, а не накапливать погрешность в процессе расчётов.
Вывод¶
В данном примере мы выполнили простое сравнение MATLAB и Engee и увидели, в чем преимущества отечественной среды разработки.