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

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

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

| |

Похожие темы