Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Для моделирования в Matlab и Scilab.doc
Скачиваний:
28
Добавлен:
07.11.2018
Размер:
276.48 Кб
Скачать
      1. Переключатель

Для осуществления множественного выбора (или ветвления) используется конструкция с переключателем:

Matlab

Scilab

switch switch_Bыражение

case _Bыражение

Список_ инструкций

case { case_Bыражение1, case_Bыражение2,… }

Список_ инструкций

otherwise,

Список_ инструкций

end

select expr0,

case expr1 then instructions1,

case expr2 then instructions2,

...

case exprn then instructionsn,

[else instructions],

end

Выполняется первый оператор case, у которого case_Bыражение соответствует switch_Bыражению. Если ни одно из case_Bыражений не соответствует switch_Bыражению, то выполняется список инструкций после оператора otherwise (если он существует). Выполняется только один case, после чего выполнение продолжается с оператора после end.

Пример Matlab

Пусть существует m-файл-сценарий swit.m:

switch month

case {1,2,3}

disp('Первый квартал')

case {4,5,6} disp('Второй квартал')

case{7,8,9} disp('Третий квартал')

case{10,11,12} disp('Четвертый квартал')

otherwise,

disp('Ошибка в данных')

end

Эта программа в ответ на значения переменной month (номер месяца) определяет номер квартала и выводит сообщение. Как это происходит, видно из следующей программы:

month=3;

swit

Первый квартал

month=10;

swit

Четвертый квартал

month=13;

swit

Ошибка в данных

Пример Scilab

while %t do

n=round(10*rand(1,1))

select n

case 0 then

disp(0)

case 1 then

disp(1)

else

break

end

end

n =

2.

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

Анализ поведения многих систем и устройств в динамике, а также решение многих задач в теории управления обычно базируются на решении систем обыкновенных дифференциальных уравнений (ОДУ). Их, как правило, представляют в виде системы из дифференциальных уравнений первого порядка в форме Коши с граничными условиями y(t0 tend, p)=b, где tend, t0 — начальные и конечные точки интервалов. Параметр t не обязательно означает время, хотя чаще всего решение дифференциальных уравнений ищется во временной области. Вектор b задает начальные и конечные условия.

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

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

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, у).

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

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

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

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

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

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

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

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

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

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

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

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

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

y'1 = y2 ;

y'2 = Mu*(1 - y1^2)*y2 - y1;

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

y1(0) = 2;

y2(0) = 0;

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

function dydt = vanderpol(t, y)

global Mu

dydt = [y(2);

Mu*(1-y(1)^2)*y(2)-y(1)];

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

global Mu = 1;

tspan = [0, 20];

y0 = [2; 0];

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

% Plot of the solution

plot(t,y(:,1))

xlabel('t')

ylabel('solution y')

title('van der Pol Equation, \mu = 1')

Решение решателем ode15s и его график можно получить, используя следующие команды:

tspan = [0, 3000];

y0 = [2; 0];

Mu = 1000;

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

plot(t,y(:,1))

title('van der Pol Equation, \mu = 1000')

axis([0 3000 -3 3])

xlabel('t')

ylabel('solution y')