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