Раздел: Документация
0 ... 109 110 111 112 113 114 115 ... 365 YpOInit = D; % приближение для начального значения производной YpOFlag =0; % начальное значение производной искомой функции может % измениться при удовлетворении условиям совместности format long е % Поиск начального значения производной, удовлетворяющего % условиям совместности [Y0, YpO] = decic{@klerofun, t0, YOInit, YOFlag, YpOInit, YpOFlag) % Решение уравнения Клеро на отрезке [0, 5] [Т, Y] = odel5i(@klerofun, [t0 5], Y0, YpO) ; % Построение графика приближенного решения plot(T, Y, о); hold on % Построение графика точного решения exsol = inline (х + exp(D); fplot(exsol, [t.0 5]) legend{1приближенное решение,точное решение) Рис. 6.16. Решение уравнения Клеро В случае системы дифференциальных уравнений схема решения принципиально не отличается от разобранного примера, только УО, YpO, YOinit, YpOInit, YOFlag и YpOFlag должны быть векторами, как и выходной аргумент функции для вычисления F(t, К, К). Дополнительные возможности солвера odeibi, в том числе решение систем с заданными параметрами, и опции управляющей структуры описаны в справочной системе MATLAB (см. разд. MATLAB: Mathematics: Differential Equations: Initial Value Problems for ODEs and DAEs: Solver for Fully Implicit ODEs и следующий за ним, а так же станицы, посвященные функциям odelSi и decic). Предупреждение 9 При формировании структуры options некоторые параметры используются не так, как для остальных солверов. Например, по другому передается матрица Якоби с постоянными коэффициентами, а именно в массиве ячеек, содержащем две матрицы dF/dy и dF/dy. Работа с массивами ячеек описана в главе 8. Мы рассмотрели решение задачи Коши для дифференциальных уравнений и систем, включая дифференциально-алгебраические уравнения и общий случай уравнений, не разрешенных относительно старшей производной. Обратимся теперь к другому типу дифференциальных уравнений — дифференциальным уравнениям с запаздывающим аргументом. Решение дифференциальных уравнений с запаздывающим аргументом В пакет MATLAB входит солвер dde23 для решения задач, описываемых системами дифференциальных уравнений вида: У () = f{1 >()>У(*-Ъ) У(1-*2)> ...,y{t-Tk))tt&[a,b], (6.8) где y(i) — искомая вектор-функция; / — известная вектор-функция правой части системы; Tj, т2, Ц — моменты запаздывания (положительные числа). Для решения системы уравнений (6.8) требуется знать поведение решения для / <а , т. е. вектор-функцию предыстории £(/). Схема решения дифференциальных уравнений с запаздывающим аргументом в MATLAB состоит из следующих этапов. 1. Написание функции для вычисления правой части системы уравнений, входными аргументами которой являются не только t и у, но и значения компонент решения в моменты времени tt, т2 ,та. 2.Написание функции для предыстории с единственным входным аргументом / (если вектор-функция предыстории является постоянной, то эта функция не является обязательной). . 3.Вызов солвера dde23 с указанием исходных данных: функции правой части системы, моментов запаздывания т]7 т2,..., хк, функции предыстории (или постоянного вектора) и границ отрезка [«, b\. 4.Визуализация результата, который солвер dde23 возращает в структуре. Разберем решение дифференциальных уравнений на следующем модельном примере: требуется найти решение системы на отрезке [0, 4] с предыстрои- ей $(t): >\ =\{У1 (0+Vl (/ -1-5)+y2(i -2)); 5(0 = Уг ="f [Ух (О + Л ("2) +Л("0.5)); (6.9) Начнем с программирования функции ddefun. Ее входными аргументами должны являться: время г, вектор у компонент решения и матрица Z, столбцы которой содержат значения компонент решения в моменты запаздываний. В нашем случае т, =0.5, т2 =1.5, т3 = 2 и матрица Z имеет следующий вид: z f.Vi(-Ti) .Vi(>-*2) yii-ъУ [уг(-*\) У20~*г) Ы~тз)/ В функции ddefun мы ввели вспомогательные переменные для вектор-функции у (л), вычисленной в моменты запаздываний (листинг 6.26). .Листинг 6.26. Файл-функция ddefun для правой части системы уравнений (6.9) function F = ddefun(t, у, Z) % Вычисление правой части системы запаздывающих дифференц. уравнений % t - время % у - вектор со значениями компонент у(1), у(2),у(к) % Z - матрица со значениями компонент в момент запаздываний: % Z(:, j) = y(t - tau{j)), j = 1, 2, ... k 0 ... 109 110 111 112 113 114 115 ... 365
|