Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
50
Добавлен:
23.01.2015
Размер:
454.66 Кб
Скачать

Лабораторная работа №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')

Соседние файлы в папке МП-30