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 で検出されます。

名前と値の引数

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

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

例: '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 で導入

参考

| | |

トピック