Этот пример показывает, как интегрировать набор дискретных данных о скорости численно, чтобы аппроксимировать пройденное расстояние. The 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 м.
The 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)')