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

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

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

| |

Похожие темы