Раздел: Документация
0 ... 111 112 113 114 115 116 117 ... 365 Отслеживание событий и обработка получаемых в процессе решения значений, в том числе и визуализация приближенного решения, требуют привлечения свойств Events, OutputFcn и OutputSel. Для вывода суммарной информации о вычислительном процессе следует воспользоваться свойством Stats. При решении дифференциальных уравнений с запаздывающим аргументом существенным обстоятельством является потеря непрерывности производных решения низких порядков. Обычно разрывы возникают уже в начальной точке отрезка и повторяются затем через моменты времени, совпадающие с запаздываниями, но для производных более высоких порядков. Поэтому набор свойств солвера ode23 пополнен опцией Jumps, значением которой должен быть вектор с координатами разрывов как предыстории, так и коэффициентов дифференциальных уравнений. Начальным значением искомой вектор-функции у(я) по умолчанию является S(я). Вообще говоря, начальное значение может быть отличным от5(я), в этом случае поле initialY управляющей структуры должно содержать заданный вектор у (а). Примеры решения дифференциальных уравнений с запаздывающим аргументом и их обсуждение приведены в справочной системе MATLAB в пунктах разд. Mathematics: Differential Equations: Initial Value Problems for DDEs. В завершение этого раздела обратимся к несколько измененной модели Лотки—Вольтерры, в которой увеличение количества хищников происходит по истечении времени т после встречи хищника и жертвы (решение уравнений Лотки—Вольтерры описано выше в этой главе). Этот процесс описывается системой дифференциальных уравнений с запаздывающим аргументом Возьмите т — 0.1, а значения коэффициентов те же, что и для рассмотренных выше уравнений Лотки—Вольтерры (6.5): / = 0.8, R — \t р = г = 0.001. Будем считать предысторию постоянной— 1000 жертв и 1100 хищников. Запрограммируйте функции: LotVolDel—для вычисления правой части системы и LotVolHis — для предыстории решения, причем предусмотрите возможность указания значений параметров при вызове солвера после входного аргумента options. Решите систему дифференциальных уравнений с запаздыванием на временном отрезке [0. 50] и сравните полученный ре- л()=/,7,()-/7(Ь(); Уг () = -R- Уг () + • М - Т)Л (<" (6.10) зультат с решением аналогичной системы без запаздывания. При решении систем установите одинаковую относительную точность, к примеру 10 5. Тексты функций приведены в листинге 6.29, а получающийся после выполнения файл-функции график — на рис. 6.18. При вызове dde23 постоянную предысторию можно было бы задать вектором вместо указателя на функцию LotVolHis. Мы использовали функцию для того, чтобы подчеркнуть необходимость дополнительных входных аргументов в случае, когда правая часть системы дифференциальных уравнений зависит от параметров. Разумеется, этот же пример можно выполнить и с помощью вложенных или анонимных функций. I Листинг 6.29. Файл-функция для сравнения двух моделей function LotVol2(P, р, R, г) с; п-»гп: системы — :Jducku: triri. vpaE : ;шй -. rano-г ,n rw ;л options = ddeset(RelTol, 1.0e-05); % установка относительной точности % вызов солвера с указанием коэффициентов системы sol = dde23(@LotVolDel, 0.1, SLotVolHis, [0 50], options, P, p, R, r); plot(sol.у(1, :), sol.у(2, :), :) % вывод графика приближенного решения % решение системы дифференциальных уравнений без запаздывания options = odeset(RelTol, 1.0е-05) % установка относительной точности i вызов солвера с указанием коэффициентов системы [Т, Y] = ode23s(@LotVolPar, [0 50], [1000 1100], options, Р, р, R, г); hold on plot(Y(:, 1),Y{:, 2)) % вывод графика приближенного решения % вывод пояснений на график title(Модели системы "хищник-жертва") xlabel(жертвы) ylabel(хищники) legend(c запаздыванием, без запаздывания) % подфункция LotVolDel для вычисления правой части системы (6.10) function F = LotVolDel(t, у, Z, Р, р, R, г) F = [F*y<D - р*у(1)*у(2); -R*y(2) + r*Z(l)*Z(2)J; % подфункция LotVolKis для вычисления предыстории решения function Н = LotVolHis(t, Р, р, R, г) H = [1000; 1100]; 3000 2500 • 20Ш . 1500 1000 500 Модели системы "хищник-жертва" —с запаздыванием —без запаздывания 0500 1000 1500 2000 2500 3000 3500 жертвы Рис. 6.18. Решение уравнения Лотки—Вольтерры (6.10) с запаздывающим аргументом Решение граничных задач В данном разделе на простых примерах иллюстрируются возможности решения граничных задач для обыкновенных дифференциальных уравнений и систем дифференциальных уравнений первого порядка в MATLAB при помощи солвера bvp<3c. Описаны возможности солвера для решения задач с особенностями и нахождения неизвестных параметров дифференциальных уравнений. Схема решения Рассмотрим решение граничных задач на примере обыкновенного дифференциального уравнения второго порядка. Требуется найти функцию у(х), удовлетворяющую на отрезке [a, b] дифференциальному уравнению / = /(*. У. у) и граничным условиям а-у(а) + $у(а) = А, у-у(Ь) + 8-у{Ь) = В. 0 ... 111 112 113 114 115 116 117 ... 365
|