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 で導入