Main Content

이 번역 페이지는 최신 내용을 담고 있지 않습니다. 최신 내용을 영문으로 보려면 여기를 클릭하십시오.

수치 데이터에 대한 적분

이 예제에서는 주행 거리에 대한 근삿값을 계산함으로써 수치적으로 이산 속도 데이터 세트를 적분하는 방법을 보여줍니다. integral 함수군은 함수 핸들만 입력으로 받으므로, 이러한 함수는 이산 데이터 세트에 사용할 수 없습니다. 함수 표현식을 적분에 사용할 수 없을 경우 trapzcumtrapz를 사용하십시오.

속도 데이터 보기

다음과 같은 속도 데이터와 이에 대응되는 시간 데이터가 있다고 가정하겠습니다.

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;

이 데이터는 24초 동안 1초 간격으로 측정한 자동차의 속도(m/s)를 나타냅니다.

속도 데이터 점을 플로팅하고 각 점을 직선으로 연결합니다.

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.

이 기울기는 가속 기간 동안은 양수이고, 항속 기간 동안은 0이며, 감속 기간 동안은 음수입니다. 시간 t = 0에서 차량은 vel(1) = 0m/s로 정지된 상태입니다. 차량은 t = 8초에서 최대 속도 vel(9) = 29.05m/s에 도달할 때까지 가속하고 4초 동안 이 속도를 유지합니다. 그런 후, 3초 동안 vel(14) = 17.9m/s로 감속하고 결국 정지합니다. 이 속도 곡선에는 여러 불연속이 있기 때문에 하나의 연속 함수로 이를 나타낼 수 없습니다.

총 주행 거리 계산하기

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를 사용하여 속도 데이터를 수치적으로 적분해 자동차가 주행한 총 거리(음영 처리된 영역에 해당)를 계산합니다. 기본적으로, 구문 trapz(Y)를 사용하는 경우 점 사이 간격은 1이라고 가정합니다. 하지만 구문 trapz(X,Y)에서는 균일하거나 균일하지 않은 간격 X를 지정할 수 있습니다. 이 경우, time 벡터의 측정값 사이의 간격은 1입니다. 따라서 디폴트 간격을 사용해도 괜찮습니다.

distance = trapz(vel)
distance = 345.2200

t = 24에서 자동차가 주행한 거리는 약 345.22m입니다.

누적 주행 거리 플로팅하기

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.

참고 항목

| |

관련 항목