Входные параметры:
‘<имя функции>‘ − строковая переменная, являющаяся именем М-файла, в котором вычисляются правые части системы ОДУ;
t0 − начальное значение времени; tfinal - конечное значение времени;
x0 − вектор начальных условий;
tol − задаваемая точность; по умолчанию для ode23 tol = 1.e-3, для ode45 tol = 1.e-6);
trace − флаг, регулирующий вывод промежуточных результатов; по умолчанию равен нулю, что подавляет вывод промежуточных результатов;
Выходные параметры:
t - текущее время;
X - двумерный массив, где каждый столбец соответствует одной переменной.
Примеры:
Рассмотрим дифференциальное уравнение 2-го порядка, известное как уравнение Ван дер Поля,
.
Это уравнение может быть представлено в виде системы ОДУ в явной форме Коши:
Первый шаг процедуры интегрирования - это создание М-файла для вычисления правых частей ОДУ; присвоим этому файлу имя vdpol.
function xdot = vdpol(t, x)
xdot = [x(2); x(2) .* (1 - x(1).^2) - x(1)];
Чтобы проинтегрировать систему ОДУ, определяемых функцией vdpol в интервале времени 0 <= t <= 20, вызовем функцию ode23:
t0 = 0; tf = 20;
x0 = [0 0.25]'; %Начальные условия
[t, X] = ode23('vdpol', t0, tf, x0);
plot(t, X), grid, hold on
gtext('x1'), gtext('x2')
Рассмотрим простейший из известных примеров странного аттрактора - аттрактор Ресслера [7]:
где параметры {a, b, c} имеют значения {0.2 0.2 5.7}, а начальное условие задается следующим образом: x0 = [-0.7 -0.7 1].
Для того чтобы проинтегрировать эту систему в интервале времени 0<= t<= 20, вызовем функцию ode45:
t0 = 0; tf = 20;
x0 = [-0.7 -0.7 1]’.%Начальные условия
[t, X] = ode45('ressler', t0, tf, x0);
comet3(X(:, 1), X(:, 2), X(:, 3)).
В описанных далее функциях для решения систем дифференциальных уравнений приняты следующие обозначения и правила:
– options — аргумент, создаваемый функцией odeset (еще одна функция позволяет вывести параметры, установленные по умолчанию);
– tspan — вектор, определяющий интервал интегрирования [t0 tfinal]. Для получения решений в конкретные моменты времени t0, tl,..., tfinal (расположенные в порядке уменьшения или увеличения) нужно использовать tspan = [t0 tl ... tfinal];
– у0— вектор начальных условий;
– pi, р2,.. — произвольные параметры, передаваемые в функцию F;
– Т, Y — матрица решений Y, где каждая строка соответствует времени, возвращенном в векторе-столбце Т.
Описание функций для решения систем дифференциальных уравнений:
– [T, Y] = solver(@F,tspan,у0) — где вместо solver подставляем имя конкретного решателя — интегрирует систему дифференциальных уравнений вида у'=F(t,y) на интервале tspan с начальными условиями у0, @F — дескриптор ODE-функции. Каждая строка в массиве решений Y соответствует значению времени, возвращаемому в векторе-столбце Т;
– [T, Y] = solver(@F, tspan, y0, options) — дает решение, подобное описанному выше, но с параметрами, определяемыми значениями аргумента options, созданного функцией odeset.
Технология решения дифференциальных уравнений в системе MatLab такова:
1) Создание m–файла. Независимо от вида системы он имеет вид:
function dy = solverDE(t, y)
dy = zeros(n, 1);
dy(1) = f1 (t, y(1), y(2), …, y(n));
dy(2) = f2 (t, y(1), y(2), …, y(n));
……………………………
dy(n) = fn (t, y(1), y(2), …, y(n));
2) Получение решения и сопровождающий его график:
>> [T, Y] = solver(‘solverDE’, [t0 tfinal], [y10 y20 … yn0]);
>> plot(T, Y)
Пусть, к примеру, требуется решить дифференциальное уравнение:
(2)
с единичными начальными условиями.
Данное дифференциальное уравнение второго порядка приведем к системе дифференциальных уравнений первого порядка:
(3)
с начальными условиями у1(0) = 1, у2(0) = 1, у3(0) = 1.
Вектор правых частей системы уравнений вычисляем с помощью собственной функции ex21 (рис. 6.6):
Рисунок 6.6 – Пример создания функции для решения системы ОДУ
Теперь можно вызывать функцию ode45, находящую решение нашей системы дифференциальных уравнений с начальными условиями [1,1,1] на отрезке [0,20] (рис. 6.7)
>> y0=[1 1 1 ];
>> tspan=[0 20];
>> [T,Y]=ode45('ex21',tspan,y0);
>> plot(T,Y)
Рисунок 6.7 – Результат работы программы
Для решения дифференциальных уравнений в MatLab зарезервирована функция dsolve, которая имеет следующие форматы обращения и возвращает аналитическое решение системы дифференциальных уравнений с начальными условиями:
–y=dsolve( 'Dy(x)' ), где Dу(х) – уравнение; у – возвращаемые функцией dsolve решения;
–y=dsolve ('Dy(x)', 'НУ'), где Dу(х) – уравнение; НУ – начальные условия.
Первая производная функции обозначается Dу, вторая производная – D2у и так далее. Функция dsolve предназначена также для решения системы дифференциальных уравнений. В этом случае она имеет следующий формат обращения:
– [f,g] =dsolve('Df(x),Dg(x)', 'НУ'), где Df(x) ,Dg(x) – система уравнений, НУ – начальные условия.
Решить дифференциальное уравнение (2) с использованием функции dsolve (рис. 6.8).
Рисунок 6.8 – Пример использования команды dsolve
Достарыңызбен бөлісу: |