В этом примере показано, как объединить набор дискретных данных скорости численно для аппроксимации пройденного расстояния. integral семейство принимает только дескрипторы функций в качестве входных данных, поэтому эти функции нельзя использовать с дискретными наборами данных. Использовать trapz или cumtrapz если функциональное выражение недоступно для интеграции.
Рассмотрим следующие данные о скорости и соответствующие временные данные.
vel = [0 .45 1.79 4.02 7.15 11.18 16.09 21.90 29.05 29.05 ... 29.05 29.05 29.05 22.42 17.9 17.9 17.9 17.9 14.34 11.01 ... 8.9 6.54 2.03 0.55 0]; time = 0:24;
Эти данные представляют скорость автомобиля (в м/с), взятую с интервалами 1 с в течение 24 с.
Постройте график точек данных скорости и соедините каждую точку прямой линией.
figure plot(time,vel,'-*') grid on title('Automobile Velocity') xlabel('Time (s)') ylabel('Velocity (m/s)')

Наклон положительный в периоды ускорения, нулевой в периоды постоянной скорости и отрицательный в периоды замедления. В момент времени t = 0, транспортное средство находится в состоянии покоя с vel(1) = 0 м/с. Транспортное средство ускоряется до достижения максимальной скорости при t = 8 s из vel(9) = 29.05 м/с и поддерживает эту скорость в течение 4 с. Затем она замедляется до vel(14) = 17.9 м/с в течение 3 с и, в конечном счете, обратно вниз, чтобы восстановить. Поскольку эта кривая скорости имеет несколько разрывов, одна непрерывная функция не может описать его.
trapz выполняет дискретную интеграцию с использованием точек данных для создания трапеций, поэтому она хорошо подходит для обработки наборов данных с разрывами. Этот метод предполагает линейное поведение между точками данных, и точность может быть снижена, когда поведение между точками данных является нелинейным. Для иллюстрации можно нарисовать трапеции на графике, используя точки данных в качестве вершин.
xverts = [time(1:end-1); time(1:end-1); time(2:end); time(2:end)]; yverts = [zeros(1,24); vel(1:end-1); vel(2:end); zeros(1,24)]; p = patch(xverts,yverts,'b','LineWidth',1.5);

trapz вычисляет площадь под набором дискретных данных, разбивая область на трапеции. Затем функция добавляет площадь каждой трапеции для вычисления общей площади.
Расчет общего расстояния, пройденного автомобилем (соответствующего затененной площади), путем численной интеграции данных о скорости с использованием trapz. По умолчанию интервал между точками принимается равным 1 при использовании синтаксиса trapz(Y). Однако можно задать другой равномерный или неравномерный интервал X с синтаксисом trapz(X,Y). В этом случае интервал между показаниями в time вектор - 1, поэтому можно использовать интервал по умолчанию.
distance = trapz(vel)
distance = 345.2200
Расстояние, пройденное автомобилем в t = 24 с составляет около 345,22 м.
cumtrapz функция тесно связана с trapz. В то время как trapz возвращает только конечное значение интегрирования, cumtrapz также возвращает промежуточные значения в векторе.
Рассчитайте пройденное суммарное расстояние и постройте график результата.
cdistance = cumtrapz(vel); T = table(time',cdistance','VariableNames',{'Time','CumulativeDistance'})
T=25×2 table
Time CumulativeDistance
____ __________________
0 0
1 0.225
2 1.345
3 4.25
4 9.835
5 19
6 32.635
7 51.63
8 77.105
9 106.15
10 135.2
11 164.25
12 193.31
13 219.04
14 239.2
15 257.1
⋮
plot(cdistance) title('Cumulative Distance Traveled Per Second') xlabel('Time (s)') ylabel('Distance (m)')
