Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Glava_2a70_2014.doc
Скачиваний:
5
Добавлен:
01.07.2025
Размер:
5 Мб
Скачать
☆

2.22.2. Использование методов Симпсона и Гаусса-Лобатто.

В системе MATLAB методы численного интегрирования более высокого порядка точности реализуются функциями quad (метод Симпсона) и quadl (метод Гаусса-Лобатто). Следует отметить, что обе указанных функцию реализуют адаптивные алгоритмы, т.е. отсутствует необходимость контроля со стороны пользователя достигнутой точности вычисления интеграла посредством сопоставления результатов, полученных при использовании разных шагов интегрирования (эту процедуру адаптивные функции реализуют самостоятельно). Заметим, что функция quadl имеет более высокий порядок точности по сравнению с функцией quad, что позволяет выполнять интегрирование гладких функций с достаточно большими шагами интегрирования при сохранении точности (т.е., по сути, при меньшем объеме вычислительной работы). Функции функциями quad и quadl имеют достаточно длинные списки формальных параметров (как, впрочем, и многие другие функции в системе MATLAB), передаваемых в функцию при ее вызове. Минимальный список формальных параметров данных функций включает в себя три параметра: дескриптор подынтегральной функции, нижний и верхний пределы интегрирования:

q=quad(fun,a,b)

q=quadl(fun,a,b)

где fun – указатель на подынтегральную функцию; a и b – верхний и нижний пределы интегрирования.

Четвертый (дополнительный) параметр списка, задающий требуемую точность результата вычислений, является необязательным (по умолчанию точность принимается равной ).

Вычислим теперь рассмотренный выше интеграл, используя функции quad и quadl. Имеем:

>> f=inline('1-x+x.^2-x.^3','x');

>> TolX=1e-5;

>> [I,cnt]=quad(f,a,b,TolX)

I =

-12.749999999999996

cnt =

13

>> [I,cnt]=quadl(f,a,b,TolX)

I =

-12.750000000000002

cnt =

18

Второе из значений, возвращаемых данными функциями, – это количество точек, в которых пришлось вычислять подынтегральную функцию. Сопоставляя полученные показатели, можем заключить, что при интегрировании функции на отрезке определенное преимущество имеет функция quad ввиду того, что для достижения заданной точности при использовании функции quad потребовалось меньшее количество вычислений подынтегральной функции (13 против 18). Вместе с тем, такое преимущество, разумеется, имеет место далеко не для всех функций. Так, например, при интегрировании функции на отрезке будем иметь:

>> f=inline('sin(x)','x');

>> TolX=1e-5;

>> [I,cnt]=quad(f,-pi,pi,TolX)

I =

2.220446049250313e-16

cnt =

21

>> [I,cnt]=quadl(f,-pi,pi,TolX)

I =

2.015274060089494e-17

cnt =

18

т.е. в данном случае уже функция quadl более эффективна (установленная точность была достигнута за 18 итераций против 21 для функции quad).

2.22.3. Вычисление двойных интегралов.

В заключение отметим, что в MATLAB имеется специальная функция dblquad, предназначенная для вычисления двойных интегралов. Синтаксис обращения к последней имеет вид:

q=dblquad(fun,xmin,xmax,ymin,ymax)

где fun – указатель на подынтегральную функцию; xmin и xmax – пределы внутреннего интегрирования по переменной x; ymin и ymax – пределы внешнего интегрирования по переменной y.

Точность вычисления двойного интеграла можно задать в дополнительном шестом аргументе функции dblquad (по умолчанию точность принимается равной ). Заметим также, что по умолчанию функция dblquad выполняет вычисления на основе функции quad. Вместе с тем, метод вычислений также можно изменить, задав дополнительным седьмым аргументом, например, строку 'quad').

Так, например, при необходимости вычислитель интеграл

следует записать:

>> f=inline('x.*sin(y)+y.*sin(x)','x','y')

f =

Inline function:

f(x,y) = x.*sin(y)+y.*sin(x)

>> dblquad(f,0,1,1,2)

ans =

1.167771109668871

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]