Elettracompany.com

Компьютерный справочник
4 просмотров
Рейтинг статьи
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

MATLAB (сокращение от англ. «Matrix Laboratory») — термин, относящийся к пакету прикладных программ для решения задач технических вычислений, а также к используемому в этом пакете языку программирования. MATLAB используют более 1 000 000 инженерных и научных работников, он работает на большинстве современных операционных систем, включая Linux, Mac OS, Solaris и Microsoft Windows .

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

Для решения дифференциальных уравнений и систем в MATLAB предусмотрены следующие функции ode45(f, interval, X0 [, options]), ode23(f, interval, X0 [, options]), ode113(f, interval, X0 [, options]), odel5s(f, interval, X0 [, options]), ode23s(f, interval, X0 [, options]), ode23t (f, interval, X0 [,options]) и ode23tb(f, interval, X0 [, options]). Входными параметрами этих функций являются:

Читать еще:  Php pdo dll

f — вектор-функция для вычисления правой части уравнения системы уравнений

interval — массив из двух чисел, определяющий интервал интегрирования дифференциального уравнения или системы;

Х0 — вектор начальных условий системы дифференциальных систем

options — параметры управления ходом решения дифференциального уравнения или системы.

Все функции возвращают:

массив Т — координаты узлов сетки, в которых ищется решение;

матрицу X, i-й столбец которой является значением вектор-функции решения в узле Тi

В функции ode45 реализован метод Рунге-Кутта 4-5 порядка точности, в функции ode23 также реализован метод Рунге-Кутта, но 2-3 порядка, а функция ode113 реализует метод Адамса. Пример:

В М-файле с именем pr7.m пишем:

Потом в командном окне вызываем функцию ode113:

ode113(@pr7,[0 20],0) %Метод Адамса: @pr7 – ссылка на М-функцию, [0 20]- интервалы интегрирования,0 — условие: y(0)=0

Результатом будет график:

Необходимо реализовать метод Рунге-Кутта 4 порядка и решить задачу Коши для предложенной системы дифференциальных уравнений:

y1(0) = 0.1; y2(0) = 0.5

В М-файле с именем pr8.m пишем:

Потом в командном окне вызываем функцию ode45:

[x,y]=ode45(@pr8,[1 10], [0.1 0.5]);

Результатом будет график:

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

1. Дьяконов В. П. Компьютерная матеметика. Теория и практика. — СПб: «Питер», 1999,2001. — С. 1296. — ISBN 5-89251-065-4

2. Джон Г. Мэтьюз, Куртис Д. Финк Численные методы. Использование MATLAB = Numerical Methods: Using MATLAB. — 3- е изд . — М .: « Вильямс », 2001. — С . 720. — ISBN 0-13-270042-5

3. Курбатова Екатерина Анатольевна MATLAB 7. Самоучитель. — М.: «Диалектика», 2005. — С. 256. — ISBN 5-8459-0904- X

Иллюстрированный самоучитель по 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-го порядка в последующем
Читать еще:  Сумма всех элементов матрицы matlab

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

Средства пакета MATLAB для решения обыкновенных дифференциальных уравнений;

Метод Рунге-Кутта 4-го порядка решение задачи Коши для ДУ в пакете MATLAB реализован в виде функции ode45. Данный метод рекомендуется использовать при первой попытке нахождения численного решения задачи.

Помимо данной функции в пакете MATLAB реализованы и другие

методы решения дифференциальных уравнений и систем ДУ:

ode23 — функция реализует одношаговые явные методы Рунге-Кутта (2 и 3) порядков. Функция используется при решении нежестких систем ДУ обеспечивает удовлетворительную точность при меньших нежели функция ode45временных затратах.

ode113-функция реализует многошаговый метод Адамса-Башворта-Мултона переменного порядка. Функция используется при необходимости обеспечить высокую точность численного решения.

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

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

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

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

Все перечисленные выше функции, называемые в документации пакета Solver (решатель), могут решать системы ДУ явного вида . Кроме того решатели ode15s, ode23s, ode23t и ode23tbсистемы дифференциальных уравнений неявного вида , а также все решатели, кроме ode23s, могут находить решения уравнения вида .

Пример 9.3. Решение задачи Коши для дифференциального уравнения

,

где Ts, r — заданные постоянные, имеющие физический смысл температуры окружающей среды и коэффициента остывания, соответственно,

Для решения дифференциального уравнения (2.1) сначала создаем m-файл, содержащий определение функции, стоящей в правой части уравнения (2.1):

function Z=Tempr(t,T)

% определение функции, стоящей в правой части уравнения (2.1)

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

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

Читать еще:  Цель защиты информации это

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

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

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

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

ode23- явные одношаговые методы Рунге-Кутта второго и третьего порядка, достаточно высокая скорость при небольшой точности;

ode45-одношаговые явные методы Рунге-Кутта четвертого и пятого порядка, является классическим методом из-за оптимальности соотношения точности и скорости вычислений.

ode23t- метод трапеции с интерполяцией, применяется при решении задач, с почти гармоническими входными данными;

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

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

ode133-многошаговый метод Адамса-Башфорта-Мултона переменного порядка, способен обеспечить высокую точность вычислений при достаточных знаниях начальных условий.

Решатели ode23t, ode15s, ode23s используются обычно для решения уравнений неявного вида. Мы выбираем решатель ode45, так как для нашей задачи он вполне подходит и является оптимальным.

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

В М-файле f — обозначение функции, F(t,y)-название функции, в квадратных скобках (t,y)- исходная система дифференциальных уравнений, каждое уравнение системы пишется через точку с запятой без правой части.

Решатель может реализовываться в командном окне или может быть записан в скрипт.

[T,Y]=solver(‘F’,[t0 tfinal],[y10 y20 y30 … yn0]);

В выше написанной формуле solver-выбранный решатель, ‘F’-ссылка на решаемую систему, [t0 tfinal]-промежуток времени, за которое требуется решение, [y10 y20 y30 … yn0]-начальные условия.

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

Для начала берем самый простой случай:

Найдем его численное решение c помощью MATLAB.

Необходимо переписать систему в виде:

Для начала создадим M-файл «s1»:

function f = s1(t,y)

global m I c1 c2 d1 d2 ;

В другом файле «ss1» запишем программу для исследования системы:

%Ввод значений переменных

global m I c1 c2 d1 d2 ;

d1=input(‘ Enter d1=’ );

d2=input(‘ Enter d2=’ );

c1=input(‘ Enter c1=’ );

%Численное решение системы дифференциальных уравнений методом Рунге-Кутты 4 порядка (в данном случае ищем решение на интервале t=[0 10], с начальными условиями =0, =1, =0, =1):

[T,Y]=ode45(‘s1’,[0 10],[0 1 0 1]);

%Построение графиков зависимостей от t(, ,, ):

%Построение фазовых портретов в отдельном окне(,):

После запуска программы «ss1» предлагается ввод переменных. Будем вводить m=1, I=1, d1?d2, c1?c2.

Рис. 3. Слева графики зависимостей(, , , ), справа фазовые портреты (,) для случая гармонических колебаний

Теперь рассмотрим другой случай, введем диссипацию.

Переписываем систему в виде:

function f = s1(t,y)

global m I c1 c2 d1 d2 p1 p2;

В другом файле «ss2» записываем программу для исследования системы:

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