Лабораторная работа №3 Графика в matlab. Двумерная и трёхмерная графика. Интерполяции и аппроксимации данных


Более точные методы вычисления определённых интегралов



бет8/10
Дата24.05.2023
өлшемі1,85 Mb.
#96609
түріЛабораторная работа
1   2   3   4   5   6   7   8   9   10
Байланысты:
Занятие3 130329 (1)

Более точные методы вычисления определённых интегралов

Методы интегрирования более высоких порядков точности в 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.






Достарыңызбен бөлісу:
1   2   3   4   5   6   7   8   9   10




©emirsaba.org 2024
әкімшілігінің қараңыз

    Басты бет