Более точные методы вычисления определённых интегралов
Методы интегрирования более высоких порядков точности в MATLAB реализованы в таких функциях, как quad и quadl. Эти функции больше подходят для интегрирования гладких функций.
Работа функции quad основана на квадратурной формуле Симпсона, а функция quadl вычисляет определенные интегралы по более точным квадратурным формулам Гаусса-Лобатто. При использовании этих функций шаг интегрирования не задаётся (его программа подбирает автоматически). Зато можно указать требуемую точность вычисления интеграла. По умолчанию функции quad и quadl вычисляют приближенное значение интеграла с точностью, равной 10-6.
Самый простой способ обращения к функциям quad и quadl имеет вид:
q = quad(fun,a,b),
q = quadl(fun,a,b),
где fun – указатель на подынтегральную функцию, а переменные a и b – нижний и верхний пределы интегрирования.
Аргумент fun задаётся либо как указатель на функцию (например, @myfun, где myfun – имя функции), либо как формула с одной независимой переменной, заключённая в одинарные кавычки, либо как имя файл-функции (в одинарных кавычках), вычисляющей подынтегральную функцию.
Вычислим значение следующего определенного интеграла:
Сначала создадим файл-функцию (например, с именем integ) для вычисления подынтегрального выражения. Её текст будет таким:
function f=integ(x)
f=sin(x)./(x+1);
Теперь вычислим интеграл с помощью функции quad, который задан в первом её аргументе имя файл-функции integ, а во втором и третьем пределы интегрирования:
>> format long
>> q=quad('integ',0,3)
q =
0.841337922063012.
Если подынтегральную функцию задать явным образом, в виде строки, заключённой в одинарные кавычки, то выражение для вычисления интеграла будет иметь такой вид:
»q =quad(‘sin(x)./(x+1)’,0,3).
Результат его вычисления такой же:
q=
0.84133792206301.
При вычислении данного интеграла с помощью функции quadl получается более точное значение:
>> q=quadl('integ',0,3)
q =
0.841337965134661.
Если вы хотите повысить точность вычислений определённых интегралов, задайте более высокое значение точности (по сравнению с заданным по умолчанию значением 10-6) в дополнительном четвёртом аргументе функций quad и quadl, как, например:
»q=quad(‘integ’,0,3,1.e-16)
q=
0.84133796513891.
При этом интеграл будет вычисляться несколько медленнее, так как увеличится количество вычислений подынтегральной функции.
Для того чтобы помимо значения интеграла узнать количество точек, в которых каждая из функций quad и quadl вычисляет подынтегральную функцию, нужно задать два выходных аргумента:
>> [q,fcnt]=quad('integ',0,3)
q =
0.841337922063012
fcnt =
29
>> [q,fcnt]=quadl('integ',0,3)
q =
0.841337965134661
fcnt =
48.
В данном случае для достижения одной и той же точности, равной 10-6, функции quad понадобилось выполнить меньшее количество вычислений, чем функции quadl.
Достарыңызбен бөлісу: |