Main Content

このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。

integral3

説明

q = integral3(fun,xmin,xmax,ymin,ymax,zmin,zmax) は、領域 xminxxmaxymin(x)yymax(x) および zmin(x,y)zzmax(x,y) 上で関数 z = fun(x,y,z) の積分を近似します。

q = integral3(fun,xmin,xmax,ymin,ymax,zmin,zmax,Name,Value) は、1 つ以上の Name,Value のペアの引数を使用して追加オプションを指定します。

すべて折りたたむ

無名関数 f(x,y,z)=ysinx+zcosx を定義します。

fun = @(x,y,z) y.*sin(x)+z.*cos(x)
fun = function_handle with value:
    @(x,y,z)y.*sin(x)+z.*cos(x)

0xπ0y1 および -1z1 の領域で積分します。

q = integral3(fun,0,pi,0,1,-1,1)
q = 2.0000

無名関数 f(x,y,z)=xcosy+x2cosz を定義します。

fun = @(x,y,z) x.*cos(y) + x.^2.*cos(z)
fun = function_handle with value:
    @(x,y,z)x.*cos(y)+x.^2.*cos(z)

積分の極限を定義します。

xmin = -1;
xmax = 1;
ymin = @(x)-sqrt(1 - x.^2);
ymax = @(x) sqrt(1 - x.^2);
zmin = @(x,y)-sqrt(1 - x.^2 - y.^2);
zmax = @(x,y) sqrt(1 - x.^2 - y.^2);

'tiled' メソッドで定積分を評価します。

q = integral3(fun,xmin,xmax,ymin,ymax,zmin,zmax,'Method','tiled')
q = 0.7796

パラメーター化された無名関数 f(x,y,z)=10/(x2+y2+z2+a) を定義します。

a = 2;
f = @(x,y,z) 10./(x.^2 + y.^2 + z.^2 + a);

-x0-100y0 および -100z0 の領域で 3 重積分を評価します。

format long
q1 = integral3(f,-Inf,0,-100,0,-100,0)
q1 = 
     2.734244598320928e+03

積分を再び評価し、有効桁数約 9 桁の精度を指定します。

q2 = integral3(f,-Inf,0,-100,0,-100,0,'AbsTol', 0,'RelTol',1e-9)
q2 = 
     2.734244599944285e+03

integral3 および integral の入れ子になった呼び出しを使用して、4 次元球の体積を計算します。

半径 r の 4 次元球の体積は以下のようになります。

V4(r)=02π0π0π0rr3sin2(θ)sin(ϕ)drdθdϕdξ.

MATLAB® の求積関数 integral は、1 次元、2 次元、および 3 次元の積分を直接サポートします。ただし、4 次元以上の次数の積分を解くには、ソルバーの呼び出しを入れ子にする必要があります。

要素単位の演算子 (.^ および .*) を使用して、被積分の関数ハンドル f(r,θ,ϕ,ξ) を作成します。

f = @(r,theta,phi,xi) r.^3 .* sin(theta).^2 .* sin(phi);

次に、integral3 を使用して 3 つの積分を計算する関数ハンドルを作成します。

Q = @(r) integral3(@(theta,phi,xi) f(r,theta,phi,xi),0,pi,0,pi,0,2*pi);

最後に、Qintegral の呼び出しの被積分として使用します。この積分を解くには、半径 r の値を選択する必要があるため、r=2 を使用します。

I = integral(Q,0,2,'ArrayValued',true)
I = 78.9568

厳密な解は π2r42 Γ(2) です。

I_exact = pi^2*2^4/(2*gamma(2))
I_exact = 78.9568

入力引数

すべて折りたたむ

関数ハンドルとして指定する被積分関数であり、領域 xminxxmaxymin(x) ≤ yymax(x) および zmin(x,y) ≤ zzmax(x,y) 上で積分される関数を定義します。関数 fun は、同じサイズの 3 つの配列を受け入れ、対応する値の配列を返さなければなりません。要素単位の演算を実行しなければなりません。

データ型: function_handle

x の下限。有限または無限の実数スカラー値として指定します。

データ型: double | single

x の上限。有限または無限の実数スカラー値として指定します。

データ型: double | single

y の下限。有限または無限の実数スカラー値として指定します。四角形でない領域を積分するときに、ymin を関数ハンドル (x の関数) になるように指定することもできます。

データ型: double | function_handle | single

y の上限。有限または無限の実数スカラー値として指定します。四角形でない領域を積分するときに、ymax を関数ハンドル (x の関数) になるように指定することもできます。

データ型: double | function_handle | single

z の下限。有限または無限の実数スカラー値として指定します。四角形でない領域を積分するときに、zmin を関数ハンドル (x,y の関数) になるように指定することもできます。

データ型: double | function_handle | single

z の上限。有限または無限の実数スカラー値として指定します。四角形でない領域を積分するときに、zmax を関数ハンドル (x,y の関数) になるように指定することもできます。

データ型: double | function_handle | single

名前と値の引数

引数のオプションのペアを Name1=Value1,...,NameN=ValueN として指定します。ここで Name は引数名で、Value は対応する値です。名前と値の引数は他の引数の後になければなりませんが、ペアの順序は重要ではありません。

R2021a より前では、コンマを使用してそれぞれの名前と値を区切り、Name を引用符で囲みます。

例: 'AbsTol',1e-12 は絶対許容誤差を小数点以下 12 桁に近い精度に設定します。

'AbsTol' と非負の実数で構成され、コンマ区切りのペアとして指定される、絶対許容誤差。integral3 は、絶対許容誤差を使用して絶対誤差 |q – Q| の推定を制限します。ここで、q は積分の計算値であり、Q は (未知の) 正確な値です。絶対許容誤差を減らすと、integral3 で精度の小数点以下の桁数をより多く指定できることもあります。既定値は 1e-10 です。

メモ

AbsTolRelTol は一緒に動作します。integral3 は絶対許容誤差または相対許容誤差を満たす可能性がありますが、両方とも満たす必要はありません。これらの許容誤差の使用の詳細は、ヒントの節を参照してください。

例: 'AbsTol',1e-12 は絶対許容誤差を小数点以下 12 桁に近い精度に設定します。

データ型: double | single

'RelTol' と非負の実数で構成され、コンマ区切りのペアとして指定される、相対許容誤差。integral3 は、相対許容誤差を使用して相対誤差 |q – Q|/|Q| の推定を制限します。ここで、q は積分の計算値であり、Q は (未知の) 正確な値です。相対許容誤差を減らすと、integral3 で精度の有効桁数をより多く指定できることもあります。既定値は 1e-6 です。

メモ

RelTolAbsTol は一緒に動作します。integral3 は相対許容誤差または絶対許容誤差を満たす可能性がありますが、両方とも満たす必要はありません。これらの許容誤差の使用の詳細は、ヒントの節を参照してください。

例: 'RelTol',1e-9 は約 9 桁の有効桁数に相対許容誤差を設定します。

データ型: double | single

'Method' と以下のいずれかの方法で構成され、コンマ区切りのペアとして指定される、積分法。

積分法説明
'auto'ほとんどの場合、integral3'tiled' 法を使用します。これは、積分の極限が無限であるときに 'iterated' 法を使用します。これは既定のメソッドです。
'tiled'integral3integral を呼び出して、xminxxmax 上で積分します。'tiled' 法で integral2 を呼び出して、ymin(x)yymax(x) および zmin(x,y)zzmax(x,y) 上で 2 重積分を評価します。
'iterated'integral3integral を呼び出して、xminxxmax 上で積分します。'iterated' 法で integral2 を呼び出して、ymin(x)yymax(x) および zmin(x,y)zzmax(x,y) 上で 2 重積分を評価します。積分の極限を無限にできます。

例: 'Method','tiled' はタイル状の積分法を指定します。

データ型: char | string

ヒント

  • integral3 関数は次を満たそうとします。

    abs(q - Q) <= max(AbsTol,RelTol*abs(q))
    ここで、q は積分の計算値であり、Q は (未知の) 正確な値です。絶対許容誤差と相対許容誤差は、精度と計算時間のトレードオフ方法を提供します。通常、相対許容誤差が積分の精度を決定します。ただし、abs(q) が十分に小さい場合、絶対許容誤差が積分の精度を決定します。通常は、絶対許容誤差と相対許容誤差を両方とも指定してください。

  • 'iterated' 法は、関数が積分領域内に不連続点をもつときに、より効果的になります。ただし、最高のパフォーマンスと精度は、不連続点で被積分関数を分割して、複数の積分結果を合計する場合に得られます。

  • 四角形でない領域を積分するときは、次の極限のいずれかまたはすべてである場合に、最良のパフォーマンスと精度が得られます。yminymaxzminzmax。四角形でない領域を積分する場合は、被積分関数値を 0 に設定することは避けてください。そうしなければならない場合は、'iterated' 法を指定してください。

  • 次の極限のいずれかまたはすべてである場合に、'iterated' メソッドを使用してください。ymin(x)ymax(x)zmin(x,y)zmax(x,y)

  • 無名関数をパラメタライズするときには、パラメーター値が関数ハンドルの寿命まで持続することを認識してください。たとえば、関数 fun = @(x,y,z) x + y + z + afun が作成されたときの a の値を使用します。後で a の値を変更することにした場合、新しい値で無名関数を再定義しなければなりません。

  • 積分の単精度極限を指定している場合、または fun が単精度の結果を返す場合、より大きな絶対許容誤差または相対許容誤差の指定が必要な場合があります。

  • 4 次元以上の次数の積分を解くには、integralintegral2、および integral3 の呼び出しを入れ子にすることができます。もう 1 つのオプションは、MATLAB® File Exchange で、4 ~ 6 の次数の積分を解く関数 integralN を使用することです。

参照

[1] L.F. Shampine “Vectorized Adaptive Quadrature in MATLAB,” Journal of Computational and Applied Mathematics, 211, 2008, pp.131–140.

[2] L.F. Shampine, "MATLAB Program for Quadrature in 2D." Applied Mathematics and Computation. Vol. 202, Issue 1, 2008, pp. 266–274.

拡張機能

バージョン履歴

R2012a で導入