Решение дифференциальных уравнений с граничными условиями в матлабе

Решение ОДУ в 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».

Решение дифференциальных уравнений – команда dsolve

Дата добавления: 2015-06-12 ; просмотров: 6661 ; Нарушение авторских прав

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

r = dsolve(‘eq1′,’eq2’. ‘cond1′,’cond2’. ‘v’).

Она возвращает аналитическое решение дифференциальных уравнений eq1, eq2. использующих v как независимую переменную, с граничными и (или) начальными условиями cond1, cond2. . По умолчанию независимой переменной считается переменная t, обычно обозначающая время. Если в выражениях eqI (condI) не используется знак равенства, то полагается, что eqI (condI) = 0.

Символ D обозначает производную по независимой переменной, то есть d/dt, при этом D2 означает d 2 /dt 2 и т. д. Имя независимой переменной не должно начинаться с буквы D.

Начальные условия задаются в виде равенств ‘y(a) = b’ или ‘Dy(a) = b’ , где у – зависимая переменная, a и b – константы, которые могут быть и символьными. Могут быть символьными и константы в уравнениях. Если число начальных условий меньше порядка уравнения, то в решении будут присутствовать произвольные постоянные C1,C2 и т. д. Формы вывода результата такие же, как и для команды solve. Справку по dsolve можно получить, введя команду doc dsolve.

Решить дифференциальные уравнения

1) x» = -2x’, 2) y» = -ax+y’, y(0) = b, 3) y (4) — y = 5e x sinx+x 4 , 4) y»+4y’+3y = cost, y(0) = 1, y'(0) = 0.

Решения 3 — го и 4 — го уравнений проверить подстановкой.

MATLAB — Дифференциал

MATLAB предоставляет команду diff для вычисления символьных производных. В простейшей форме вы передаете функцию, которую вы хотите дифференцировать, команде diff в качестве аргумента.

Например, давайте вычислим производную функции f (t) = 3t 2 + 2t -2

пример

Создайте файл сценария и введите в него следующий код —

Когда приведенный выше код компилируется и выполняется, он дает следующий результат —

Ниже приведен октавный эквивалент приведенного выше расчета —

Octave выполняет код и возвращает следующий результат —

Проверка элементарных правил дифференциации

Кратко сформулируем различные уравнения или правила дифференцирования функций и проверим эти правила. Для этого мы напишем f ‘(x) для производной первого порядка и f «(x) для производной второго порядка.

Ниже приведены правила для дифференциации —

Правило 1

Для любых функций f и g и любых действительных чисел a и b являются производными функции —

h (x) = af (x) + bg (x) относительно x определяется как —

Правило 2

Правила сумм и вычитаний гласят, что если f и g две функции, то f ‘и g’ являются их производными соответственно, тогда

Правило 3

Правило произведения гласит, что если f и g две функции, f ‘и g’ являются их производными соответственно, то

Правило 4

Правило отношения гласит, что если f и g две функции, f ‘и g’ являются их производными соответственно, то

Правило 5

Полиномиальное или элементарное степенное правило гласит, что если y = f (x) = x n , то f ‘= n. х (н-1)

Прямым результатом этого правила является то, что производная любой константы равна нулю, т. Е. Если y = k , любая константа, то

Правило 6

Правило цепочки гласит, что производная функции функции h (x) = f (g (x)) по x равна

пример

Создайте файл сценария и введите в него следующий код —

Когда вы запускаете файл, MATLAB отображает следующий результат —

Ниже приведен октавный эквивалент приведенного выше расчета —

Octave выполняет код и возвращает следующий результат —

Производные экспоненциальных, логарифмических и тригонометрических функций

В следующей таблице приведены производные от часто используемых экспоненциальных, логарифмических и тригонометрических функций.

функцияпроизводный
топор сc ax. ln ca (ln — натуральный логарифм)
е хе х
ln x1 / х
ln c x1 / x.ln c
х хх х (1 + лн х)
грех (х)сов (х)
сов (х)-sin (х)
тангенс (х)sec 2 (x), или 1 / cos 2 (x), или 1 + tan 2 (x)
кроватка (х)-csc 2 (x) или -1 / sin 2 (x) или — (1 + кроватка 2 (x))
с (х)с (х) .tan (х)
CSC (х)-csc (х) .cot (х)

пример

Создайте файл сценария и введите в него следующий код —

Когда вы запускаете файл, MATLAB отображает следующий результат —

Ниже приведен октавный эквивалент приведенного выше расчета —

Octave выполняет код и возвращает следующий результат —

Вычисление производных высшего порядка

Для вычисления старших производных функции f мы используем синтаксис diff (f, n) .

Вычислим вторую производную функции y = f (x) = x .e -3x

MATLAB выполняет код и возвращает следующий результат —

Ниже приведен октавный эквивалент приведенного выше расчета —

Octave выполняет код и возвращает следующий результат —

пример

В этом примере давайте решим проблему. Учитывая, что функция y = f (x) = 3 sin (x) + 7 cos (5x) . Нам нужно выяснить, выполняется ли уравнение f «+ f = -5cos (2x) .

Создайте файл сценария и введите в него следующий код —

Когда вы запускаете файл, он показывает следующий результат —

Ниже приведен октавный эквивалент приведенного выше расчета —

Octave выполняет код и возвращает следующий результат —

Нахождение максимумов и минимумов кривой

Если мы ищем локальные максимумы и минимумы для графика, мы в основном ищем самые высокие или самые низкие точки на графике функции в определенной местности или для определенного диапазона значений символической переменной.

Для функции y = f (x) точки на графе, где граф имеет нулевой наклон, называются стационарными точками . Другими словами, стационарные точки — это где f ‘(x) = 0.

Чтобы найти стационарные точки функции, которую мы дифференцируем, нам нужно установить производную равной нулю и решить уравнение.

пример

Найдем стационарные точки функции f (x) = 2x 3 + 3x 2 — 12x + 17

Сделайте следующие шаги —

Сначала давайте введем функцию и построим ее график.

MATLAB выполняет код и возвращает следующий график —

Вот октавный эквивалентный код для приведенного выше примера —

Наша цель — найти некоторые локальные максимумы и минимумы на графике, поэтому давайте найдем локальные максимумы и минимумы для интервала [-2, 2] на графике.

MATLAB выполняет код и возвращает следующий график —

Вот октавный эквивалентный код для приведенного выше примера —

Далее, давайте вычислим производную.

MATLAB выполняет код и возвращает следующий результат —

Вот октавный эквивалент приведенного выше расчета —

Octave выполняет код и возвращает следующий результат —

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

MATLAB выполняет код и возвращает следующий результат —

Ниже приведен октавный эквивалент приведенного выше расчета —

Octave выполняет код и возвращает следующий результат —

Это согласуется с нашим сюжетом. Итак, давайте оценим функцию f в критических точках x = 1, -2. Мы можем подставить значение в символическую функцию с помощью команды subs .

MATLAB выполняет код и возвращает следующий результат —

Ниже приведен октавный эквивалент приведенного выше расчета —

Следовательно, минимальное и максимальное значения для функции f (x) = 2x 3 + 3x 2 — 12x + 17 в интервале [-2,2] составляют 10 и 37.

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

MATLAB предоставляет команду dsolve для символического решения дифференциальных уравнений.

Наиболее простой формой команды dsolve для поиска решения одного уравнения является

где eqn — текстовая строка, используемая для ввода уравнения.

Он возвращает символическое решение с набором произвольных констант, которые MATLAB помечает C1, C2 и так далее.

Вы также можете указать начальные и граничные условия для задачи в виде списка с разделителями-запятыми после уравнения в виде —

В целях использования команды dsolve производные обозначены знаком D. Например, уравнение типа f ‘(t) = -2 * f + стоимость (t) вводится как —

‘Df = -2 * f + cos (t)’

Высшие производные обозначены следующим за D порядком производной.

Например, уравнение f «(x) + 2f ‘(x) = 5sin3x должно быть введено как —

‘D2y + 2Dy = 5 * sin (3 * x)’

Давайте рассмотрим простой пример дифференциального уравнения первого порядка: y ‘= 5y.

MATLAB выполняет код и возвращает следующий результат —

Давайте рассмотрим другой пример дифференциального уравнения второго порядка: y «- y = 0, y (0) = -1, y ‘(0) = 2.

MATLAB выполняет код и возвращает следующий результат —


источники:

http://life-prog.ru/2_23010_reshenie-differentsialnih-uravneniy—komanda-dsolve.html

http://coderlessons.com/tutorials/kompiuternoe-programmirovanie/uznaite-matlab/matlab-differentsial