int3d
определённый трёхмерный интеграл методом квадратуры и кубатуры
Синтаксис
[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
массив 4 на
NUMTET
, содержащий абсциссы вершинNUMTET
тетраэдров.- Y
массив 4 на
NUMTET
, содержащий ординаты вершинNUMTET
тетраэдров.- Z
массив 4 на
NUMTET
, содержащий третьи координаты вершин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
тетраэдров и где
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
,
будут меняться непрерывно при применении одного и того же деления ко всем элементам.
Это в общем случае не то же самое, когда различные элементы обрабатываются по-своему.
С другой стороны, эту возможность следует использовать осторожно, когда различные элементы интегралов требуют явно разных делений.
Сcылки
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])
Смотрите также
Report an issue | ||
<< int2d | Дифференциальные уравнения | intc >> |