
Лабораторные работы - Выполненые / Студенты всех групп / LAB_07 / МП-30 / 13_Михайленко_07
.docЛабораторная работа №7
Изучение процедур ode.. в MATLAB
Синтаксис:
[t, X] = ode23(‘<имя функции>‘, t0, tf, x0)
[t, X] = ode23(‘<имя функции>‘, t0, tf, x0, tol, trace)
[t, X] = ode45(‘<имя функции>‘, t0, tf, x0)
[t, X] = ode45(‘<имя функции>‘, t0, tf, x0, tol, trace)
Описание:
Функции ode23 и ode45 предназначены для численного интегрирования систем ОДУ. Они применимы как для решения простых дифференциальных уравнений, так и для моделирования сложных динамических систем.
Любая система нелинейных ОДУ может быть представлена как система дифференциальных уравнений 1-го порядка в явной форме Коши:
где x - вектор состояния;
t - время;
f - нелинейная вектор-функция от переменных x, t.
Функции [t, X] = ode23(‘<имя функции>‘, t0, tf, x0, tol, trace) и [t, X] = = ode45(‘<имя функции>‘, t0, tf, x0, tol, trace) интегрируют системы ОДУ, используя формулы Рунге - Кутты соответственно 2-го и 3-го или 4-го и 5-го порядка.
Эти функции имеют следующие параметры:
Входные параметры:
‘<имя функции>‘ - строковая переменная, являющаяся именем М-файла, в котором вычисляются правые части системы ОДУ;
t0 - начальное значение времени; tfinal - конечное значение времени;
x0 - вектор начальных условий;
tol - задаваемая точность; по умолчанию для ode23 tol = 1.e-3, для ode45 tol = 1.e-6);
trace - флаг, регулирующий вывод промежуточных результатов; по умолчанию равен нулю, что подавляет вывод промежуточных результатов;
Выходные параметры:
t - текущее время;
X - двумерный массив, где каждый столбец соответствует одной переменной.
Задание 1.
Возьмем функцию y=t.^2 и будем считать ее решением задачи Коши для дифференциального уравнения первого порядка.
Получим это дифференциальное уравнение y'=2*t и начальное условие y(0)=0.
Создадим m-файл функцию yp1.m, описывающую правую часть нашего дифференциального уравнения:
function yp=yp1(t,y)
%
yp=2*t;
Процедура решения этой задачи Коши:
[t,Y]=ode23('yp1',[0 3],0);
plot(t,t.^2,'g+',t,Y,'r')
Полученный график:
Как мы видим ОДУ решено верно!
Задание 2.
Правую часть дифференциального уравнения из задания 1 можно записать и другим способом: 2*sqrt(y).
Создадим другой m-файл функцию yp2.m, описывающую правую часть нашего дифференциального уравнения:
function yp=yp2(t,y)
%
yp=2*sqrt(y);
[t,Y]=ode23('yp2',[0 3],0);
plot(t,t.^2,'g+',t,Y,'r')
Тогда если начальное условие нулевое получим следующий график:
Если поменять начальное условие на 1, то всё в порядке. Это происходит из-за того что функция не однозначна
[t,Y]=ode23('yp2',[1 3],1);
plot(t,t.^2,'g+',t,Y,'r').
Задание 3.
Решить задачу Коши для дифференциального уравнения второго порядка.
Возьмем известную функцию, например, y=cos(t):
y''=-cos(t) или y''=-y
y(0)=1
y'(0)=0
Чтобы можно было воспользоваться MATLABом сначала сведем эту задачу к системе из двух дифференциальных уравнений первого порядка. Будем считать саму функцию y первой координатой двумерной функции Y (т.е. Y(1) или на языке MATLAB Y(:,1)), а ее первую производную y' второй (т.е. Y(2) или на языке MATLAB Y(:,2)). Тогда с учетом того, что y мы придумали сами имеем первое уравнение системы
Y'(1)=-sin(t)
второе
Y'(2)=-cos(t) или Y'(2)=-Y(1)
Создадим m-файл функцию yp3.m, описывающую правую часть нашей системы дифференциальных уравнений:
function yp=yp3(t,y)
%
yp=[-sin(t);-y(1)];
Решаем:
[t,Y]=ode45('yp3',[0 2*pi],[1 0]);
plot(t,cos(t),'r+',t,Y)
plot(t,cos(t),'r+',t,Y(:,1))
Разница этих графиков в том что на первом строятся и функция и производная, на втором только функция (1ая строка двумерной матрицы)
Задание 4.
Решим дифференциальное уравнение первого порядка y’ = 3*(t^2):
[t,Y]=ode45('yp4',[-3 3],[-27 27]);
plot(t,t.^3,'r+',t,Y(:,1),'g')