Скачиваний:
49
Добавлен:
23.01.2015
Размер:
72.7 Кб
Скачать

Лабораторная работа №7.

Изучение процедур ode.. в MATLAB.

  1. Объект исследования:

Объектом исследования является решение дифференциальных уравнений в MATLAB.

  1. Теоретические сведения.

Для решения дифференциальных уравнений и систем дифференциальных уравнений в MatLab предусмотрены следующие функции

  • ode45 - одношаговый явный метод Рунге-Кутты 4-го и 5-го порядка. Это классический метод, рекомендуемый для начальной пробы решения. Во многих случаях он дает хорошие результаты;

  • ode23 - одношаговый явный метод Рунге-Кутты 2-го и 4-го порядка. При умеренной жесткости системы ОДУ и низких требованиях к точности этот метод может дать выигрыш в скорости решения;

  • ode113 — многошаговый метод Адамса-Башворта-Мултона переменного порядка. Это адаптивный метод, который может обеспечить высокую точность решения

  • ode23tb — неявный метод Рунге-Кутта в начале решения и метод, использующий формулы обратного дифференцирования 2-го порядка в последующем. Несмотря на сравнительно низкую точность, этот метод может оказаться более эффективным, чем ode15s;

  • ode15s — многошаговый метод переменного порядка (от 1 до 5, по умолчанию 5), использующий формулы численного дифференцирования. Это адаптивный метод, его стоит применять, если решатель ode45 не обеспечивает решения;

  • ode23s — одношаговый метод, использующий модифицированную формулу Розенброка 2-го порядка. Может обеспечить высокую скорость вычислений при низкой точности решения жесткой системы дифференциальных уравнений;

  • ode23t – метод трапеций с интерполяцией. Этот метод дает хорошие результаты при решении задач, описывающих осцилляторы с почти гармоническим выходным сигналом;

Все они имеют вид ode__(f, interval, x0 [, options]).

Входными параметрами этих функций являются:

  • f - вектор-функция для вычисления правой части уравнения системы уравнений

  • interval - массив из двух чисел, определяющий интервал интегрирования дифференциального уравнения или системы;

  • x0 - вектор начальных условий системы дифференциальных систем

  • options - параметры управления ходом решения дифференциального уравнения или системы.

Все функции возвращают:

массив Т - координаты узлов сетки, в которых ищется решение;

матрицу X, i-й столбец которой является значением вектор-функции решения в узле Тi

Объектами моего исследования как раз и являются различные функции для решения дифференциальных уравнений типа ode .

  1. Решение задачи Коши для дифференциального уравнения первого порядка.

Способ №1

Возьмем функцию y=t.^2 и будем считать ее решением задачи Коши для дифференциального уравнения первого порядка. Создадим m-файл функцию yp.m, описывающую правую часть нашего дифференциального уравнения:

function yp=yp(t,y)

%

yp=2*t;

Решим эту задачу Коши с помощью процедуры ode45:

[t,Y]=ode45('yp',[0 3],0);

Выполним построение графиков известной функции y=t.^2 и результата численного решения задачи Коши Y(t):

plot(t,t.^2,'g+',t,Y,'r')

Способ №2

Правую часть дифференциального уравнения можно записать и другим способом: 2*sqrt(y).

Создадим другой m-файл функцию yp2.m, описывающую правую часть нашего дифференциального уравнения:

function yp=yp2(t,y)

%

yp=2*sqrt(y);

Снова решим задачу Коши с нулевым начальным условием. Построим соответствующие графики.

[t,Y]=ode45('yp2',[0 3],0);

plot(t,t.^2,'g+',t,Y,'r')

Подобное происходит так как в точке 0 производная функции y не существует.

  1. Решение задачи Коши для дифференциального уравнения второго порядка.

Возьмем известную функцию, например, 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);

Если эту систему записать в матричной форме, то слева получим вектор-столбец из производных компонент вектор-функции Y, а справа вектор-столбец из функций:

[-sin(t); -cos(t)];

Создадим m-файл функцию yp3.m, описывающую правую часть нашей системы дифференциальных уравнений:

function yp=yp3(t,y)

%

yp=[-sin(t);-y(1)];

Исследуем решения, например так:

[t,YY]=ode45('yp3',[0 2*pi],[1 0]);

plot(t,cos(t),'r+',t,YY);

figure;

plot(t,cos(t),'r+',t,YY(:,1));

Первый вызов plot строит графики функции y и её производной, второй – только функции y.

5. Собственный пример.

functionyp=yp4(t,y)

%

yp=[8*t.^2 + t;y(1)];

[t,Y]=ode45('yp4',[-3 3],[-27 27]);

plot(t,t.^3,'r+',t,Y(:,1),'g')

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