Решение ОДУ в Matlab
Доброго времени суток! Сегодня мы поговорим о решении ОДУ (обыкновенных дифференциальных уравнений) в Matlab. Перед тем как мы начнём обсуждать данную тему, советую вам ознакомиться с темой: Численное дифференцирование в Matlab, чтобы лучше понимать теоретическую составляющую решения ОДУ.
Обыкновенные дифференциальные уравнения
С помощью дифференциальных уравнений можно описать разные задачи: движения системы, взаимодействующих материальных точек, химической кинетики и т.д. Различают три типа задач для систем диф. уравнений:
- Задача Коши
- Краевая задача
- Задача на собственные значения
Кратко расскажу о их сути:
Задача Коши предполагает дополнительные условия в виде значения функции в определённой точке.
Краевая задача подразумевает поиск решения на заданном отрезке с краевыми (граничными) условиями в концах интервала или на границе области.
Задача на собственные значения — помимо искомых функций и их производных, в уравнение входят дополнительное несколько неизвестных параметров, которые являются собственными значениями.
Методы решения дифференциальных уравнений
Решение ОДУ в Matlab и не только, в первую очередь, сводится к выбору порядка численного метода решения. Порядок численного метода не связан с порядком дифференциального уравнения. Высокий порядок у численного метода означает его скорость сходимости.
В случае большого интервала, с помощью алгоритмов с низким порядком сжимают интервал с решениями и находят приблизительные корни, а затем уже уточняют корни с помощью методов с высоким порядком.
Решение обыкновенных дифференциальных уравнений в Matlab можно реализовать «своими ручками», прописав алгоритм по разным схемам. Но также в Matlab есть встроенные функции, выполняющие все стандартные задачи.
Метод Рунге-Кутта первого порядка
Методы Рунге-Кутта представляют собой разложения в ряд Тейлора и от количества использованных элементов ряда зависит порядок этого метода. Следовательно, помимо Рунге-Кутта первого порядка, вы сможете увидеть методы других порядков. Иногда их называют другими именами.
Например, Метод Рунге-Кутта первого порядка, также известен как Метод Эйлера или Метод ломаных. Информацию о его математическом и графическом представлении советую поискать в гугл. Мы же поговорим о том, как Метод Рунге-Кутта первого порядка реализуется в Matlab для решения ОДУ. Например:
Решить и привести график ошибки уравнения y’ = y*x методом Рунге-Кутта первого порядка (Методом Эйлера, Методом ломаных).
Погрешность Метода Рунге-Кутта 1 порядка
» data-medium-file=»https://i2.wp.com/codetown.ru/wp-content/uploads/2017/02/Рунге-1-погрешность.png?fit=300%2C236&ssl=1″ data-large-file=»https://i2.wp.com/codetown.ru/wp-content/uploads/2017/02/Рунге-1-погрешность.png?fit=622%2C489&ssl=1″ loading=»lazy» src=»https://i2.wp.com/codetown.ru/wp-content/uploads/2017/02/%D0%A0%D1%83%D0%BD%D0%B3%D0%B5-1-%D0%BF%D0%BE%D0%B3%D1%80%D0%B5%D1%88%D0%BD%D0%BE%D1%81%D1%82%D1%8C.png?resize=622%2C489″ alt=»Погрешность метода 1 порядка» width=»622″ height=»489″ srcset=»https://i2.wp.com/codetown.ru/wp-content/uploads/2017/02/Рунге-1-погрешность.png?w=629&ssl=1 629w, https://i2.wp.com/codetown.ru/wp-content/uploads/2017/02/Рунге-1-погрешность.png?resize=300%2C236&ssl=1 300w» sizes=»(max-width: 622px) 100vw, 622px» data-recalc-dims=»1″ />
На данном графике показана зависимость величины ошибки от шага.
Метод Рунге-Кутта второго порядка
Также известен как Метод Эйлера-Коши. Как видите, во второй части уравнения происходит обращения к следующему шагу. Но как тогда быть, если нам ещё не известен следующий шаг? Всё просто. Метод Рунге-Кутта второго порядка — это всё тот же метод первого порядка, однако, на половине шага происходит нахождение «первичного» решения, а затем происходит его уточнение. Это позволяет поднять порядок скорости сходимости до двух.
Решить и привести график ошибки уравнения u’ = u*x методом Рунге-Кутта второго порядка.
По сравнению с Рунге-Куттом первого порядка изначальная ошибка уже гораздо меньше.
Мы не будем говорить о третьем порядке, потому что задачи на третий порядок встречаются редко, но если будет необходимо, пишите в комментариях, выложу.
Метод Рунге-Кутта четвёртого порядка
Метод Рунге-Кутта четвёртого порядка считается самым распространённым. Тем не менее, работает он аналогично второму и третьему порядку.
Решить и привести график ошибки уравнения u’ = u*x методом Рунге-Кутта четвёртого порядка.
Как видите, на последней картинке размерность ошибки на столько мала, что пришлось воспользоваться loglog() для лучшей видимости.
Решение ОДУ в Matlab стандартными средствами
Стоит отметить, что мы с вами разобрали только один самый известный метод решения ОДУ с разными порядками. Однако, методов очень много.
Для решения дифференциальных уравнений и систем в MATLAB предусмотрены следующие функции:
ode45 (f, interval, X0, [options])
ode23 (f, interval, X0, [options])
ode113 (f, interval, X0, [options])
ode15s (f, interval, X0, [options])
ode23s (f, interval, X0, [options])
ode23t (f, interval, X0, [options])
ode23tb (f, interval, X0, [options])
Входными параметрами этих функций являются:
- f — вектор-функция для вычисления правой части уравнения системы уравнений;
- interval — массив из двух чисел, определяющий интервал интегрирования дифференциального уравнения или системы;
- Х0 — вектор начальных условий системы дифференциальных уравнений;
- options — параметры управления ходом решения дифференциального уравнения или системы.
Все функции возвращают:
- массив Т — координаты узлов сетки, в которых ищется решение;
- матрицу X, i-й столбец которой является значением вектор-функции решения в узле Тi.
В функции ode45 реализован метод Рунге-Кутта 4-5 порядка точности, в функции ode23 также реализован метод Рунге-Кутта, но 2-3 порядка, а функция ode113 реализует метод Адамса.
Для решения жёстких систем предназначены функция ode15s, в которой реализован метод Гира, и функция ode23s, реализующая метод Розенброка. Для получения более точного решения жёсткой системы лучше использовать функцию ode15s. Для решения системы с небольшим числом жёсткости можно использовать функцию ode23t, а для грубой оценки подобных систем служит функция ode23tb.
Символьное решение обыкновенных дифференциальных уравнений произвольного порядка осуществляет функция dsolve r = dsolve(‘eq1,eq2,…’, ‘cond1,cond2,…‘, ‘v’)
Пример использования:
На этом мы закончим. Если остались вопросы, задавайте их в комментариях. Также вы можете скачать исходники чтобы лучше понять тему: «Решение ОДУ в Matlab».
Лабораторная работа Решение дифференциальных уравнений в Matlab
Название | Лабораторная работа Решение дифференциальных уравнений в Matlab |
Дата | 15.02.2018 |
Размер | 0.51 Mb. |
Формат файла | |
Имя файла | lab#5DiffEquationsMatlab.docx |
Тип | Лабораторная работа #36539 |
Подборка по базе: ПРАКТИЧЕСКАЯ РАБОТА №1 Конституционное право Ч.1 (ТЕКСТ ЗАДАНИЯ , Самостоятельная работа по теме 1.5..docx, ПИСЬМЕННАЯ РАБОТА №1 БЖД.pdf, Практическая работаТеория вероятностей и математическая статисти, Контрольная работа.docx, Самостоятельная работа по теме 1.3.docx, Информатика лабораторная 1 Вариант 8.docx, Конт работа.docx, Метод_указания к Лабораторным работам (1).doc, Самостоятельная работа по теме 1.3.docx РОССИЙСКИЙ УНИВЕРСИТЕТ ТРАНСПОРТА (МИИТ) Кафедра «Управление и защита информации» «Решение дифференциальных уравнений в Matlab» «ИСТОРИЯ И МЕТОДОЛОГИЯ НАУКИ И ТЕХНИКИ В ОБЛАСТИ УПРАВЛЕНИЯ» Выполнила: студентка группы ТУУ-151 Проверила: доц. Зольникова Н.Н. Решить дифференциальное уравнение: при начальном условии Решим данную задачу Коши с помощью метода Рунге-Кутта 4-5 порядка точности, используя функцию ode45(). Для этого запишем исходное уравнение как функцию в Matlab: function y = dy( x, y ) %Уравнение, задающее производную y = 2*cos(2*x) + sin(y); end interval = [0, 50]; [X,Y] = ode45(@dy, interval, y0); plot(X, Y) %изображение графика функции grid on %создание сетки на графике Решить задачу Коши и краевую задачу для дифференциального уравнения Для нахождения решения данного дифференциального уравнения следует найти общее решение соответствующего однородного дифференциального уравнения Составляем и решаем характеристическое уравнение: Характеристическое уравнение имеет два кратных действительных корня, следовательно, общее решение однородного уравнения имеет вид: Найдем частное решение. Так как в исходном уравнении правая часть представляет собой константу, то частное решение будет иметь вид: Подставляем частное решение в исходное уравнение. Получаем: Таким образом, частное решение имеет вид: Общее решение исходного дифференциального уравнения записывается в виде: При этом производная Решение задачи Коши. Для нахождения и подставим начальные условия и решим систему: Таким образом, при данных начальных условиях получаем решение в виде: Решение краевой задачи. Для определения и подставим краевые условия. Таким образом, при данных краевых условиях получаем решение в виде: Решим задачу Коши аналитически с помощью метода 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; %следующий график будет рисоваться в этом же окне function F = dy2( x, y ) % ОДУ первого порядка %Решение с помощью метода Рунге-Кутта 4-5 порядка точности %Интервал, на которм будет находится решение [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; %следующий график будет рисоваться в этом же окне
function res = boundCon( ya, yb ) %Функция, вычисляющая разность между значением в граничной точке % и точным значением %Задаем стартовые значения для поиска начальных условий solinit = bvpinit(linspace(0,5), [1 1]); %Нахождение значений y(x) и y'(x) на интервале [0;5] sol = bvp4c(@dy2, @boundCon, solinit); [X,Y] = ode45(@dy2, interval, y0); %Значения искомой функции находятся в первом столбце матрицы Y plot(X, Y(:,1), ‘:r’, ‘LineWidth’, 1.5) %изображение графика функции legend(‘Аналитическое решение’,’Метод Рунге-Кутта’); Графики решений полностью совпали. Изобразим фазовый портрет системы. Для этого решим ее с помощью функции ode45() при различных начальных условиях. %Интервал, на которм будет находится решение [X,Y] = ode45(@dy2, interval, y0); %Значения функции y(x) находятся в первом столбце %Значения производной y'(x) находятся во втором столбце Дифференциальные уравнения и краевые задачи, Моделирование и вычисление с помощью Mathematica, Maple и MATLAB, Эдвардс Ч.Г., Пенни Д.Э., 2008Дифференциальные уравнения и краевые задачи, Моделирование и вычисление с помощью Mathematica, Maple и MATLAB, Эдвардс Ч.Г., Пенни Д.Э., 2008. Данный учебник представляет собой весьма полный современный вводный курс обыкновенных дифференциальных уравнений. Довольно подробно освещены все темы, затрагиваемые в классических вводных курсах, включая применение матричных методов, операционного исчисления, степенных рядов и рядов Фурье. Не обойдены вниманием и современные исследования в области дифференциальных уравнений, такие как, например, хаос в динамических системах и нелинейные явления и системы. Особое внимание авторы уделяют численным методам и обучению построения математических моделей самых разнообразных (например, экологических, физических, инженерных) систем. Для изучения таких моделей авторы используют самые современные математические пакеты: MATLAB, Maple и Mathematica. Кроме того, для каждого раздела имеются задачи различной сложности, а также проекты для самостоятельной разработки студентами. Несомненно, книга будет полезна всем, кто изучает дифференциальные уравнения — как математикам, так и студентам других специальностей — инженерам, физикам, химикам, биологам, географам и геологам. Дифференциальные уравнения первого порядка. Скачать djvu источники: http://topuch.ru/laboratornaya-rabota-reshenie-differencialenih-uravnenij-v-mat/index.html http://obuchalka.org/2015031783419/differencialnie-uravneniya-i-kraevie-zadachi-modelirovanie-i-vichislenie-s-pomoschu-mathematica-maple-i-matlab-edvards-ch-g-penni-d-e-2008.html |