Main Content

このページの翻訳は最新ではありません。ここをクリックして、英語の最新版を参照してください。

vpaintegral

可変精度を使用した数値積分

説明

vpaintegral(f,a,b) は、a から b まで、f を数値的に近似します。f の既定の変数 xsymvar で検出されます。

vpaintegral(f,[a b])vpaintegral(f,a,b) と等価です。

vpaintegral(f,x,a,b) は、積分変数 x を使用して数値積分を実行します。

vpaintegral(___,Name,Value) は、1 つ以上の Name,Value 引数のペアによって指定された追加オプションを使用します。

シンボリック式の数値積分

シンボリック式 x^21 から 2 まで数値積分します。

syms x
vpaintegral(x^2, 1, 2)
ans =
2.33333

シンボリック関数の数値積分

シンボリック関数 y(x) = x21 から 2 まで数値積分します。

syms y(x)
y(x) = x^2;
vpaintegral(y, 1, 2)
ans =
2.33333

高精度の数値積分

vpaintegral は可変精度演算を使用し、一方、MATLAB® の関数 integral は倍精度演算を使用します。MATLAB 関数 integral のオーバーフローやアンダーフローの原因となる値は、vpaintegral で許容誤差の既定値を使用して処理できます。

besseli(5,25*u).*exp(-u*25) を、integralvpaintegral の両方を使用して積分します。関数 integralNaN を返して警告を表示しますが、vpaintegral は正しい結果を返します。

syms u x
f = besseli(5,25*x).*exp(-x*25);
fun = @(u)besseli(5,25*u).*exp(-u*25);

usingIntegral = integral(fun, 0, 30)
usingVpaintegral = vpaintegral(f, 0, 30)
Warning: Infinite or Not-a-Number value encountered. 
usingIntegral =
   NaN

usingVpaintegral =
0.688424

許容誤差を使用した精度の引き上げ

関数 digitsvpaintegral には影響しません。代わりに、積分の許容誤差を小さくすると、vpainteral の精度が上がります。反対に、許容誤差を大きくすると、数値積分が高速化します。vpaintegral で使用する許容誤差を制御するには、以下の条件を介して積分に影響を与える相対許容誤差 RelTol や絶対許容誤差 AbsTol を変更します。

|QI|max(AbsTol,|Q|·RelTol)whereQ=Calculated IntegralI=Exact Integral.

RelTol10^(-32) に設定して、besselj(0,x)0 から pi まで有効桁数 32 桁で数値積分します。'AbsTol' を 0 に設定して無効にします。

syms x
vpaintegral(besselj(0,x), [0 pi], 'RelTol', 1e-32, 'AbsTol', 0)
ans =
1.3475263146739901712314731279612

使用する許容誤差の値を低くすると、速度は低下しますが精度は上がります。

中間点を使用した複雑な経路積分

1/(2*z-1) を、中間点を使用して、0 から 1+1i1-1i を通過し、元の 0 に戻る三角形の経路上で積分します。

syms z
vpaintegral(1/(2*z-1), [0 0], 'Waypoints', [1+1i 1-1i])
ans =
- 8.67362e-19 - 3.14159i

中間点の順序を変更し、上限と下限を入れ替え、積分の方向を反転させると、結果の符号が変わります。

多重積分

vpaintegral を入れ子にして呼び出し、多重積分を実行します。次を積分します。

1213xydxdy.

syms x y
vpaintegral(vpaintegral(x*y, x, [1 3]), y, [-1 2])
ans =
6.0

積分範囲をシンボリック式やシンボリック関数にできます。y の積分範囲を x で指定して、0 ≤ x ≤ 1 および |y| < x の三角形の領域で積分します。

vpaintegral(vpaintegral(sin(x-y)/(x-y), y, [-x x]), x, [0 1])
ans =
0.89734

入力引数

すべて折りたたむ

積分する式または関数。シンボリック数、変数、ベクトル、行列、多次元配列、関数または式として指定します。

積分範囲。2 つの数値、シンボリック数、シンボリック変数、シンボリック関数またはシンボリック式のリストとして指定します。

積分変数。シンボリック変数として指定します。x が指定されていない場合、積分変数は symvar で検出されます。

名前と値のペアの引数

引数 Name,Value のオプションのコンマ区切りペアを指定します。Name は引数名、Value は対応する値です。Name は引用符で囲まなければなりません。Name1,Value1,...,NameN,ValueN のように、複数の名前と値のペアの引数を任意の順番で指定できます。

例: 'RelTol',1e-20

相対許容誤差。正の実数として指定します。既定の設定は 1e-6 です。RelTol·|Q|>AbsTol (ここで Q は計算された積分) の場合のみ、引数 RelTol によって積分の精度が決定されます。この場合、vpaintegral は条件 |QI|RelTol·|Q| を満たします。ここで、I は厳密な積分値です。RelTol のみを使用し、AbsTol を無効にするには、AbsTol0 に設定します。

例: 1e-8

絶対許容誤差。非負の実数として指定します。既定の設定は 1e-10 です。AbsTol>RelTol·|Q| (ここで Q は計算された積分) の場合、AbsTol によって積分の精度が決定されます。この場合、vpaintegral は条件 |QI|AbsTol を満たします。ここで、I は厳密な積分値です。AbsTol を無効にして RelTol のみを使用するには、AbsTol0 に設定します。

例: 1e-12

積分経路。数値のベクトルまたはシンボリック数、シンボリック式あるいはシンボリック関数のベクトルとして指定します。vpaintegral は、一続きの直線経路に沿って (下限から第 1 中間点まで、第 1 中間点から第 2 中間点までというように) 最終的に最後の中間点から上限に至るまで積分します。閉曲線積分の場合、下限と上限を等しく設定し、中間点を使用して閉曲線を定義します。

入力の最大評価数。正の整数または正のシンボリック整数として指定します。既定値は、10^5 です。f の評価数が MaxFunctionCalls を超えると、vpaintegral はエラーをスローします。評価数を無制限にする場合、MaxFunctionCallsInf に設定します。

ヒント

  • 入力は必ず積分可能なものにしてください。入力が積分できない場合、vpaintegral の出力は予測できません。

  • 関数 digitsvpaintegral には影響しません。精度を引き上げるには、代わりに引数 RelTolAbsTol を使用します。

参考

| | |

トピック

R2016b で導入