Scilab Website | Contribute with GitLab | Mailing list archives | ATOMS toolboxes
Scilab Online Help
2024.1.0 - Русский


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

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

  • intc — интеграл вдоль прямой на комплексной плоскости
  • intl — Интеграл Коши по дуге окружности Интеграл
  • int2d — определённый двумерный интеграл методом квадратуры и кубатуры
Report an issue
<< int2d Дифференциальные уравнения intc >>

Copyright (c) 2022-2024 (Dassault Systèmes)
Copyright (c) 2017-2022 (ESI Group)
Copyright (c) 2011-2017 (Scilab Enterprises)
Copyright (c) 1989-2012 (INRIA)
Copyright (c) 1989-2007 (ENPC)
with contributors
Last updated:
Mon Jun 17 17:55:05 CEST 2024