Please note that the recommended version of Scilab is 2025.0.0. This page might be outdated.
See the recommended documentation of this function
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)
Смотрите также
Используемые функции
Связанные подпрограммы можно найти в директории SCI/modules/differential_equations/src/fortran:
dqags.f и dqagse.f из quadpack
Report an issue | ||
<< integrate | Дифференциальное счисление, интегрирование | intl >> |