Matlab не знает, что ваш вектор был создан f(x) = x^2
. trapz
вычисляет линейную интерполяцию между каждой парой значений.
Таким образом, cumtrapz
просто вычисляет скользящую сумму 2 на 2, а затем делит результат на 2.
% Sample data
Y = [1 4 9 16 25];
% Using cumtrapz
Q1 = diff(cumtrapz(Y))
%Q1 = [2.5, 6.5, 12.5, 20.5]
% Using a moving sum
Q2 = conv(Y,ones(2,1),'valid')/2
%Q2 = [2.5, 6.5, 12.5, 20.5]
Графический пример с f(x) = sin(x)
:
cumtrapz
просто применяет cumsum
значения промежуточных точек.