Elettracompany.com

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

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

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

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

Для решения жестких систем уравнений рекомендуется использовать только специальные решатели ode15s, ode23s, ode23t, ode23tb.

Все решатели могут решать системы уравнений явного вида у’ = F(t, y). Решатели ode15s и ode23t способны найти корни дифференциально-алгебраических уравнений M(t)y’ = F(t, у), где М называется матрицей массы. Решатели ode15s, ode23s, ode23t и ode23tb могут решать уравнения неявного вида M(t,y) у’ = F(t, у).
Особенности решателей следующие:
— ode23tb, ode23s служат для решения жестких дифференциальных уравнений;
· ode15s — жестких дифференциальных и дифференциально-алгебраических уравнений;
· ode23t — умеренно жестких дифференциальных и дифференциально-алгебраических уравнений.

Последовательность решения обыкновенных дифференциальных уравнений следующая:
1. Приведение дифференциального уравнения к системе дифференциальных уравнений первого порядка. Для этого вводится столько дополнительных функций, каков порядок уравнения.
2. Создание специальной файл-функции для системы уравнений. Файл-функция содержит два входных аргумента: переменную t, по которой производится дифференцирование, даже если она входит в уравнение неявно, и вектор, размер которого равен числу неизвестных функций системы.
3. Вызов нужного решателя (встроенной функции). Входными аргументами решателя являются имя файл-функции, вектор с начальным и конечным значениями переменной

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

при начальных условиях x0=0, y(x0)=1 с шагом интегрирования h=0,1 на интервале [0,1]. Заметим, что аналитическое решение этого уравнения запишется так:

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

· options — аргумент, создаваемый функцией odeset — позволяет вывести параметры, установленные по умолчанию;

· tspan — вектор, определяющий интервал интегрирования [t0 tfinal]. Для получения решений в конкретные моменты времени t0, tl. tfinal (расположенные в порядке уменьшения или увеличения) нужно использовать tspan = [t0 tl . tfinal];

· у0 — вектор начальных условий;

· Т, Y — матрица решений Y, где каждая строка соответствует времени, возвращенном в векторе-столбце Т.

1. Создадим М-файл с функцией для вычисления правой части дифференциального уравнения, для этого выполним команду главного окна Matlab File > New> M-file.

2. В окне редактирования кода запишем код (рис. 1):

3. Сохраним М-файл с именем difur.

4. В командном окне введем инструкции (рис.2.).

В результате выполнения инструкций будет построен график (рис. 3.)

График получился такой же как в статье , в которой обсуждалась технология решения дифференциальных уравнений в Excel с использованием уточненного метода Эйлера.

Заметим, что дифференциальное уравнение можно решить в MatLab и символьно. Для этого нужно применить стандартную процедуру dsolve.
Запишем в командном окне инструкцию (рис. 4)
>> dsolve(‘Dy=-2*x ^2-2*y’,’y(0)=1′)

В итоге, после ее выполнения получим аналитическую запись решения дифференциального уравнения:
ans =-x^2+exp(-2*t)*(x^2+1)

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

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

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

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

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

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

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

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

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

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

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

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

Читать еще:  Пакеты расширения matlab

· ode23tb, ode23s служат для решения жестких дифференциальных уравнений.

· ode15s — жестких дифференциальных и дифференциально-алгебраических уравнений,

· ode23t — умеренно жестких дифференциальных и дифференциально-алгебраических уравнений.

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

· options — аргумент, создаваемый функцией odeset — позволяет вывести параметры, установленные по умолчанию;

· tspan — вектор, определяющий интервал интегрирования [t tfinal]. Для получения решений в конкретные моменты времени t, tl. tfinal (расположенные в порядке уменьшения или увеличения) нужно использовать tspan = [t tl . tfinal];

· у0 — вектор начальных условий;

· Т, Y — матрица решений Y, где каждая строка соответствует времени, возвращенном в векторе-столбце Т.

Этапы решения ОДУ:

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

2 Написание специальной файл-функции для системы уравнений. Файл-функция содержит два входных аргумента: переменную t, по которой производится дифференцирование, даже если она входит в уравнение неявно, и вектор, размер которого равен числу неизвестных функций системы.

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

Покажем применение решателя ОДУ на ставшем классическом примере — решении уравнения Ван-дер-Поля, записанного в виде системы из двух дифференциальных уравнений:

при начальных условиях

Перед решением нужно записать систему дифференциальных уравнений в виде ode-функции. Для этого в главном меню выберем File > New > M-File и введем

function dydt = vanderpol(t, y)

% функция правых частей дифф.уравнения

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

tspan = [0, 20]; % интервал интегрирования

y0 = [2; 0]; % начальные условия

[t,y] = ode45(@vanderpol, tspan, y0, []);

% Результат в виде графика

title(‘van der Pol Equation, mu = 1’)

Папиллярные узоры пальцев рук — маркер спортивных способностей: дерматоглифические признаки формируются на 3-5 месяце беременности, не изменяются в течение жизни.

Общие условия выбора системы дренажа: Система дренажа выбирается в зависимости от характера защищаемого.

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

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

Дифференциа́льное уравне́ние — уравнение, связывающее значение некоторой неизвестной функции в некоторой точке и значение её производных различных порядков в той же точке. Дифференциальное уравнение содержит в своей записи неизвестную функцию, ее производные и независимые переменные; однако не любое уравнение, содержащее производные неизвестной функции, является дифференциальным уравнением.

Порядок, или степень дифференциального уравнения — наибольший порядок производных, входящих в него.

Решением (интегралом) дифференциального уравнения порядка n называется функция y(x), имеющая на некотором интервале (a, b) производные y‘(x),y»(x). y (n) (x) до порядка n включительно и удовлетворяющая этому уравнению.

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

Обыкновенные дифференциальные уравнения (ОДУ) — это уравнения вида

или ,

где — неизвестная функция (возможно, вектор-функция; в таком случае часто говорят о системе дифференциальных уравнений), зависящая от переменной времени , штрих означает дифференцирование по . Число называется порядком дифференциального уравнения.

Дифференциальные уравнения в частных производных (УРЧП) — это уравнения, содержащие неизвестные функции от нескольких переменных и их частные производные. Общий вид таких уравнений можно представить в виде:

,

где — независимые переменные, а — функция этих переменных.

Простой пример решения ДУ в MatLab:

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

Возможный формат вызова процедуры решателя в MatLab:

Снимок экрана, который соответствует численному решению этой задачи в системе MatLab.

Файл-функция, описывающая правую часть уравнения, – текстовый файл с расширением func1.m – содержит всего две строки

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

Здесь задан временной интервал от Tstart=0 до Tfinal=2 и начальное значение функции StartVector=1. График полученной таким образом функции Y(T) воспроизводится вызовом встроенной функции plot

Следующей строкой мы кружочками нарисовали на том же графике точное решение в точках полученного вектора-столбца T:

Читать еще:  Цвета в matlab

В общем случае, процедура ode45 может решать систему уравнений следующего вида:

функция-столбец, зависящая отвремени и компонент вектора x.

Заметим, что уравнение (1) можно решить в MatLab и символьно. Приведем часть командного окна, где была вызвана стандартная процедура dsolve

Здесь также использовано начальное условие.

Видим, что с точностью до переобозначения x → t результат совпадает с приведенным выше.

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

В пакете MATLAB существует несколько так называемых решателей системы обыкновенных дифференциальных уравнений: ode23, ode45, odel 13, odel5s, ode23s, ode23t, ode23tb и некоторые другие. Аббревиатура ode означает ordinary differential equations, а суффикс s (s — stiff) обозначает то, что метод применим к решению жестких систем дифференциальных уравнений (о понятии »жесткость» будем говорить далее).

Решатель ode23 представляет метод Рунге-Кутты порядка 2-3, модифицированный Богацки и Шампиной; решатель ode45 — метод Рунге-Кутта порядка 4-5, модифицированный Дормандом и Принцем; решатель odel 13 представляет метод Адамса, Башворта и Моултона.

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

Простейший вариант неявной схемы Эйлера имеет следующий вид:

Чтобы найти численное решение уп+1 на следующем слое, необходимо решить уравнение (8.41) относительно ул +]. Это можно осуществить несколькими способами. Например, с помощью метода итераций

Условием сходимости метода итераций (8.42) является условие /l|lfu|| 1) в ряд Тейлора по

Разрешая (8.43) относительно у„ +i, получаем значение решения на следующем уровне. Такой метод приближенного решения уравнения (8.41) называется методом Розснброка.

Используется также еще один неявный метод, основанный на формуле трапеции:

Функция ode23t использует неявный метод трапеций типа (8.44) е использованием «свободной» интерполяции. Эту функцию рекомендуется использовать для умерено жестких задач, когда требуется высокоточное решение. Функция ode23tb использует неявный метод Рунге-Кутта на первом шаге по методу трапеций, а на втором шаге методом «дифференцирования назад» 2-го порядка. Подобно ode23s данная функция может оказаться более эффективной, чем odel5s, если не требуется высокая точность.

Куртис и Хиршфельдер в 1952 г. ввели понятие жестких задач и предложили для их решения неявные методы «дифференцирования назад». Одна из таких схем 2-го порядка имеет следующий вид:

Определение жесткости системы дифференциальных уравнений дадим в соответствии с учебником [3].

Пусть дана система дифференциальных уравнений вида:

где t > 0, й 1, 0. Решение системы уравнений (8.46) имеет следующий вид:

Пусть а2>>аь тогда при достаточно большом t в векторе решений остается компонента щ, а и2 0.

Рассмотрим простейшую разностную схему Эйлера для решения системы уравнений (8.46):

где г- шаг по времени t, Ul ,nl = u,(tn), t„= Пг,п = 0,1, . i = 1,2. Схема Эйлера (8.47) устойчива, когда rai > аi, постольку верна формула (8.48).

Введем определение жсеткости. Пусть дана система обыкновенных дифференциальных уравнений:

Система дифференциальных уравнений (8.49) с постоянной матрицей A(mxm) называется жесткой, если собственные значения к = 1,2, т матрицы А удовлетворяют следующим условиям:

Для прояснения природы жесткости, рассмотрим пример решения уравнения Ван-дер-Поля. Уравнение Ван-дер-Поля описывает релаксационные колебания в электронных устройствах. Это уравнение является жестким. Покажем это. Уравнение Ван-дер-Поля и» + и-к(1-и 2 )и’ = 0 перепишем в векторной форме, т. е.

где Величину (1 — Uj 2 ) = Ь можно считать порядка

1. Находя собственные значения матрицы в (8.50) при к >>1, имеем к=Ьк, Х2= 1/Ьк. В итоге число жесткости S =Xi/X2=b 2 k 2 . Выбирая к=1000, находим s

Решим нелинейную систему уравнений (8.50) с помощью схемы Куртиса- Хильшфельдсра (8.45) и с помощью встроенного в MATLAB решателя ode23s. Код программы решения системы уравнений (8.50) представлен в листинге 8.10.

%Программа, иллюстрирующая решение жесткой %системы дифференциальных уравнений на примере %уравнения Ван- дер- Поля function vdр global k

%численное решение уравнения Ван- дер- Поля %согласно схеме (8.45)

%определяем значение константы к и начальные %данные для решения

к =10; h =0. 01; t =0: h:100; у( : , 1) =[0; 1 ]; у( :, 2) =у( :, 1)+h*func(h, у( :, 1) +. . . 0.5*h*func(h,y(:,l)));

Уоосновной цикл расчета по схеме (8.45)

for п =2:(I engt h(t)- 1) у(: , n+1) =(4 * у ( : , n)-у( : , n- 1) +. . . 2* h* f unc( ( n- 1) * h, у( : , n- 1))) / 3; end PI о t ( t, у ( 1, : ) , t, У ( 2, : ) ) ;

%решение уравнения Ван- дер- Поля с помощью %решателя 0 d е 2 3 S

Читать еще:  Transfer function matlab

% к =1 0 0 0; % [ Т Y]=ode23s(@func,[0 5 0 0 0 ] , [ 0 1] ) ; % pi ot ( Т, Y( : , 1) , Т, Y( : , 2), . . .

% Т(1: ( I engt h( Т)- 1)), di ff ( T));

y=[ u( 2) ; — u(1) +k*(1-u( 1) л2) *u( 2) ];

Итог численного решения уравнения Ван-дер-Поля согласно схеме (8.45) представлен на рис. 8.8, а. С помощью данной схемы не удалось решить уравнение со значением параметра к = 1000, а только при к = 10, т. к. в этом случае требуется шаг интегрирования сделать недопустимо малым. В решателе ode23s эта проблема решается путем автоматического регулирования шага интегрирования. Итог решения уравнения Ван-дер-Поля данным решателем представлен на рис. 8.8, б. Помимо решения и, производной решения и’, нанесен также график зависимости шага интегрирования т от аргумента — времени t. Видно, что шаг сильно уменьшается в окрестности точек с максимальной производной и, наоборот, вне этих точек шаг может значительно увеличиться.

Рис. 8.8. Численное решение уравнения Ван-дер-Поля: а — по схеме (8.45) при к =10; б — решателем ode23s при к =1000

Иллюстрированный самоучитель по 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 – умеренно жестких дифференциальных и дифференциально-алгебраических уравнений.

Ссылка на основную публикацию
ВсеИнструменты 220 Вольт
Adblock
detector
×
×