# intg

определённый интеграл

## Последовательность вызова

    [v,err]=intg(a,b,f [,ea [,er])

## Аргументы

a, b

  вещественные числа

f

  внешняя функция (функция, список или строка)

ea, er

  вещественные числа

ea

  абсолютная ошибка, требуемая для результата. Значение по умолчанию: 1.d-14.

er

  относительная ошибка, требуемая для результата. Значение по умолчанию: 1.d-8.

err

  оцененная абсолютная ошибка результата.

## Описание

`intg(a,b,f)` вычисляет определённый интеграл функции `f(t)` по `dt` в пределах от `a` до `b`. Функция `f(t)` должна быть непрерывной.

Вычисление, как можно ожидать, удовлетворяет следующему условию точности: `abs(I-v)<= max(ea,er*abs(I))`, где `I` -- точное значение интеграла.

`f` -- внешняя функция:

- Если `f` -- функция, то её определение должно иметь вид `y = f(t)`.

- Если `f` -- список, то этот список должен быть в виде: `list(f,x1,x2,...)`, где `f` -- функция с последовательностью вызова `f(t,x1,x2,...)`.

- Если `f` -- строка, то она ссылается на имя либо процедуры Fortran либо функции C с заданной последовательностью вызова:

- в случае Fortran вызывающая последовательность должна быть в виде `double precision function f(x)`, где `x` также является числом двойной точности.

- В случае C вызывающая последовательность должна быть `double f(double *x)`.

## Примеры

    // Функция, написанная на языке Scilab
    function y=f(x),y=x*sin(30*x)/sqrt(1-((x/(2*%pi))^2)),endfunction
    exact=-2.5432596188;
    I=intg(0,2*%pi,f)
    abs(exact-I)

    // Функция с аргументом, написанном на языке Scilab
    function y=f1(x,w),y=x*sin(w*x)/sqrt(1-((x/(2*%pi))^2)),endfunction
    I=intg(0,2*%pi,list(f1,30))
    abs(exact-I)

    // Функция, написанная на Fortran (требуется компилятор Fortran)
    // определение функции Fortran
    cd TMPDIR;
    F=['      double precision function ffun(x)'
       '      double precision x,pi'
       '      pi=3.14159265358979312d+0'
       '      ffun=x*sin(30.0d+0*x)/sqrt(1.0d+0-(x/(2.0d+0*pi))**2)'
       '      return'
       '      end'];
    mputl(F,fullfile(TMPDIR,'ffun.f'))

    // компилируем функцию
     l=ilib_for_link('ffun',fullfile(TMPDIR,'ffun.f'),[],'f');

    // добавляем  функцию в рабочее окружение
    link(l,'ffun','f')

    // интегрируем функцию
    I=intg(0,2*%pi,'ffun')
    abs(exact-I)

    // Функция, написанная на C (требуется компилятор C)
    // определение C-функции
    C=['#include <math.h>'
       'double cfun(double *x)'
       '{'
       '  double y,pi=3.14159265358979312;'
       '  y=*x/(2.0e0*pi);'
       '  return *x*sin(30.0e0**x)/sqrt(1.0e0-y*y);'
       '}'];
    mputl(C,fullfile(TMPDIR,'cfun.c'))

    //  компилируем функцию
     l=ilib_for_link('cfun',fullfile(TMPDIR,'cfun.c'),[],'c');

    // добавляем  функцию в рабочее окружение
    link(l,'cfun','c')

    // интегрируем функцию
    I=intg(0,2*%pi,'cfun')
    abs(exact-I)

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

- intc
- intl
- inttrap
- intsplin
- ode

## Используемые функции

Связанные подпрограммы можно найти в директории SCI/modules/differential_equations/src/fortran:

dqag0.f и dqags.f из quadpack