int3d определённый трёхмерный интеграл методом квадратуры и кубатуры

## Синтаксис

    [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])

## Смотрите также

- intc
- intl
- int2d