Labs Matlab / Lab4 / index2
.htmМетоды численного интегрирования
Аналитическое интегрирование средствами MATLAB.
Аналитическое дифференцирование средствами MATLAB.
Теоретическая оценка погрешности численного интегрирования.
Численное интегрирование
Численное интегрирование средствами MATLAB
Правило Рунге оценки погрешности интегрирования
К вычислениям определенных интегралов сводятся многие практические задачи физики, химии, экологии, механики и других естественных наук. На практике взять интеграл аналитически не всегда удается. В этом случае используются методы численного интегрирования. В данной лабораторной работе рассматриваются методы Ньютона - Котеса, в частности методы прямоугольников, трапеций и Симпсона (парабол). Кроме того, в лабораторной работе рассматриваются способы аналитического и численного отыскания интегралов средствами MATLAB.
Вычислительные формулы для всех рассматриваемых методов приведены в приложении, теоретический материал следует изучать по материалам лекций и рекомендованной литературе. Здесь же будут рассмотрены практические аспекты реализации методов численного интегрирования в MATLAB.
Вам следует внимательно изучить и выполнить приведенные здесь примеры, может быть для функций из ваших вариантов задач.
1. Аналитическое интегрирование средствами MATLAB.
В лабораторной работе, основной задачей которой является исследование методов численного интегрирования, в некоторых случаях для отыскания погрешности результатов требуется точные значения интегралов. Т.е. эти величины необходимо определить аналитически.
Для вычисления определенных и неопределенных интегралов в MATLAB спользуется функция int.
Синтаксис:
Вызов Описание int(S) Вычисляется неопределенный интеграл от функции S по ее символьной переменной, определенной в syms.
int(S,v) Вычисляется неопределенный интеграл от функции S по ее символьной переменной v, определенной в syms.
int(S,a,b) Вычисляется определенный интеграл от a до b функции S по ее символьной переменной, определенной в syms. A и b могут быть переменными символьного или вещественного типа.
int(S,v,a,b) Вычисляется определенный интеграл от a до b функции S по ее символьной переменной v, определенной в syms. A и b могут быть переменными символьного или вещественного типа. Пример использования функции int. В данном примере подинтегральная функция задается явным образом.
График подинтегральной функции:
Обратите внимание на форматирование графика прямо в тексте программы.
В следующем примере подинтегральная функция и переменная интегрирования задаются в символьной форме.
Обратите внимание, что в данном примере для построения графика используется m - файл f.m:
Это связано с тем, что аргументом функции fplot не может быть символьная функция.
График интегрируемой функции:
2. Аналитическое дифференцирование средствами MATLAB.
В лабораторной работе, основной задачей которой является исследование методов численного интегрирования, для отыскания теоретической погрешности результатов требуется знание производной от интегрируемой функции до четвертого порядка включительно.
Для вычисления производных аналитически в MATLAB спользуется функция diff.
Синтаксис:
Вызов Описание diff(S) Вычисляется аналитическое выражение для производной от функции S, заданной символьно. diff(S,n) Вычисляется аналитическое выражение для производной от функции S порядка n. Пример использования функции diff при вычислении максимума второй производной на отрезке [a, b]
График производной:
3. Теоретическая оценка погрешности численного интегрирования
Рассмотрим примеры использования теоретической оценки погрешности интегрирования на примере двух задач.
Задача 1. Определить теоретическую погрешность численного интегрирования методом трапеций в случае одного элементарного отрезка интегрирования..
Теоретическая погрешность для метода трапеций составляет
В случае элементарного отрезка иртегрирования, если заданы пределы интегрирования и подинтегральная функция, задачу можно решить например следующим образом:
В результате получим
f2 =
50*x^3-366/5*x^2+34/5
M2 =
16.4000
Погрешность
R =
0.1164
Т.о. теоретическая оценка абсолютной погрешности погрешности составляет 0.1. В задаче 1 лабораторной работы вам предлагается убедиться, что данная теоретическая оценка действительно справедлива.
Задача 2. Определить шаг дискретизации и количество узлов интегрирования, необходимые для того. чтобы погрешность интегрирования не превышала величины 0.0001.
Если заданы пределы интегрирования и интегрируемая функция, задачу можно решить например следующим образом:
В результате получим:
f2 =
50*x^3-366/5*x^2+34/5
M2 =
16.4000
h =
1.289562396771206e-002
n =
3.412010160203707e+001
n =
35
h =
1.257142857142857e-002
Таким образом, чтобы вычислить интеграл от функции
f(x)=2.5*x5-6.1*x4+3.4*x2-9.1*x+18
по методу трапеций c точностью 0.0001, небходимо задать 35 узлов интегрирования. При этом шаг дискретизации составляет h=1.257142857142857*10-2 .
Вам остается убедиться, что погрешность интегрирования с данными параметрами действительно не превышает 0.0001.
4. Численное интегрирование
Вычислительные формулы приведены в приложении . Их анализ показывает, что формулы для одного элементарного отрезка интегрирования не требуют каких либо новых знаний. Необходимо только приготовить m-функцию, в которой следует определить интегрируемую функцию. И конечно для оценки погрешности интегрирования следует знать точное значение интеграла (см. выше).
Случай формул для составного отрезка интегрирования более сложный. Здесь требуется вычислять значения сумм. Например в методе Симпсона
где
В языке программировани MATLAB, как и в других языках программирования, существует оператор цикла for , возможностей которого достаточно для решения поставленных задач. Синтаксис оператора цикла описан в разделе Программирование. Далее мы просто рассмотрим пример решения задачи численного интегрирования.
Пример. Численное интегрирование методом Симпсона.
Закрашенную область следует выполнить самостоятельно
Результаты:
>> Результаты
Точное значение интеграла
2.575860114624924e-001
Результат и погрешность для элементарного отрезка
2.575665708043314e-001 1.944065816106289e-005
Количество узлов
4
Результат и погрешность по методу Симпсона
2.575859351120611e-001 7.635043136611230e-008
Конечно, рассматриваемый здесь способ решения задачи является не единственным и не наилучшим. В частности, можно было бы создать m-функцию, в которой и производилось бы вычисление интеграла.
5. Численное интегрирование средствами MATLAB
В MATLAB реализованы множество современных методов численного интегрирования. Мы рассмотрим простейшие из них.
А. Метод трапеций. Метод трапеции реализован в MATLAB несколькими функциями:
cumtrapz(у)
cumtrapz(x,y)
trapz(y)
trapz(x,y)
Наиболее интересна последняя из них. Данная функция вычисляет интеграл от функции у(х) по х методом трапеций. Аргумент и функция задаются в виде векторов или х — в виде вектора, а у — в виде матрицы. Если у(х) — матрица, то функция возвращает вектор значений интеграла для каждого столбца матрицы.
Пример. Пусть подынтегральная функция имеет вид
у(х) = х*еx + ln(x) + 1
Необходимо вычислить определенный интеграл в диапазоне от 1 до 10 с шагом 0.5.
Решение:
x=1:0.5:10;
y=x.*exp(x)+log(x)+1;
trapz(x,y)
Решение:
ans =
2.032841320958599e+005
Б. Метод Симпсона. Метод Симпсона реализован в MATLAB также несколькими функциями. Мы рассмотрим простейшую из них:
quad('fun', a, b)
quad('fun', a, b, tol)
Обозначения:
'fun'— подынтегральная функция, взятая в одинарные кавычки;
а, b — пределы интегрирования;
tol — относительная погрешность, задаваемая пользователем; по умолчанию tol=10-3.
Пример. Вычислить интеграл от функции x+ex на отрезке [1, 2] с точностью 10-5.
quad('x+exp(x)', 1, 2, 1e-5)
Результат:
ans = 6.170774280645000e+000
6. Правило Рунге оценки погрешности интегрирования
В формулах для оценки погрешности квадратурных формул R используются значения производных подинтегральной функции, что требует дополнительного анализа и вычислений. В связи с этим получило распространение практическое правило Рунге оценки погрешности.
Пусть
I – точное значение интеграла,
I(n) – значение интеграла вычисленное при n узлах интегрирования h = (b-a)/n,
I(2n) – значение интеграла вычисленное при 2*n узлах интегрирования, h = (b-a)/2n.
Необходимо определить, с какой точностью вычислен итеграл I(2n), т.е. найти абсолютную погрешность
Для непосредственно определения данной погрешности необходимо найти максимум модуля соответствующей производжной от интегрируемой функции на отрезке [a, b]. Часто это достаточно трудоемкий или вообще невозможный процесс. Напрмер если интегрируемая функция задана таблично. В таких случаях оценку погрешности величины I(2n) можно провести следующим образом:
Здесь m = 3 для методов средних прямоугольников и трапеций, m = 15 для метода Симпсона.
Примечание. Если решается задача численного вычисления интеграла с заданной точностью, процесс удвоения числа узлов интегрирования продолжается до тех пор, пока величена не станет меньше заданной погрешности.