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

0 ... 106 107 108 109 110 111 112 ... 365

При решении жестких систем дифференциальных уравнений солверы odelSs, ode23s, ode23t и ode23tb аппроксимируют матрицу Якоби правой части системы методом конечных разностей. Эффективность вычислений может быть повышена путем задания матрицы Якоби в явном виде. Для этого следует написать файл-функцию, которая возвращает матрицу Якоби для текущих значений независимой переменной и компонент решения. Заголовок-функции должен иметь вид

Function J = jmatr(t, у)

Для того чтобы солвер мог воспользоваться явными формулами, необходимо присвоить свойству Jacobian управляющей структуры указатель на функцию jmatr. Если матрица Якоби постоянна, то не требуется программировать файл-функцию — достаточно указать ее в качестве значения свойства Jacobian.

Для рассмотренной выше системы уравнений Лотки—Вольтерры (6.5), при Р = 0.8, R = 1, р = г = 0.001, функция, вычисляющая матрицу Якоби, приведена в листинге 6.20.

1 Листинг 6.20. Программирование матрицы Якоби

function J = JLotVoUt, у) J = [0.8 - 0.001*у(2) - 0.001*у(1) 0.001*у(2)-1 + 0.001*у(Ш;

Внесите jLotVol в качестве подфункции в файл-функцию comparesolvers (листинг 6.16) и перед вызовом солвера ode23s в основной функции сформируйте управляющую структуру options и укажите ее в качестве входного аргумента ode23s. Соответствующие команды приведены в листинге 6.21.

•"""* *—"—"...................

; Листинг 6.21. Указание матрицы Якоби солверу

options = odesetfJacobian, @JLotVol);

[T, У] = ode23s(@LotVol, [0 100], Y0, options);

Теперь при обращении к файл-функции comparesolvers солвер ode23s будет использовать явные формулы для элементов матрицы Якоби.

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


торого должна быть разреженная матрица с элементами 0 и 1, определяемая шаблоном матрицы Якоби (разреженным матрицам посвящена глава 15).

Задачи с известными параметрами

Солверы MATLAB допускают решение систем обыкновенных дифференциальных уравнений, правая часть которых зависит от некоторых параметров pi, р2, ... с известными значениями. В предыдущих версиях MATLAB передача параметров была организована посредством интерфейса солверов. Эта возможность сохранилась и в версии 7, однако ее описание исключено из справочной системы, поскольку реализованы другие методы передачи параметров, основанные на использовании вложенных или анонимных функций.

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

» [T,Y) = ode45(@syst, [tO, tl], YO, options, pi, p2, ...) ИЛИ

.»> sol = ode45(@syst, [tO, tl], YO, options, pi, p2, ...)

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

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

function F = syst(t, у, pi, р2,...)

Если в процессе решения используются явные формулы для вычисления матрицы Якоби, то параметры включаются в список входных аргументов соответствующей функции

function F = jac(t, у, pi, р2,...)

Приведенная выше система дифференциальных уравнений Лотки— Вольтерры зависит от четырех параметров: Р, р, R и г, и при многократном ее решении для различных значений параметров целесообразно написать соответствующую файл-функцию, вместо того, чтобы каждый раз изменять значения этих параметров. Текст такой файл-функции приведен в листинге 6.22.


I Листинг 6.22. Передача параметров Через входные аргументы солвера

function LVpar(Р, р, R, г)

Y0 = 11000; 1100]; % задание начальных условий

% формирование управляющей структуры с матрицей Якоби

options = odeset(1Jacobian, dJLotVolPar),-

% вызов солвера и передача значений параметров

[Т, У] = ode23s(@LotVolPar, [0 100], Y0, options, Р, р, R, г);

% построение графика решения

figure

plot(Y(:, 1), Y<:, 2))

% подфункция для вычисления правой части системы, зависящей от параметров function F = LotVolPar(t, у, Р, р, R, г) F = [Р*у(1) - р*у(1)*у(2) -R*y(2> + г*у(1)*у(2)];

% подфункция для вьнисления матрицы Якоби, зависящей от параметров function J = JLotVolPar(t, у, Р, р, R, г) J = [Р - Р*У(2) - р*у(1)

г*у(2) - R + г*у(1)];

Теперь обращение к файл-функции LVpar позволяет решить задачу Лотки— Вольтерры для различного набора значений параметров, например

» LVpar(0.75, 0.002, 0.95, 0.001) ИЛИ

» LVpar[0.8, 0.001, 0.9, 0.003)

Альтернативный способ решения задач с известными параметрами состоит в использовании анонимных или вложенных функций. Мы обсуждали этот подход при поиске корней и локальных минимумов функций, поэтому приведем здесь только текст соответствующей файл-функции с двумя вложенными функциями без дополнительных комментариев (листинг 6.23). Обращение К LVparl ПРОИЗВОДИТСЯ Так Же, Как И К LVpar.

Листинг6.23. Передача параметров через входные аргументы солвера

function LVparl(Р, р, R, г)

% вложенная функция для вычисления правой части системы, % зависящей от параметров function F = LotVolPar(t, у)



0 ... 106 107 108 109 110 111 112 ... 365