vpaintegral
可変精度を使用した数値積分
説明
例
シンボリック式の数値積分
シンボリック式 x^2 を 1 から 2 まで数値積分します。
syms x vpaintegral(x^2, 1, 2)
ans = 2.33333
シンボリック関数の数値積分
シンボリック関数 y(x) = x2 を 1 から 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) を、integral と vpaintegral の両方を使用して積分します。関数 integral は NaN を返して警告を表示しますが、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
許容誤差を使用した精度の引き上げ
関数 digits は vpaintegral には影響しません。代わりに、積分の許容誤差を小さくすると、vpainteral の精度が上がります。反対に、許容誤差を大きくすると、数値積分が高速化します。vpaintegral で使用する許容誤差を制御するには、以下の条件を介して積分に影響を与える相対許容誤差 RelTol や絶対許容誤差 AbsTol を変更します。
RelTol を 10^(-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+1i、1-1i を通過し、元の 0 に戻る三角形の経路上で積分します。
syms z vpaintegral(1/(2*z-1), [0 0], 'Waypoints', [1+1i 1-1i])
ans = - 8.67362e-19 - 3.14159i
ウェイポイントの順序を変更し、上限と下限を入れ替え、積分の方向を反転させると、結果の符号が変わります。
多重積分
vpaintegral を入れ子にして呼び出し、多重積分を実行します。次を積分します。
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
入力引数
名前と値の引数
ヒント
バージョン履歴
R2016b で導入