Main Content

cumtrapz

累積の台形則による数値積分

説明

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)Y においてサイズが 1 に等しくない最初の次元のサイズに等しくなければなりません。

  • 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 です。関数 cumtrapz は積分値を過大に推定しますが、これは f(x) が上に凹であるためです。

データ点の間隔が等しいが 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 の行は、3 回の異なる試行で、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 と同じサイズで、各行の累積積分をもつ行列です。

x 方向および y 方向の入れ子の積分を実行します。結果をプロットして、両方向の累積積分値を可視化します。

この定義域で値のグリッドを作成します。

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 を使用することができます。関数式が既知の場合は、代わりに integralintegral2 または integral3 を使用できます。

cumtrapz を使用して、2 重積分を近似します。

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

この 2 重積分を実行するには、cumtrapz の関数呼び出しを入れ子にして使用します。まず、内側の呼び出しでデータの行を積分してから、外側の呼び出しで列を積分します。

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

元の関数を表す表面と累積積分を表す表面をプロットします。累積積分の表面上の各点は、2 重積分の中間値です。I の最後の値が、2 重積分全体の近似値 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 と同じサイズのゼロの配列を返します。

ヒント

  • trapzcumtrapz を使用して、離散データ セットで数値積分を実行します。データに関数式を使用できる場合は、代わりに integralintegral2、または integral3 を使用します。

  • trapz は、演算対象の次元のサイズを 1 に減らし、最後の積分値のみを返します。cumtrapz は途中の積分値も返し、演算対象の次元のサイズを維持します。

拡張機能

C/C++ コード生成
MATLAB® Coder™ を使用して C および C++ コードを生成します。

バージョン履歴

R2006a より前に導入