В этом примере показано, как объединяться, набор дискретных скоростных данных численно, чтобы аппроксимировать расстояние переместился. 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;
Эти данные представляют скорость автомобиля (в m/s) взятый в 1 интервале с более чем 24 с.
Постройте точки данных скорости и соедините каждую точку с прямой линией.
figure plot(time,vel,'-*') grid on title('Automobile Velocity') xlabel('Time (s)') ylabel('Velocity (m/s)')
Наклон положителен в периоды ускорения, нуля в периоды постоянной скорости, и отрицателен в периоды замедления. Во время t = 0
, транспортное средство в покое с vel(1) = 0
m/s. Транспортное средство ускоряется до достижения максимальной скорости в t = 8
s vel(9) = 29.05
m/s и обеспечивает эту скорость в течение 4 с. Это затем замедляется к vel(14) = 17.9
m/s в течение 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
s составляет приблизительно 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)')