int3d
求積法および立体求積法により3次元積分を定義
呼び出し手順
[result, err] = int3d(X, Y, Z, f) [result, err] = int3d(X, Y, Z, f, nf) [result, err] = int3d(X, Y, Z, f, nf, params)
引数
- X
NUMTET
個の4面体の頂点の横座標軸の値を有する 4行NUMTET
列の配列- Y
NUMTET
個の4面体の頂点の縦座標軸の値を有する 4行NUMTET
列の配列- Z
NUMTET
個の4面体の頂点の第三座標軸の値を有する 4行NUMTET
列の配列- f
被積分関数
f(xyz,nf)
を定義する 外部 (関数またはリストまたは文字列) , ただしxyz
は点の座標のベクトル, nf は関数の数- nf
成分する関数の数 (デフォルトは 1)
- params
実数ベクトル
[minpts, maxpts, epsabs, epsrel]
.デフォルト値は[0, 1000, 0.0, 1.d-5]
.- epsabs
絶対誤差の指定値.
- epsrel
相対誤差の指定値.
- minpts
関数評価の最小値.
- maxpts
関数評価の最大値. 各サブ領域における関数評価の最大値は 43 回です
- result
積分値,または積分値のベクトル.
- err
絶対誤差の推定値.
説明
この関数は指定したベクトルの定積分に関する近似値を計算します.
I I I (F ,F ,...,F ) dx(3)dx(2)dx(1), 1 2 numfun
ただし,積分区間は NUMTET個の4面体で以下のように定義されます
F = F (X(1),X(2),X(3)), J = 1,2,...,NUMFUN. J J
近似値result(k)
を計算する際に,
I の各要素が以下の精度指標を満たすことが期待されるような
グローバルな適用型ストラテジが適用されます:
ABS(I(K)-RESULT(K))<=MAX(EPSABS,EPSREL*ABS(I(K)))
int3d
は,
推定誤差が最大となる4面体を分割し,
積分値と誤差を分割後の新しい4面体で積分値と誤差を評価し続ける処理を
指定された誤差を満たすか,
MAXPTS
回の関数評価が行われるまで反復します.
すべての点が4面体の内側となる43 点の積分則が 適用されます.この積分則は8次の多項式を有します.
入力パラメータ EPSABS
または
EPSREL
として十分に大きな値が選択された場合,
ある積分則が複数の各4面体をまたがって適用され,
その結果の合算値が近似値RESULT(K)
を計算する際に使用
されます.この場合,4面体の更なる分割は行われません.
int3d
が積分値ベクトルの指定値を計算する場合,
ベクトルの全要素に同じ処理が行われます.
j
と k
が等しくない
I(Fj)
および I(Fk)
が積分区間の同じ分割領域で積分されます.
十分な類似性がある積分の場合,
int3d
を1回のコールですべての被積分関数に
適用することで時間を節約することができます.
なんらかのパラメータの関数として積分値が変化する場合,
すべての要素に同じ分割が適用されるとすると,
int3d
により計算される推定値も
これは,異なる要素に指定した処理の適用が指定される場合には
あてはまりません.
一方, 積分の異なる要素が明確に異なる分割を必要とする場合には この機能を注意して使用する必要があります.
参考
Fortran ルーチン dcutet.f
例
X = [0;1;0;0]; Y = [0;0;1;0]; Z = [0;0;0;1]; [RESULT, ERROR] = int3d(X, Y, Z, 'int3dex') // computes the integrand exp(x*x+y*y+z*z) over the //tetrahedron (0.,0.,0.),(1.,0.,0.),(0.,1.,0.),(0.,0.,1.) //integration over a cube -1<=x<=1;-1<=y<=1;-1<=z<=1 // bottom -top- right -left- front -rear- X =[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0; -1,-1, -1,-1, 1, 1, -1,-1, -1,-1, -1,-1; 1,-1, 1,-1, 1, 1, -1,-1, 1,-1, 1,-1; 1, 1, 1, 1, 1, 1, -1,-1, 1, 1, 1, 1]; Y =[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0; -1,-1, -1,-1, -1, 1, -1, 1, -1,-1, 1, 1; -1, 1, -1, 1, 1, 1, 1, 1, -1,-1, 1, 1; 1, 1, 1, 1, -1,-1, -1,-1, -1,-1, 1, 1]; Z =[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0; -1,-1, 1, 1, -1, 1, -1, 1, -1,-1, -1,-1; -1,-1, 1, 1, -1,-1, -1,-1, -1, 1, -1, 1; -1,-1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]; function v=f(xyz, numfun), v=exp(xyz'*xyz), endfunction [result, err] = int3d(X, Y, Z, f, 1, [0,100000,1.d-5,1.d-7]) function v=f(xyz, numfun), v=1, endfunction [result, err] = int3d(X, Y, Z, f, 1, [0,100000,1.d-5,1.d-7])
Report an issue | ||
<< int2d | Differential Equations, Integration | intc >> |