Progress-servis55.ru

Новости из мира ПК
3 просмотров
Рейтинг статьи
1 звезда2 звезды3 звезды4 звезды5 звезд
Загрузка...

Решение оду в matlab

Решение ОДУ в Matlab

Доброго времени суток! Сегодня мы поговорим о решении ОДУ (обыкновенных дифференциальных уравнений) в Matlab. Перед тем как мы начнём обсуждать данную тему, советую вам ознакомиться с темой: Численное дифференцирование в Matlab, чтобы лучше понимать теоретическую составляющую решения ОДУ.

Обыкновенные дифференциальные уравнения

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

  • Задача Коши
  • Краевая задача
  • Задача на собственные значения

Кратко расскажу о их сути:

Задача Коши предполагает дополнительные условия в виде значения функции в определённой точке.
Краевая задача подразумевает поиск решения на заданном отрезке с краевыми (граничными) условиями в концах интервала или на границе области.
Задача на собственные значения — помимо искомых функций и их производных, в уравнение входят дополнительное несколько неизвестных параметров, которые являются собственными значениями.

Методы решения дифференциальных уравнений

Решение ОДУ в Matlab и не только, в первую очередь, сводится к выбору порядка численного метода решения. Порядок численного метода не связан с порядком дифференциального уравнения. Высокий порядок у численного метода означает его скорость сходимости.

В случае большого интервала, с помощью алгоритмов с низким порядком сжимают интервал с решениями и находят приблизительные корни, а затем уже уточняют корни с помощью методов с высоким порядком.

Решение обыкновенных дифференциальных уравнений в Matlab можно реализовать «своими ручками», прописав алгоритм по разным схемам. Но также в Matlab есть встроенные функции, выполняющие все стандартные задачи.

Метод Рунге-Кутта первого порядка

Методы Рунге-Кутта представляют собой разложения в ряд Тейлора и от количества использованных элементов ряда зависит порядок этого метода. Следовательно, помимо Рунге-Кутта первого порядка, вы сможете увидеть методы других порядков. Иногда их называют другими именами.

Например, Метод Рунге-Кутта первого порядка, также известен как Метод Эйлера или Метод ломаных. Информацию о его математическом и графическом представлении советую поискать в гугл. Мы же поговорим о том, как Метод Рунге-Кутта первого порядка реализуется в Matlab для решения ОДУ. Например:

Решить и привести график ошибки уравнения y’ = y*x методом Рунге-Кутта первого порядка (Методом Эйлера, Методом ломаных).

Погрешность Метода Рунге-Кутта 1 порядка

» data-medium-file=»https://i1.wp.com/codetown.ru/wp-content/uploads/2017/02/Рунге-1-погрешность.png?fit=300%2C236&ssl=1″ data-large-file=»https://i1.wp.com/codetown.ru/wp-content/uploads/2017/02/Рунге-1-погрешность.png?fit=622%2C489&ssl=1″ src=»https://i1.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 порядка» w />
На данном графике показана зависимость величины ошибки от шага.

Метод Рунге-Кутта второго порядка

Также известен как Метод Эйлера-Коши. Как видите, во второй части уравнения происходит обращения к следующему шагу. Но как тогда быть, если нам ещё не известен следующий шаг? Всё просто. Метод Рунге-Кутта второго порядка — это всё тот же метод первого порядка, однако, на половине шага происходит нахождение «первичного» решения, а затем происходит его уточнение. Это позволяет поднять порядок скорости сходимости до двух.

Решить и привести график ошибки уравнения 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])

Читать еще:  Usyn ru rutube index php

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

  • 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 реализованы различные методы. Их реализации названы решателями ОДУ. Решатели реализуют следующие методы решения систем дифференциальных уравнений:

  • ode45 – одношаговые явные методы Рунге-Кутта 4-го и 5-го порядка. Это классический метод, рекомендуемый для начальной пробы решения. Во многих случаях он дает хорошие результаты;
  • ode23 – одношаговые явные методы Рунге-Кутта 2-го и 4-го порядка. При умеренной жесткости системы ОДУ и низких требованиях к точности этот метод может дать выигрыш в скорости решения;
  • ode133 – многошаговый метод Адамса-Башворта-Мултона переменного порядка. Это адаптивный метод, который может обеспечить высокую точность решения;
  • ode15s – многошаговый метод переменного порядка (от 1-го до 5-го, по умолчанию 5), использующий формулы численного дифференцирования. Это адаптивный метод, его стоит применять, если решатель ode45 не обеспечивает решения;
  • ode23s – одношаговый метод, использующий модифицированную формулу Розенброка 2-го порядка. Может обеспечить высокую скорость вычислений при низкой точности;
  • ode23t – метод трапеций с интерполяцией. Этот метод дает хорошие результаты при решении задач, описывающих осцилляторы с почти гармоническим выходным сигналом;
  • ode23tb – неявный метод Рунге-Кутта в начале решения и метод, использующий формулы обратного дифференцирования 2-го порядка в последующем. При низкой точности этот метод может оказаться более эффективным, чем ode15s.
  • Все решатели могут решать системы уравнений явного вида

    y’ = F(t, y). Решатели ode15s, ode23s, ode23t, ode23tb могут решать уравнения неявного вида My’ = F(t, y).

    В описанных далее функциях для решения систем дифференциальных уравнений приняты следующие обозначения и правила:

    • F – название ODE-файла, то есть функции от t и y, которая возвращает вектор-столбец;
    • tspan – вектор, определяющий интервал интегрирования [to tfinal]. Для получения решений в конкретные моменты времени to, t1, …, tfinal (расположенные в порядке уменьшения или увеличения), нужно использовать tspan = [t0 t1 … tfinal];
    • y0 –вектор начальных условий;
    • options – аргумент, создаваемый функцией odeset;
    • p1, p2, … — произвольные параметры, передаваемые в функцию F;
    • T, Y – матрица решений Y, где каждая строка соответствует времени, возвращенном в векторе-столбце T.

    Перейдем к описанию функций для решения систем дифференциальных уравнений (будем обозначать понятием solver один из возможных численных методов решения ОДУ: ode45, ode23, ode113, ode15s, ode23s, ode23t, ode23tb):

    • [T, Y] = solver(‘F’, tspan, y0) интегрирует систему дифференциальных уравнений вида y’ = F(t, y) на интервале tspan с начальными условиями y0. ‘F’ – строка, содержащая имя ODE-файла. Функция F(t, y) должна возвращать вектор-столбец. Каждая строка в массиве решений Y соответствует времени, возвращаемом в векторе-столбце T.
    • [T, Y] = solver(‘F’, tspan, y0, options) дает решение, подобное описанному выше, но с параметрами, определяемыми значениями аргумента options, созданного функцией odeset. Обычно используемые параметры включают допустимое значение относительной погрешности RelTol (по умолчанию 1е-3) и вектор допустимых значений абсолютной погрешности AbsTol (все компоненты по умолчанию равны 1е-6);
    • [T, Y] = solver(‘F’, tspan, y0, options, p1, p2, …) дает решение, подобное описанному выше, передавая дополнительные параметры р1, р2, … в m-файл F всякий раз, когда он вызывается. Используйте options = [], если никакие опции не задаются;
    • [T, Y, TE, YE, IE] = solver(‘F’, tspan, y0, options) в дополнение к описанному решению содержит свойства Events, установленные в структуре options в положение ‘on’. ODE-файл должен быть создан так, чтобы вызов F(t, y, ‘events’) возвращал соответствующую информацию. Выходной аргумент ТЕ – вектор-столбец времен, в которые происходят события, строки YE являются соответствующими решениями, а индексы в векторе IE определяют, какое событие произошло.
    • [T, X, Y] = solver(‘model’, tspan, y0, options, ut, p1, p2, …) использует модель Simulink, вызывая соответствующий решатель из нее: [T, X, Y] = sim(solver, ‘model’, …).

    Решатель систем ОДУ дает возможность получать решения систем из n уравнений. Система ОДУ может быть как однородной, так и неоднородной. Решение сводится к следующему:

      Создание m-файла. Независимо от вида системы он имеет вид:

  • Получение решения и сопровождающий его график:
  • Иллюстрированный самоучитель по MatLab

    Решение обыкновенных дифференциальных уравнений. Решатели ОДУ.

    Анализ поведения многих систем и устройств в динамике, а также решение многих задач в теории колебаний и в поведении упругих: оболочек обычно базируются на решении систем обыкновенных дифференциальных уравнений (ОДУ). Их, как правило, представляют в виде системы из дифференциальных уравнений первого порядка в форме Коши:

    С граничными условиями y(t t end , p) = b, где t end , t – начальные и конечные точки интервалов. Параметр t не обязательно означает время, хотя чаще всего решение дифференциальных уравнений ищется во временной области. Вектор b задает начальные и конечные условия.

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

    Решатели ОДУ

    Для решения систем ОДУ в MATLAB реализованы различные методы. Их реализации названы решателями ОДУ.

    Примечание
    В этом разделе обобщенное название solver (решатель) означает один из возможных численных методов решения ОДУ: ode45, ode23, ode113, ode15s, ode23s, ode23t, ode23tb, bvp4c или pdepe
    .

    Решатели реализуют следующие методы решения систем дифференциальных уравнений, причем для решения жестких систем уравнений рекомендуется использовать только специальные решатели ode 15s, ode23s, ode23t .ode23tb:

    • ode45 – одношаговые явные методы Рунге-Кутта 4-го и 5-го порядка. Это классический метод, рекомендуемый для начальной пробы решения. Во многих случаях он дает хорошие результаты;
    • ode23 – одношаговые явные методы Рунге-Кутта 2-го и 4-го порядка. При умеренной жесткости системы ОДУ и низких требованиях к точности этот мето;. может дать выигрыш в скорости решения;
    • ode113 – многошаговый метод Адамса-Башворта-Мултона переменного порядка Это адаптивный метод, который может обеспечить высокую точность решения
    • ode23tb – неявный метод Рунге-Кутта в начале решения и метод, использующий формулы обратного дифференцирования 2-го порядка в последующем

    Несмотря на сравнительно низкую точность, этот метод может оказаться более эффективным, чем ode15s;

    • ode15s – многошаговый метод переменного порядка (от 1 до 5, по умолчанию 5), использующий формулы численного дифференцирования. Это адаптивный метод, его стоит применять, если решатель ode45 не обеспечивает решения;
    • ode23s – одношаговый метод, использующий модифицированную формулу Розенброка 2-го порядка. Может обеспечить высокую скорость вычислений при низкой точности решения жесткой системы дифференциальных уравнений;
    • ode23t – метод трапеций с интерполяцией. Этот метод дает хорошие результаты при решении задач, описывающих колебательные системы с почти гармоническим выходным сигналом;
    • bvp4c служит для проблемы граничных значений систем дифференциальных уравнений вида y ‘== f(t,y), F(y(a), y(b), p) = 0 (краевая задача);
    • pdepe нужен для решения систем параболических и эллиптических дифференциальных уравнений в частных производных, введен в ядро системы для поддержки новых графических функций Open GL, пакет расширения Partial Differential Equations Toolbox содержит более мощные средства.

    Все решатели могут решать системы уравнений явного вида у’ = F(£, y). Решатели ode15s и ode23t способны найти корни дифференциально-алгебраических уравнений M(t)y’ = F(t, у>, где М называется матрицей массы. Решатели ode!5s, ode23s, ode23t и ode23tb могут решать уравнения неявного вида M(t,y) у’ = F(t, у). И наконец, все решатели, за исключением ode23s, который требует постоянства матрицы массы, и bvp4c, могут находить корни матричного уравнения вида M(t, у) у’ – F(t, у) .ode23tb, ode23s служат для решения жестких дифференциальных уравнений .ode15s – жестких дифференциальных и дифференциально-алгебраических уравнений, ode23t – умеренно жестких дифференциальных и дифференциально-алгебраических уравнений.

    Решение пространства состояний (уравнение 2-го порядка) с ode45 в MATLAB

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

    Я хотел бы просто пройти через то, как перевести систему в MATLAB, какие переменные установить и как решить около 50(?) секунд (от t=0 до 50 или любого другого значения).

    Я хотел бы использовать ode45, так как это метод 4-го порядка, использующий вариант Рунге-Кутты.

    Вот уравнение 2-го порядка:

    1 Ответ

    Вам нужна производная функция function, которая, учитывая текущее состояние системы и текущее время, возвращает производную от всех переменных состояния. Обычно эта функция имеет вид

    и xDash-это вектор с производной от каждого элемента, а x -вектор переменных состояния. Если ваши переменные называются x_1 , x_2 и т. д. это хорошая идея, чтобы положить x_1 в x(1) и т. д. Затем вам нужна формула для производной каждой переменной состояния в терминах других переменных состояния, например, вы могли бы иметь xDash_1=x_1-x_2 , и вы бы кодировали это как xDash(1)=x(1)-x(2) . Надеюсь, это что-то прояснит.

    Для вашего примера производная функция будет выглядеть так

    и вы бы решить систему с помощью

    Это дает выход на t=0,1,2. 50 .

    Похожие вопросы:

    Я основал свое решение на примере, представленном Matlab-решение дифференциального уравнения третьего порядка . Моя проблема заключается в том, что я должен решить дифференциальное уравнение.

    Я не понимаю, как преобразовать следующее уравнение 2-го порядка в уравнение первого порядка: x(t) = 686 -0.5*x'(t ^2) + 10(x (t) + 150) Я использовал метод подстановки, но не уверен, как.

    Вступление Я использую Matlab для моделирования некоторых динамических систем С помощью численного решения систем обыкновенных дифференциальных уравнений второго порядка с использованием ODE45. Я.

    Мне было интересно, как использовать ODE45 в MATLAB для решения задач начального значения дифференциального уравнения более высокого (второго) порядка. Например х+5х’+2х=0 где x(0)=1 x'(0)=3

    Уравнение Шредингера для зависящего от времени гамильтониана имеет вид: Я пытаюсь реализовать решатель для уравнения Шредингера для зависящего от времени гамильтониана в ode45 . Однако, поскольку.

    Я решаю задачу 2-го порядка PDE, используя pdepe . Начальным условием моей задачи является решение 2-го порядка ODE, которое я решил с помощью ode45 . Как я могу передать решение ode45 в качестве.

    y»» + (a1 + a2*v(t)^2)*y» + (a3 + a4*v(t)^2)*y = 0 y(0) = 2, Dy(0) = 0, D2y(0) = 0, D3y(0) = 0 Я попытался решить вышеупомянутую оду 4-го порядка с Matlab dsolve , но результаты, которые я.

    Как я могу решить дифференциальное уравнение 2- го порядка с граничным условием типа z(inf) ? 2(x+0.1)·z» + 2.355·z’ — 0.71·z = 0 z(0) = 1 z(inf) = 0 z'(0) = -4.805 Я не могу понять, где граничное.

    У меня есть этот 2-й порядок ODE, чтобы решить в Matlab: (a + f(t))·(dx/dt)·(d²x/dt²) + g(t) + ((h(t) + i(t)·(d²x/dt² > b·(c-x)))·(dx/dt) + j(t))·(dx/dt)² + k(t)·(t > d) = 0 где a , b , c , d.

    Я пытаюсь решить DDE с помощью ode45 в Matlab. Мой вопрос заключается в том, как я решаю это уравнение. Я не знаю, прав я или нет, и я должен использовать dde23 вместо этого. У меня есть следующее.

    Ссылка на основную публикацию
    Adblock
    detector