Материал: Matlab. Практический подход. Самоучитель

Внимание! Если размещение файла нарушает Ваши авторские права, то обязательно сообщите нам

Глава 6 Интегрирование

и дифференциальные уравнения

Ваше Высочество, здесь Вам никто ничего не скажет.

К/ф "Клуб самоубийц, или Приключения титулованной особы"

В этой главе речь пойдет о решении (в числовом виде) дифференциальных уравнений и вычислении определенных интегралов. В первую очередь нас будут интересовать дифференциальные уравнения. Но начнем с вычисления интегралов. Хотя на первый взгляд может показаться, что это не очень связанные между собой задачи, на самом деле это не совсем так.

Задача о вычислении определенного интеграла возникает, кроме прочего,

при решении дифференциального уравнения dy = f (x,y) специального dx

вида с функцией f (x,y) в правой части, не зависящей от неизвестной функции y(x), то есть когда f (x,y) = f (x). В этом случае имеем дифференциаль-

ное уравнение вида dy = f (x). Это задача по определению первообразной dx

функции, если известна ее производная. Добавив сюда начальное условие

вида y(x0) = y0

, получим задачу Коши. Ее решение может быть представ-

 

x

лено в виде y(x) = y0 + f (z)dz . Таким образом, задача сводится к вычис-

x

x

0

лению определенного интеграла f (z)dz . Именно такого типа задачи рас-

смотрим для начала.

x0

 

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

 

И силой нельзя, и отступать нельзя...

 

Б. Ельцин

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

236

 

 

Глава 6. Интегрирование и дифференциальные уравнения

Табл. 6.1. Функции для выполнения численного интегрирования

 

 

 

 

Функция

 

Описание

 

 

 

 

 

Вычисление интеграла методом квадратур Симпсона. Аргумен-

 

quad()

тами функции обычно указывают: указатель на подынтеграль-

 

ную функцию и границы интегрирования. Также можно в явном

 

 

виде указать точность результата (по умолчанию составляет ве-

 

 

личину 10−6 )

 

 

Вычисление интеграла методом квадратур Лобатто. Первым ар-

 

quadl()

гументом передается указатель на подынтегральную функцию.

 

Кроме этого, указываются границы диапазона интервала инте-

 

 

грирования. Можно явно указать точность вычислений, равную

 

 

по умолчанию 10−6

 

 

Вычисление интеграла методом квадратур Гаусса-Кронрода.

 

quadgk()

Аргументами методу передаются: указатель на подынтеграль-

 

ную функцию, нижняя граница интегрирования и верхняя грани-

 

 

ца интегрирования. Также может указываться до четырех опций

 

 

(в формате опция-запятая-значение)

 

 

 

 

quadv()

Вычисление интеграла методом квадратур Симпсона для век-

 

торных функций скалярного аргумента. Аргументы такие же, как

 

 

у функций quad() и quadl()

 

 

Вычисление двойного интеграла на плоскости. Первый аргу-

 

 

мент функции – указатель на подынтегральную функцию (двух

 

 

переменных). Кроме того, указываются пределы интегрирова-

 

 

ния (четыре аргумента) по внешней (второй и третий аргументы)

 

quad2d()

и внутренней (четвертый и пятый аргументы) переменным. Если

 

по внутренней переменной пределы интегрирования непосто-

 

 

янные, четвертый и/или пятый аргументы могут быть указателя-

 

 

ми на функции, определяющими уравнение границ области ин-

 

 

тегрирования. Также в формате опция-запятая-значение могут

 

 

задаваться дополнительные аргументы

 

 

 

 

 

Вычисление двойных интегралов по прямоугольной области.

 

 

Аргументами функции указываются указатель на подынтеграль-

 

dblquad()

ную функцию двух переменных, а также постоянные пределы

 

интегрирования по внешней и внутренней переменным. Также

 

 

можно указать точность вычислений (значение по умолчанию

 

 

10−6 ), а также метод вычислений (по умолчанию это метод ква-

 

 

дратур Симпсона)

 

 

 

 

 

Вычисление тройных интегралов по прямоугольному паралле-

 

 

лепипеду. Аргументы функции: указатель на подынтегральную

 

triplequad()

функцию трех переменных и постоянные границы интегриро-

 

вания по каждой из трех переменных. Можно явно указать точ-

 

 

ность (по умолчанию 10−6 ) и метод вычислений (по умолчанию

 

 

метод квадратур Симпсона)

 

 

 

 

 

Далее рассмотрим применение некоторых из этих функций для вычисления в числовом виде однократных, двукратных и трехкратных интегралов. В первую очередь стоит обратить внимание на функцию quad(). Первым аргументом этой функции передается ссылка на подынтегральную функ-

237

Самоучитель Matlab

цию (указатель на эту функцию или имя соответствующего файла). Второй и третий аргументы – пределы интегрирования. Также может указываться еще и точность вычислений (четвертый аргумент функции quad()). Пример использования этой функции для вычисления определенного интегра-

π 4

ла tg(x)dx = ln(2) приведен в документе на рис. 6.1.

2

0

Рис. 6.1. Вычисление определенного интеграла с помощью функции quad()

Интеграл вычисляется командой quad(@tan,0,pi/4). Первым аргументом функции quad() передается указатель на встроенную функцию вычисления тангенса. Второй и третий аргументы функции quad() – соответственно нижняя и верхняя границы интегрирования.

На заметку

Чтобы создать указатель на функцию, перед именем функции добавляем символ @.

Для сравнения приведен точный результат для интеграла (команда log(2)/2). Как видим, функция quad() в данном случае с задачей справилась. К сожалению, не всегда есть возможность так просто проверить результат вычислений.

В качестве примера применения встроенных функций интегрирования рассмотрим задачу о вычислении несобственного интеграла

π

 

exp(−x2)dx =

(интеграл Пуассона). Для вычисления интеграла

2

0

 

 

 

используем такую последовательность команд: f=@(x)(exp(-x.^2)) (определение подынтегральной функции) и quadgk(f,0,Inf) (непосредственное вычисление интеграла).

238

Глава 6. Интегрирование и дифференциальные уравнения

На заметку

Функции quad() и quadl() с таким интегралом не справляются.

Кроме того, для сравнения командой sqrt(pi)/2 вычисляется (в формате числа с плавающей точкой) точное значение для интеграла Пуассона. Результат вычислений представлен на рис. 6.2.

Рис. 6.2. Вычисление интеграла Пуассона

Стоит обратить внимание на то, что верхняя граница интегрирования указана как Inf.

На заметку

Нередко при вычислении несобственных интегралов в качестве верхней границы указывают большое, но конечное значение. Такой подход не гарантирует получение корректного результата. Если не углубляться в подробности, то причина кроется в том, что понятие "большой" определяется в контексте подынтегральной функции. Другими словами, чтобы узнать, какой верхний предел интегрирования установить вместо бесконечности, необходимо исследовать подынтегральную функцию. В рассмотренном примере эта задача, образно выражаясь, переложена на плечи функции, с помощью которой вычисляется интеграл.

Еще один пример связан с вычислением двойного интеграла. Задача формулируется так: необходимо вычислить площадь области, ограниченной кривыми y = x и y = x2 . Сразу отметим, что точное значение для площади этой области равно 1 6 . Эта область находится между соответствующими кривыми. Кривые пересекаются в точках x = 0 и x = 1 . Область интегрирования представлена на рис. 6.3.

239

Самоучитель Matlab

Рис. 6.3. Область интегрирования

Рис. 6.4. Вычисление площади области

240

Источник: https://studfile.net/preview/16433384/