Main Content

quadv

(非推奨) ベクトル化された求積法

quadv は推奨されません。代わりに、integral'ArrayValued' オプションと共に使用します。

構文

Q = quadv(fun,a,b)
Q = quadv(fun,a,b,tol)
Q = quadv(fun,a,b,tol,trace)
[Q,fcnt] = quadv(...)

説明

Q = quadv(fun,a,b) は、a から b の区間で、再帰的な適応 Simpson 求積法を使用して、誤差 1.e-6 の範囲内で、複素配列値の関数 fun の積分を近似します。fun は、関数ハンドルです。関数 Y = fun(x) は、スカラー引数 x を受け入れ、x での積分値を含む、結果の配列 Y を返します。a から b の範囲は、有限でなければなりません。

関数のパラメーター化には、必要に応じて関数 fun に追加パラメーターを指定する方法が説明されています。

Q = quadv(fun,a,b,tol) は、既定の設定の 1.e-6 の代わりに、すべての積分に絶対許容誤差 tol を使用します。

メモ

すべての要素に同じ許容誤差が使用されるので、関数 quadv で得た結果の各要素は通常、関数 quad で得た結果の各要素と等しくありません。

Q = quadv(fun,a,b,tol,trace) (trace はゼロでない値) は、計算の反復の間 [fcnt a b-a Q(1)] の値を示します。

[Q,fcnt] = quadv(...) は、関数の評価回数を返します。

次の一覧には、MATLAB® のどの求積関数を使用するかを判断するために参照できる情報が含まれています。

  • 低い精度で滑らかでない被積分関数を使用する場合は、関数 quad が最も効率的である場合があります。

  • 滑らかな被積分関数を使った精度の高い計算には、関数 quadl が関数 quad よりも効率的である場合があります。

  • 高い精度の計算や振動被積分関数には、関数 quadgk が最も効率的である場合があります。無限区間をサポートし、端点での適度な特異性を扱うことができます。区分的な線形経路に沿った閉曲線積分もサポートします。

  • 関数 quadv は、配列値が指定された関数 fun に対して関数 quad をベクトル化します。

  • 区間が無限 ([a,)) の場合、fun(x) の積分が存在するには、x が無限に近づくにつれて fun(x) が減衰しなければならず、関数 quadgk ではそれを速く減衰させる必要があります。無限の区間の振動関数には特別な方法が必要ですが、fun(x) が速く減衰する場合は、関数 quadgk を使用できます。

  • 関数 quadgk は、特異性がさほど強くない場合に、有限の端点で特異性をもつ関数を積分します。たとえば、p >= -1/2 の場合に、log|x-c||x-c|p のような端点 c で動作する関数を積分します。関数が (a,b) 内の点で特異である場合、特異点を端点として使用して部分区間に対する積分の和として積分を記述し、関数 quadgk を使用して計算して、結果を加算します。

パラメーター化された配列値の関数 myarrayfun について、次のように定義します。

function Y = myarrayfun(x,n)
Y = 1./((1:n)+x);

次のコマンドは、a = 0 と b = 1 の間で、パラメーター値 n = 10 として myarrayfun を積分します。

Qv = quadv(@(x)myarrayfun(x,10),0,1);

結果の配列 Qv には、k = 1:10 の場合について Q(k) = log((k+1)./(k)) を推定する要素が 10 個あります。

Qv の要素は、ループ内で関数 quad を使用して積分計算をする場合と若干異なります。

for k = 1:10
	Qs(k) = quadv(@(x)myscalarfun(x,k),0,1);
end

ここで myscalarfun は、次のようになります。

function y = myscalarfun(x,k)
y = 1./(k+x);

バージョン履歴

R2006a より前に導入