exponenta event banner

Интеграция числовых данных

В этом примере показано, как объединить набор дискретных данных скорости численно для аппроксимации пройденного расстояния. integral семейство принимает только дескрипторы функций в качестве входных данных, поэтому эти функции нельзя использовать с дискретными наборами данных. Использовать trapz или cumtrapz если функциональное выражение недоступно для интеграции.

Просмотр данных Velocity

Рассмотрим следующие данные о скорости и соответствующие временные данные.

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)')

Figure contains an axes. The axes with title Automobile Velocity contains an object of type line.

Наклон положительный в периоды ускорения, нулевой в периоды постоянной скорости и отрицательный в периоды замедления. В момент времени 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);

Figure contains an axes. The axes with title Automobile Velocity contains 2 objects of type line, patch.

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)')

Figure contains an axes. The axes with title Cumulative Distance Traveled Per Second contains an object of type line.

См. также

| |

Связанные темы