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

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

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

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

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

Дифференциальные уравнения n-го порядка

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

Решением дифференциального уравнения является функция \( x(t) \), которая обращает это уравнение в тождество. Дифференциальные уравнения имеют бесконечное множество решений.

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

6.2 Пример решения оду в Scilab

Для решения обыкновенных дифференциальных уравнений (ОДУ) в Scilab используется
функция y = ode([type], y0, t0, t, func).
Разберём, что обозначает каждый из параметров у этой функции.

type — необязательный строковый параметр, с помощью которого можно выбрать метод решения ОДУ. Обычно этот параметр опускается.
t0скаляр начальный момент отрезка интегрирования. Обычно \( t0 = 0 \).
y0 — начальные условия. Отметим, что \(y0 \) это вектор, размерность которого совпадает с порядком ОДУ. Так, для ОДУ 2-го порядка необходимо задать значения в начальный момент времени для функции и её производной, т.е. использовать запись \(y0 = [0.1, 0.3]\).
tвектор, задающий узлы сетки, в которых ищем решение. Как правило, вектор t задается следующим образом t=t0:d:tmax, где \(t0\) — начальный момент отрезка интегрирования, \(d\) — шаг дискретизации, \(tmax\) — конечный момент отрезка интегрирования.
func — пользовательская функция, определяющая правую часть уравнения.
yвектор решений.

Рассмотрим использование функции ode() на примере решения следующей задачи.

Найти угловую скорость \( \omega(t) \) твердого тела вокруг неподвижной оси, если заданы начальная угловая скорость тела \( \omega_0=1 \) и угловое ускорение \( \varepsilon(t) = 2+0.5sin(t) \). Найти значение \( \omega(t) \) в момент времени \( t_1=1.3 \). Построить график функций.

Рисунок 9. Сравнение графиков угловой скорости точки, по функции, найденной аналитическим и численным интегрированием. Красным кружком обозначено значение скорости точки в момент времени t=1.3c.

Угловая скорость точки может быть найдена из дифференциального уравнения

В нашем случае по условию задачи указаны следующие параметры для функции ode():
\(t0=0 \) начальный момент времени,
\(y0 = 1\) начальное условие одно, т.к. порядок уравнения равен 1, это начальная угловая скорость тела \( \omega_0=1 \)
t=t0:h:tmaxвектор, задающий узлы сетки.

Результат работы программы представлен на рис.9, исходный код на листинге 15.

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

Функция \( f = 2t — 0,5cos(t) + 1,5 \) единственное решение дифференциального уравнения, удовлетворяющее заданным начальным условиям, то есть, функция \(f\) решение задачи Коши.

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

Для решения систем ОДУ в Scilab используется та же функция y = ode([type], y0, t0, t, func). Однако важным требованием является запись исследуемой системы в нормальной форме Коши.

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

\begin x_1′ = f_1(t,x_1. x_n) \\ x_2′ = f_2(t,x_1. x_n) \\ . \\ x_n’ = f_n(t,x_1. x_n) \end

Решением системы ОДУ является вектор x(t), который обращает это уравнение в тождество. Размерность вектора равна количеству уравнений в системе.

Стоит отметить, что дифференциальное уравнение n-ой степени может быть представлено в виде системы из n-уравнений первой степени, что позволяет решать задачу Коши для полученной системы ОДУ.

6.4 Примеры поиска решения систем ОДУ в Scilab

Решение системы ОДУ

Рассмотрим решение задачи Коши для системы уравнений

\begin x’ = cos(xy) \\ y’ = sin(x+ty) \end

на интервале \( [0; 10]\) и с начальными условиями \(x(0)=0, y(0)=0 \).

Для поиска решения данной задачи, нам необходимо привести исходную систему к нормальному виду Коши. Для этого введём новые переменные \( (z1, z2) \) и сделаем необходимые переобозначения в исходной системе:

Рассмотрим решение задачи Коши для системы уравнений

\begin z_1 = x \\ z_2 = y \end \begin z_1′ = cos(z_1 z_2) \\ z_2′ = sin(z_1 + t z_2) \end

Код программы, реализующей поиск решения системы дифференциальных уравнений представлен на листинге 16. Обратите внимание, как происходит обращение к компонентам вектора решения \( z(t) \).

Для наглядной реализации сформировано графическое решение на рис. 10.

Рисунок 10. Графическое решение задачи Коши с помощью функции ode().

Решение системы ОДУ в матричной форме

Рассмотрим решение задачи Коши для системы уравнений, заданных в матричном виде

на интервале \( [0; 10] \) и начальными условиями \( y_1(0)=1, y_2(0)=0 \).

Код программы, реализующей поиск решения системы дифференциальных уравнений представлен на листинге 17. Обратите внимание, как происходит обращение к компонентам вектора решения \(y(t)\).

Для наглядной реализации сформировано графическое решение на рис. 11.

Рисунок 11. Графическое решение задачи Коши с помощью функции ode().

Решение ДУ 2-го порядка путём сведения к системе уравнений

Продолжим знакомиться с возможностями функции ode() на примере решения задачи механики на второй закон Ньютона.

Груз находится на пружине жёсткости \( c=12 \) H/м, масса груза \( m=68.7 \) кг. Определить закон движения груза, если на него действует сила \( F=100.5sin(2t) + <2\pi \over 3>\) H.

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

и начальными условиями \( x(0)= 0, ;\ \dot(0)= 0 \).

Как известно, ОДУ второго порядка сводится к системе в нормальной форме Коши, состоящей из двух уравнений первой степени. Введём новые переменные \( (z_1, z_2) \) и сделаем необходимые переобозначения в исходной системе:

\begin z_1 = x \\ z_2 = \dot \end \begin \dot_1 = z_2 \\ \dot_2 = <1 \over m>(-cz_1 + F(t)) \end

Код программы, реализующей поиск решения системы дифференциальных уравнений представлен на листинге 18. Обратите внимание, как происходит обращение к компонентам вектора решения \( y(t) \).

Для наглядной реализации сформировано графическое решение на рис. 12. Компонента \( z_1 \) представляет собой координату груза, а компонента \( z_2 \) — скорость груза.

Рисунок 12. Графики движения груза на пружине для компонент \( z_1 и z_2 \) соответственно.

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

Для решения ОДУ и системы ОДУ 1-го порядка в Scilab предусмотрена функция ode , имеющая форматы:

[y]=ode(y0,t0,t,f),

[y,w,iw]=ode(type,y0,t0,f,adams,stiff,rk,rkf,fix,rtol,adol,jac,w,iw),

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

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

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

t 0 – начальная точка интервала интегрирования;

t – координаты узлов сетки, в которых происходит поиск решения;

f– имя внешней функция, определяющей правую часть уравнения

или системы уравнений;

y – вектор решений (выходной параметр).

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

type– строка, указывающая тип используемой программы решения, может принимать значения: » adams «, » stiff «, » rk «, » rkf «, » fix «, » discrete «или » root «;

adams– применяют при решении дифференциальных уравнений или систем методом прогноза и коррекции Адамса;

stiff– указывают при решении жестких задач;

rk– используют при решении дифференциальных уравнений или систем методом Рунге-Кутты четвертого порядка;

rkf– указывают при выборе пятиэтапного метода Рунге-Кутты четвертого порядка;

fix– тот же метод Рунге-Кутты, но с фиксированным шагом;

rtol, atoll– относительная и абсолютная погрешности вычислений, соответственно, по умолчанию rtol =0.00001, atol =0.0000001 (при использовании параметров rkfи fixrtol =0.001, atol =0.0001);

jac– матрица, представляющая собой якобиан правой части жесткой системы дифференциальных уравнений и заданная в виде внешней функции вида j = jak ( t , y );

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

Описание этого формата достаточно подробно рассмотрено в справочной системе Scilab, где и приведены примеры его использования для различных типов ОДУ [13].

Остановимся на использовании первого формата функции ode, для чего рассмотрим решение следующего примера: найти решение ОДУ y ‘=- sin ( x * y ) на отрезке [0;5]cшагом 0.5 при начальных условиях y (0)=1.5.

Решение ОДУ, полученное с применением функции ode и график полученного решения, представлены на рис.2.5.2-1.

—> // Решение ОДУy’=-sin(x*y) —> y0 = 1.5; t0 = 0; t = 0:0.5:5; // Начальные условия —> // Загрузка и выполнение сценарияРИС2521 —> exec(‘РИС2521.sce’, 0); ans = 0. 1.5 0.5 1.3302706 1. 0.9566472 1.5 0.5574285 2. 0.2477507 2.5 0.0822207 3. 0.0208664 3.5 0.0041103 4. 0.0006303 4.5 0.0000753 5. 0.000007

Рис. 2.5.2-1. Решение ОДУ с использованием функции ode

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

y=ode(x0,t0,t,sys),

где х0 – вектор начальных условий ОДУ;

t 0 – начальная точка интегрирования;

t– вектор значений независимой переменной;

sys– имя функции, в которой исходя из вектора значенийtвычисляется матрица решенийy;

y– матрица решений (выходной параметр), первый столбец которой

y (1)– значение функции y ( x ), а второй — y (2 )значение производной y ‘( x ).

Решение системы ОДУ формируется в матрице y, и выводится на экран в виде таблицы

В качестве примера рассмотрим решение системы ОДУ:

c начальными условиями x(0)=0, y (0)=0 на отрезке [ 0;10] и шагом 1 .

Решение системы ОДУ в Scilab начинается с создания функции sys, описывающей систему (рис.2.5.2-2). После того, как заданы начальные условия ОДУ, производится обращение в функции ode, в результате которого формируется матрица решения y. Решение системы выводится в виде таблицы и графика. (Шапка таблицы и легенда для графика!)

—> // Решение системы ОДУ —> // Загрузка сценария РИС2522 и его выполнение —>clear —> // Начальные условия —>x0 = [0; 0]; t0 = 0; t = 0:1:10; —> —> exec(‘РИС2522.sce’, 0); ans = 0. 0. 0. 1. 0.9802401 0.533358 2. 1.4096497 0.9693978 3. 1.7429464 0.6024417 4. 2.4027415 0.2586293 5. 3.3312751 0.005761 6. 4.2504071 -0.1650347 7. 4.826261 -0.2358589 8. 5.1581587 -0.2515654 9. 5.3963437 -0.2509281 10. 5.5981318 -0.2461951

Рис.2.5.2-2. Решение системы ОДУ

Рассмотрим задачу построения временной зависимости тока i ( t ) в RC-цепи.

Построить временную зависимость тока i ( t ) в неразветвленной RC-цепи (рис. 3.3-4), если цепь включается на постоянное напряжение при нулевых начальных условиях.

Неразветвленная RC -цепь Дано: E=1 В – ЭДС источника; R=1 Ом – сопротивление; С=1 Ф – емкость; t=[0, 6τ] c – временной интервал.

Рис.2.5.2-3. Построить временную зависимость тока i ( t ) в RC-цепи

Основы работы с системой технических расчетов Scilab


Интегралы

Для нахождения определенных интегралов в системе используется функция intg. В самом простом виде функция имеет такой синтаксис:

где f — подынтегральное выражение в виде текстовой строки или функция пользователя, xmin и xmax — это соответственно нижний и верхний пределы интегрирования.

Результат работы функции можно записать в переменную.

Напомним, что функция пользователя строится по определенным правилам: начинается с ключевого слова «function», после которого через запятую записывается имя функции, затем сама функция, а заканчивается описание функции пользователя ключевым словом «endfunction».

После этого достаточно вызывать функцию intg, которая возвращает значение определенного интеграла.

Кроме функции intg система имеет еще несколько функций для нахождения определенных интегралов:

  • intsplin — интегрирование при помощи сплайновой интерполяции;
  • inttrap — интегрирование при помощи метода трапеций;
  • integrate — интегрирование квадратурою.


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

Решение дифференциальных уравнений или систем дифференциальных уравнений в системе может осуществляться только в численном виде.

Для решения применяется функция ode, которая в самом простом виде имеет такой синтаксис:

y0 — начальное условие: вещественное число для одного дифференциального уравнения или вектор для системы дифференциальных уравнений;

x0 — начальное значение интервала интегрирования: действительное число для одного дифференциального уравнения или вектор для системы дифференциальных уравнений;

C — координаты оси x в виде: «начальная координата: шаг: конечная координата»;

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

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

Пример. Найти общее решение обычного дифференциального уравнения первого порядка y’ — 10x = 0 на интервале [2,10] с начальным условием y0 = -1.

Решение состоит в следующей последовательности команд:

В первой строке формируется функция пользователя, на которую в функции ode осуществляется ссылка. Поскольку она должна представлять собой правую часть дифференциального уравнения, то начальное уравнение преобразуется в вид y’ = 10x. Во второй строке задаются начальное условие y0 = -1 и начальное значение интервала интегрирования, а в третьей — интервал изменения независимой переменной [2,10].

Получим графическое решение дифференциального уравнения.

Как нетрудно заметить, координатная сетка для оси x как раз и отображает интервал ее изменения [2,10].

Следует иметь в виду, что начальное значение x0 должно быть меньше начального значения координаты оси x. В противном случае система генерирует ошибку наподобие приведенной ниже:

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

Пример. Решить систему дифференциальных уравнений на интервале с начальными условиями y0 = 0 и z0 = 0.

Решение будет состоять из такой последовательности команд:

Как видим, во время решения систем дифференциальных уравнений единственным отличием по сравнению с решением отдельных дифференциальных уравнений является создание двух векторов: правых частей уравнений (difur) и начальных условий (y0).

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

Выше было рассмотрено самое простое применение функции ode. Но она имеет достаточно большое количество аргументов, которые заметно увеличивают возможности пользователя для решения дифференциальных уравнений. Например, автоматически в процессе решения Scilab осуществляет выбор между методом прогнозирования и коррекции (nonstiff predictor — corrector) для нежесткой задачи и методом BDF (Backward Differentiation Formula) Адамса-Мултона для жестких задач. Вместе с тем, система позволяет и самостоятельно задать нужный метод. Для этого в функции используется специальный аргумент, записываемый первым в списке аргументов в символьном виде в двойных кавычках, например «adams».

Система предлагает несколько методов, в частности:

  • rk4 — адаптивный метод Рунге-угла 4-го порядка;
  • rkf — основывается на методе Рунге-Кута-Фельберга (Fehlberg’s Runge — Kutta) 4-5-го порядка точности с автоматической оценкой погрешности;
  • fix — метод Рунге-угла с фиксированным шагом.


XCOS — моделирование динамических систем

В составе системы имеется модуль Xcos, при помощи которого можно строить динамические модели. Доступ к нему осуществляется командою Инструменты > Визуальное моделирование XCOS, после чего появляется окно нового документа «Untitled» модуля Xcos и окно с палитрой инструментов моделирования.

Построение модели осуществляется в окне «Untitled» с использованием инструментов окна с палитрой инструментов моделирования.

Scilab содержит библиотеку примеров построения моделей в разных отраслях, что дает возможность пользователям уяснить принципы построения моделей. Доступ к примерам осуществляется командою Справка > Примеры XCOS и последующим выбором в окне с примерами группы «XCOS». Примеры моделей сгруппированы по их функциональному назначению, например, «Electrical Systems» (электрические системы), «Control Systems» (системы управления) и т.п. Для выбора конкретной модели следует дважды щелкнуть на ее названии, что приведет к появлению окна с моделью.

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

В целом же тема работы с модулем Xcos является сама по себе очень емкой и заслуживает отдельного рассмотрения.


источники:

http://findout.su/8×11365.html

http://www.kv.by/content/329348-osnovy-raboty-s-sistemoi-tekhnicheskikh-raschetov-scilab