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

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

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 м.

Постройте график совокупного пройденного расстояния

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

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

См. также

| |

Похожие темы