Main Content

cumtrapz

누적 사다리꼴 수치 적분(Cumulative Trapezoidal Numerical Integration)

설명

예제

Q = cumtrapz(Y)는 단위 간격(간격: 1)의 사다리꼴법을 통해 Y의 누적 적분 근삿값을 계산합니다. Y의 크기에 따라 함께 적분할 차원이 결정됩니다.

  • Y가 벡터인 경우 cumtrapz(Y)Y의 누적 적분입니다.

  • Y가 행렬인 경우 cumtrapz(Y)는 각 열에 대한 누적 적분입니다.

  • Y가 다차원 배열인 경우 cumtrapz(Y)는 크기가 1이 아닌 첫 번째 차원에 대해 적분을 계산합니다.

예제

Q = cumtrapz(X,Y)X로 지정된 좌표 또는 스칼라 간격을 기준으로 Y를 적분합니다.

  • X가 좌표의 벡터인 경우 length(X)는 크기가 1이 아닌 Y의 첫 번째 차원의 크기와 동일해야 합니다.

  • X가 스칼라 간격인 경우 cumtrapz(X,Y)X*cumtrapz(Y)와 동일합니다.

예제

Q = cumtrapz(___,dim)은 위에 열거된 구문에서 차원 dim을 따라 적분합니다. Y는 반드시 지정해야 하며, X를 선택적으로 지정할 수 있습니다. X를 지정할 경우, 이는 스칼라이거나 길이가 size(Y,dim)과 같은 벡터일 수 있습니다. 예를 들어, Y가 행렬인 경우 cumtrapz(X,Y,2)Y의 각 행을 누적하여 적분합니다.

예제

모두 축소

데이터 점 사이의 간격이 1인 벡터의 누적 적분을 계산합니다.

데이터로 구성된 숫자형 벡터를 생성합니다.

Y = [1 4 9 16 25];

Y에는 정의역 [1 5]에 대한 f(x)=x2의 함수 값이 들어 있습니다.

cumtrapz를 사용하여 단위 간격(간격: 1)으로 데이터를 적분합니다.

Q = cumtrapz(Y)
Q = 1×5

         0    2.5000    9.0000   21.5000   42.0000

이 근사 적분의 최종 값은 42가 됩니다. 이 경우 정확한 답은 약간 작은 4113입니다. f(x)가 위로 오목하기 때문에 cumtrapz 함수는 적분값을 과대 추정합니다.

데이터 점 사이의 간격이 균일하지만 1이 아닌 벡터의 누적 적분을 계산합니다.

정의역 벡터를 만듭니다.

X = 0:pi/5:pi;

X의 사인을 계산합니다.

Y = sin(X');

cumtrapz를 사용하여 Y를 누적 적분합니다. 점 사이의 간격이 일정하지만 1이 아닌 경우, X에 대한 벡터를 만드는 다른 방법은 스칼라 간격 값을 지정하는 것입니다. 이 경우, cumtrapz(pi/5,Y)pi/5*cumtrapz(Y)와 같습니다.

Q = cumtrapz(X,Y)
Q = 6×1

         0
    0.1847
    0.6681
    1.2657
    1.7491
    1.9338

데이터의 간격이 균일하지 않은 행렬의 행을 누적 적분합니다.

x 좌표의 벡터와 불규칙한 간격으로 발생하는 관측값으로 구성된 행렬을 만듭니다. Y의 행은 서로 다른 세 번의 실험에서 X에 포함된 시각에 측정한 속도 데이터를 나타냅니다.

X = [1 2.5 7 10];
Y = [5.2   7.7   9.6   13.2;
     4.8   7.0  10.5   14.5;
     4.9   6.5  10.2   13.8];

cumtrapz를 사용하여 각 행을 개별적으로 적분하고, 각 실험에서의 누적 거리를 구합니다. 데이터가 균일한 간격으로 계산되지 않았으므로 데이터 점 사이의 간격을 나타내도록 X를 지정합니다. 데이터가 Y의 행에 있으므로 dim = 2를 지정합니다.

Q1 = cumtrapz(X,Y,2)
Q1 = 3×4

         0    9.6750   48.6000   82.8000
         0    8.8500   48.2250   85.7250
         0    8.5500   46.1250   82.1250

결과는 Y와 크기가 동일하고 각 행의 누적 적분이 포함된 행렬이 됩니다.

xy 방향으로 중첩 적분을 수행합니다. 결과를 플로팅하면 누적 적분 값을 두 방향으로 시각화할 수 있습니다.

영역 값에 대해 그리드를 생성합니다.

x = -2:0.1:2;
y = -2:0.2:2;
[X,Y] = meshgrid(x,y);

그리드에서 함수 f(x,y)=10x2+20y2을 계산합니다.

F = 10*X.^2 + 20*Y.^2;

cumtrapz는 함수 표현식이 아니라 수치 데이터를 적분하므로, 일반적으로 데이터 행렬에서 cumtrapz를 사용하기 위해 피적분 함수를 알아야 할 필요는 없습니다. 함수 표현식을 알고 있는 경우 integral, integral2 또는 integral3을 대신 사용할 수 있습니다.

cumtrapz를 사용하여 이중 적분의 근삿값 계산

I(a,b)=-2b-2a(10x2+20y2)dxdy.

이러한 이중 적분을 수행하려면 중첩 함수를 사용하여 cumtrapz를 호출하십시오. 내부 호출이 먼저 데이터의 행을 적분한 다음, 외부 호출이 열을 적분합니다.

I = cumtrapz(y,cumtrapz(x,F,2));

원본 함수를 나타내는 곡면과 누적 적분을 나타내는 곡면을 플로팅합니다. 누적 적분의 곡면에 있는 각 점은 이중 적분의 중간값을 제공합니다. I의 마지막 값에서 이중 적분의 전체 근삿값인 I(end) = 642.4가 구해집니다. 플롯의 이 점을 빨간색 별표로 표시합니다.

surf(X,Y,F,'EdgeColor','none')
xlabel('X')
ylabel('Y')
hold on
surf(X,Y,I,'FaceAlpha',0.5,'EdgeColor','none')
plot3(X(end),Y(end),I(end),'r*')
hold off

Figure contains an axes object. The axes object with xlabel X, ylabel Y contains 3 objects of type surface, line. One or more of the lines displays its values using only markers

입력 인수

모두 축소

숫자형 데이터로, 벡터, 행렬, 다차원 배열 중 하나로 지정됩니다. 기본적으로 cumtrapz는 크기가 1이 아닌 Y의 첫 번째 차원을 따라 적분을 계산합니다.

데이터형: single | double
복소수 지원 여부:

점 간격으로, 1(디폴트 값), 균일 스칼라 간격 또는 좌표의 벡터로 지정됩니다.

  • X가 스칼라이면 이는 데이터 점 사이에 균일한 간격을 지정하며 cumtrapz(X,Y)X*cumtrapz(Y)와 같습니다.

  • X가 벡터이면 이는 데이터 점에 대한 x 좌표를 지정하며 length(X)Y의 적분 차원의 크기와 같아야 합니다.

데이터형: single | double

연산을 수행할 차원으로, 양의 정수 스칼라로 지정됩니다. 차원을 지정하지 않을 경우 디폴트 값은 크기가 1보다 큰 첫 번째 배열 차원이 됩니다.

2차원 입력 배열 Y가 있다고 가정하겠습니다.

  • cumtrapz(Y,1)Y의 열에 있는 연속된 요소에 대해 동작을 수행합니다.

    cumtrapz(Y,1) column-wise computation

  • cumtrapz(Y,2)Y의 행에 있는 연속된 요소에 대해 동작합니다.

    cumtrapz(Y,2) row-wise computation

dimndims(Y)보다 큰 경우 cumtrapzY와 크기가 같은, 0으로 구성된 배열을 반환합니다.

  • 이산 데이터 세트에 대한 수치 적분을 구할 때는 trapzcumtrapz를 사용해야 합니다. 데이터에 대한 함수 표현식이 존재한다면 integral, integral2 또는 integral3을 대신 사용하십시오.

  • trapz는 연산을 수행하는 차원의 크기를 1로 축소하고 최종 적분값만 반환합니다. cumtrapz는 연산을 수행하는 차원의 크기를 유지하면서 중간 누적 적분값을 반환합니다.

확장 기능

C/C++ 코드 생성
MATLAB® Coder™를 사용하여 C 코드나 C++ 코드를 생성할 수 있습니다.

버전 내역

R2006a 이전에 개발됨

참고 항목

| |