Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лаб_2_Керування Simulink.doc
Скачиваний:
4
Добавлен:
21.11.2019
Размер:
487.42 Кб
Скачать

Мінаєв Ю.М. ІЗДКС – Лаб.практ, № 2, управління Simulink-моделлю з МатЛаб

КОМП'ЮТЕРНЕ МОДЕЛЮВАННЯ інтелектуальних інструментальних засобів дослідження компъютерных СИСТЕМ У СЕРЕДОВИЩІ MATLAB/SIMULINK

Лабораторний практикум

Ч а с т и н а 2

Керування Simulink-моделлю з matlab

І

При організації чисельних експериментів у SIMULINK може виникнути необхідність багаторазово запускати ту ж саму модель з різними параметрами і вхідними сигналами. Це можна забезпечити, керуючи процесом моделювання з командного вікна. Насамперед, необхідно відкрити Simulink-модель вручну чи за допомогою команди open. Так, команда open('vdp'). відкриває модель vdp.mdl (схема моделювання рівняння Вандерполя). Щоб запустити процес моделювання з командного рядка використовується команда sim, наприклад sim('vdp'). Як параметри цій команді можна передати час моделювання, вхідний сигнал (при наявності вхідних портів у моделі), початкові умови й опції решателя. У цьому випадку синтаксис її виклику буде мати вид

y=sim('model',timespan,options,ut),

де timespan – інтервал моделювання, ut – масив, що складається з отсчетов часу і значень вхідного сигналу.

Приклад 3. Створимо модель, показану на рис., і збережемо її під ім'ям simple_mo-del. Знайдемо її реакцію на синусоїду на інтервалі 30 с. Опцій моделювання використовувати не будемо – як аргумент візьмемо порожній масив.

Після виконання цих команд можна відкрити блок Scope у схемі і побачити результати моделювання. Помістити результати моделювання в робочий простір і потім подивитися графік за допомогою команди plot можна, використовуючи виклик sim з вихідними параметрами.При виклику команди sim з опціями решателя структура опцій задається командою simset. Для приклада змінимо тип решателя на ode23:

>> [t2,y2]=sim('simple_model',[0 30],simset ('Solver','ode23'),[t' sin(t')]);

З повним списком опцій моделювання можна ознайомитися, використовуючи команду simget, наприклад o=simget ('simple_model').Крім завдання опцій моделювання, існує можливість програмно змінювати параметри блоків.

Для їхнього читання і запису використовують команди get_param і set_param. Оскільки назви параметрів блоків не завжди збігаються з текстами пояснень у вікні параметрів, буває корисна конструкція get_param(gcb, 'objectparameters'). Мишею у вікні моделі вибирається потрібний блок. Після цього команда gcb повертає ім'я поточного блоку.

Так, якщо буде виділений блок Gain, команда gcb поверне рядок 'simple_model/ Ga-in'. За допомогою тієї ж функції get_param можна одержати будь-як конкретний параметр, наприклад:

>>p=get_param('simple_model/Gain', 'Gain'), class(p)

p =3

ans =

сhar

Зверніть увагу на те, що тип параметра – рядок. Це значить,що якщо, наприклад, необхідно змінити коефіцієнт підсилення з 3 на 4 за допомогою функції set_param, то прийдеться набрати не set_param('simple_model/Gain', 'Gain',4), а set_param('simple_model/Gain', 'Gain', num2str(4)). Використання цих команд дозволяє, зокрема, організувати циклічну зміну параметрів схеми моделювання (коефіцієнтів підсилення, початкових умов) за допомогою оператора MATLAB for.

Приклад 4 (задача про оптимальні початкові умови). Рух маятника описується нелінійним диференціальним рівнянням . Його початкові умови задовольняють умові (лежать на колі радіуса R у фазовій площині). Потрібно знайти значення , при яких енергія вихідного сигналу буде максимальної або мінімальною: .

Рішення. Складемо схему моделювання в SIMULINK і назвемо її sys.mdl (рис. ). Розглянемо два способи пошуку оптимальних початкових умов.

Спосіб 1 (одновимірний лінійний пошук).Будемо запускати схему з різних початкових умов, обчислюючи щораз енергію Е и запам'ятовуючи результат, а потім виберемо екстремальні значення.

Рис. Sys.mdl

Початкові умови будемо формувати в MATLAB за формулами Програму для керування процесом моделювання оформимо у вигляді окремого m_файлу optic.m.

Program optic %Optimal Initial Condition for sys.mdl

open('sys'); % виклик моделі sys.mdl

E=zeros(1,200); R=1; % масив для запису енергій

for і=1:200

x0=R*cosd(і); y0=R*sind(і); % чергові початкові умови

set_param('sys/х','initial',num2str(x0)); % установка початкових умов

set_param('sys/у','initial',num2str(y0));

sim('sys',[0,40],[],[]); % запуск моделювання

E(i)=trapz(tout,yout.^2); % обчислення енергії

disp(i); % висновок поточного i на екран

end

plot(E,'LineWidth',2);grid % графік залежності енергії

title('ENERGY vs. IC angle'), % від кута на одиничній окружності

Результат моделювання для R = 1 показаний на рис.

З графіка видно, що максимальна енергія вихідного сигналу приблизно дорівнює 2,4.Більш точні дані одержуємо, додаючи в програму наступні команди:

[EM,iM=max(E);

x0M=cosd(iM);

y0M=sind(iM);

disp('im,x0m y0m Em='),[im,x0m y0m Em],

[Em,im]=min(E);

x0m=cosd(im);

y0m=sind(im);

disp('iM,x0M y0M EM='),[iM,x0M y0M EM],

Результат їхнього виконання:

iM,x0M y0M EM = 47 0.6820 0.7314 2.4118

im,x0m y0m Em = 136 _0.7193 0.6947 1.2637

Таким чином, максимальна енергія вихідного сигналу, рівна Е = 2,412, досягається при = 47про, тобто при початкових умовах (маятник відхиляємо вправо і штовхаємо від положення рівноваги). Мінімальна енергія вихідного сигналу,рівна Е = 1,264, досягається при  = 136про, тобто при початкових умовах маятник відхиляємо вліво і штовхаємо до положення рівноваги). Відповідні графіки приведені на рис. Б (вгоры).

Змінимо радіус R окружності початкових умов, узявши його близьким до критичного значення, при якому кут у відхилення маятника наближається до . У цьому випадку маятник починає «зависати» у верхнім положенні, що приводить до різкого збільшення енергії вихідного сигналу ( ). На рис. а (внизу) показані графіки енергії Е в залежності від кута _ і максимального і мінімального вихідного сигналу в у залежності від часу (рис., б) для R = 2,29, там же приведені чисельні значення екстремальних параметрів.

Спосіб 2 (пошук екстремума за допомогою функції fmincon- рішення задач на умовний і безумовний екстремум. У даному випадку треба знайти екстремуми функції Е (енергії вихідного сигналу), що залежить від двох аргументів (початкових умов маятника) при наявносты обмеження (сума квадратів початкових умов фіксована):

Для рішення таких задач призначена команда fmincon.Для її застосування потрібно створити дві допоміжні функції, що містять опис критерію, що мінімізується, й обмежень. Оформимо ці функції у вигляді m-файлів з іменами

energy і nlcon:

Запускаємо процес оптимізації, набираючи в робочому вікні команду fmincon:

>> [X,E]=fmincon('energy',[1;1],[],[],[],[],[],[],'nlcon')

По закінченні ітераційного процесу одержуємо повідомлення про його успішне завершення і значення вихідних параметрів (вектор початкових умов і мінімальну енергію для R = 1). Щоб вирішити задачу про максимальну енергію, потрібно змінити знак перед командою trapz в останньому рядку функції energy і повторити обчислення. У результаті одержуємо

R=1 norm(X) E=trapz(tout,yout.^2) R=1 norm(X) E=-trapz(tout,yout.^2)

X =0.7198 1 E =1.2637 X = 0.6844 1 E = -2.4118

-0.6942 0.7291

Знайдені значення близькі до отриманих першим способом, але більш точні. Виконуючи аналогічні обчислення для R = 2.29, також одержуємо уточнені значення оптимальних початкових умов:

R=2.29 norm(X) E=_trapz(tout,yout.^2) R=2.29 norm(X) E=trapz(tout,yout.^2)

X = 1.7201 2.2900 E =-51.8823 X = 1.2100 2.2900 E = 6.5955

1.5118 - _1.9442

Звернемо увагу на два нюанси в оформленні функції energy.Якщо в другому рядку забрати знак коментарю (%), то виклик моделі sys.mdl і перемальовування схеми моделювання буде відбуватися на кожнім кроці ітераційного процесу, що сильно збільшить час

Рі-шення. Простіше відкрити цю модель вручну до початку рішення, тоді команда open('sys') не буде потрібно. Другий нюанс стосується синтаксису команди num2str(x0,15). Її другий аргумент задає кількість розрядів числа x0, преутворених у рядок. Якщо його опустити,то за замовчуванням воно може виявитися рівним 4, що цілком спотворить результати оптимізації.

З подібними тонкостями нерідко приходиться зустрічатися при моделюванні в MATLAB і інших пакетах. Вони вимагають від користувача гарного розуміння сутності розв'язуваної задачі і застосовуваного математичного апарата з одного боку, і знання мови програмування і розуміння процесу комп'ютерної реалізації використовуваного алгоритму – з іншого

ІІ

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]