определённый трёхмерный интеграл методом квадратуры и кубатуры
[result,err]=int3d(X,Y,Z,f [,nf[,params]])
массив 4 на NUMTET
, содержащий абсциссы вершин NUMTET
тетраэдров.
массив 4 на NUMTET
, содержащий ординаты
вершин NUMTET
тетраэдров.
массив 4 на NUMTET
, содержащий третьи координаты вершин
NUMTET
тетраэдров.
внешняя (функция, список или строка), определяющая подынтегральную функцию
f(xyz,nf)
, где xyz
-- вектор координат точек, а
nf
-- число функций.
число интегрируемых функций (по умолчанию 1).
вещественный вектор [minpts, maxpts, epsabs, epsrel]
.
Значение по умолчанию [0, 1000, 0.0, 1.d-5]
.
Желаемые пределы абсолютной ошибки.
Желаемые пределы относительной ошибки.
Минимально число вычислений функции.
максимальное число вычислений функции. Число вычислений функции по каждому малому участку равно 43.
целочисленное значение или вектор целочисленных значений.
оценки абсолютных ошибок.
Данная функция вычисляет аппроксимацию данного вектора определённых интегралов
I I I (F ,F ,...,F ) dx(3)dx(2)dx(1), 1 2 numfun
где область интегрирования является набором из NUMTET
тетраэдров и где
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
циклично делит тетраэдры с наибольшими ошибками
изделия и оценивает интегралы и ошибки по новым меньшим тетраэдрам до тех пор,
пока запрошенная ошибка не будет достигнута, либо не будет использовано
maxpts
вычислений функций.
Применяется правило интегрирования по 43 точкам со всеми точками вычисления внутри тетраэдра. Правило имеет степень полинома 8.
Если значения входных параметров epsabs
или
epsrel
выбираются достаточно большими, то правило интегрирования
применяется к каждому тетраэдру и результаты прибавляются к заданным аппроксимациям
result(k)
. Никаких дальнейших делений тетраэдров не будет.
Когда int3d
вычисляет оценки для вектора интегралов, то все элементы вектора
обрабатываются одинаково. То есть, I(Fj)
и I(Fk)
для
j
неравном k
оцениваются с тем же самым делением области интегрирования.
Для интегралов с достаточной схожестью мы може сберечь время, применяя int3d
ко всем
подынтегральным функциям за один вызов. Для интегралов, которые
меняются постоянно как функции некоторого параметра, оценки, полученные int3d
,
будут меняться непрерывно при применении одного и того же деления ко всем элементам.
Это в общем случае не то же самое, когда различные элементы обрабатываются по-своему.
С другой стороны, эту возможность следует использовать осторожно, когда различные элементы интегралов требуют явно разных делений.
Fortran routine dcutet.f
X=[0;1;0;0]; Y=[0;0;1;0]; Z=[0;0;0;1]; [RESULT,ERROR]=int3d(X,Y,Z,'int3dex') // вычисляет подынтегральную функцию exp(x*x+y*y+z*z) по //тетраэдру (0.,0.,0.),(1.,0.,0.),(0.,1.,0.),(0.,0.,1.) //интеграция по кубу -1<=x<=1;-1<=y<=1;-1<=z<=1 // низ -верх- право -лево- перед -зад- 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]) | ![]() | ![]() |