Численное интегрирование методом квадратур
Приведенные ниже функции осуществляют интегрирование и двойное интегрирование, используя квадратурную формулу Симпсона или метод Гаусса-Лобатто. Квадратура – численный метод нахождения площади под графиком функции/(т), т. е. вычисление определенного интеграла вида:
В приведенных ниже формулах подынтегральное выражение fun обычно задается в форме дескриптора функции, поэтому с дидактическими целями используем нотацию @fun.
Функции quad и quadl используют два различных алгоритма квадратуры для вычисления определенного интеграла. Функция quad выполняет интегрирование по методу низкого порядка, используя рекурсивное правило Симпсона [4, 40]. Но она может быть более эффективной при негладких подынтегральных функциях или при низкой требуемой точности вычислений. Алгоритм quad в MATLAB 6 изменен по сравнению с предшествовавшими версиями, точность по умолчанию по сравнению с версиями 5.3х повышена в 1000 раз (с 10-3 до 10-6). Новая функция quadl (квадратура Лобатто) использует адаптивное правило квадратуры Гаусса-Лобатто очень высокого порядка. Устаревшая функция quads выполняла интегрирование, используя квадратурные формулы Ньютона-Котеса 8-го порядка [40]. Достижимая точность интегрирования гладких функций в MATLAB 6 поэтому также значительно выше, чем в предшествующих версиях.
- quad(@fun,a.b) – возвращает численное значение определенного интеграла от заданной функции @fun на отрезке [а b]. Используется значительно усовершенствованный в MATLAB 6 адаптивный метод Симпсона;
- quad(@fun,a.b.tol) – возвращает численное значение определенного интеграла с заданной относительной погрешностью tol. По умолчанию to1=l.e-6. Можно также использовать вектор, состоящий из двух элементов tol =[rel_tol abs_tol], чтобы точно определить комбинацию относительной и абсолютной погрешности;
- quad(@fun,a.b,tol.trace) – возвращает численное значение определенного интеграла и при значении trace, не равном нулю, строит график, показывающий ход вычисления интеграла;
- quad(@fun,a,b.tol,trace,PI,P2,…) – возвращает численное значение определенного интеграла по хот подынтегральной функции fun, использует дополнительные аргументы P1, P2,…, которые напрямую передаются в подынтегральную функцию: G=fun(X.P1,P2,…). Примеры:
>
>
quad(
'(exp(x)-1)'
,
0.1.1e
-
5
)
ans
=
0.7183
>
>
q
=
quad(@exp,
0.2.1e
-
4
)
q
=
6.3891
>
>
q
=
quad(@sin.
0
,pi,
1e
-
3
)
q
=
2.0000
- dblquad(@fun,inmin,inmax.outmin,outmax) – вычисляет и возвращает значение двойного интеграла для подынтегральной функции fun (Inner, outer), по умолчанию используя квадратурную функцию quad. Inner – внутренняя переменная, изменяющаяся на закрытом интервале от inmin до inmax, a outer – внешняя переменная, изменяющаяся на закрытом интервале от outmin до outmax. Первый аргумент @fun – строка, описывающая подынтегральную функцию. Это может быть либо дескриптор функции, либо объект inline (в последнем случае символ "@" в ее записи отсутствует). Обычная запись в апострофах тепер недопустима. Эта функция должна быть функцией двух переменных вид .fout=fun(inner.outer). Функция должна брать вектор inner и скаляр outer возвращать вектор fout, который является функцией, вычисленной в outer и каждом значении inner [Функция inime('expr', 'argl',…'argn') так же создает объект, но без дескриптора, 'ехрг' – выражение, Строки 'argx' – входные аргументы. При их отсутствии по умолчанию подставляется х. Если вместо 'arg' – скаляр, то он означает количество дополнительных переменных Р. Примеры записи: g = inline(exp); g – inline('tA 2'); g = inline('sin(2*pi*f + theta)'); g = inline('sin(2*pi*f + theta)',: 'theta'); g – inline('xA Pl+P2', 2). – Примеч. ред.];
- dblquad(@fun,inmin.inmax.outmin,oiitmax,tol.trace) – передает в функцию dblquad параметры tol и trace. Смотрите справку по функции quad для получения информации о параметрах to! и trace;
- dblquad(@fun,inmin,inmax,outmin,outmax.tol.trace,order) – передает параметры tol и trace для функции quad или quadl в зависимости от значения строки order. Допустимые значения для параметра order – @quad, @quadl или имя любого определенного пользователем квадратурного метода с таким же вызовом и такими же возвращаемыми параметрами, как у функций quad и quad!. (Например, при проверке старых программ можно использовать @quad8 для большей совместимости с прежними версиями MATLAB). По умолчанию (без параметра order) вызывается @quad. поскольку подинтегральные функции могут быть негладкими.
Пример: пусть m-файл integl.m описывает функцию 2*y*sin(x)+x/2*cos(y), тогда вычислить двойной интеграл от той функции можно следующим образом:
>
>
result
=
dblquad(@integl,pi,
2
*
pi,
0.2
*
pi)
result
=
78.9574