Format long

Метод трапеций является очень универсальным методом и хорошо подходит для интегрирования не слишком гладких функций. Если же функция под знаком интеграла является гладкой (существуют и непрерывны несколько первых производных), то лучше применять методы интегрирования более высоких порядков точности. При одном и том же шаге интегрирования методы более высоких порядков точности достигают более точных результатов. В системе MATLAB методы интегрирования более высоких порядков точно­сти реализуются функциями quadl (метод Симпсона) и quadv (quad16 в более старых версиях пакета ) (метод Ньютона - Котеса 8-го порядка точности). Оба этих метода являются к тому же адаптив­ными. Последнее означает, что пользователю нет необходимости контролиро­вать достигнутую точность результата путем сравнения последовательных зна­чений, соответствующих разным шагам интегрирования. Все это указанные адаптивные функции выполняют самостоятельно. У функции quadv более высокий порядок точности по сравнению с функцией quadl, что очень хорошо для гладких функций, так как обеспечивается более вы­сокая точность результата при большем шаге интегрирования (меньшем объеме вычислений). Однако функция quadl может иметь не меньшее, а даже большее быстродействие для не слишком гладких функций (разрывные или велики по аб­солютной величине вторая или третья производные). В любом случае обе эти функции по умолчанию обеспечивают одинаковую относительную точность ре­зультата, равную 0.001. Как и многие другие функции системы MATLAB, функции quadl и quadv мо­гут принимать различное количество параметров. Минимальный формат вызова этих функций включает в себя три параметра: имя подынтегральной функции, нижний предел интегрирования и верхний предел интегрирования. Если приме­няется четвертый параметр, то он является требуемой относительной точностью результата вычислений. Кстати, если обе эти адаптивные функции не могут обеспечить получение необходимой точности (расходящийся или близкий к этому интеграл), то они возвращают символическую бесконечность Inf.

Выше в подразделе 3.3 «Поиск минимума функции» мы приводили график функции humps, для которой определялись локальные минимумы. Вычис­лим теперь определенный интеграл от этой функции в пределах от 0 до 3, воспользовавшись для этого обеими адаптивными функциями:

[ I, cnt ] = quadl('humps', 0, 3);

23.9681

cnt = 468

[ I, cnt8 ] = quadv('humps', 0, 3);

23.9681

cnt8 = 213

Второе из возвращаемых значений (cnt, cnt8) для этих функций означает количество точек, в которых пришлось вычислять подынтегральную функцию. Таким образом, этот параметр характеризует трудоемкость метода. Сравнивая полу­ченные показатели, приходим к выводу, что при интегрировании такой гладкой функции, как humps, преимущество имеет метод quadv, так как для достижения минимальной точности в 0.001 (а по ходу дела может достигаться и более вы­сокая точность) ему требуется меньшее количество вычислений с подынте­гральной функцией (213 против 468).

Из высшей математики известно, что к определенным интегралам могут быть сведены многие другие типы интегралов, например криволинейные интегралы. Таким образом, с помощью функций quadl, quadv (или trapz) можно вычислить и эти интегралы.

Рассмотрим пример для криволинейных интегралов первого рода. Пусть требу­ется вычислить массу М винтовой линии С:

; ; ; ;

с постоянной линейной плотностью, равной 5. Задача решается с помощью кри­волинейного интеграла первого рода:

Для вычисления подынтегральной функции создадим следующий текст:

function z = MyFunc321(t)

,

который запишем в файл MyFunc321.m, после чего вызываем функцию quad:

М = 5 * quadl('MyFunc321', 0, 2);

М = 34.2903

Двойные интегралы сводятся к вычислению повторных определенных инте­гралов, один из которых является внутренним, а другой внешним. Внутренний интеграл является подынтегральной функцией для внешнего интеграла. Можно было бы написать некоторую цепочку вычислений (программу), в которой мно­гократные вычисления подынтегральной функции сводились бы к многократ­ным вызовам функции quadl. Однако нет необходимости делать это самосто­ятельно, так как в системе MATLAB для этого имеется специальная функция dblquad.



Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: