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

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

Смотрите также

| |

Похожие темы

Была ли эта тема полезной?