integral
数値積分
説明
例
広義積分
関数 を作成します。
fun = @(x) exp(-x.^2).*log(x).^2;
x=0
から x=Inf
までの積分を評価します。
q = integral(fun,0,Inf)
q = 1.9475
パラメーター化された関数
1 つのパラメーター をもつ関数 を作成します。
fun = @(x,c) 1./(x.^3-2*x-c);
c=5
で x=0
から x=2
までの積分を評価します。
q = integral(@(x) fun(x,5),0,2)
q = -0.4605
この手法の詳細については、関数のパラメーター化を参照してください。
下限の特異点
関数 を作成します。
fun = @(x)log(x);
既定の誤差許容量で x=0
から x=1
までの積分を評価します。
format long
q1 = integral(fun,0,1)
q1 = -1.000000010959678
今度は小数点以下 12 桁の精度を指定して、積分を再び評価します。RelTol
を 0 に設定して、integral
が絶対許容誤差のみを満たそうとするようにします。
q2 = integral(fun,0,1,'RelTol',0,'AbsTol',1e-12)
q2 = -1.000000000000010
途中点を使用した複雑な閉曲線積分
関数 を作成します。
fun = @(z) 1./(2*z-1);
途中点を指定して、複素平面内の 0
、1+1i
、1-1i
、0
の三角形の経路上で積分します。
q = integral(fun,0,0,'Waypoints',[1+1i,1-1i])
q = 0.0000 - 3.1416i
ベクトル値関数
ベクトル値関数 を作成し、x=0
から x=1
まで積分します。'ArrayValued',true
を指定して、配列値またはベクトル値関数の積分を評価します。
fun = @(x)sin((1:5)*x);
q = integral(fun,0,1,'ArrayValued',true)
q = 1×5
0.4597 0.7081 0.6633 0.4134 0.1433
振動関数の広義積分
関数 を作成します。
fun = @(x)x.^5.*exp(-x).*sin(x);
絶対および相対の許容誤差を調整し、x=0
から x=Inf
までの積分を評価します。
format long q = integral(fun,0,Inf,'RelTol',1e-8,'AbsTol',1e-13)
q = -14.999999999998360
入力引数
fun
— 被積分関数
関数ハンドル
関数ハンドルとして指定する被積分関数であり、xmin
から xmax
まで積分される関数を定義します。
スカラー値問題の場合、関数 y = fun(x)
はベクトル引数 x
を受け入れてベクトル結果 y
を返さなければなりません。これは通常、fun
が行列演算子ではなく配列演算子を使用しなければならないことを意味します。たとえば、*
(mtimes
) ではなく、.*
(times
) を使用します。'ArrayValued'
オプションを true
に設定した場合、fun
はスカラーを受け入れて固定サイズの配列を返さなければなりません。
xmin
— x の下限
実数 | 複素数
x の下限。実数 (有限または無限) スカラー値または複素数 (有限) スカラー値として指定します。xmin
または xmax
のいずれかが複素数である場合、integral
は直線経路上の xmin
から xmax
までの経路積分を近似します。
データ型: double
| single
複素数のサポート: あり
xmax
— x の上限
実数 | 複素数
x の上限。実数 (有限または無限) または複素数 (有限) として指定します。xmin
または xmax
のいずれかが複素数である場合、integral
は直線経路上の xmin
から xmax
までの経路積分を近似します。
データ型: double
| single
複素数のサポート: あり
名前と値の引数
引数のオプションのペアを Name1=Value1,...,NameN=ValueN
として指定します。ここで Name
は引数名で、Value
は対応する値です。名前と値の引数は他の引数の後になければなりませんが、ペアの順序は重要ではありません。
R2021a より前では、コンマを使用してそれぞれの名前と値を区切り、Name
を引用符で囲みます。
例: integral(fun,a,b,'AbsTol',1e-12)
は絶対許容誤差を小数点以下 12 桁に近い精度に設定します。
AbsTol
— 絶対許容誤差
1e-10
(既定値) | 非負の実数
'AbsTol'
と非負の実数で構成され、コンマ区切りのペアとして指定される、絶対許容誤差。integral
は、絶対許容誤差を使用して絶対誤差 |q – Q| の推定を制限します。ここで、q は積分の計算値であり、Q は (未知の) 正確な値です。絶対許容誤差を減らすと、integral
で精度の小数点以下の桁数をより多く指定できることもあります。
メモ
AbsTol
と RelTol
は一緒に動作します。integral
は絶対許容誤差または相対許容誤差を満たす可能性がありますが、両方とも満たす必要はありません。これらの許容誤差の使用の詳細は、ヒントの節を参照してください。
例: integral(fun,a,b,'AbsTol',1e-12)
は絶対許容誤差を小数点以下 12 桁に近い精度に設定します。
データ型: single
| double
RelTol
— 相対許容誤差
1e-6
(既定値) | 非負の実数
'RelTol'
と非負の実数で構成され、コンマ区切りのペアとして指定される、相対許容誤差。integral
は、相対許容誤差を使用して相対誤差 |q – Q|/|Q| の推定を制限します。ここで、q は積分の計算値であり、Q は (未知の) 正確な値です。相対許容誤差を減らすと、integral
で精度の有効桁数をより多く指定できることもあります。
メモ
RelTol
と AbsTol
は一緒に動作します。integral
は相対許容誤差または絶対許容誤差を満たす可能性がありますが、両方とも満たす必要はありません。これらの許容誤差の使用の詳細は、「ヒント」の節を参照してください。
例: integral(fun,a,b,'RelTol',1e-9)
は相対許容誤差を約 9 桁の有効桁数に設定します。
データ型: single
| double
ArrayValued
— 配列値関数フラグ
false
または 0
(既定値) | true
または 1
配列値関数フラグ。'ArrayValued'
と、数値または logical の 1
(true
) または 0
(false
) とで構成される、コンマ区切りのペアとして指定します。このフラグを true
または 1
に設定すると、fun
がスカラー入力を受け入れ、ベクトル、行列または N 次元配列の出力を返す関数であることを示します。
既定値である false
は、fun
がベクトル入力を受け入れベクトル出力を返す関数であることを示します。
例: integral(fun,a,b,'ArrayValued',true)
は、被積分関数が配列値関数であることを示します。
Waypoints
— 積分途中点
ベクトル
'Waypoints'
と、実数または複素数のベクトルとで構成され、コンマ区切りのペアとして指定される、積分途中点。途中点を使用して、積分器に初期メッシュで使用させる積分区間内の点を示します。
局所的極値など、関数の興味深い機能の近くに評価点を追加します。
不連続点の位置を指定して、被積分関数の不連続点に対して効率的に積分します。
複素数を途中点として指定して複雑な閉曲線積分を実行します。
xmin
、xmax
または途中点ベクトルの要素が複素数の場合、積分は、複素平面内の一連の直線パスに対して実行されます。この場合、積分の極限と途中点はすべて有限でなければなりません。
特異点を指定するために途中点を使用しないでください。その代わり、区間を分割し、終端点で特異点となる別の積分の結果を追加してください。
例: integral(fun,a,b,'Waypoints',[1+1i,1-1i])
は、積分区間に沿った 2 つの複素数途中点を指定します。
データ型: single
| double
複素数のサポート: あり
ヒント
integral
関数は次を満たそうとします。ここで、abs(q - Q) <= max(AbsTol,RelTol*abs(q))
q
は積分の計算値であり、Q
は (未知の) 正確な値です。絶対許容誤差と相対許容誤差は、精度と計算時間のトレードオフ方法を提供します。通常、相対許容誤差が積分の精度を決定します。ただし、abs(q)
が十分に小さい場合、絶対許容誤差が積分の精度を決定します。通常は、絶対許容誤差と相対許容誤差を両方とも指定してください。積分の単精度極限を指定している場合、または
fun
が単精度の結果を返す場合、より大きな絶対許容誤差または相対許容誤差を指定する必要があります。
参照
[1] L.F. Shampine “Vectorized Adaptive Quadrature in MATLAB®,” Journal of Computational and Applied Mathematics, 211, 2008, pp.131–140.
拡張機能
C/C++ コード生成
MATLAB® Coder™ を使用して C および C++ コードを生成します。
使用上の注意事項および制限事項:
可変サイズ配列のサポートを有効にしなければなりません。
関数
integral
は、スパース行列出力を返す関数ハンドルをサポートしません。
スレッドベースの環境
MATLAB® の backgroundPool
を使用してバックグラウンドでコードを実行するか、Parallel Computing Toolbox™ の ThreadPool
を使用してコードを高速化します。
この関数はスレッドベースの環境を完全にサポートしています。詳細については、スレッドベースの環境での MATLAB 関数の実行を参照してください。
バージョン履歴
R2012a で導入
MATLAB コマンド
次の MATLAB コマンドに対応するリンクがクリックされました。
コマンドを MATLAB コマンド ウィンドウに入力して実行してください。Web ブラウザーは MATLAB コマンドをサポートしていません。
Select a Web Site
Choose a web site to get translated content where available and see local events and offers. Based on your location, we recommend that you select: .
You can also select a web site from the following list:
How to Get Best Site Performance
Select the China site (in Chinese or English) for best site performance. Other MathWorks country sites are not optimized for visits from your location.
Americas
- América Latina (Español)
- Canada (English)
- United States (English)
Europe
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)