8(495)909-90-01
8(964)644-46-00
pro@sio.su
Главная
Системы видеонаблюдения
Охранная сигнализация
Пожарная сигнализация
Система пожаротушения
Система контроля удаленного доступа
Оповещение и эвакуация
Контроль периметра
Система домофонии
Парковочные системы
Проектирование слаботочных сетей
Аварийный
контроль
Раздел: Документация

0 ... 112 113 114 115 116 117 118 ... 365

Здесь а, у, о, А, В — заданные числа. Решение этой задачи состоит из следующих этапов.

1.Преобразование дифференциального уравнения второго порядка к системе двух уравнений первого порядка.

2.Написание функции для вычисления правой части системы.

3.Написание функции, определяющей граничные условия.

4.Формирование начального приближения при помощи специальной

функции bvpinit.

5.Вызов солвера bvp4c для решения граничной задачи.

6.Визуализация результата.

Первые два этапа выполняются практически так же, как и при решении задачи Коши (см. разд. "Решение задачи Коши" данной главы).

Введение вспомогательных функций (jt) и у2 (*) приводит к системе уравнений первого порядка относительно них:

Функция правой части системы зависит от х и вектора у, состоящего из двух компонент, у(1) соответствует у, а у (2) — у2, и программируется так же, как при решении задачи Коши.

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

аУ](а) + Ру2{а)-А=0, у У1{Ь) + Ь-у2{Ь)-В = 0.

Функция, описывающая граничные условия, зависит от двух аргументов — векторов уа и yb и имеет следующую структуру (листинг 6.30).

function g = bound(уа, yb)

g = [alpha*ya(l) + beta*ya(2) - A; ganma*yb(l) + delta*yb(2)];

Вместо alpha, beta, gamma, delta, А и в следует подставить заданные числа.

Солвер bvp4c основан на методе конечных разностей, т. е. получающееся решение есть векторы значений неизвестных функций в точках отрезка (в


узлах сетки). Выбор начальной сетки и приближения может оказать влияние на решение, выдаваемое солвером t>vp4c. Для задания начальной сетки и приближения предназначена функция bvpinit, обращение к которой в самом простом случае выглядит следующим образом;

initsol = bvpinit(начальная сетка, начальное приближение к решению]

Начальная сетка определяется вектором координат узлов, упорядоченных

по возрастанию и принадлежащих отрезку [a, b]. Если имеется априорная

информация о решении, то разумно среди точек начальной сетки указать те. в которых решение сильно изменяется. Формирование равномерной сетки целесообразно производить функцией linspace:

X = linspace(a, b, n)

возвращающей вектор х из п равноотстоящих узлов между а и ь, включая границы. Заданная сетка модифицируется солвером в процессе решения для обеспечения требуемой точности. Постоянное начальное приближение задается вектором из двух элементов для функций y~i(x), У2(а). Начальное

приближение может зависеть от х, в этом случае требуется запрограммировать функцию, которая по заданному х возвращает вектор из двух компонент со значениями Vj(x), y2(,v), и поместить указатель на нее во втором

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

После определения начального приближения вызывается солвер bvp4c, входными аргументами которого являются указатели на функции правой части системы и граничных условий, начальное приближение и, при необходимости, управляющая структура с параметрами вычислительного процесса. Управляющая структура формируется при помощи функции bvpset. Солвер bvp4c возвращает единственный выходной аргумент— структуру с информацией о расчетной сетке, значения искомой функции и ее производной. Солвер bvp4c так же, как и солвер dde23 для дифференциальных уравнении с запаздыванием, позволяет получить результат только в виде структуры, в отличие от солверов для задачи Коши (работа со структурами подробно описана в главе 8).

Для вычисления значений приближенного решения в произвольных точках отрезка следует применить функцию d,svai так же, как и в случае рассмотренной выше задачи Коши. В следующих разделах процесс решения граничных задач разобран на простом модельном примере; кроме того, приведены возможности солвера bvp4c для исследования более широких классов граничных задач.


Простой пример граничной задачи

Требуется решить граничную задачу для обыкновенного дифференциального уравнения второго порядка

/--sin*, у(0) = 0, У(11тс/2) + v(11тг/2) = -1.

при помощи солвера bvp4c и сравнить полученное решение с точным у = sin х.

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

\У\~У2\ у,(0) = 0, у2(11я/2)+у,(11я/2) + 1 = 0. (6.11) [>>2=-sinx;

Написать функцию rside для системы уравнений также не представляет большого труда, ее текст приведен в листинге 6.31.

Как было указано в предыдущем разделе, функция для граничных условий имеет два входных аргумента. Каждый аргумент является вектором значений неизвестных функций у, и у2 в начальной и конечной точке промежутка. Поэтому функция граничных условий должна быть такой, как bound в листинге 6.31.

Решение граничной задачи оформите в виде файл-функции, в которой необходимо:

1.При помощи bvpinit задать начальную сетку на отрезке [0,1гл/2], например, из 10 узлов, и постоянное начальное приближение: yj(*) = l, У2(*) = 0.

2.Вызвать солвер bvp4c и получить приближенное решение.

3.Отобразить графически приближенное решение, извлекая нужные компоненты из структуры, возвращаемой солвером.

4.Добавить график точного решения у = sin (л) на отрезке [0, Пя/2]. Текст файл-функции содержится в листинге 6.31.

Листинг 6.31. Файл-функция для решения граничной задачи (6:11)

function boundproblem

% формирование начальной сетки и постоянного приближения yl = 1, у2 = С meshinit = linspace(0, ll*pi/2, 20); yinit = [1 0]



0 ... 112 113 114 115 116 117 118 ... 365