Главная страница
Навигация по странице:

  • Выполнила

  • Лабораторная работа Решение дифференциальных уравнений в Matlab


    Скачать 0.51 Mb.
    НазваниеЛабораторная работа Решение дифференциальных уравнений в Matlab
    Дата15.02.2018
    Размер0.51 Mb.
    Формат файлаdocx
    Имя файлаlab#5DiffEquationsMatlab.docx
    ТипЛабораторная работа
    #36539

    РОССИЙСКИЙ УНИВЕРСИТЕТ ТРАНСПОРТА (МИИТ)

    Кафедра «Управление и защита информации»

    ЛАБОРАТОРНАЯ РАБОТА

    «Решение дифференциальных уравнений в Matlab»

    по дисциплине

    «ИСТОРИЯ И МЕТОДОЛОГИЯ НАУКИ И ТЕХНИКИ

    В ОБЛАСТИ УПРАВЛЕНИЯ»

    Выполнила: студентка группы ТУУ-151

    Филонец Татьяна

    Проверила: доц. Зольникова Н.Н.

    Москва 2017

    Задание №1

    Решить дифференциальное уравнение:



    при начальном условии



    Решим данную задачу Коши с помощью метода Рунге-Кутта 4-5 порядка точности, используя функцию ode45(). Для этого запишем исходное уравнение как функцию в Matlab:

    function y = dy( x, y )

    %Уравнение, задающее производную

    y = 2*cos(2*x) + sin(y);

    end
    Также необходимо задать начальные условия и интервал, на котором будет искаться решение.

    %Начальное условие

    y0 = 0;

    %Интервал, на которм будет находится решение

    interval = [0, 50];
    %Решение с помощью метода Рунге-Кутта 4-5 порядка точности

    [X,Y] = ode45(@dy, interval, y0);

    plot(X, Y) %изображение графика функции

    grid on %создание сетки на графике


    Задание №2

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



    Начальные условия:



    Граничные условия:



    Аналитическое решение

    Для нахождения решения данного дифференциального уравнения следует найти общее решение соответствующего однородного дифференциального уравнения



    Составляем и решаем характеристическое уравнение:







    Характеристическое уравнение имеет два кратных действительных корня, следовательно, общее решение однородного уравнения имеет вид:



    Найдем частное решение. Так как в исходном уравнении правая часть представляет собой константу, то частное решение будет иметь вид:





    Подставляем частное решение в исходное уравнение. Получаем:



    Таким образом, частное решение имеет вид:



    Общее решение исходного дифференциального уравнения записывается в виде:



    При этом производная



    Решение задачи Коши.

    Для нахождения и подставим начальные условия и решим систему:





    Таким образом, при данных начальных условиях получаем решение в виде:



    Решение краевой задачи.

    Для определения и подставим краевые условия.





    Таким образом, при данных краевых условиях получаем решение в виде:



    Решение с помощью Matlab.

    Решим задачу Коши аналитически с помощью метода dsolve() и методом Рунге-Кутта с помощью функции ode45().

    В функцию dsolve() необходимо записать исходное уравнение, начальные или граничные условия и переменную, по которой происходит дифференцирование. Символ «Dy» обозначает первую производную, «D2y» соответственно вторую производную.

    %Аналитическое решение

    Y = dsolve('D2y+2*Dy+y=1.5', 'y(0)=0', 'Dy(0)=0', 'x')

    y = ezplot(Y, [0,20]) %изображение графика символьного выражения

    set(y, 'LineWidth', 2); %установка толщины линии

    axis([0 20 0 2]); %задание границ графика

    grid on; %создание сетки на графике

    hold on; %следующий график будет рисоваться в этом же окне

    Для использования функции ode45() запишем исходное уравнение в виде системы:

    function F = dy2( x, y )

    %Представление исходного уравнения в виде системы

    % ОДУ первого порядка

    % y(1) -> y(x)

    % y(2) -> y'(x)

    F = [y(2)

    1.5 - 2*y(2) - y(1)];

    end
    В данном случае метод ode45() вернет значения y(x) и y’(x).

    %Решение с помощью метода Рунге-Кутта 4-5 порядка точности

    %Начальное условие

    y0 = [0, 0];

    %Интервал, на которм будет находится решение

    interval = [0, 20];

    [X,Y] = ode45(@dy2, interval, y0);

    %Значения искомой функции находятся в первом столбце матрицы Y

    plot(X, Y(:,1), ':r', 'LineWidth', 1.5) %изображение графика функции

    legend('Аналитическое решение','Метод Рунге-Кутта');
    Оба графика решений полностью совпали.



    Решение краевой задачи также найдем аналитически через функцию dsolve() и с помощью методов bvp4c() и ode45().

    %Аналитическое решение

    Y = dsolve('D2y+2*Dy+y=1.5', 'y(0)= 1', 'Dy(5)=6.5', 'x')

    y = ezplot(Y, [0,20]); %изображение графика символьного выражения

    set(y, 'LineWidth', 2); %установка толщины линии

    axis([0 20 -100 50]); %задание границ графика

    grid on; %создание сетки на графике

    hold on; %следующий график будет рисоваться в этом же окне



    Для того чтобы решить уравнение с помощью ode45(), необходимо знать начальные условия. Для нахождения начальных условий по граничным условиям можно воспользоваться функцией bvp4c().

    function res = boundCon( ya, yb )

    %Функция, вычисляющая разность между значением в граничной точке

    % и точным значением

    res = [ya(1) - 1

    yb(2) - 6.5];

    end

    %Задаем стартовые значения для поиска начальных условий

    solinit = bvpinit(linspace(0,5), [1 1]);

    %Нахождение значений y(x) и y'(x) на интервале [0;5]

    sol = bvp4c(@dy2, @boundCon, solinit);

    ystart2 = sol.y(2,1)

    %Начальные условия

    y0 = [1, ystart2];

    interval = [0, 20];

    [X,Y] = ode45(@dy2, interval, y0);

    %Значения искомой функции находятся в первом столбце матрицы Y

    plot(X, Y(:,1), ':r', 'LineWidth', 1.5) %изображение графика функции

    legend('Аналитическое решение','Метод Рунге-Кутта');


    Графики решений полностью совпали.

    Изобразим фазовый портрет системы. Для этого решим ее с помощью функции ode45() при различных начальных условиях.

    %Интервал, на которм будет находится решение

    interval = [0, 20];

    %Начальное условие

    y0 = [0, 0];

    [X,Y] = ode45(@dy2, interval, y0);

    %Значения функции y(x) находятся в первом столбце

    %Значения производной y'(x) находятся во втором столбце

    plot(Y(:,1), Y(:,2), 'r', 'LineWidth', 2)

    grid on; %создание сетки на графике

    hold on;
    %Начальное условие

    y0 = [2, 1];

    [X,Y] = ode45(@dy2, interval, y0);

    plot(Y(:,1), Y(:,2), 'r', 'LineWidth', 2)

    hold on;
    %Начальное условие

    y0 = [2, 1];

    [X,Y] = ode45(@dy2, interval, y0);

    plot(Y(:,1), Y(:,2), 'b', 'LineWidth', 2)

    hold on;
    %Начальное условие

    y0 = [0.8, -0.5];

    [X,Y] = ode45(@dy2, interval, y0);

    plot(Y(:,1), Y(:,2), 'r', 'LineWidth', 2)

    hold on;
    %Начальное условие

    y0 = [1.5, 1];

    [X,Y] = ode45(@dy2, interval, y0);

    plot(Y(:,1), Y(:,2), 'b', 'LineWidth', 2)



    написать администратору сайта