Поможем написать учебную работу
Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой - мы готовы помочь.
Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой - мы готовы помочь.
Міністерство освіти і науки України
Національний технічний університет України
“Київський політехнічний інститут”
Островерхов М.Я., Бурян С.О.
Обчислювальна техніка та програмування-2
Посібник до кредитного модуля
для студентів напряму підготовки 6.050702 «Електромеханіка»
спеціальності «Електромеханічні системи автоматизації та електропривод»
Рекомендовано Методичною радою НТУУ «КПІ»
Київ
НТУУ «КПІ»
2010
Обчислювальна техніка та програмування-2: Посібник до кредитного модуля для студентів напряму підготовки 6.050702 «Електромеханіка» спеціальності «Електромеханічні системи автоматизації та електропривод» / Уклад.: М.Я. Островерхов, С.О. Бурян К.: НТУУ «КПІ», 2010, 236 с.
Гриф надано Методичною радою НТУУ «КПІ»
(протокол № від р.)
Навчальне видання
Обчислювальна техніка та програмування-2
Посібник до кредитного модуля
для студентів напряму підготовки 6.050702 «Електромеханіка»
спеціальності «Електромеханічні системи автоматизації та електропривод»
Укладачі: Островерхов Микола Якович, канд. техн. наук, доц.
Бурян Сергій Олександрович, ас.
Відповідальний редактор О.І. Кіселичник, канд. техн. наук, доц.
Рецензенти Кострицький В.В., д-р. техн. наук, професор
Павлов В.Б., д-р. техн. наук, головн. наук.спів-ник
Вступ
Кредитний модуль «Обчислювальна техніка та програмування-2» призначений для вивчення студентами методів програмування у віртуальній матричній лабораторії MatLab (MATrix LABoratory). Цей математичний комплекс дає змогу максимально спростити розвязання навчальних та інженерних задач, що постають перед студентами та фахівцями спеціальності «Електромеханічні системи автоматизації та електропривод».
Метою лабораторних робіт є отримання студентом необхідних навиків програмування та моделювання у пакеті MatLab для подальшого застосування при вивченні професійно-орієнтованих дисциплін.
Посібник складається з двох частин. Перша частина призначена для набуття студентами навичок програмування у середовищі MatLab, на основі операцій з масивами, роботи у m-файлах, побудови та оформлення графіків функцій, вирішення диференціальних рівнянь та символьних методів обчислень. Друга частина дозволить студентам вивчити один з найважливіших для спеціальності тулбоксів систему візуального моделювання Simulink, яка дозволяє у режимі реального часу виконувати дослідження процесів у динамічних системах.
Лабораторні роботи виконуються на сучасних персональних компютерах із застосуванням версії MatLab R2009a (7.8).
У посібнику до кожної лабораторної роботи подано грунтовні, теоретичні відомості, зміст та обсяг яких достатній для підготовки, виконання та захисту виконаної роботи. Крім того, посібник містить методичні вказівки з програмою лабораторної роботи, змістом звіту та контрольними запитаннями. Для поглибленого вивчення матеріалу необхідно звернутися до рекомендованої літератури.
Заключний етап лабораторної роботи оформлення звіту, який подається на аркушах паперу формату А4 з урахуванням вимог ЄСКД.
Лабораторна робота № 1
основи роботи з функціями, векторами та матрицями
Тривалість лабораторної роботи 4 год.
Мета роботи ознайомлення з структурою матричної лабораторії MatLab, вивчення базових операцій, позначень та функцій для арифметичних обчислень, а також, для роботи з векторами та матрицями.
Запуск та основні елементи робочого вікна MatLab
Для запуску програмного забезпечення MatLab необхідно натиснути кнопку Пуск→Программы→MATLAB→R2009a→MATLAB R2009a або відповідний ярлик на робочому столі чи на панелі швидкого запуску. Після завантаження програми відкриється робоче вікно, яке показано на рис.1.1.
Рис.1.1. Робоче вікно MatLab
Це вікно має наступні основні елементи:
1 Меню та панель інструментів. Застосовується для створення, зберігання, редагування файлів та інших операцій;
2 Командне вікно (Command Window). Застосовується для запису команд та виконання обчислень;
3 Робоча область (Workspace). Усі дані, що зявляються у MatLab автоматично зберігаються у вигляді масиву у робочій області, де записується імя (Name) та розмір масиву (Value). Навіть якщо користувач створив число, воно також записується у вигляді масиву розміром 1x1;
4 Поточний каталог (Current Directory). Відображає шлях для зберігання та відкриття файлів;
5 Історія команд (Command History). Відображає усі команди, що були введені у командному вікні за деякий час. MatLab автоматично сортує команди за датою їх вводу.
Основні арифметичні операції та принципи їх застосування
Після запуску програми курсор знаходиться у командному вікні. Після символу >> можна вводити різноманітні команди з бази даних MatLab, зокрема:
>>2*3
та натиснути клавішу Enter, то результат зявиться у тому ж вікні у вигляді
ans =
6
Число 6 одночасно зявиться також у робочій області та буде називатися ans. Наступна будь-яка операція замінить масив ans результатом її виконання. Щоб зберігати усі масиви у робочій області, потрібно кожній операції присвоїти імя змінної, наприклад
>>g=3*4
Тоді на екрані зявиться відповідь у наступній формі
g =
12
а у робочій області зявиться новий масив g, що має значення 12.
Поелементне множення застосовується для множення векторів та масивів, що буде розглянуто пізніше;
Необхідно підкреслити, що у випадку коли після будь-якої команди поставить знак крапки з комою «;», то результат виконання цієї команди не відобразиться у командному вікні. Це не означає, що отриманий результат не можна використовувати у наступних розрахунках, бо він автоматично записується у робочу область, наприклад
>> p=9*2-sqrt(56)+exp(2)-(3^2)/45;
Результат не зявився на екрані, але змінна p зберігається у робочій області. Тепер її можна використовувати у розрахунках, наприклад
>>p*10-7
ans =
170.0574
MatLab також дозволяє коментувати елементи програм. Для створення коментарю необхідно після закінчення команди написати символ процентів «%» і вставити будь-який текст, наприклад
>> x=15; %Завдання змінної х
>> b=x^2; %Визначення квадрату х
Способи завдання векторів
Як відомо, вектори можуть бути рядками або стовпцями. MatLab дозволяє задати обидва типи векторів. Наприклад потрібно створити вектор . Для цього у командному вікні набирається
>> a=[1 2 3]
та у результаті отримується
a =
1 2 3
Для створення вектора-стовпця потрібно розділити елементи вектора знаком «;», наприклад
>> b=[1; 2; 3]
У результаті
b =
1
2
3
Основні операції з векторами
Для роботи з векторами застосовуються наступні операції:
>> a=[1 2 3];
>> b=[3 4 5];
>> c=a+b
c =
4 6 8
>> a=[1 2 3];
>> b=[3 4 5];
>> c=a.*b
c =
3 8 15
>> a=[1 2 3];
>> d=a.^2
d =
1 4 9
>>a=[4 6 10];
>> b=[2 3 5];
>> a./b
ans =
2 2 2
>> a=[1 2 3];
>> b=[1 4 6];
>> a.\b
ans =
1 2 2
Слід мати на увазі, що при застосуванні операцій поелементного множення та ділення вектори повинні бути одного типу та одного розміру.
>>a=[1 2 3];
>> prod(a)
ans =
6
>> a=[1 2 10];
>> sum(a)
ans =
13
>> a=[56 2 3 6 23 7 9 100 78];
>> min(a)
ans =
2
Можна також знаходити не тільки сам елемент, а його порядковий номер. Це робиться наступним чином
>> a=[12 34 6 78 96 3 45 9 87 23];
>> [m,r]=min(a)
m =
3
r =
6
Тобто у створеному масиві мінімальний елемент 3, а його порядковий номер 6.
>> a=[56 2 3 6 23 7 9 100 78];
>> b=sort(a)
b =
2 3 6 7 9 23 56 78 100
Для сортування елементів вектора у зворотному порядку (на зменшення) потрібно записати команду наступним чином
>> a=[56 2 3 6 23 7 9 100 78];
>> b=-sort(-a)
b =
100 78 56 23 9 7 6 3 2
>> a=[1 2 -3 4 -7];
>> abs(a)
ans =
1 2 3 4 7
>> a=[1 2 3 5];
>> d=a.'
d =
1
2
3
5
>> a=[1 2 3 4 7];
>> size (a)
ans =
>> a=[1 2 3];
>> b=[4 5 6];
>> s=cross(a,b)
s =
-3 6 -3
Для того, щоб визначити скалярний добуток векторів, необхідно застосувати наступні команди
>> a=[1 2 3];
>> b=[4 5 6];
>> c=sum(a.*b)
c =
32
Це аналогічно запису .
Звернення до елементів векторів та операції з ними
Для звернення до будь-якого елемента вектора необхідно у круглих дужках вказати його номер, наприклад для вектора необхідно значення його четвертого елемента змінити на число 8. Це робиться наступним чином
>> a=[1 2 3 5 7];
>> a(4)=8
a =
1 2 3 8 7
З цими елементами можна виконувати будь-які математичні операції і навіть формувати з них нові вектори. Наприклад, заданий вектор . Потрібно додати його перший і другий елементи, перемножити третій і четвертий, відняти від останнього пятий та створити новий вектор з трьох непарних елементів. Це робиться наступним чином
>> a=[1 2 3 5 7 9];
>> b=a(1)+a(2);
>> c=a(3)*a(4);
>> d=a(6)-a(5);
>> e=[a(1) a(3) a(5)]
e =
1 3 7
Способи завдання матриць
Існує три способи завдання матриць у MatLab. Нехай дана матриця
.
Необхідно створити її у робочій області.
1 - й спосіб.
>> A=[3 1 -1; 2 4 3]
A =
3 1 -1
2 4 3
2 - й спосіб.
>> A=[3 1 -1
2 4 3]
A =
3 1 -1
2 4 3
3 - й спосіб.
>> A=[[3;2] [1;4] [-1;3]]
A =
3 1 -1
2 4 3
Основні операції з матрицями
Всі операції з векторами також застосовуються для перетворення матриць. Наприклад, потрібно перемножити дві матриці
та
>> A=[3 1 -1; 2 4 3];
>> B=[2 4; 6 5; -1 2];
>> C=A*B
C =
13 15
25 34
Звернення до елементів матриці та операції з ними
Щоб звернутися до будь-якого елемента матриці необхідно у круглих дужках задати спочатку номер рядка і через кому номер стовпця, наприклад
>> A=[3 1 -1; 2 4 3];
>> A(1,3)=5
A =
3 1 5
2 4 3
Аналогічно як і з елементами векторів, з елементами матриць можна виконувати будь-які математичні операції та створювати з них нові матриці або вектори, наприклад
>> A=[3 1 -1; 2 4 3];
>> B=A(1,1)+A(1,2)+A(1,3)
B =
3
Вирішення систем лінійних алгебричних рівнянь матричним методом
Як відомо, за допомогою матриць можна вирішувати системи лінійних алгебричних рівнянь. MatLab робить це за допомогою команди «\». Наприклад, задана система рівнянь вигляду
Створюються необхідні матриці та застосовується команда «\»
>> A=[1.2 0.3 -0.2; 0.5 2.1 1.3; -0.9 0.7 5.6];
>> B=[1.3; 3.9; 5.4];
>> X=A\B
X =
1.0000
1.0000
1.0000
Матриці «спеціального» вигляду
Існує декілька матриць «спеціального» вигляду для полегшення вводу інформації.
>> A=zeros(3)
A =
0 0 0
0 0 0
0 0 0
>> B=zeros(2,3)
B =
0 0 0
0 0 0
2. «eye» одинична матриця (квадратна матриця з одиницями по головній діагоналі), наприклад
>> A=eye(4)
A =
1 0 0 0
0 1 0 0
0 0 1 0
0 0 0 1
3. «ones» матриця, що складається з усіх одиниць. Створюється так само, як і матриця із нулями, наприклад
>> A=ones(4)
A =
1 1 1 1
1 1 1 1
1 1 1 1
1 1 1 1
>> B=ones(2,3)
B =
1 1 1
1 1 1
4. «rand» матриця, що заповнюється випадковими десятковими числами, наприклад
>> A=rand(4)
A =
0.8147 0.6324 0.9575 0.9572
0.9058 0.0975 0.9649 0.4854
0.1270 0.2785 0.1576 0.8003
0.9134 0.5469 0.9706 0.1419
>> B=rand(2,3)
B =
0.4218 0.7922 0.6557
0.9157 0.9595 0.0357
5. «diag» матриця із заданими елементами по діагоналі та іншими нульовими елементами. Для створення цієї матриці необхідно попередньо задати вектор-діагональ, наприклад
>> d=[1 2 3 4];
>> A=diag(d)
A =
1 0 0 0
0 2 0 0
0 0 3 0
0 0 0 4
У якості діагоналей також можна використовувати матрицю «ones» та множити її на будь-яке число, наприклад
>> A=5*diag(ones(1,4))
A =
5 0 0 0
0 5 0 0
0 0 5 0
0 0 0 5
Також можна рухати діагоналі паралельно головній, заповнюючи її елементами. Для цього у команді «diag» потрібно ставить кому і написати на скільки діагоналей угору або униз буде відбуватися зміщення (для зміщення униз потрібно перед числом ставити мінус). Треба також памятати, що зі зміщенням униз або угору діагоналі змінюють свою розмірність. За допомогою команди «diag» можна також додавати або віднімати діагоналі від існуючих матриць, наприклад
>> A=-2*eye(4)+4*diag(ones(1,3),1)
A =
-2 4 0 0
0 -2 4 0
0 0 -2 4
0 0 0 -2
Для більш детального приклада, розглядається наступна матриця
.
Спочатку потрібно створити діагональну матрицю, помножену на 2, потім зсунути одну діагональ угору, створену з одиниць і помножену на 3, та дві униз (одну з одиниць, помножену на -1, іншу на 4). Це виконується за допомогою наступної послідовності команд
>>A=2*eye(5)
A =
2 0 0 0 0
0 2 0 0 0
0 0 2 0 0
0 0 0 2 0
0 0 0 0 2
>>A=2*eye(5)+3*diag(ones(1,4),1)
A =
2 3 0 0 0
0 2 3 0 0
0 0 2 3 0
0 0 0 2 3
0 0 0 0 2
>>A=2*eye(5)+3*diag(ones(1,4),1)-1*diag(ones(1,4),-1)
A =
2 3 0 0 0
-1 2 3 0 0
0 -1 2 3 0
0 0 -1 2 3
0 0 0 -1 2
>>A=2*eye(5)+3*diag(ones(1,4),1)-1*diag(ones(1,4),-)+4*diag(ones(1,3),-2)
A =
2 3 0 0 0
-1 2 3 0 0
4 -1 2 3 0
0 4 -1 2 3
0 0 4 -1 2
6. «tril» та «triu» команди створення трикутників під та над головною діагоналлю відповідно. Синтаксис запису такий як і в команді «diag». Трикутники можна також рухати униз та угору і множити на числа, наприклад
>> A=triu(ones(4,4),1)
A =
0 1 1 1
0 0 1 1
0 0 0 1
0 0 0 0
>> B=tril(ones(4,4),-1)
B =
0 0 0 0
1 0 0 0
1 1 0 0
1 1 1 0
Особливості створення блочних матриць
Вектори та матриці можна використовувати як компоненти для більш великих матриць. Нехай потрібно заповнити наступну матрицю
,
де , , .
Створюється матриця, два вектори та число, потім вони групуються в одну матрицю:
>> S=[2 0; 0 3];
>> b=[-9 9];
>> a=[4;5];
>> E=[S a;b 7]
E =
2 0 4
0 3 5
-9 9 7
Таблиця 1.1.
№ бр. |
Задані вектори |
№ бр. |
Задані вектори |
1 |
5 |
||
2 |
6 |
||
3 |
7 |
||
4 |
8 |
Таблиця 1.2.
№ бригади |
Вигляд системи рівнянь |
№ бригади |
Вигляд системи рівнянь |
1 |
5 |
||
2 |
6 |
||
3 |
7 |
||
4 |
8 |
Таблиця 1.3.
№ бригади |
Вигляд матриць |
1 |
|
2 |
|
3 |
|
4 |
|
5 |
|
6 |
|
7 |
|
8 |
|
Звіт з лабораторної роботи має містити наступні матеріали:
1.4. Контрольні запитання
Лабораторна робота № 2
побудова та правила оформлення графіків функцій
Тривалість лабораторної роботи 2 год.
Мета роботи навчитися будувати двовимірні та тривимірні графіки заданих функцій, оформлювати підписи графіків та осей, виводити графіки у різні графічні вікна.
Правила побудови двовимірних графіків
Для побудови будь-яких графічних функцій використовується команда «plot», в якій у дужках записується спочатку масив аргументу, а потім через кому масив значень функції. Нехай задана математична функція . Необхідно побудувати її графік при зміні аргументу від -10 до 10. Для знаходження значень функції необхідно ввести масив значень аргументу . Це робиться наступним чином. Задається початкове значення, потім через двокрапку крок зміни аргументу і знову через двокрапку кінцеве значення, наприклад
>> x=-10:0.01:10;
У робочій області одразу зявиться масив розміром 1х2001. Тепер необхідно обрахувати значення функції , для чого у командному вікні записується
>> y=2*x.^2+3;
Тут використане поелементне піднесення до степеня, тому що є масивом. У протилежному випадку MatLab видає помилку
>> y=2*x^2+3;
??? Error using ==> mpower
Matrix must be square.
Після правильного обрахування функції у робочій області зявиться масив розміром 1х2001. Впевнившись, що масиви однакові, можна застосувати команду «plot»
>> plot(x,y)
Після обробки цієї команди відкривається вікно з графіком, яке зображено на рис. 2.1.
Рис. 2.1. Вікно з графіком функції
Для збереження цього графіка необхідно натиснути меню File→Save As та вибрати потрібний формат збереження та каталог. Цей графік можна також імпортувати як картинку у Microsoft Word натиснувши меню Edit→Copy Figure, далі відкрити Word та натиснути Правка→Вставить. Інші деталі цього графічного вікна будуть розглянуті пізніше.
Правила побудови тривимірних графіків
Для побудови тривимірних графіків використовується команда «plot3». Вона записується аналогічно «plot», однак містить вже три змінні.
Нехай для проміжку зміни з першого приклада потрібно знайти значення синуса та косинуса і побудувати тривимірну залежність між ними. Записується масив та знаходяться значення відповідних функцій
>> x=-10:0.01:10;
>> y=cos(x);
>> z=sin(x);
Далі використовується команда «plot3» у якій вказуються усі три змінні. Порядок розташування змінних визначається в залежності від поставленої задачі
>> plot3(x,y,z)
Після обробки команди зявиться вікно, показане на рис. 2.2.
Рис. 2.2. Приклад тривимірного графіка
Правила побудови двох графіків з різними масштабами
MatLab дозволяє суміщати в одному графічному вікні два графіка з різними масштабами функцій. При чому масштаб першого графіка буде показаний зліва, а іншого справа. Але треба звернути увагу, що вони повинні мати один і той же масив аргументу.
Нехай для проміжку зміни аргументу від -5 до 5 необхідно сумістити дві функції та . Видно, що масштаб другої функції буде набагато більший, ніж першої. Для таких випадків застосовується команда «plotyy», у дужках якої записується спочатку аргумент, потім через кому масив першої функції, потім через кому знову той самий аргумент, і знову через кому масив другої функції
>> x=-5:0.01:5;
>> y1=x.^2-12*x;
>> y2=100*x.^2-2*x-3;
Далі записується команда «plotyy» і зявиться вікно з графіком, що зображене на рис. 2.3.
>> plotyy(x,y1,x,y2)
Рис. 2.3. Приклад суміщення двох графіків з різними масштабами
Оформлення підпису графіків та осей
MatLab має наступні спеціальні команди для підпису графіків та осей.
>> x=-10:0.01:10;
>> y=2*x.^2+3;
>> plot(x,y)
>> xlabel('агрумент х', 'FontName', 'Arial', 'FontSize', 12)
В результаті отримається графік з підписом, який показано на рис. 2.4.
Рис. 2.4. Приклад оформлення підпису осі
>> x=-10:0.01:10;
>> y=2*x.^2+3;
>> plot(x,y)
>> xlabel('агрумент х','FontName','Arial','FontSize', 12)
>> ylabel('функція y','FontName','Arial','FontSize', 12)
>>title('графік квадратичної функції','FontName','Times New Roman','FontSize',16)
>> grid
Результат виконання програми показаний на рис. 2.5.
Рис. 2.5. Приклад оформлення підписів графіка
Властивості лінії графіків
У команді для побудови графіків «plot» можна також задавати колір лінії, її товщину та тип, а також тип маркера, яким буде зображений графік. Алгоритм запису наступний «plot(x,y,'a b c','LineWidth',d)», де x та y аргумент та функція відповідно, a задає колір лінії, b тип маркера, c тип лінії, d розмір лінії (за згодою цей параметр дорівнює 1). Можливі значення a, b, та c представлені у таблиці 2.1.
Таблиця 2.1.
a (колір лінії) |
b (тип маркера) |
c (тип лінії) |
y жовтий |
. крапка |
- суцільна |
m рожевий |
o кружок |
: пунктирна |
c блакитний |
x хрестик |
-. штрих-пунктирна |
r червоний |
+ плюс |
-- штрихова |
g зелений |
* зірка |
|
b синій |
s квадрат |
|
w білий |
d ромб |
|
k чорний |
v трикутник вершиною вниз |
|
^ трикутник вершиною угору |
||
< трикутник вершиною вліво |
||
> трикутник вершиною вправо |
||
p пятикутна зірка |
||
h шестикутна зірка |
Приклад оформлення лінії для попереднього графіка
>> x=-10:1:10;
>> y=2*x.^2+3;
>> plot(x,y,'r+-.', 'LineWidth', 2)
>> grid
>> title('графік квадратичної функції','FontName','Times New Roman','FontSize',16)
>> ylabel('функція y','FontName','Arial','FontSize',12)
>> xlabel('агрумент х','FontName','Arial','FontSize',12)
Для прикладу крок зміни аргументу взятий рівним одиниці, для того, щоб побачити тип маркера графіка. Як видно з програми, графік будується червоним кольором з типом маркера плюс та типом лінії штрих-пунктир. Розмір лінії для прикладу взятий 2. Результат виконання програми показаний на рис. 2.6.
Рис. 2.6. Приклад оформлення лінії графіка
Вивід декількох графіків в одне графічне вікно
MatLab дозволяє виводити необмежену кількість графіків в одне графічне вікно. Для відкриття графічного вікна застосовується команда «figure». Після написання цієї команди використовуються усі розглянуті команди виводу графіків. Потрібно мати на увазі, що наступна команда виводу графіка замінить існуючий графік на новий. Щоб вивести новий графік, залишивши відкритим старий потрібно просто ще раз написати команду «figure» для відкриття нового графічного вікна.
Для виводу в одне графічне вікно декількох графіків використовується команда «hold». Вона затримує поточний графік у графічному вікні. Усі наступні команди виводу графіків будуть поміщати їх у те ж графічне вікно. MatLab автоматично промасштабує вікно відповідно до найбільшого масштабу серед усіх графіків. Якщо написати команду «hold» ще раз, то наступний графік буде виводитися у нове графічне вікно (якщо до нього написана команда «figure») або замінить усі попередні графіки у тому ж вікні (якщо не написана команда «figure»). Приклад виводу декількох графіків в одне вікно на
>> x=-2:0.1:2; %обчислення аргументу
>> y1=x; %обчислення першої функції
>> y2=x.^2; %обчислення другої функції
>> y3=x.^3; %обчислення третьої функції
>> y=abs(x); %обчислення четвертої функції
>> figure; %відкриття графічного вікна
>> plot(x,y1,'yo-','LineWidth', 1); %побудова графіка першої функції
>> hold %затримка вікна
Current plot held
>> plot(x,y2,'m+-','LineWidth', 1); %побудова інших графіків
>> plot(x,y3,'rs-','LineWidth', 1);
>> plot(x,y,'bh-','LineWidth', 1);
>> grid %активація сітки
Результат виконання програми показаний на рис.2.7.
Рис. 2.7. Приклад виводу декількох графіків в одне вікно
Розбиття графічного вікна на підвікна
Кожне графічне вікно може бути розбите на декілька підвікон, у які можна виводити графіки. Для цього використовується команда «subplot», яка створює необхідну кількість графічних підвікон та керує їх послідовністю. Алгоритм запису команди наступний. У дужках записується спочатку кількість вікон по вертикалі, потім через кому кількість вікон по горизонталі і знову через кому номер вікна, у яке буде виводитися наступний графік. Тобто команда
>> subplot(2,3,1) %відкриття першого підвікна з шести
відкриє вікно з трьома підвікнами по горизонталі і двома по вертикалі (у сумі 6 підвікон). Таким чином вікно перетворюється на «матрицю», де замість елементів будуть розташовані графічні підвікна. Приклад побудови графіків у графічних підвікнах
>> figure; %відкриття загального графічного вікна
>> subplot(2,3,1); %відкриття першого підвікна
>> x=-10:0.01:10; %завдання аргументу
>> y=2*x.^2-4*x-3; %обчислення першої функції
>> plot(x,y); %побудова першої функції у першому підвікні
>> grid; %активація сітки
>> subplot(2,3,2); %відкриття другого підвікна
>> y=-5*x.^2+8*x-3; %обчислення другої функції
>> plot(x,y); %побудова другої функції у другому підвікні
>> grid; %активація сітки
>> subplot(2,3,3); % відкриття третього підвікна
>> y=x.^2+3*x-1; % обчислення третьої функції
>> plot(x,y); %побудова третьої функції у третьому підвікні
>> grid; %активація сітки
>> subplot(2,3,4); % відкриття четвертого підвікна
>> y=3*x+10; % обчислення четвертої функції
>> plot(x,y); %побудова четвертої функції у четвертому підвікні
>> grid; %активація сітки
>> subplot(2,3,5); % відкриття пятого підвікна
>> y=sin(x); % обчислення пятої функції
>> plot(x,y); %побудова пятої функції у пятому підвікні
>> grid; %активація сітки
>> subplot(2,3,6); % відкриття шостого підвікна
>> y=cos(x); % обчислення шостої функції
>> plot(x,y); %побудова шостої функції у шостому підвікні
>> grid; %активація сітки
Результат виконання програми показаний на рис. 2.8.
Рис. 2.8. Приклад побудови графіків у графічних підвікнах
У кожному з графічних підвікон можна робити підписи осей, графіків, змінювати типи ліній і т.п. Якщо виникла помилка і необхідно перебудувати який-небудь графік, то потрібно знову звернутися до конкретного підвікна командою «subplot» і далі провести необхідні зміни.
Створення легенди графіків
Легенда графіків це спеціальне вікно, у якому позначаються усі присутні у графічному вікні графіки, їх колір, тип та назва. Це дуже зручно використовувати, коли графічне вікно насичене різноманітними побудованими функціями.
Для створення легенди використовується команда «legend». Правила запису цієї команди наступне «legend('a','b',…,c)», де a, b, …. назви графіків (їх кількість залежить від кількості графіків у графічному вікні), c приймає значення 0, 1, 2, 3 або 4 (1-4 математичні чверті вікна, в яких потрібно розмістити легенду, 0 MatLab автоматично визначить менш завантажену графіками чверть і розмістить там легенду).
Приклад створення легенди
>> x=-pi:0.1:pi; %завдання аргументу
>> y=sin(x); %обчислення першої функції
>> z=cos(x); %обчислення другої функції
>> plot(x,y, 'gx-'); %побудова графіка першої функції
>> hold; %затримка вікна
Current plot held
>> plot(x,z, 'ro-'); %побудова графіка другої функції
>>legend('sin(x)','cos(x)',2) %активація легенди у другій чверті
>> grid; %активація сітки
Результат виконання програми показаний на рис. 2.9.
Рис. 2.9. Приклад створення легенди графіків
Ручне масштабування осей графіків
Іноді Matlab досить невдало автоматично масштабує графіки або треба вивести тільки частину якогось графіка. У цих випадках потрібно робити зміни вручну. Для цього використовується команда «axis». У дужках записується масив мінімальних та максимальних значень по обох осях за наступним алгоритмом , наприклад
>> figure; %відкриття графічного вікна
>> subplot(2,1,1) %створення першого підвікна
>> x=0:0.01:15; %обчислення аргументу
>> y=sin(x)+cos(x); %обчислення функції
>> plot(x,y) %побудова графіка функції у першому підвікні
>> title('графік функції y=cos(x)','FontSize',12); %підпис графіка
>> grid; %активація сітки
>> subplot(2,1,2) %створення другого підвікна
>> plot(x,y) %побудова тієї ж самої функції у другому підвікні
>> grid %активація сітки
>> title('промасштабований графік функції y=cos(x)', 'FontSize',12); %підпис графіка
>> axis([1 10 -10 10]) %масштабування у другому підвікні
У результаті виконання програми зявиться вікно з двома однаковими графіками, як показано на рис. 2.10. Другий графік промасштабований вручну по обом осям.
Рис. 2.10. Приклад масштабування графіків
Побудова графіків кусково-заданих функцій
Нехай задані три проміжку часу для трьох різних функцій. Необхідно побудувати їх на одному графіку. В MatLab це робиться наступним чином. Задаються масиви з проміжків часу (вони повинні мати однакові назви) та розраховуються функції для цих масивів. Далі створюються новий масив проміжку часу, компонентами якого є створені масиви. Так само і для функцій. За цими масивами будується графік, як розглянуто детальніше на прикладі
>> t1=0:0.01:2; %завдання масивів аргументів
>> t2=2:0.01:4;
>> t3=4:0.01:6;
>> y1=sin(t1); %розрахунок значень функцій
>> y2=cos(t2);
>> y3=sin(t3);
>> t=[t1 t2 t3]; %створення масиву аргументів
>> y=[y1 y2 y3]; %створення масиву значень функцій
>> plot(t,y,'LineWidth',2); %побудова графіка з товщиною лінії 2
>> grid; %активація сітки
Результат виконання програми показаний на рис. 2.11.
Рис. 2.11. Приклад створення графіків кусково-заданих функцій
а) у чотирьох різних графічних вікнах;
б) в одному графічному вікні;
в) в одному графічному вікні, розбитому на 4 підвікна.
У кожному випадку зробити підписи осей, графіків, зробити кожен графік різним кольором, різним типом лінії та з різними маркерами. Проміжок для аргументу і крок підібрати так, щоб можна було б побачити тип маркера. Вивести легенду графіків у зручному місці.
Таблиця 2.2.
№ бригади |
Функція 1 |
Функція 2 |
Функція 3 |
Функція 4 |
1 |
||||
2 |
||||
3 |
||||
4 |
||||
5 |
||||
6 |
||||
7 |
||||
8 |
Таблиця 2.3.
№ бригади |
функція 1 |
інтервал 1 |
функція 2 |
інтервал 2 |
функція 3 |
інтервал 3 |
1 |
0…3 |
3…5 |
5...10 |
|||
2 |
-1...4 |
4…7 |
7...11 |
|||
3 |
-2...0 |
0…4 |
4…8 |
|||
4 |
-5...-1 |
-1…3 |
3…9 |
|||
5 |
0…4 |
4…8 |
8...12 |
|||
6 |
2…5 |
5…8 |
8...10 |
|||
7 |
0…2 |
2…7 |
7...10 |
|||
8 |
-4…4 |
4…8 |
8...11 |
Таблиця 2.4.
№ бригади |
Колір лінії |
Тип маркера |
Тип лінії |
Положення легенди (чверті) |
Тип шрифту та розмір тексту |
1 |
жовтий |
крапка |
пунктир |
1 |
Arial, 11 |
2 |
голубий |
кружок |
штрихова |
2 |
Times New Roman, 12 |
3 |
рожевий |
хрестик |
штрих-пунктир |
3 |
Verdana, 13 |
4 |
червоний |
плюс |
пунктир |
4 |
Arial, 12 |
5 |
зелений |
зірка |
штрихова |
1 |
Times New Roman, 11 |
6 |
синій |
квадрат |
штрих-пунктир |
2 |
Verdana, 13 |
7 |
жовтий |
ромб |
пунктир |
3 |
Arial, 12 |
8 |
червоний |
кружок |
штрихова |
4 |
Times New Roman, 11 |
Звіт з лабораторної роботи має містити наступні матеріали:
2.4. Контрольні запитання
Лабораторна робота № 3
обробка та редагування графіків за домомогою функцій графічних вікон
Тривалість лабораторної роботи 2 год.
Мета роботи вивчення структури графічних вікон, основних функцій та режимів редагування, обробка експериментальних даних, побудова по ним графіків та їх апроксимація, редагування тексту за допомогою функцій TeX.
Структура графічного вікна та його основні параметри
Для редагування графіків, підпису осей, та ін. можна використовувати не тільки команди MatLab, а ще й функції графічного вікна. Типове графічне вікно з побудованим для прикладу графіком зображене на рис. 3.1.
Рис. 3.1. Типове графічне вікно
Вікно має меню, панель інструментів та поле для побудови графіка. Найважливіші пункти меню графічного вікна наступні:
Перш ніж перейти до наступного пункту доцільно розглянути приклад редагування графіка на рис. 3.1. Потрібно підписати осі, графік, вставити стрілку с текстом «Функція » та легенду. Застосувавши пункти 4.1, 4.2, 4.3 та 4.7 отримується графік, показаний на рис. 3.2.
Рис. 3.2. Приклад підпису осей та графіка
У цих теоретичних відомостях не були повністю розписані всі пункти меню, а тільки найважливіші для курсу та спеціальності. Для більш детального вивчення рекомендується звернутися до додаткової літератури.
Режим редагування вмісту графічного вікна
Для того, щоб перейти у цей режим необхідно зайти у пункти меню 2.8, 2.9, 3.6 або 5.1. Після цього під графіком відкриється вкладка «Property editor», а на координатній сітці, графіку або вікні (в залежності який підпункт активований) зявляються невеликі чорні квадратики.
«Property editor» має три підпункти: Figure (редагування вікна), Axes (редагування осей) та Lineseries (редагування графіків). Щоб активувати один з цих пунктів достатньо натиснути курсором на сірий фон вікна, координатну вісь або на лінію графіка відповідно. Розглядається детально вміст кожного з цих підпунктів:
1. «Property editor Figure» дозволяє змінити колір фону (Figure Color), змінити мапу кольорів (Colormap) та задати імя графічного вікна (Figure name). Для відкриття більш детальних опцій потрібно натиснути кнопку More Properties. Вигляд вкладки показаний на рис. 3.3.
Рис. 3.3. Вкладка «Property editor Figure»
2. «Property editor Axes» дозволяє редагувати координатну сітку, а саме: створити назву графіка (вікно Title), створити сітку по всім осям (Grid) та змінити її колір та колір заливки (Colors). Вкладка також має 4 внутрішні вкладки. Три з них (X Axis, Y axis та Z axis) дозволяють вставити мітки осей (X label, Y label, Z label) змінити межі осей (X limits, Y limits, Z limits) та їх поділки (кнопка Ticks), змінити лінійну шкалу на логарифмічну (Scale) та реверсувати координатну вісь (Reverse). Четверта вкладка Font задає імя шрифту підпису осей (Font Name), розмір шрифту (Font Size) та зробити його жирним або курсивом (Weight та Angle). Для більш детальних опцій редагування осей слід натиснути кнопку More Properties. Вигляд вкладки показаний на рис. 3.4.
Рис. 3.4. Вкладка «Property editor Axes»
3. «Property editor Lineseries» дозволяє редагувати сам графік, а саме: вибрати джерело функції та аргументів з робочої області (Data Source), вибрати тип відображуємого графіка (Plot Type), тип лінії, її товщину та колір (Line), тип маркера, його розмір, колір та заливку (Marker). Для відображення більш детальних опцій слід натиснути кнопку More Properties. Вигляд вкладки показаний на рис. 3.5.
Рис. 3.5. Вкладка «Property editor Lineseries»
Способи апроксимації графіків
Експериментально зняті дані іноді не зовсім точно відтворюють справжні форми деяких функцій або залежностей. Це повязане з неточністю приладів або запізнілою реакцією людини. У таких випадках для приведення графіка до адекватного вигляду застосовується апроксимація. Розглядаеться приклад побудови графіка за знятими експериментальними даними і апроксимація його за допомогою MatLab.
Нехай були зняті наступні масиви даних, що знаходяться у таблиці 3.1.
Таблиця 3.1.
Масиви даних |
|||||||||
Швидкість повітряного потоку, м/с |
10 |
13 |
15.9 |
18.5 |
21.5 |
24.4 |
27.1 |
29.5 |
31.5 |
Потужність, Вт |
25 |
62.5 |
125 |
175 |
250 |
375 |
500 |
625 |
800 |
Для побудови такої залежності спочатку необхідно створити масиви цих даних у MatLab і за допомогою команди «plot» вивести графік
>> V=[10 13 15.9 18.5 21.5 24.4 27.1 29.5 31.5];
>> P=[25 62.5 125 175 250 375 500 625 800];
>> plot(V,P);
Після виконання програми на екрані зявиться графік, що зображений на рис. 3.6.
Рис. 3.6. Графік, побудований по експериментальним даним
Далі потрібно зайти у меню Tools→Basic Fitting. Відкриється нове вікно, що зображено на рис. 3.7.
Рис. 3.7. Вікно Basic Fitting
Для початку апроксимації потрібно здійснити вибір даних. У даному випадку тільки один графік, тому у розділі Select Data вибирається Data 1. Далі потрібно вибрати один з наступних методів апроксимації:
Вибирається відповідно до форми нашого графіка форма Quadratic, і ставиться прапорець Show Equations, який перетворить апроксимовану залежність у рівняння з коефіцієнтами, яке відобразиться у правій частині вікна. Якщо правої частини вікна немає, то потрібно натиснути чорну стрілку знизу вікна. Також можна вибрати кількість цифр у коефіцієнтах (від 2 до 5).
Для порівняння апроксимованої залежності і реального графіка можна вивести їх різницю, поставивши прапорець Plot Residuals, в якому вибрати тип лінії (Bar, Scatter або Line) та спосіб відображення (Subplot вікно розібється на 2 піввікна або Separate Figure відкриється друге графічне вікно). Також можна поставити прапорець на Show norm of residuals (показати норму різностей). Кнопка Save To Workspace дозволяє зберегти дані до робочої області. Вікно Basic Fitting з обрахованими коефіцієнтами показане на рис. 3.8.
Рис. 3.8. Вікно Basic Fitting з апроксимованою кривою
Застосувавши розглянуті у розділі «Редагування графічного вікна» способи оформлення графіків підписуються осі, титул графіків, відображується сітка та ін. В результаті отримаємо графік, показаний на рис. 3.9.
Рис. 3.9. Приклад апроксимації графіка, побудованого за експериментальними даними
Редагування тексту за допомогою функцій TeX
Допоміжні команди функції TeX дозволяють змінювати шрифт, створювати верхні та нижні індекси, спеціальні символи та грецькі літери. Для активації цих функцій необхідно перед написанням тексту поставити один з ключів, приведених у таблиці 3.2. Можна застосовувати як один, так і кілька поспіль ключів.
Таблиця 3.2.
Редагування тексту |
|||
Значення |
Команда |
||
Виділення курсивом |
\it текст |
||
Виділення жирним |
\bf текст |
||
Жирний курсив |
\bf\it текст |
||
Імя та розмір шрифту |
\fontname {імя шрифту}\fontsize {розмір} текст |
||
Верхній індекс |
текст^{індекс} |
||
Нижній індекс |
текст_{індекс} |
||
Грецькі символи |
|||
Значення |
Команда |
Значення |
Команда |
Альфа () |
\alpha |
Ро () |
\rho |
Бета () |
\beta |
Сігма () |
\sigma |
Гама () |
\gamma |
Тау () |
\tau |
Дельта () |
\delta |
Фи () |
\phi |
Епсілон () |
\epsilon |
Чи () |
\chi |
Ета () |
\eta |
Пси () |
\psi |
Тета () |
\theta |
Омега () |
\omega |
Капа () |
\kappa |
Велика Гама () |
\Gamma |
Лямбда () |
\lambda |
Велика Дельта () |
\Delta |
Мю () |
\mu |
Велика Тета () |
\Theta |
Ню () |
\nu |
Велика Лямбда () |
\Lambda |
Ксі () |
\xi |
Велика Фі () |
\Phi |
Спеціальні символи |
|||
Значення |
Команда |
||
Менше-рівно () |
\leq |
||
Більше-рівно () |
\geq |
||
Двостороння стрілка (↔) |
\leftrightarrow |
||
Стрілка вліво (←) |
\leftarrow |
||
Стрілка вправо (→) |
\rightarrow |
||
Плюс-мінус () |
\pm |
||
Нескінченність () |
\propto |
||
Часткова похідна () |
\partial |
||
Стрілка униз (↓) |
\downarrow |
||
Стрілка угору (↑) |
\uparrow |
Розглядається приклад застосування функцій TeX. Нехай є знятий графік перехідного процесу кутової швидкості та моменту двигуна та , показаний на рис. 3.10. Потрібно підписати осі 14-м шрифтом Times New Roman, а сам графік жирним курсивом та 16-м шрифтом. Літеру зробити грецькою за допомогою функції TeX. На графік нанести сітку та стрілками показати швидкість і момент (напис зробити 12-м шрифтом). Лінії зробити товщиною 2 і різними кольорами.
Рис. 3.10. Задані графіки перехідних процесів
Відкривається «Property editor Axes». У пункті «Title» пишеться
«\bf\it\fontname{TimesNewRoman}\fontsize{16}Графік перехідного процесу швидкості та моменту».
Ставиться прапорець «Grid» на осях X та Y. Далі у полі «Xlabel» пишеться
«\fontname{TimesNewRoman}\fontsize{14} Час перехідного процесу t, с».
У полі «Ylabel» пишеться
«\fontname{TimesNewRoman}\fontsize{14}Швидкість \omega, рад/с
Момент М, Н*м».
Далі два рази натискається на графік швидкості і вибирається вкладка «Property editor Lineseries». Виставляється там товщина лінії 2. Так само для графіка моменту. Також цей графік робиться іншим кольором, наприклад червоним. За допомогою меню Insert→Text Arrow вставляються стрілки з відповідним текстом для швидкості (\fontsize{12}Швидкість \omega) та моменту (\fontsize{12}Момент М). Закривається вкладка і отримується оформлений графік, показаний на рис. 3.11.
Рис. 3.11. Приклад оформлення графіків
Оформлення графіків проводити відповідно до номеру бригади згідно таблиці 3.4.
Таблиця 3.3.
Масиви даних |
||||||||||||||
4.2 |
7.7 |
9.9 |
11.1 |
13.2 |
14.4 |
16.4 |
17.8 |
19.3 |
21.3 |
21.9 |
22.4 |
22.8 |
23.1 |
|
4.24 |
3.75 |
3.43 |
3.21 |
2.86 |
2.66 |
2.26 |
1.95 |
1.55 |
0.95 |
0.69 |
0.44 |
0.12 |
0 |
|
28.8 |
47.1 |
55.8 |
58.9 |
65.2 |
66.9 |
69.9 |
69.3 |
65.9 |
53.1 |
45.1 |
32.7 |
9.49 |
0 |
Таблиця 3.4.
№ бригади |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
Завдання |
||||||||
Підпис осі |
Times New Roman 14 |
Arial 12 жирний |
Verdana 13 курсив |
Times New Roman 12 |
Verdana 12 жирний курсив |
Arial 14 жирний курсив |
Times New Roman 13 |
Verdana 14 жирний |
Підпис осі |
Verdana 14 жирний |
Times New Roman 13 |
Arial 14 жирний курсив |
Verdana 12 жирний курсив |
Times New Roman 12 |
Verdana 13 курсив |
Arial 12 жирний |
Times New Roman 14 |
Підпис осі |
Times New Roman 12 |
Arial 14 жирний курсив |
Verdana 12 жирний курсив |
Times New Roman 13 |
Verdana 14 жирний |
Times New Roman 14 |
Verdana 13 курсив |
Arial 12 жирний |
Титули |
Times New Roman 16 |
Arial 16 жирний |
Verdana 16 курсив |
Times New Roman 16 |
Verdana 16 жирний курсив |
Arial 16 жирний курсив |
Times New Roman 16 |
Verdana 16 жирний |
Колір |
червоний |
синій |
зелений |
чорний |
жовтий |
рожевий |
голубий |
синій |
Колір |
синій |
жовтий |
чорний |
голубий |
рожевий |
жовтий |
чорний |
зелений |
Колір |
зелений |
чорний |
голубий |
рожевий |
зелений |
червоний |
зелений |
чорний |
Маркер |
ромб |
хрестик |
точка |
пятикутна зірка |
три-ник угору |
плюс |
квадрат |
кружок |
Маркер |
шестик. зірка |
три-ник вліво |
кружок |
ромб |
хрестик |
три-ник униз |
точка |
зірка |
Маркер |
три-ник угору |
кружок |
квадрат |
три-ник вліво |
шестик. зірка |
точка |
три-ник вправо |
ромб |
Колір графіка різниць |
жовтий |
зелений |
рожевий |
зелений |
червоний |
чорний |
жовтий |
жовтий |
Маркер графіка різниць |
кружок |
плюс |
шестик. зірка |
точка |
ромб |
кружок |
зірка |
точка |
Положення легенди |
1 |
2 |
3 |
4 |
1 |
2 |
3 |
4 |
Тип лінії |
пунктир |
штрих. |
штрих пункт. |
суцільна |
суцільна |
пунктир |
штрих пункт. |
штрих. |
Тип лінії |
штрих. |
штрих пункт. |
суціл. |
штрих пункт. |
штрих. |
суціл. |
штрих. |
суціл. |
Тип лінії |
штрих-пункт. |
суціл. |
пункт. |
штрих. |
пункт. |
штрих пункт. |
пункт. |
пункт. |
Тип лінії графіка різниць |
суцільна |
пункт. |
штрих. |
пункт. |
штрих пункт. |
штрих. |
суціл. |
штрих пункт. |
Звіт з лабораторної роботи має містити наступні матеріали:
3.4. Контрольні запитання
Лабораторна робота № 4
програмування у м-файлах
Тривалість лабораторної роботи 4 год.
Мета роботи ознайомитися зі структурою та правилами програмування у М-файлах, навчитися створювати програми на основі операторів for, while, if.
Структура та правила програмування М-файлів
М-файли (M-file) призначені для написання, відладки та запуску програм, які незручно вводити у робочому вікні MatLab та які потрібно зберігати для подальшого використання. У такому М-файлі використовуються абсолютно всі команди MatLab, причому правила набору команд не змінюється. Для створення М-файлу необхідно у робочому вікні MatLab вибрати меню FileNewBlank M-File. На екрані зявиться вікно, що зображено на рис. 4.1.
Рис. 4.1. Вікно М-файла
Для вводу команд або тексту необхідно поставити курсор у рядок 1. Після набору необхідної команди натискається клавіша «Enter» і курсор переходить на початок рядка 2. Далі виконується набір команд та функцій аналогічно до командного рядка MatLab. Після завершення набора програми необхідно зберегти файл та запустити його на виконання, натиснувши зелений трикутник у панелі інструментів «Save And Run» або зайти у меню DebugSave File And Run, або просто натиснути F5 на клавіатурі. Якщо у М-файлі будуть помилки, MatLab повідомить про це у командному вікні з посиланням на конкретний рядок М-файла.
Необхідно також враховувати, що при збереженні М-файла його імя не повинно складатися лише з цифр та копіювати стандартну функцію MatLab, наприклад plot.
Усі М-файли мають розширення «.m».
Розглянемо приклад написання простої програми побудови графіка у М-файлі. Лістінг програми у вікні М-файла з коментарями показаний на рис. 4.2.
Рис. 4.2. Лістінг програми побудови графіка у вікні М-файлу
Після запуску М-файлу при відсутності помилок відкриється вікно з побудованим графіком, яке показано на рис. 4.3.
Рис. 4.3. Графік побудованої функції
Оператор циклу for. Правила вводу даних з командного вікна.
Цикл for використовується для виконання заданого числа дій, що повторюються. У загальному випадку цикл має наступну форму запису
for <умова циклу>
<команди MatLab>
end
Нехай потрібно виконати процедуру знаходження суми відповідних елементів двох векторів та вивести на екран результуючий вектор. Програма, що записується у М-файл матиме вигляд
a=[1 2 6 7 9 45 3];
b=[2 4 5 7 8 12 4];
for n=1:length(a) %початок та умови циклу
c(n)=a(n)+b(n); %сумування векторів
end; %кінець циклу
c %вивід результуючого вектора на
%екран
На екрані зявиться вектор с
c =
3 6 11 14 17 57 7
У цьому прикладі використовується команда length(a), що визначає розмір заданого вектора. Це використовується тоді, коли цей розмір невідомий, або задається користувачем. У протилежному випадку можна було б записати for n=1:i, де i розмір заданого вектора.
При роботі з векторами та матрицями часто виникає задача вводу елементів з клавіатури. Для цього застосовується команда input('текст'). Наприклад потрібно задати розмір квадратної матриці, ввести її елементи з клавіатури та вивести її на екран. Текст програми буде мати наступний вигляд
A=0;
n=input('Введіть розмір квадратної матриці ');
for i=1:n
for j=1:n
disp(['Введіть елемент матриці А(' num2str(i) ', ' num2str(j) ')']);
A(i,j) = input(' ');
end;
end;
disp(A)
Для усунення можливості існування матриці А, що була створена раніше і записана у робочу область, цій матриці присвоюється нульове значення на початку програми. Вивід тексту на екран з проханням ввести відповідний елемент матриці реалізується за допомогою команди disp. У випадку виводу однієї змінної на екран вона має форму запису disp(A), у випадку виводу тексту disp('текст'), а у випадку виводу декількох змінних, наприклад елементів векторів, disp(['текст', num2str(n)]), де num2str(n) функція перетворення номера елемента у текстовий формат для виводу на екран. Для виводу на екран елементів матриць, ця команда приймає більш складний вигляд, як показано у програмі.
Розглянемо приклад. Дано дві квадратні матриці n-го порядку. Ввести з клавіатури порядок матриць, заповнити матриці вручну, знайти суму цих матриць та записати результат у нову матрицю.
Текст М-файлу матиме наступний вигляд
A=0;
B=0;
C=0; %створення початкових нульових матриць
n=input('Введіть розмір квадратної матриці ');
for i=1:n
for j=1:n
disp(['Введіть елемент матриці А(' num2str(i) ', ' num2str(j) ')']);
A(i,j) = input(' ');
end; %цикл вводу першої матриці
end;
disp('A=')
disp(A) %виведення першої матриці на екран
for i=1:n
for j=1:n
disp(['Введіть елемент матриці B(' num2str(i) ', ' num2str(j) ')']);
B(i,j) = input(' ');
end; %цикл вводу другої матриці
end;
disp('B=')
disp(B) %виведення другої матриці на екран
for i=1:n
for j=1:n
C(i,j)=A(i,j)+B(i,j);
end; %цикл сумування матриць
end;
disp('Результат суми відповідних елементів матриць')
disp('C=')
disp(C) %вивід на екран результату суми
Умовний оператор if (if…else).
Оператор if (if…else) використовується для побудови циклів з виконанням чи невиконанням деяких умов. У загальному випадку він має наступну форму запису
if <умова>
<команди MatLab>
else
<команди MatLab>
end
Приклад. Задано два вектори. Написати програму порівняння елементів цих векторів. Якщо елементи однакові, то у результуючий вектор вивести на його місце цей елемент, якщо елементи різні, то вивести на його місце нуль.
Програма у М-файлі матиме наступний вигляд
a=[1 4 5 6 7];
b=[2 3 5 5 7]; %завдання векторів
c=0;
for i=1:5 %цикл перебору елементів векторів
if a(i)==b(i) %умова рівності елементів
c(i)=a(i);
else c(i)=0; %протилежна умова
end
end
disp('c=')
disp(c) %вивід на екран результату
На екрані зявиться наступний результат
c=
0 0 5 0 7
У даному прикладі для реалізації протилежної умови до рівності елементів векторів використовується оператор else.
Розглянемо ще один приклад.
Задана квадратна матриця. Ввести розмір та елементи матриці з клавіатури. Знайти кількість непарних елементів, що розташовані під головною діагоналлю, включаючи останню. Вивести на екран вектор із цих елементів.
Лістінг програми буде мати вигляд
A=0;
C=0;
k=1;
disp('Введіть розмір квадратної матриці А ')
n=input('');
for i=1:n
for j=1:n
disp(['Введіть елемент матриці А(' num2str(i) ', ' num2str(j) ')']);
A(i,j) = input(' ');
end;
end;
disp('A=')
disp(A)
for i=1:n
for j=1:n
if i>=j && mod(A(i,j),2)~=0
C(k)=A(i,j);
k=k+1;
end;
end;
end;
disp('C=')
disp(C)
disp('Кількість непарних елементів')
disp(length(C))
На екрані відобразиться наступне
Введіть розмір квадратної матриці А
3
Введіть елемент матриці А(1, 1)
1
Введіть елемент матриці А(1, 2)
2
Введіть елемент матриці А(1, 3)
3
Введіть елемент матриці А(2, 1)
5
Введіть елемент матриці А(2, 2)
6
Введіть елемент матриці А(2, 3)
7
Введіть елемент матриці А(3, 1)
1
Введіть елемент матриці А(3, 2)
5
Введіть елемент матриці А(3, 3)
8
A=
1 2 3
5 6 7
1 5 8
C=
1 5 1 5
Кількість непарних елементів
4
Умова знаходження елементів під головною діагоналлю, включаючи останню i>=j, та умова їх непарності mod(A(i,j),2)~=0 записується у команді if i>=j && mod(A(i,j),2)~=0. У цій програмі також використовується один з логічних операторів «логічне І», яке позначається символом &&. Інші логічні оператори та операції співвідношення наведені у таблиці 4.1.
Таблиця 4.1.
Логічні оператори |
|
&& |
логічне І |
|| |
логічне АБО |
~ |
логічне НІ |
Операції співвідношення |
|
== |
рівність |
< |
менше |
> |
більше |
>= |
більше або рівне |
<= |
менше або рівне |
~= |
не рівне |
Розглянемо приклад використання логічних операторів та операторів співвідношення. Задано квадратну матрицю n-го порядку. Ввести порядок матриці та її елементи з клавіатури. Знайти кількість парних та додатних елементів матриці, що розташовані у нижньому трикутнику, який утворюється перетином побічної та головної діагоналі, як показано на рис. 4.4, та вивести їх на екран.
Рис. 4.4. Задана область матриці до прикладу
Спочатку потрібно записати умову області, що зображена на рис. 4.4. Припустимо, що матриця має i рядків та j стовпців. Умова знаходження елементів на головній діагоналі буде i=j, а на побічній i+j=n+1. Над головною діагоналлю i<j, під головною діагоналлю i>j, над побічною діагоналлю i+j<n+1, під побічною i+j>n+1. Таким чином, якщо обєднати умови знаходження елементів під головною та побічною діагоналлю можна отримати умову розташування елементів у заданій області. Ця умова матиме вигляд i>=j && i+j>=n+1. Знак = використовується для того, щоб включити до заданого контуру частини самих діагоналей. Далі до цієї умови необхідно додати умову парності елемента та його додатного значення. Це реалізується за допомогою команд mod та sign. Можливі варіанти застосування цих команд подані у таблиці 4.2.
Таблиця 4.2.
Команда y=mod(x,2) |
|
y=1 |
якщо x непарне |
Y=0 |
якщо x парне |
Команда y=sign(x) |
|
y=1 |
якщо x>0 |
Y=0 |
якщо x=0 |
y=-1 |
якщо x<0 |
У результаті, повною умовою до даного прикладу буде наступний запис i>=j && i+j>=n+1 && mod(A(i,j),2)==0 && sign(A(i,j))==1
Програма у М-файлі буде мати наступний вигляд
A=0;
C=0;
k=1;
n=input('Введіть розмір квадратної матриці ');
for i=1:n
for j=1:n
disp(['Введіть елемент матриці А(' num2str(i) ', ' num2str(j) ')']);
A(i,j) = input(' ');
end;
end;
disp('A=')
disp(A)
for i=1:n
for j=1:n
if (i>=j) && (i+j>=n+1) && mod(A(i,j),2)==0) && sign(A(i,j))==1)
C(k)=A(i,j);
k=k+1;
end;
end;
end;
disp('C=')
disp(C)
disp('Кількість парних додатних елементів')
disp(length(C))
Для довільно вибраної матриці 3-го порядку результат буде наступним
Введіть розмір квадратної матриці 3
Введіть елемент матриці А(1, 1)
1
Введіть елемент матриці А(1, 2)
2
Введіть елемент матриці А(1, 3)
3
Введіть елемент матриці А(2, 1)
4
Введіть елемент матриці А(2, 2)
6
Введіть елемент матриці А(2, 3)
8
Введіть елемент матриці А(3, 1)
8
Введіть елемент матриці А(3, 2)
-5
Введіть елемент матриці А(3, 3)
3
A=
1 2 3
4 6 8
8 -5 3
C=
6 8
Кількість парних додатних елементів
2
Умовний оператор while.
Оператор while застосовується так само, як і оператор if. Процедура запису наступна
while <умова>
<команди MatLab>
end
Розглянемо приклад застосування оператора. Нехай заданий масив з 10-ти елементів. Виводити на екран елементи масиву, доти, доки вони менше заданого числа, що вводиться з клавіатури. Також вивести порядковий номер елемента. Якщо у масиві не присутнє задане число, то вивести на екран відповідне повідомлення.
Текст програми наступний
p=input('Введіть число p=');
c=0;
n=1;
k=1;
d=0;
a=[1 2 5 4 9 1 2 8 5 10];
for n=1:length(a)
if a(n)==p; %цикл перевірки наявності
%числа p
d(k)=a(n); %якщо p існує, воно
%у відповідний масив, якщо
%не існує масив буде нульовий
k=k+1;
end
end
n=1;
if d==0 %перевірка масиву існування p
disp('такого числа немає') %якщо він
%нульовий виводиться
%відповідне повідомлення
else %у іншому випадку виконується
%основна програма
while a(n)<p
c(n)=a(n);
n=n+1;
end
disp('c=')
disp(c)
disp('порядковий номер числа у масиві')
disp(length(c)+1)
end
Після запуску програми у випадку, якщо число присутнє у масиві результат буде наступним
Введіть число p=9
p =
9
c=
1 2 5 4
порядковий номер числа у масиві
5
Якщо не присутнє
Введіть число p=190
такого числа немає
Розглянемо наступний приклад. Дано дві дійсні квадратні матриці розміром n 7. Отримати нову матрицю того ж розміру шляхом перемноження елементів кожного рядка першої матриці на найбільший елемент відповідного рядка другої матриці.
Текст програми у М-файлі буде мати вигляд
A=0;
B=0;
C=0;
Cmax=0;
n=input('Введіть розмір квадратної матриці ');
for i=1:n
for j=1:n
disp(['Введіть елемент матриці А(' num2str(i) ', ' num2str(j) ')']);
A(i,j) = input(' ');
end;
end;
disp('A=')
disp(A)
for i=1:n
for j=1:n
disp(['Введіть елемент матриці B(' num2str(i) ', ' num2str(j) ')']);
B(i,j) = input(' ');
end;
end;
disp('B=')
disp(B)
for i=1:n
Cmax(i,1)=B(i,1); %присвоєння максимального
%елемента першому елементу у кожному рядку
for j=1:n
if B(i,j)>Cmax(i,1)
Cmax(i,1)=B(i,j); %цикл пошуку
%максимального елемента у кожному
%рядку
else
continue
end
end
end
disp('Вектор з максимальних елементів кожного рядка ')
disp('Cmax=')
disp(Cmax);
for i=1:n
for j=1:n
C(i,j)=A(i,j)*Cmax(i,1); %цикл перемноження
%кожного елемента першої матриці на
%максимальний елемент відповідного рядка
%другої матриці
end
end
disp('Результуюча матриця')
disp('C=')
disp(C)
Результат виконання програми для довільних матриць розміром 3х3 буде наступним
Введіть розмір квадратної матриці 3
Введіть елемент матриці А(1, 1)
1
Введіть елемент матриці А(1, 2)
4
Введіть елемент матриці А(1, 3)
7
Введіть елемент матриці А(2, 1)
9
Введіть елемент матриці А(2, 2)
3
Введіть елемент матриці А(2, 3)
5
Введіть елемент матриці А(3, 1)
6
Введіть елемент матриці А(3, 2)
2
Введіть елемент матриці А(3, 3)
3
A=
1 4 7
9 3 5
6 2 3
Введіть елемент матриці B(1, 1)
1
Введіть елемент матриці B(1, 2)
6
Введіть елемент матриці B(1, 3)
9
Введіть елемент матриці B(2, 1)
4
Введіть елемент матриці B(2, 2)
5
Введіть елемент матриці B(2, 3)
7
Введіть елемент матриці B(3, 1)
3
Введіть елемент матриці B(3, 2)
2
Введіть елемент матриці B(3, 3)
5
B=
1 6 9
4 5 7
3 2 5
Вектор з максимальних елементів кожного рядка
Cmax=
9
7
5
Результуюча матриця
C=
9 36 63
63 21 35
30 10 15
У даній програмі використаний оператор continue для продовження роботи циклу при невиконанні умови if B(i,j)>Cmax(i,1) так як потрібно перебрати усі елементи масиву. Якщо потрібно зупинити цикл при невиконанні деякої умови, то можна застосувати оператор break.
Таблиця 4.3.
№ бригади |
Умова завдання |
1 |
Задано вектор n-го порядку та число p. Ввести порядок вектора, його елементи та число p з клавіатури. Виводити на екран всі додатні та парні елементи, доки ці елементи більші за задане число. У випадку відсутності у векторі числа p вивести відповідне повідомлення та зупинити програму. |
2 |
Задано вектор n-го порядку та число p. Ввести порядок вектора, його елементи та число p з клавіатури. Виводити на екран всі додатні та непарні елементи, доки ці елементи менші за задане число. У випадку відсутності у векторі числа p вивести відповідне повідомлення та зупинити програму. |
3 |
Задано вектор n-го порядку та число p. Ввести порядок вектора, його елементи та число p з клавіатури. Виводити на екран всі додатні та непарні елементи, доки ці елементи більші за задане число. У випадку відсутності у векторі числа p вивести відповідне повідомлення та зупинити програму. |
4 |
Задано вектор n-го порядку та число p. Ввести порядок вектора, його елементи та число p з клавіатури. Виводити на екран всі додатні та парні елементи, доки ці елементи менші за задане число. У випадку відсутності у векторі числа p вивести відповідне повідомлення та зупинити програму. |
5 |
Задано два вектора n-го порядку. Ввести порядок векторів та їх елементи з клавіатури. Знайти добуток відповідних елементів векторів. Записати результат у масив та вивести його на екран. Знайти кількість парних, додатних елементів у результуючому векторі. |
6 |
Задано два вектора n-го порядку. Ввести порядок векторів та їх елементи з клавіатури. Знайти добуток відповідних елементів векторів. Записати результат у масив та вивести його на екран. Знайти кількість непарних та додатних елементів у результуючому векторі. |
7 |
Задано два вектора n-го порядку. Ввести порядок векторів та їх елементи з клавіатури. Знайти суму відповідних елементів векторів. Записати результат у масив та вивести його на екран. Знайти кількість парних та додатних елементів у результуючому векторі. |
8 |
Задано два вектора n-го порядку. Ввести порядок векторів та їх елементи з клавіатури. Знайти суму відповідних елементів векторів. Записати результат у масив та вивести його на екран. Знайти кількість непарних та додатних елементів у результуючому векторі. |
Таблиця 4.4.
№ бригади |
Умова завдання |
1 |
Знайти кількість парних та додатних елементів, розташованих під головною діагоналлю, включаючи останню. Вивести результат на екран. |
2 |
Знайти кількість непарних та додатних елементів, розташованих над головною діагоналлю, включаючи останню. Вивести результат на екран. |
3 |
Знайти кількість парних та додатних елементів, розташованих під побічною діагоналлю, включаючи останню. Вивести результат на екран. |
4 |
Знайти кількість непарних та додатних елементів, розташованих над побічною діагоналлю, включаючи останню. Вивести результат на екран. |
5 |
Знайти кількість парних та додатних елементів, розташованих в області згідно рис. 4.5, а. Вивести результат на екран. |
6 |
Знайти кількість непарних та відємних елементів, розташованих в області згідно рис. 4.5, б. Вивести результат на екран. |
7 |
Знайти кількість парних та відємних елементів, розташованих в області згідно рис. 4.5, в. Вивести результат на екран. |
8 |
Знайти кількість непарних та додатних елементів, розташованих в області згідно рис. 4.5, г. Вивести результат на екран. |
Рис. 4.5. Області матриць до завдання 4
Таблиця 4.5.
№ бригади |
Умова завдання |
1 |
Отримати нову матрицю того ж розміру шляхом додавання до елементів кожного стовпця першої матриці добутку елементів відповідного рядка другої матриці. Вивести результат на екран. |
2 |
Отримати нову матрицю того ж розміру шляхом додавання до елементів кожного стовпця першої матриці суму елементів відповідного рядка другої матриці. Вивести результат на екран. |
3 |
Отримати нову матрицю того ж розміру шляхом перемноження елементів кожного рядка першої матриці на суму елементів відповідного рядка другої матриці. Вивести результат на екран. |
4 |
Отримати нову матрицю того ж розміру шляхом перемноження елементів кожного рядка першої матриці на добуток елементів відповідного рядка другої матриці. Вивести результат на екран. |
5 |
Отримати нову матрицю того ж розміру шляхом додавання до елементів кожного стовпця першої матриці максимального елемента відповідного рядка другої матриці. Вивести результат на екран. |
6 |
Отримати нову матрицю того ж розміру шляхом перемноження елементів кожного рядка першої матриці на максимальний елемент відповідного рядка другої матриці. Вивести результат на екран. |
7 |
Отримати нову матрицю того ж розміру шляхом додавання до елементів кожного стовпця першої матриці мінімального елемента відповідного рядка другої матриці. Вивести результат на екран. |
8 |
Отримати нову матрицю того ж розміру шляхом перемноження елементів кожного рядка першої матриці на мінімальний елемент відповідного рядка другої матриці. Вивести результат на екран. |
Звіт з лабораторної роботи має містити наступні матеріали:
4.4. Контрольні запитання
Лабораторна робота № 5
Чисельне Вирішення диференційних рівнянь у м-файлах
Тривалість лабораторної роботи 2 год.
Мета роботи ознайомлення з основними вбудованими функціями (солверами) для вирішення диференційних рівнянь, структурою спеціальних файлів-функцій та правилами візуалізації розвязків диференційних рівнянь.
Основні теоретичні відомості
Схема чисельного вирішення диференційних рівнянь з заданими початковими умовами та створення файла-функції.
Задача чисельного вирішення диференційного рівняння полягає в знаходженні функції, що задовольняє диференційному рівнянню довільного порядку
та початковими умовами при
,
Задача такого плану вирішується у MatLab за допомогою наступної послідовності етапів:
Розглянемо приклад створення файла-функції для диференційного рівняння другого порядку з заданими початковими умовами , .
Для приведення рівняння до системи диференційних рівнянь першого порядку виконується заміна , . Після підстановки у задане рівняння та отримаємо наступну систему
Далі необхідно створити файл-функцію. Він повинен мати два вхідних аргументи: змінну , за якою буде відбуватися диференціювання, та вектор, розмір якого дорівнює кількості невідомих функцій системи (у даному прикладі дві: та ). Число та порядок аргументу фіксовані, навіть якщо змінна явно не входить до системи. Вихідним аргументом файла-функції є вектор правої частини системи.
Таким чином текст файла-функції буде мати наступний вигляд
function F=dif(t,y); %обява функції для
%розвязку системи
F=[y(2); -2*y(2)-10*y(1)+sin(t)]; %запис правої
%частини системи
По завершенню формування файла-функції його треба зберегти під імям, яким названа функція F, тобто «dif.m».
Основні солвери для розвязку диференційних рівнянь з заданими початковими умовами.
Найрозповсюджені солвери та області їх застосування наведені у таблиці 5.1.
Таблиця 5.1.
Назва солвера |
Область застосування |
ode45 |
Дуже розповсюджений солвер. Базується на формулах Рунге-Кутта четвертого та пятого порядку точності. Часто дає задовільні результати. |
ode23 |
Також базується на формулах Рунге-Кутта, але менш низького порядку точності. Застосовується у нежорстких задачах, коли потрібно отримати розвязок з невисоким ступенем точності. |
ode113 |
Базується на методі Адамса-Бешфорта-Мілтона та використовується для отримання розвязку високої точності у нежорстких задачах. Цей солвер особливо ефективний для нежорстких систем диференційних рівнянь, праві частини яких обраховуються за складними формулами. |
ode15s |
Оснований на методі Гіра, який допускає зміну порядку, та застосовується для вирішення жорстких систем. |
ode23s |
Базується на однокроковому методі Розенброка другого порядку та застосовується для вирішення жорстких систем з невеликою точністю. |
Усі солвери намагаються знайти розвязок з відносною точністю 10-3. Якщо потрібно збільшити точність обрахування, необхідно застосувати додатковий параметр options, який формується функцією odeset. Наприклад, якщо потрібна точність 10-5, то у файл-розвязок, що буде розглянутий пізніше, потрібно на початку включити додатковий рядок
options=odeset('RelTol', 1.0e-05)
де аргумент RelTol використовується для завдання необхідної відносної похибки та дописати параметр options у солвер.
Створення файла-розвязку для чисельного вирішення диференційних рівнянь.
Розглянемо створення файла-розвязку для вирішення диференційного рівняння, для якого був створений файл-функція з використанням солвера ode45. Вхідними аргументами солвера будуть: імя файла-функції, що записується у апострофах 'dif' або без них, але з символом @ на початку (@dif); вектор з початковим і кінцевим значенням часу диференціювання; вектор початкових умов. Запис у М-файлі буде наступним
[T,Y]=ode45('dif', [Time], [Y0])
де масиви [Time] та [Y0] масиви часу та початкових умов відповідно. Ці масиви можуть записуватися безпосередньо у солвері, наприклад
[T,Y]=ode45('dif', [1 15], [1 0])
або задаватися раніше. Тоді у солвері використовуються тільки імя цих масивів
Time=[0 15];
Y0=[1 0];
[T,Y]=ode45('dif', Time, Y0);
При необхідності зміни точності за допомогою параметра options солвер записується наступним чином
options=odeset('RelTol', 1.0e-05)
Time=[0 15];
Y0=[1 0];
[T,Y]=ode45('dif', Time, Y0, options);
Вихідними аргументами будуть вектор, який вміщує масив часу, та матриця значень невідомих функцій у відповідні моменти часу. Значення функцій розташовані по стовпцям матриці: у першому стовпці значення першої функції (у даному прикладі ), у другому другої () і т.д.
Текст програми, що записується у файл-розвязок має вигляд
options=odeset('RelTol', 1.0e-04); %точність 0.0001
Time=[0 15]; %масив часу
Y0=[1 0]; %масив початкових умов
[T,Y]=ode45('dif', Time, Y0, options); %солвер
plot(T,Y(:,1),'r','LineWidth',2); %вивід на екран
%змінної y1
hold %затримка графіка
grid %вивід стіки
plot(T,Y(:,2),'b--','LineWidth',2); %вивід на екран
%змінної y2
xlabel('Час t, с'); %мітки осей та підпис графіка
ylabel('y1, y2');
title('Рішення диференційного рівняня другого порядку');
Після запуску файла-розвязку відкриється графічне вікно, зображене на рис. 5.1.
Рис. 5.1. Результати розвязку диференційного рівняння
Треба мати на увазі, що обидва файл-функція і файл-розвязок повинні знаходитися в одній директорії. Файл-розвязок не буде працювати без файла-функції. Після створення та збереження файл-функцію не потрібно запускати на виконання на відміну від файла-розвязку.
Розглянемо ще один приклад. Вирішити наступну систему диференційних рівнянь, використавши різні точності
на проміжку часу [a, 100] для заданих початкових умов , , де =0.001.
Файл-функція для заданої системи рівнянь буде мати вигляд
function F=dif(t,y) %обява функції для
%розвязку системи
F=[y(2); -1/t^2]; %запис правої
%частини системи
Файл-розвязок для різних варіантів точності буде наступним
options=odeset('RelTol', 1.0e-03); %точність 0.001
Time=[0.001 100]; %масив часу
Y0=[log(0.001) 1/0.001]; %масив початкових умов
[T,Y]=ode45('dif', Time, Y0, options); %солвер
plot(T,Y(:,1),'k:','LineWidth',2); %вивід на екран
%змінної y1
hold %затримка графіка
grid %вивід стіки
xlabel('Час t, с'); %мітки осей та підпис графіка
ylabel('y1');
title('Рішення диференційного рівняня другого порядку');
options=odeset('RelTol', 1.0e-04); %точність 0.0001
[T,Y]=ode45('dif', Time, Y0, options); %солвер
plot(T,Y(:,1),'r--','LineWidth',2); %вивід на екран
%змінної y1
options=odeset('RelTol', 1.0e-05); %точність 0.00001
[T,Y]=ode45('dif', Time, Y0, options); %солвер
plot(T,Y(:,1),'g-','LineWidth',2); %вивід на екран
%змінної y1
options=odeset('RelTol', 1.0e-06); %точність 0.000001
[T,Y]=ode45('dif', Time, Y0, options); %солвер
plot(T,Y(:,1),'c-.','LineWidth',2); %вивід на екран
%змінної y1
options=odeset('RelTol', 1.0e-08); %точність 0.00000001
[T,Y]=ode45('dif', Time, Y0, options); %солвер
plot(T,Y(:,1),'b--','LineWidth',2); %вивід на екран
%змінної y1
legend('10^{-3}','10^{-4}', '10^{-5}', '10^{-6}', '10^{-8}',4) %вивід легенди
Після запуску файла-функції на екрані зявиться графічне вікно
Рис. 5.2. Графіки розвязку системи диференційних рівнянь для різних варіантів точності
Як видно з рисунка, при точності більшої за 10-5 графіки співпадають, а при точності менше 10-5 результати мають дуже велику розбіжність. Таким чином для даної системи диференційних рівнянь достатньою точністю для отримання точного рішення є 10-6.
Розглянемо приклад вирішення наступного системи диференційного рівняння третього порядку для різних значень точності
на проміжку [0 10] для початкових умов , , .
Виконуємо заміну , , та перетворюємо диференційне рівняння третього порядку у систему рівнянь першого порядку, враховуючи зроблену заміну.
.
Створюємо файл функцію для отриманої системи з імям «dif2.m»
function F=dif2(t,y); %обява функції для
%розвязку системи
F=[y(2); y(3); -5*y(3)+2*y(2)+y(1)-14+cos(2*t-5)]; %запис правої частини системи
Після цього зберігається файл-функція та створюється наступний файл-розвязок
options=odeset('RelTol', 1.0e-03); %точність 0.001
Time=[0 10]; %масив часу
Y0=[1 2 0]; %масив початкових умов
[T,Y]=ode45('dif2', Time, Y0, options); %солвер
plot(T,Y(:,1),'k:','LineWidth',2); %вивід на екран
%змінної y1
Hold %затримка графіка
Grid %вивід стіки
xlabel('Час t, с'); %мітки осей та підпис графіка
ylabel('y1');
title('Рішення диференційного рівняння третього порядку');
options=odeset('RelTol', 1.0e-04); %точність 0.0001
[T,Y]=ode45('dif2', Time, Y0, options); %солвер
plot(T,Y(:,1),'r--','LineWidth',2); %вивід на екран
%змінної y1
options=odeset('RelTol', 1.0e-05); %точність 0.00001
[T,Y]=ode45('dif2', Time, Y0, options); %солвер
plot(T,Y(:,1),'b-','LineWidth',2); %вивід на екран
%змінної y1
legend('10^{-3}','10^{-4}', '10^{-5}',3) %вивід легенди
Результат розвязків диференційного рівняння для різних значень точності показаний на рис. 5.3. Як видно з рисунка, для заданого диференційного рівняння третього порядку достатньою точністю є 10-3. При збільшенні точності графіки співпадають.
Якщо потрібно вивести інші змінні диференційного рівняння, наприклад та , то файл-розвязок для одного варіанту точності, що дорівнює 10-3 буде мати наступний вигляд
options=odeset('RelTol', 1.0e-03); %точність 0.001
Time=[0 10]; %масив часу
Y0=[1 2 0]; %масив початкових умов
[T,Y]=ode45('dif2', Time, Y0, options); %солвер
plot(T,Y(:,1),'k:','LineWidth',2); %вивід на екран y1
hold %затримка графіка
grid %вивід стіки
xlabel('Час t, с'); %мітки осей та підпис графіка
ylabel('y1');
title('Рішення диференційного рівняння третього порядку');
plot(T,Y(:,2),'b--','LineWidth',2); %вивід на екран y2
plot(T,Y(:,3),'k-.','LineWidth',2); %вивід на екран y3
legend('y(1)','y(2)', 'y(3)',3) %вивід легенди
Рис. 5.3. Графіки розвязків диференційного рівняння третього порядку для різних значень точності
Рис. 5.4. Графіки усіх змінних розвязку диференційного рівняння третього порядку
Таблиця 5.2.
№ бригади |
Вигляд диференційного рівняння |
Початкові умови |
Часовий проміжок |
1 |
[1 2 0 1] |
[1 10] |
|
2 |
[0 1 1 0] |
[1 15] |
|
3 |
[2 1 0 1] |
[1 20] |
|
4 |
[1 0 0 1] |
[1 11] |
|
5 |
[0 1 1 0] |
[1 12] |
|
6 |
[3 2 1 5] |
[1 16] |
|
7 |
[2 2 2 0] |
[1 22] |
|
8 |
[1 2 0 0] |
[1 14] |
Таблиця 5.3.
№ бригади |
Колір лінії |
Тип маркера |
Тип лінії |
Положення легенди (чверті) |
Тип та розмір тексту |
1 |
жовтий |
крапка |
пунктир |
1 |
жирний курсив, 14 |
2 |
голубий |
кружок |
штрихова |
2 |
жирний курсив, 12 |
3 |
рожевий |
хрестик |
штрих-пунктир |
3 |
курсив, 15 |
4 |
червоний |
плюс |
пунктир |
4 |
жирний, 16 |
5 |
зелений |
зірка |
штрихова |
1 |
жирний курсив, 11 |
6 |
синій |
квадрат |
штрих-пунктир |
2 |
курсив, 15 |
7 |
жовтий |
ромб |
пунктир |
3 |
жирний, 14 |
8 |
червоний |
кружок |
штрихова |
4 |
жирний курсив, 16 |
Таблиця 5.4.
№ бригади |
Порядки точності |
1 |
10-3, 10-4, 10-5, 10-6, 10-7 |
2 |
10-2, 10-3, 10-5, 10-6, 10-8 |
3 |
10-1, 10-3, 10-5, 10-7, 10-9 |
4 |
10-2, 10-4, 10-6, 10-8, 10-10 |
5 |
10-1, 10-2, 10-3, 10-4, 10-5 |
6 |
10-1, 10-2, 10-3, 10-7, 10-9 |
7 |
10-2, 10-5, 10-6, 10-7, 10-10 |
8 |
10-2, 10-4, 10-5, 10-6, 10-7 |
5.3. Зміст звіту
Звіт з лабораторної роботи має містити наступні матеріали:
5.4. Контрольні запитання
Лабораторна робота № 6
Символічні методи обчислення
Тривалість лабораторної роботи 4 год.
Мета роботи ознайомлення з тулобоксом Symbolic, символічними числами, змінними, масивами та виразами, основними символічними функціями для перетворення, спрощення виразів, інтегрування, диференціювання, а також, вирішення алгебричних та диференційних рівнянь.
Символічний тулбокс (Symbolic Toolbox).
Символічний тулбокс використовується для роботи з символічними математичними виразами. Він вміщує близько декількох сотень символічних функцій, що діляться на кілька видів:
- спрощення та перетворення математичних виразів;
- диференціювання, інтегрування та знаходження границь функцій;
- операції з векторами та матрицями;
- вирішення алгебричних та диференційних рівнянь та систем рівнянь.
Символічний тулбокс також вміщує інтерфейс MuPAD, що оптимізований для зручного вирішення та перетворення символьних математичних виразів.
Символічні обєкти це спеціальний тип даних, який дозволяє виконувати математичні операції у MATLAB аналітично, без чисельних обчислень. Символічні об'єкти діляться на символічні змінні, символічні вирази, символічні масиви та символічні числа.
Розглянемо кожен з видів символьних обєктів.
Символічні змінні
Символічні змінні являються обєктами класу sym object. Для оголошення символьних змінних використовується команди syms, наприклад
syms x y
створить дві символічні змінні x та y.
Тепер можна виконувати математичні дії з цими змінними, наприклад
syms x y
x+x+y
На екрані зявиться наступний результат
ans =
2*x + y
Використовуючи вже оголошені символічні змінні можна створювати символічні масиви та математичні вирази.
Символічні числа
Тулбокс також дозволяє перетворювати числа у символічні обєкти. Щоб створити символічне число використовується команда sym, наприклад
a=sym('2');
Якщо потрібно створити дробове число, то одинарні лапки не ставляться
a=sym(0.75);
На екрані відобразиться створене число у формати звичайного дробу
a =
3/4
Також можна виконувати будь-які дії з символічними числами, наприклад
sym(2/5)+sym(1/3)
дає у результаті
ans =
11/15
Символічні вирази
Нехай потрібно задати змінну, яка є математичним виразом і не потребує спрощення, наприклад
.
Для цього достатньо застосувати команду sym
rho=sym('(1+sqrt(5))/2')
У результаті на екрані зявиться
rho =
(1+sqrt(5))/2
Тепер створену змінну можна використовувати для створення більших математичних виразів, наприклад запис
f= rho^2-rho-1
дає у результаті на екрані
f =
(5^(1/2)/2 + 1/2)^2 - 5^(1/2)/2 - 3/2
Символічні масиви
Для створення будь якого символічного масиву потрібно спочатку створити задати його елементи, як символічні змінні
syms a b c
Далі створюється матриця з існуючих символічних змінних так само, як матриця з звичайних чисел
A=[a b c;c a b;b c a];
На екрані зявиться
A =
[ a, b, c]
[ c, a, b]
[ b, c, a]
Для створення масиву з символічних чисел дуже зручно застосовувати команду sym.
Наприклад, матриця створена з десяткових чисел
A=[1 0.5 0.4; 0.5 0.4 0.25; 0.4 0.25 0.2]
A =
1.0000 0.5000 0.4000
0.5000 0.4000 0.2500
0.4000 0.2500 0.2000
перетвориться за допомогою команди sym(A) у матрицю вигляду
ans =
[ 1, 1/2, 2/5]
[ 1/2, 2/5, 1/4]
[ 2/5, 1/4, 1/5]
Спрощення та перетворення алгебричних виразів
Нехай задані три різні символічні вирази
syms x f g h
f=x^3-6*x^2+11*x-6;
g=(x-1)*(x-2)*(x-3);
h=-6+(11+(-6+x)*x)*x;
Для покращення візуального сприйняття цих виразів існує команда pretty. У результаті запису
pretty(f); pretty(g); pretty(h)
на екрані відобразяться ці ж функції, але «покращеного» вигляду
3 2
x - 6 x + 11 x - 6
(x - 1) (x - 2) (x - 3)
x (x (x - 6) + 11) - 6
Існує також ряд команд для перетворення та спрощення виразів.
Команда collect знаходить та сумує всі коефіцієнти при однакових степенях змінної, наприклад
syms x f
f =(x - 1)*(x - 2)*(x - 3);
collect(f)
У результаті на екрані зявиться
ans =
x^3 - 6*x^2 + 11*x 6
Якщо записати більш громіздкий вираз
syms x a
f=(x+a)^4+(x-1)^3-(x-a)^2-a*x*x-3
d=collect(f)
Результат буде наступний
f =
(x - 1)^3 - a*x^2 + (a + x)^4 - (a - x)^2 - 3
d =
x*(4*a^3 + 2*a + 3) - x^2*(a - 6*a^2 + 4) + x^3*(4*a + 1)
a^2 + a^4 + x^4 - 4
Команда expand розкладає вираз на суму добутків, наприклад
syms a x y f
f =a*(x + y);
expand(f)
Після виконання команди результат буде наступним
ans =
a*x + a*y
Команда factor використовується для поліномів із раціональними коефіцієнтами і виражає функцію у вигляді добутку поліномів. Якщо ж функція не розкладається на добуток, то команда видає цю ж саму функцію. Ця команда є зворотною до команди collect. Наприклад
syms x f
f =x^3 - 6*x^2 + 11*x 6;
factor(f)
Результат буде наступним
ans =
(x - 3)*(x - 1)*(x - 2)
Також команда factor може представляти символьне число у вигляді добутку простих чисел, наприклад
syms a
a=sym('230010')
s=factor(a)
На екрані зявиться наступне
s =
2*3*5*11*17*41
Команда simplify дозволяє спрощувати вирази, застосовуючи всі відомі математичні залежності, наприклад
syms x f
f =x*(x*(x - 6) + 11) - 6;
simplify(f)
На екрані зявиться наступний результат
ans =
(x - 1)*(x - 2)*(x - 3)
Спростимо ще одну функцію
syms x f
f=(1-x^2)/(1-x);
simplify(f)
Спрощений вираз буде мати вигляд
ans =
x + 1
Команда simple перетворює математичний вираз у вираз з найменш можливою кількістю символів. Вона базується на застосуванні усіх попередніх функцій. Запис simple(f) видасть на екран кожне можливе спрощення та функцію, за допомогою якої воно відбулося, наприклад
syms x f
f=x^2-2*x-3;
simple(f)
У результаті на екрані зявиться команди і результат їх виконання відносно заданої функції. Якщо не перетворюється застосованою командою, то у результаті її відобразиться така сама ж функція, як показано нижче
simplify:
x^2 - 2*x - 3
radsimp:
x^2 - 2*x - 3
simplify(100):
(x + 1)*(x - 3)
combine(sincos):
x^2 - 2*x - 3
combine(sinhcosh):
x^2 - 2*x - 3
combine(ln):
x^2 - 2*x - 3
factor:
(x + 1)*(x - 3)
expand:
x^2 - 2*x - 3
combine:
x^2 - 2*x - 3
rewrite(exp):
x^2 - 2*x - 3
rewrite(sincos):
x^2 - 2*x - 3
rewrite(sinhcosh):
x^2 - 2*x - 3
rewrite(tan):
x^2 - 2*x - 3
collect(x):
x^2 - 2*x - 3
mwcos2sin:
x^2 - 2*x - 3
ans =
x^2 - 2*x 3
Команда subs дозволяє зробити підстановку одного виразу у інший. У загальному вигляді subs записується з трьома вхідними аргументами: імям символічної функції, змінної, що має бути замінена, та виразом, що слід підставити замість змінної, наприклад
f=sym('(a^2+b^2)/(a^2-b^2)+a^4/b^4');
f=subs(f,'a','(exp(x)+exp(-x))');
f=subs(f,'b','(sin(x)+cos(x))');
pretty(f)
На екрані зявиться наступний вираз
4 2 2
(exp(-x) + exp(x)) (cos(x) + sin(x)) + (exp(-x) + exp(x))
------------------- - ----------------------------------------
4 2 2
(cos(x) + sin(x)) (cos(x) + sin(x)) - (exp(-x) + exp(x))
Вирішення алгебричних рівнянь символічній формі
За допомогою символьних функцій можна вирішувати будь-які алгебричні рівняння записані аналітично. Команда solve вирішує рівняння наступним чином
syms a x
s=solve(x^3+a*x+1)
На екрані зявиться розвязок рівняння цього у символьному вигляді
s =
((a^3/27 + 1/4)^(1/2) - 1/2)^(1/3) - a/(3*((a^3/27 + 1/4)^(1/2) - 1/2)^(1/3))
a/(6*((a^3/27 + 1/4)^(1/2) - 1/2)^(1/3)) - ((a^3/27 +
1/4)^(1/2) - 1/2)^(1/3)/2 - (3^(1/2)*i*(a/(3*((a^3/27 +
1/4)^(1/2) - 1/2)^(1/3)) + ((a^3/27 + 1/4)^(1/2)
1/2)^(1/3)))/2
a/(6*((a^3/27 + 1/4)^(1/2) - 1/2)^(1/3)) - ((a^3/27 +
1/4)^(1/2) - 1/2)^(1/3)/2 + (3^(1/2)*i*(a/(3*((a^3/27 +
1/4)^(1/2) - 1/2)^(1/3)) + ((a^3/27 + 1/4)^(1/2)
1/2)^(1/3)))/2
Якщо ж у рівняннях є декілька однакових виразів, то зручно застосовувати команду subexpr, яка замінить ці вирази новою змінною, наприклад для розвязку попереднього рівняння
r=subexpr(s)
sigma =
(a^3/27 + 1/4)^(1/2) - 1/2
r =
sigma^(1/3) - a/(3*sigma^(1/3))
a/(6*sigma^(1/3)) - sigma^(1/3)/2-
(3^(1/2)*i*(a/(3*sigma^(1/3)) + sigma^(1/3)))/2
a/(6*sigma^(1/3)) - sigma^(1/3)/2+
(3^(1/2)*i*(a/(3*sigma^(1/3)) + sigma^(1/3)))/2
Як видно з прикладу, вираз (a^3/27 + 1/4)^(1/2) - 1/2 був замінений на sigma та підставлений у розвязок системи.
Вирішення систем алгебричних рівнянь символічній формі
Нехай задано систему символічних алгебричних рівнянь
.
Щоб вирішити рівняння для x та y відносно спочатку створюються символічні змінні
syms x y alpha
Далі використовується команда для вирішення рівнянь solve, але у іншому форматі
[x,y]=solve(x^2*y^2, x-y/2-alpha)
Треба звернути увагу, що в дужках записуються ліві частини рівнянь, прирівняні до нуля, а масив розвязків повинен містити стільки елементів, скільки змінних знаходиться у рівнянні, у даному випадку масив[x,y]містить два елемента x та y.
У результаті виконаня команди solve на екрані зявиться наступне
x =
alpha
0
y =
0
(-2)*alpha
Вирішення диференційних рівнянь символічній формі
Для символічного вирішення диференційних рівнянь застосовується команда dsolve. При записі диференційних рівнянь у команді dsolve перша похідна позначається літерою D, друга D2, третя D3, і т.д. Запис D2y відповідає .
Початкові умови записують за допомогою окремих рівнянь. Якщо початкові умови не задані, в розвязок будуть входити постійні інтегрування.
Розглянемо приклад. Нехай задане диференційне рівняння першого порядку
Команда dsolve буде мати наступний вигляд
syms t y
s=dsolve('Dy=2*y+t')
У результаті на екрані зявиться наступне
s =
(C3*exp(2*t))/4 - t/2 - 1/4
Якщо відомі початкові умови, наприклад , то запис команди dsolve зміниться
syms t y
s=dsolve('Dy=2*y+t', 'y(0)=2')
Тоді у розвязку вже не буде постійних інтегрування
s =
(9*exp(2*t))/4 - t/2 - 1/4
Якщо задане нелінійне диференційне рівняння, наприклад
із заданими початковими умовами , воно вирішується символічно наступним чином
syms x
s=dsolve('(Dx+x)^2=1', 'x(0)=0')
У результаті розвязок буде наступним
s =
1/exp(t) - 1
1 - 1/exp(t)
Диференційні рівняння другого порядку і вище мають містити в собі позначення вищих похідних D2, D3 і т.д., наприклад рівняння
із заданими початковими умовами , вирішується наступним чином
syms x y
s=dsolve('D2y=cos(2*x)-y', 'y(0)=1', 'Dy(0)=0', 'x')
Запис 'x' означає, що відбувається диференціювання по змінній x, а не по t.
У результаті виконання команди на екрані зявиться наступне
s =
(4*cos(x))/3 + cos(x)*(cos(3*x)/6 - cos(x)/2) +
sin(x)*(sin(3*x)/6 + sin(x)/2)
Розглянемо диференційне рівняння третього порядку
,
з початковими умовами , , .
Для вирішення цього рівняння потрібно записати наступне
syms x u
s=dsolve('D3u=u', 'u(0)=1', 'Du(0)=-1', 'D2u(0)=pi','x');
d=subexpr(s)
Результат буде наступним
sigma =
(3^(1/2)*x)/2
d =
(pi*exp(x))/3 - (cos(sigma)*(pi/3 - 1))/exp(x/2)
(3^(1/2)*sin(sigma)*(pi + 1))/(3*exp(x/2))
Запис 'D3u' означає третю похідну , а 'D2u(0)=pi' початкову умову .
Вирішення систем диференційних рівнянь у символічній формі
Нехай задана система диференційних рівнянь
.
Ця система також може бути розвязана у символічній формі за допомогою команди dsolve
syms f g
[s,p]=dsolve('Df=3*f+4*g', 'Dg=-4*f+3*g')
r=subexpr(s)
t=subexpr(p)
pretty(r)
pretty(t)
У результаті на екрані зявиться наступні розвязки
s =
(C59*i)/exp(t*(4*i - 3)) - C58*i*exp(t*(4*i + 3))
p =
C58*exp(t*(4*i + 3)) + C59/exp(t*(4*i - 3))
r =
(C59*i)/exp(t*(4*i - 3)) - C58*i*exp(t*(4*i + 3))
t =
C58*exp(t*(4*i + 3)) + C59/exp(t*(4*i - 3))
- C58 exp(t (3 + 4 I)) I + C59 exp(t (3 - 4 I)) I
C58 exp(t (3 + 4 I)) + C59 exp(t (3 - 4 I))
Розглянемо систему третього порядку
.
Записується команда dsolve
syms x1 x2 x3
[x y z]=dsolve('Dx1=2*x1-3*x2+3*x3-2*Dx2+Dx3', 'Dx2=3*x1+2*x2-x3+2*Dx1-5*Dx3', 'Dx3=x1-x2+x3+Dx1-Dx2');
pretty(x)
pretty(y)
pretty(z)
На екрані зявляться наступні розвязки
/ 1/2 \ / 1/2 \
| 91 t 10 t | | 10 t 91 t |
C63 exp| ------- - ---- | C64 exp| - ---- - ------- |
\ 9 9 / \ 9 9 /
------------------------- + --------------------------- + C62 exp(t) -
10 10
/ 1/2 \ / 1/2 \
1/2 | 91 t 10 t | 1/2 | 10 t 91 t |
3 91 C63 exp| ------- - ---- | 3 91 C64 exp| - ---- - ------- |
\ 9 9 / \ 9 9 /
--------------------------------- + -----------------------------------
70 70
/ 1/2 \ / 1/2 \
| 10 t 91 t | | 91 t 10 t |
7 C64 exp| - ---- - ------- | 7 C63 exp| ------- - ---- |
\ 9 9 / \ 9 9 /
C62 exp(t) - ----------------------------- - --------------------------- +
10 10
/ 1/2 \ / 1/2 \
1/2 | 91 t 10 t | 1/2 | 10 t 91 t |
11 91 C63 exp| ------- - ---- | 11 91 C64 exp| - ---- - ------- |
\ 9 9 / \ 9 9 /
---------------------------------- - ------------------------------------
70 70
/ 1/2 \ / 1/2 \
| 91 t 10 t | | 10 t 91 t |
C63 exp| ------- - ---- | + C64 exp| - ---- - ------- | + C62 exp(t)
\ 9 9 / \ 9 9 /
Диференціювання символічних виразів
Щоб проілюструвати, як відбувається диференціювання у символічному тулбоксі, спочатку створимо символьний вираз:
syms x
f=sin(5*x);
Для диференціювання цього символьного виразу відносно x використовується команда diff
a=diff(f)
У результаті на екрані зявиться
a =
5*cos(5*x)
Розглянемо ще один приклад
syms x
g=exp(x)*cos(x)
c=diff(g)
Результат буде наступним
c =
exp(x)*cos(x) - exp(x)*sin(x)
Для того, щоб продиференціювати вираз декілька разів потрібно записати команду diff стільки разів, якої величини потрібно узяти похідну, наприклад для подвійного диференціювання
syms x
g=exp(x)*cos(x);
c=diff(diff(g))
або записати наступним чином
c=diff(g,2)
де 2 порядок похідної.
У результаті написання будь-якої з вище описаних команд на екрані зявиться
c =
(-2)*exp(x)*sin(x)
Для того, щоб взяти похідну від константи, її спочатку треба задати, як символьну змінну. У протилежному випадку відповіддю на диференціювання константи буде порожня множина, наприклад:
c=sym('5')
a=diff(c)
Результат буде наступним
a =
0
Якщо просто набрати diff(5), то у результаті буде
ans=[ ]
Часткові похідні від символічних виразів
Для того, щоб продиференціювати вираз, що вміщує більш ніж одну символьну змінну, потрібно зазначити змінну, за якою відбувається диференціювання. Тоді команда diff обраховує часткову похідну за заданою змінною, наприклад
syms s t
f=sin(s*t);
c=diff(f,t)
У результаті на екрані буде наступне
c =
s*cos(s*t)
Щоб продиференціювати той самий вираз за іншою змінною, наприклад s, потрібно написати
syms s t
f=sin(s*t);
c=diff(f,s)
Результатом буде
c =
t*cos(s*t)
Щоб обчислити другу похідну від цього ж виразу за змінною t, потрібно написати наступне
syms s t
f=sin(s*t);
c=diff(f,t,2)
У результаті виконання команд на екрані зявиться наступний розвязок
c =
-s^2*sin(s*t)
Команда diff також може використовуватись для поелементного диференціювання масивів, наприклад
syms a x
A=[cos(a*x) sin(a*x); -sin(a*x) cos(a*x)];
C=diff(A)
Результат буде наступним
C =
[ -a*sin(a*x), a*cos(a*x)]
[ -a*cos(a*x), -a*sin(a*x)]
Обчислення границь символічних виразів
Нехай задана границя
.
Для обчислення границі від символічного виразу спочатку потрібно задати символічні змінні та використати до виразу команду limit. Першим вхідним аргументом цієї команди являється символічний вираз, другим змінна, а третім точка, в якій шукається границя. Тоді задана границя буде обчислюватися наступним чином
syms h x
s=limit((cos(h+x)-cos(x))/h,h,0)
Результатом виконання команди буде
s =
-sin(x)
Розглянемо ще одну границю
Вирішується ця границя за допомогою наступної послідовності команд
syms n x
s=limit ((1+x/n)^n,n,inf)
і дає у результаті
s =
exp(x)
Функція limit також дозволяє знаходити односторонні границі. Для знаходження границі справа потрібно вказати четвертий додатковий аргумент 'right', а зліва 'left'. Розглянемо дял прикладу дві границі
та .
Команди для вирішення цих границі наступні
syms x
s1=limit ((10+x)^(1/x),x,0, 'left')
s2= limit ((10+x)^(1/x),x,0, 'right')
У результаті на екрані відобразиться наступне
s1 =
0
s2 =
Inf
Інтегрування символічних виразів
Якщо f це символьний вираз, то команда int намагається знайти інший символьний вираз F, так, що diff(F)=f.
Наприклад, потрібно обрахувати невизначений інтеграл . Застосуємо команду int
syms x n
f=x^n;
int(f)
На екрані зявляться наступні розвязки
ans =
piecewise([n = -1, log(x)], [n <> -1, x^(n + 1)/(n + 1)])
Також у команді int можна задавати змінну, за якою буде проходити інтегрування, наприклад для визначення інтеграла
syms x n
f=(x^3)*exp(x);
I=int(f,x);
pretty(I)
У результаті на екрані зявиться наступний розвязок
3 2
exp(x) (x - 3 x + 6 x - 6)
Для обрахування визначених інтегралів необхідно задати межі інтегрування. Наприклад для інтеграла команда int виглядає наступним чином
syms x
f= sin(2*x);
I=int(f,x,0,pi/2)
Результат буде наступним
I =
1
Таблиця 6.1.
№ бригади |
Функція 1 |
Функція 2 |
Функція 3 |
1 |
|||
2 |
|||
3 |
|||
4 |
|||
5 |
|||
6 |
|||
7 |
|||
8 |
Таблиця 6.2.
№ бригади |
Рівняння 1 |
Рівняння 2 |
Рівняння 3 |
1 |
|||
2 |
|||
3 |
|||
4 |
|||
5 |
|||
6 |
|||
7 |
|||
8 |
Таблиця 6.3.
№ бригади |
Інтеграл 1 |
Інтеграл 2 |
Інтеграл 3 |
Інтеграл 3 |
1 |
||||
2 |
||||
3 |
||||
4 |
||||
5 |
||||
6 |
||||
7 |
||||
8 |
Таблиця 6.4.
№ бри- гади. |
Вираз 1 |
Вираз 2 |
Вираз 3 |
Вираз 4 |
1 |
||||
2 |
||||
3 |
||||
4 |
||||
5 |
||||
6 |
||||
7 |
||||
8 |
Таблиця 6.5.
№ бригади |
Символічне число x |
1 |
1/2 |
2 |
1/3 |
3 |
1/4 |
4 |
2/5 |
5 |
3/5 |
6 |
1/5 |
7 |
7/8 |
8 |
4/5 |
Таблиця 6.6.
№ бригади |
Коефіцієнти |
||
1 |
1/2 |
1/3 |
1/4 |
2 |
1/3 |
2/5 |
4/5 |
3 |
1/4 |
3/5 |
1/2 |
4 |
2/5 |
1/4 |
1/3 |
5 |
3/5 |
7/8 |
4/5 |
6 |
1/5 |
2/5 |
1/3 |
7 |
7/8 |
1/4 |
1/2 |
8 |
4/5 |
1/2 |
1/3 |
Таблиця 6.7.
№ бригади |
Вигляд диференційного рівняння |
Початкові умови |
1 |
[1 2 0] |
|
2 |
[0 0 0] |
|
3 |
[2 2 2] |
|
4 |
[0 1 5] |
|
5 |
[10 0 2] |
|
6 |
[0 0 0] |
|
7 |
[2 3 4] |
|
8 |
[10 0 1] |
6.3. Зміст звіту
Звіт з лабораторної роботи має містити наступні матеріали:
6.4. Контрольні запитання
Лабораторна робота № 7
Основні бібліотеки блоків тулбоксу simulink та їх застосування
Тривалість лабораторної роботи 4 год.
Мета роботи ознайомлення з тулобоксом візуального моделювання Simulink та з його основними бібліотеками блоків, вивчення правил їх зєднання, правил створення структурних схем та прикладів їх застосування.
Запуск Simulink та послідовність створення нової моделі.
Для запуску тулбоксу Simulink необхідно попередньо запустити пакет MatLab, основне вікно якого представлено на рис. 7.1. У вікні показана підказка, що зявляється при наведенні курсору миші на ярлик Simulink у панелі інструментів.
Рис. 7.1. Основне вікно пакету MatLab з ярликом Simulink
Після натиснення на кнопку відкривається вікно, що зображено на рис. 7.2.
Рис. 7.2. Бібліотеки блоків Simulink
На рис. 7.2 у лівій частині вікна розкритий наступний список бібліотек блоків Simulink:
Список розділів бібліотеки Simulink представлено у вигляді дерева і правила роботи з ним є загальними для списків такого виду: піктограма згорнутого вузла дерева містить символ "+", а піктограма розгорнутого містить символ "-"; для розгортання або згортання вузла дерева достатньо натиснути на його піктограмі лівою клавішею мишки.
При виборі відповідного розділу бібліотеки в правій частині вікна відображається його вміст (рис. 7.3).
Рис. 7.3. Бібліотека Continuous з її набором блоків
Для роботи з представленим вікном використовуються команди меню:
Повний список команд меню бібліотек наведений у додатковій літературі [2].
Для створення моделі в середовищі Simulink необхідно послідовно виконати наступні дії:
Рис. 7.4. Вікно нової Simulink-моделі
Рис. 7.5. Вікно Simulink-моделі з бібліотечними блоками
Рис. 7.6. Блок, що моделює похідну від функції, та вікно редагування параметрів блоку
Рис. 7.7. Simulink-модель структурної схеми
Вікно моделі містить наступні елементи (7):
Меню вікна містить команди для редагування моделі, її настроювання й керування процесом розрахунку, роботи з файлами тощо:
Повний список команд меню вікна моделі наведений у додатковій літературі [2].
Для роботи з моделлю можна також використовувати кнопки на панелі інструментів (рис. 7.8).
Рис. 7.8. Панель інструментів вікна моделі
Кнопки панелі інструментів мають наступне призначення:
У нижній частині вікна моделі є рядок стану, у якому відображаються короткі коментарі до кнопок панелі інструментів, а також до пунктів меню, коли вказівник мишки перебуває над відповідним елементом інтерфейсу. Це ж текстове поле використовується й для індикації стану Simulink: Ready (Готово) або Running (Виконання). У рядку стану відображаються також:
Додавання текстових написів до моделі.
Для підвищення наочності моделі зручно використовувати текстові написи. Для створення напису потрібно вказати мишею місце напису й двічі натиснути лівою клавішею миші. Після цього зявиться прямокутна рамка з курсором для введення тексту. Аналогічним чином можна змінити й підпис до блоку. На рис. 1.9 показано текстовий напис і зміна напису в блоці передатної функції. (Варто мати на увазі, що деякі версії Simulink не адаптовані до використання кириличних шрифтів. В цьому випадку застосування написів кирилицею не бажано).
Pис. 7.9. Приклад додавання напису та зміна підпису блоків
Виділення, копіювання, переміщення, вставка, видалення обєктів та робота з буфером обміну Windows.
Для виконання якої-небудь дії з елементом моделі (блоком, сполучною лінією, написом) цей елемент необхідно спочатку виділити. Виділення об'єктів простіше всього здійснюється мишею. Для цього необхідно встановити курсор миші на потрібному обєкті й натиснути лівою клавішею. Відбудеться виділення обєкта. Про це будуть свідчити маркери по кутах обєкта (див. рис. 7.9). Можна також виділити кілька обєктів. Для цього треба встановити курсор миші поблизу групи обєктів, нажати ліву клавішу й, не відпускаючи її, почати переміщувати мишу. Зявиться пунктирна рамка, розміри якої будуть змінюватися при переміщенні мишки. Всі охоплені рамкою обєкти стають виділеними. Виділити всі об'єкти також можна, використовуючи команду Edit→Select All.
Після виділення обєкта його можна копіювати або переміщати в буфер проміжного зберігання, витягати з буфера, а також видаляти, використовуючи стандартні прийоми роботи в Windows.
Для копіювання обєкта в буфер його необхідно попередньо виділити, а потім виконати команду Edit→Copy або скористатися кнопкою на панелі інструментів. Копіювання можна виконати й у такий спосіб: нажати праву клавішу миші і не відпускаючи її, перемістити обєкт. При цьому буде створена копія обєкта, яку можна перемістити в необхідне місце.
Для вирізання обєкта в буфер його необхідно попередньо виділити, а потім виконати команду Edit→Cut або скористатися кнопкою на панелі інструментів.
При виконанні даних операцій варто мати на увазі, що обєкти знаходяться у власному буфері MatLab і недоступні з інших додатків. Використання команди Edit→Copy Model To Clipboard дозволяє помістити графічне зображення моделі в буфер Windows і робить його доступним для інших програм.
Для вставки обєкта з буфера необхідно попередньо вказати місце вставки, натиснувши лівою клавішею мишки в передбачуваному місці вставки, а потім виконати команду Edit→Paste або скористатися кнопкою на панелі інструментів.
Для видалення обєкта його необхідно попередньо виділити, а потім виконати команду Edit→Delete або скористатися клавішею Delete на клавіатурі. Варто врахувати, що команда Delete видаляє блок без переміщення його в буфер обміну. Однак цю операцію можна скасувати командою меню Edit→Undo. Для видалення всіх обєктів можна використати команду Edit→Delete All, або виділити усі обєкти та натиснути клавішу Delete на клавіатурі.
Зєднання, зміна розмірів та переміщення блоків.
Для зєднання блоків необхідно спочатку встановити курсор миші на вихідний порт одного із блоків. Курсор при цьому перетвориться у великий хрест із тонких ліній (рис. 7.10).
Рис. 7.10. Початок створення зєднання
Тримаючи натиснутою ліву кнопку миші, потрібно перемістити курсор до вхідного порту потрібного блоку. Курсор миші прийме вид хреста з тонких здвоєних ліній (рис. 7.11).
Рис. 7.11. Завершення створення з'єднання
Після створення лінії необхідно відпустити ліву клавішу миші. Свідченням того, що зєднання створене, буде жирна стрілка у вхідного порту блоку. Виділення лінії виробляється точно також як і виділення блоку одинарним натисканням лівої клавіші миші. Чорні маркери, розташовані у вузлах сполучної лінії будуть говорити про те, що лінія виділена.
Створення петлі лінії зєднання виконується також як переміщення блоку. Лінія зєднання виділяється, і потім потрібна частина лінії переміщується (рис. 7.12). Видалення зєднань виконується як і будь-яких інших обєктів.
Рис. 7.12. Створення петлі в сполучній лінії
Для зміни розміру блоку він виділяється, після чого курсор миші встановлюється на один з маркерів по кутах блоку. Після перетворення курсору у двосторонню стрілку, необхідно нажати ліву клавішу миші й розтягти (або стиснути) зображення блоку. На рис. 7.13 показаний цей процес. Розміри написів блоку при цьому не змінюються.
Рис. 7.13. Зміна розміру блоку
Будь-який блок моделі можна перемістити, виділивши його, і пересунувши, тримаючи натиснутої ліву клавішу миші. Якщо до входів і виходів блоку підведені сполучні лінії, то вони не розриваються, а лише скорочуються або збільшуються в довжині. У зєднання можна також вставити блок, що має один вхід і один вихід. Для цього його потрібно розташувати в необхідному місці сполучної лінії.
У процесі освоєння програми користувач може робити дії, які на перший погляд є незворотними, (наприклад, випадкове видалення частини моделі, копіювання тощо). У цьому випадку варто скористатися командою Undo скасування останньої операції. Команду можна викликати також за допомогою кнопки в панелі інструментів вікна моделі або з меню Edit. Для відновлення скасованої операції служить команда Redo (інструмент ).
Форматування обєктів.
У меню Format (також як і в контекстному меню, що викликається натисканням правої клавіші миші на обєкті) присутній набір команд форматування блоків. Команди форматування розділяються на кілька груп:
1) Зміна відображення написів:
2) Зміна кольорів відображення блоків:
3) Зміна положення блоку і його виду:
Установка параметрів моделювання.
Перед виконанням розрахунків (перед початком моделювання) необхідно попередньо задати параметри моделювання. Завдання параметрів розрахунку виконується в панелі керування меню Simulation→Configuration Parameters. Вид панелі керування наведений на рис. 7.14.
Рис. 7.14. Вікно з налаштуваннями параметрів моделювання
Це вікно має декілька вкладок зліва. Зупинимось на вкладці Solver, що задає налаштування параметрів розрахунку моделі. Вона містить наступні 4 групи:
Для звичайних налаштувань потрібні тільки перші дві групи. Розглянемо детальніше кожну з них.
Час розрахунку (Simulation time) задається початковим (Start time) і кінцевим (Stop time) значенням часу розрахунку. Початковий час, як правило, задається рівним нулю. Величина кінцевого часу задається користувачем, виходячи з умов розвязання завдання.
При виборі параметрів розрахунку необхідно вказати спосіб моделювання (Type) і метод розрахунку нового стану системи (Solver). Для параметра Type доступні два варіанти c фіксованим (Fixed-step) або зі змінним (Variable-step) кроком. Список методів розрахунку нового стану системи містить кілька варіантів. Перший варіант (discrete) використовується для розрахунку дискретних систем. Інші методи використовуються для розрахунку безперервних систем. Ці методи різні для змінного (Variable-step) і для фіксованого (Fixed-step) кроку часу та являють собою процедури числового вирішення систем диференціальних рівнянь, що описують модель. Докладний опис кожного з методів розрахунку системи наведено в довідковій системі MatLab, а також стислий опис їх наведений у теоретичних відомостях до лабораторної роботи №5.
Нижче двох списків Type перебуває область, вміст якої змінюється в залежності від обраного способу зміни модельного часу. При виборі Fixed-step у даній області зявляється текстове поле Fixed-step size (величина фіксованого кроку), що дозволяє задавати величину кроку моделювання (рис. 7.15). Величина кроку моделювання за згодою установлюється системою автоматично (auto). Необхідна величина кроку може бути введена замість значення auto або у формі числа, або у вигляді виразу (це відноситься й до всіх параметрів, що встановлюються системою автоматично).
При виборі Fixed-step необхідно також задати режим розрахунку (Tasking mode for periodic sample times), для якого доступні три варіанти:
Рис. 7.15. Вікно з налаштуваннями параметрів моделювання при виборі фіксованого кроку розрахунку
невідповідність швидкості й дискретності сигналів, що пересилаються блоками один одному.
При виборі Variable-step в області з'являються поля для установки трьох параметрів:
При моделюванні безперервних систем з використанням змінного кроку необхідно вказати точність обчислень: відносну (Relative tolerance) і абсолютну (Absolute tolerance). За згодою вони рівні і дорівнюють 10-3 чи auto.
Виконання розрахунку та завершення роботи.
Запуск розрахунку виконується за допомогою вибору пункту меню Simulation→Start або інструмента на панелі інструментів. Процес розрахунку можна завершити достроково, вибравши пункт меню Simulation→Stop або інструмент . Розрахунок також можна призупинити (Simulation→Pause) і потім продовжити (Simulation→Continue).
Для завершення роботи необхідно зберегти модель у файлі, закрити вікно моделі, вікно оглядача бібліотек, а також основне вікно пакета MatLab.
Основні бібліотекі блоків Simulink.
1.Sources джерела сигналів.
1.1. Джерело постійного сигналу Constant
Constant задає постійний за рівнем сигнал.
Основні параметри:
1) Constant value постійна величина.
2) Interpret vector parameters as 1-D інтерпретувати вектор параметрів як одномірний (при встановленому прапорці). Даний параметр зустрічається в більшості блоків бібліотеки Simulink. Надалі він розглядатися не буде.
3) Sample time крок квантування (дискретизації). Даний параметр зустрічається в більшості блоків бібліотеки Simulink. Надалі він розглядатися не буде.
Значення константи може бути дійсним або комплексним числом, що обчислюється виразом, вектором або матрицею. Рис. 7.16 ілюструє застосування цього джерела й вимір його вихідного сигналу за допомогою цифрового індикатора Display.
Рис. 7.16. Приклад використання джерела постійного сигналу Constant та його параметри
1.2. Генератор стрибкового сигналу Step.
Step Формує стрибковий сигнал.
Основні параметри:
1) Step time час настання перепаду сигналу (с).
2) Initial value початкове значення сигналу.
3) Final value кінцеве значення сигналу.
4) Sample time крок квантування (дискретизації).
Перепад може бути як у більшу сторону (кінцеве значення більше, чим початкове), так і в меншу (кінцеве значення менше, ніж початкове). Значення початкового й кінцевого рівнів можуть бути не тільки додатними, але й відємними (наприклад, зміна сигналу з рівня -5 до рівня -3). На рис. 7.17 показано використання генератора стрибкового сигналу.
Рис. 7.17. Приклад використання генератора стрибкового сигналу Step та його параметри
1.3. Джерело лінійнонаростаючого сигналу Ramp
Формує лінійний сигнал виду y= Slope* time + Initial value
Основні параметри:
1) Slope швидкість зміни вихідного сигналу.
2) Start time час початку формування сигналу.
3) Initial output початковий рівень сигналу на виході блоку.
На рис. 7.18. показано приклад використання даного блоку.
Рис. 7.18. Приклад використання джерела лінійнонаростаючого сигналу Ramp та його параметри
Параметр Slope розраховується для конкретної задачі, як тангенс кута нахилу сигналу. Нехай потрібно задати сигнал, що за 10 секунд наростає до величини 50, як показано на рис. 7.19. У цьому випадку величина Slope розраховується як .
Вигляд отриманого сигналу показаний на рис.7.19.
Рис. 7.19. Приклад створення заданого лінійнонаростаючого сигналу
1.4. Джерело сигналу часу Clock
Формує сигнал, величина якого на кожному кроці розрахунку дорівнює поточному часу моделювання.
Основні параметри:
1) Decimation крок, з яким обновляються показання часу на зображенні джерела, якщо встановлено прапорець параметра Display time. Параметр задається як кількість кроків розрахунку. Наприклад, якщо крок розрахунку моделі у вікні діалогу Simulation parameters установлений рівним 0.01 с, а параметр Decimation блоку Clock заданий рівним 1000, то відновлення показань часу буде вироблятися кожні 10 с модельного часу.
2) Display time відображення значення часу в блоці джерела.
На рис. 7.20 показаний приклад роботи даного джерела.
Рис. 7.20. Приклад використання джерела сигналу часу Clock та його параметри
1.5. Джерело синусоїдального сигналу Sine Wave
Формує синусоїдальний сигнал із заданою частотою, амплітудою, фазою й зсувом.
Для формування вихідного сигналу блоком можуть використовуватися два алгоритми. Вид алгоритму визначається параметром Sine Type (спосіб формування сигналу):
При формуванні вихідного сигналу за поточним часом Time-based сигнал джерела для безперервних систем формується за виразом
y = Amplitude* sin(Frequency*(Sample time) + Phase) + Bias
де Amplitude амплітуда.
Bias постійна складова сигналу.
Frequency (rads/sec) частота (рад/с).
Phase (rads) початкова фаза (рад).
При розрахунках дуже великих значень часу точність розрахунку вихідних значень сигналу падає внаслідок значної помилки округлення.
При формуванні вихідного сигналу за поточним часом Time-based сигнал джерела для дискретних систем формується за таким виразом (у матричній формі)
де ∆t постійна величина, рівна значенню Sample time.
У даному режимі помилка округлення для великих значень часу також зменшує точність розрахунку.
Формування вихідного сигналу по величині модельного часу Sample-based й кількості розрахункових кроків на один період формується за виразом
y= Amplitude* sin[(k + Number of offset samples)/Samples per period] + Bias
де k номер поточного кроку розрахунку.
Amplitude амплітуда.
Bias постійна складова сигналу.
Samples per period кількість розрахункових кроків на один період синусоїдального сигналу:
Samples per period = 2π / (Frequency* Sample time).
Number of offset samples початкова фаза сигналу, яка задається кількістю кроків модельного часу:
Number of offset samples = Phase* Samples per period/ (2π).
Sample time крок модельного часу.
У даному режимі помилка округлення не накопичується, оскільки Simulink починає відлік номера поточного кроку з нуля для кожного періоду. На рис. 7.21 показане застосування блоку. Для відображення графіків вихідних сигналів у моделі використаний віртуальний осцилограф Scope.
Рис. 7.21. Приклад використання джерела синусоїдально сигналу Sine Wave та його параметри
1.6. Блок вхідного порту In
Створює вхідний порт для підсистеми або моделі верхнього рівня ієрархії.
Основні параметри:
1) Port number номер порту.
2) Port dimensions розмірність вхідного сигналу. Якщо цей параметр дорівнює -1, то розмірність вхідного сигналу буде визначатися автоматично.
3) Sample time крок модельного часу.
4) Data type тип даних вхідного сигналу: auto, double, single, int8, uint8, int16, uint16, int32, uint32 або boolean.
5) Signal type тип вхідного сигналу:
При використанні блоків In в підсистемі вони є її входами, тобто сигнали через них передається усередину підсистеми. Назва вхідного порту буде показано на зображенні підсистеми як мітка порту. При створенні підсистем і додаванні блоку In у підсистему Simulink використовує наступні правила:
На рис. 7.22 показана модель, що використовує підсистему та вхідні порти.
Рис. 7.22. Приклад використання блоку вхідного сигналу In та його параметри
1.7. Джерело імпульсного сигналу Pulse Generator
Блок формує прямокутні імпульси.
Параметри:
1) Pulse Type спосіб формування сигналу, що може приймати два значення:
2) Amplitude амплітуда.
3) Period період, що задається в секундах для Time-based Pulse Type
або в кроках модельного часу для Sample-based Pulse Type.
4) Pulse width ширина імпульсів, що задається в % до періоду для Time-based Pulse Type або в кроках модельного часу для Sample-based Pulse Type.
5) Phase delay фазова затримка, що задається в секундах для Time-based Pulse Type або в кроках модельного часу для Sample-based Pulse Type.
6) Sаmple time крок модельного часу, що задається для Sample-based Pulse Type.
Приклад використання Pulse Generator показаний на рис. 7.23.
Рис. 7.23. Джерело прямокутних імпульсів Pulse Generator та його параметри
Більш детально з іншими блоками бібліотеки Sources та їх параметрами можна ознайомитися з додаткової літератури [2].
2. Sinks приймачі сигналів
2.1. Осцилограф Scope
Scope будує графіки досліджуваних сигналів у функції часу. Дозволяє спостерігати за змінами сигналів у процесі моделювання.
Зображення блоку й вікно для перегляду графіків показані на рис. 7.24.
Рис. 7.24. Осцилограф Scope
Для того, щоб відкрити вікно перегляду сигналів необхідно виконати подвійне натискання лівою клавішею миші на зображенні блоку. Це можна зробити на будь-якому етапі розрахунку (як до початку розрахунку, так і після нього, а також під час розрахунку). У тому випадку, якщо на вхід блоку надходить векторний сигнал, то крива для кожного елемента вектора будується окремим кольором. Настроювання вікна осцилографа виконується за допомогою панелей інструментів (рис. 7.25.
Рис. 7.25. Панель інструментів блоку Scope
Панель інструментів містить 11 кнопок:
Зміна масштабів відображуваних графіків можна виконувати декількома способами:
1) Нажати відповідну кнопку ( , або ) і натиснути один раз лівою клавішею мишки у потрібнім місці графіка. Відбудеться 2,5 кратне збільшення масштабу.
2) Нажати відповідну кнопку ( , або ) і, натиснувши ліву клавішу мишки, за допомогою динамічної рамки або відрізка вказати область графіка для збільшеного зображення.
3) Натиснути правою клавішею миші у вікні графіків і, вибрати команду Axes properties… у контекстному меню. Відкриється вікно властивостей графіка, у якому за допомогою параметрів Y-min та Y-max можна вказати граничні значення вертикальної осі. У цьому ж вікні можна вказати заголовок графіка (Title), замінивши вираження %<SignalLabel> у рядку уведення. Вікно властивостей показане на рис. 7.26.
Рис. 7.65. Вікно властивостей графіка
Основні параметри: Параметри блоку Scope встановлюються у вікні Scope parameters, що відкривається за допомогою інструмента (Parameters) панелі інструментів. Вікно параметрів має дві вкладки:
1) General загальні параметри.
2) Data history параметри збереження сигналів у робочій області MATLAB.
Вкладка загальних параметрів показана на рис. 7.27.
На вкладці General задаються наступні параметри:
1) Number of axes число входів (систем координат) осцилографа. При зміні цього параметра на зображенні блоку з'являються додаткові вхідні порти.
Рис. 7.27. Вкладка загальних параметрів General
2) Time range величина інтервалу часу, для якого відображаються графіки. Якщо час розрахунку моделі перевищує задане параметром Time range, то вивід графіка здійснюється порціями. При цьому інтервал відображення кожної порції графіка дорівнює заданому значенню Time range.
3) Tick labels вивід/приховання осей і міток осей. Може приймати три значення (вибираються зі списку):
4) Sampling установка параметрів виводу графіків у вікно. Задає режим виводу розрахункових точок на екран. При виборі Decimation кратність виводу встановлюється числом, що задає крок виведених розрахункових точок. На рис. 7.28 показано графіки синусоїдальних сигналів розрахованих з фіксованим кроком 0,1 с. На рис. 7.28, а у вікні блоку Scope виводиться кожна розрахункова точка (параметр Decimation дорівнює 1). На рис. 7.28, б показаний вивід кожного другого значення (параметр Decimation дорівнює 2).
Рис. 7.28. Відображеня синусоїдального сигналу: а параметр Decimation=1; б параметр Decimation=2
У тому випадку, якщо режим виводу розрахункових точок задається як Sample time, те його числове значення визначає інтервал квантування при відображенні сигналу. На рис. 7.29 показаний графік синусоїдального сигналу, для випадку, коли значення параметра Sample time дорівнює 0.1.
Рис. 7.29. Відображення синусоїдального сигналу (Sample time = 0.1)
5). Floating scope переключення осцилографа в “вільний” режим (при встановленому прапорці).
На вкладці Data history (рис. 7.30) задаються наступні параметри:
1) Limit data points to last максимальна кількість відображуваних розрахункових точок графіка. При перевищенні цього числа початкова частина графіка обрізується. У тому випадку, якщо прапорець параметра Limit data points to last не встановлений, то Simulink автоматично збільшить значення цього параметра для відображення всіх розрахункових точок.
2) Save data to workspace збереження значень сигналів у робочій області MatLab.
3) Variable name ім'я змінної для збереження сигналів у робочій області MatLab.
4) Format формат даних при збереженні в робочій області MatLab. Може приймати значення:
Рис. 7.30. Вкладка Data history
2.2. Графобудівник ХУ Graph
XY Graph Будує графік одного сигналу у функції іншого (графік виду Y(X)).
Основні параметри:
1) x-min мінімальне значення сигналу по осі X.
2) x-max максимальне значення сигналу по осі X.
3) y-min мінімальне значення сигналу по осі Y.
4) y-max максимальне значення сигналу по осі Y.
5) Sample time крок модельного часу.
Блок має два входи. Верхній вхід призначений для подачі сигналу, що є аргументом (X), нижній для подачі значень функції (Y). На рис. 7.31, як приклад використання графобудівника, показана побудова квадратичної функції та вікно параметрів блоку.
Рис. 7.31. Приклад використання графобудівника ХУ Graph
2.3. Цифровий дисплей Display
Display відображає значення сигналу у вигляді числа.
Основні параметри:
1) Format формат відображення даних, що може приймати наступні значення:
2) Decimation кратність відображення вхідного сигналу. При Decimation = 1 відображається кожне значення вхідного сигналу, при Decimation = 2 відображається кожне друге значення, при Decimation = 3 кожне третє значення й т.д.
3) Sample time крок модельного часу, що визначає дискретність відображення даних.
4) Floating display (прапорець) переключення блоку в “вільний” режим. У даному режимі вхідний порт блоку відсутній, а вибір сигналу для відображення виконується натисканням лівої клавіші мишки на відповідній линії зв'язку. У цьому режимі для параметра розрахунку Signal storage reuse повинне бути встановлене значення off (вкладка Advanced у вікні діалогу Simulation parameters…).
На рис. 7.32 показане застосування блоку Display з використанням різних варіантів параметра Format.
Рис. 7.32. Застосування блоку Display з використанням різних
варіантів параметра Format
Блок Display може використовуватися для відображення не тільки скалярних сигналів, але також векторних, матричних і комплексних. Рис. 7.33 ілюструє це. Якщо всі відображувані значення не можуть поміститися у вікні блоку, у правому нижньому куті блоку з'являється символ , що вказує на необхідність збільшити розміри блоку (див. блок Display3 на рис. 7.33).
Рис. 7.33. Застосування блоку Display для відображення векторних, матричних і комплексних сигналів
2.4. Блок зупинки моделювання Stop Simulation
Stop Simulation забезпечує завершення розрахунку, якщо вхідний сигнал блоку стає не рівним нулю.
Параметри: Немає.
При подачі на вхід блоку ненульового сигналу Simulink виконує поточний крок розрахунку, а потім зупиняє моделювання. Якщо на вхід блоку поданий векторний сигнал, то для зупинки розрахунку досить, щоб один елемент вектора став ненульовим. На рис. 7.34 показаний приклад використання даного блоку. У прикладі зупинка розрахунку відбувається, якщо вихідний сигнал блоку Ramp стає більшим або рівним 50.
Рис. 7.34. Застосування блоку Stop Simulation
2.5. Блок збереження даних у робочій області То Workspace
Блок записує у робочу область MatLab дані, що надходять на його вхід.
Основні параметри:
1) Variable name ім'я змінної, в якій зберігаються записувані дані.
2) Limit data points to last максимальна кількість розрахункових точок за часом, що зберігаються (відлік ведеться від моменту завершення моделювання). У тому випадку, якщо значення параметра Limit data points to last задано як inf, то в робочій області будуть збережені всі дані.
3) Decimation кратність запису даних у робочу область.
4) Sample time крок модельного часу, що визначає дискретність запису даних.
5) Save format формат збереження даних, який може приймати значення:
На рис. 7.35 показаний приклад використання даного блоку та його параметри. Результати розрахунку зберігаються в змінній simout. Для зчитування даних збережених у робочій області MatLab можна використовувати блок From Workspace бібліотеки Sources.
Рис. 7.35. Застосування блоку To Workspace
2.6. Кінцевий приймач Terminator
Блок використовується для подачі сигналу з невикористовуваного виходу іншого блоку.
Параметри: Немає.
У тому випадку, якщо вихід якого-небудь блоку виявляється не підключеним до входу іншого блоку, Simulink видає попереджуюче повідомлення в командному вікні MatLab. Для виключення цього необхідно використовувати блок Terminator. На рис. 7.36 показаний приклад використання кінцевого приймача. У блоці Demux другий елемент не використовується, тому він подається на вхід блоку Terminator.
Рис. 7.36. Застосування блоку Terminator
2.7. Блок вихідного порту Out
Out cтворює вихідний порт для підсистеми або для моделі верхнього рівня ієрархії.
Параметри:
1) Port number номер порту.
2) Output when disabled вид сигналу на виході підсистеми, у випадку якщо підсистема виключена. Використовується для керованих підсистем. Може приймати наступні значення (вибираються зі списку):
При використанні блоків Out у підсистемі вони є її виходами, тобто сигнали із підсистеми передаються в модель (або підсистему) верхнього рівня. Назва вихідного порту буде показано на зображенні підсистеми як мітка порту.
При створенні підсистем і додаванні блоку Out у підсистему Simulink використовує наступні правила:
1) При створенні підсистеми за допомогою команди Edit→Create subsystem вихідні порти створюються й нумеруються автоматично починаючи з 1.
2) Якщо в підсистему додається новий блок Out, то йому присвоюється наступний номер.
3) Якщо блок Out вилучається, то інші порти перейменовуються таким чином, щоб послідовність номерів портів була безперервною.
4) Якщо в послідовності номерів портів є розрив, то при виконанні моделювання Simulink видасть повідомлення про помилку й зупинить розрахунок. У цьому випадку необхідно вручну перейменувати порти таким чином, щоб послідовність номерів портів не порушувалася.
На рис. 7.37 показана модель, що використовує підсистему, схема цієї підсистеми та параметри блоку.
Рис. 7.37. Використання блоку Outport у підсистемі
3. Continuous аналогові блоки
3.1. Блок обчислення похідної Derivative
Derivative виконує числове диференціювання вхідного сигналу.
Параметри: Немає.
Для обчислення похідної використовується наближена формула Ейлера
де ∆u величина зміни вхідного сигналу за час ∆t.
∆t поточне значення кроку модельного часу.
Значення вхідного сигналу блоку до початку розрахунку вважається рівним нулю. Початкове значення вихідного сигналу також покладається рівним нулю. Точність обчислення похідної істотно залежить від величини встановленого кроку розрахунку. Вибір меншого кроку розрахунку поліпшує точність обчислення.
На рис. 7.38 показаний приклад використання блоку, для обчислення похідної прямокутного сигналу. У розглянутому прикладі, для підвищення наочності, крок розрахунку обраний досить великим.
Рис. 7.38. Використання блоку Derivative для диференціювання сигналу
Даний блок використовується для диференціювання аналогових сигналів. При диференціюванні дискретного сигналу за допомогою блоку Derivative його вихідний сигнал буде являти собою послідовність імпульсів відповідним моментам часу стрибкоподібної зміни дискретного сигналу.
3.2. Інтегруючий блок lntegrator
Блок виконує інтегрування вхідного сигналу.
Основні параметри:
1) External reset зовнішнє скидання. Тип зовнішнього керуючого сигналу, що забезпечує скидання інтегратора до початкового стану. Вибирається зі списку:
У тому випадку, якщо обрано який-небудь (але не none), тип керуючого сигналу, то на зображенні блоку з'являється додатковий керуючий вхід. Поруч із додатковим входом буде показана умовна позначка керуючого сигналу.
2) Initial condition source джерело початкового значення вихідного сигналу. Вибирається зі списку:
3) Initial condition початкова умова. Установка початкового значення вихідного сигналу інтегратора. Параметр доступний, якщо обрано внутрішнє джерело початкового значення вихідного сигналу.
4) Limit output (прапорець) використання обмеження вихідного сигналу.
5) Upper saturation limit верхній рівень обмеження вихідного сигналу. Може бути заданий як числом, так і символьною послідовністю inf, тобто +∞.
6) Lower saturation limit нижній рівень обмеження вихідного сигналу. Може бути заданий як числом, так і символьною послідовністю inf, тобто - ∞.
7) Show saturation port керує відображенням вихідного порту при виході інтегратора на обмеження. Вихідний сигнал даного порту може приймати наступні значення:
8) Show state port (прапорець) відобразити/сховати порт стану блоку. Даний порт використовується в тому випадку, якщо вихідний сигнал інтегратора потрібно подати як сигнал зворотного зв'язка цього ж інтегратора. На приклад, при установці початкових умов через зовнішній порт або при скиданні інтегратора через порт скидання. Вихідний сигнал із цього порту може використовуватися також для організації взаємодії з керованою підсистемою.
9) Absolute tolerance абсолютна погрішність.
На рис. 7.39 показаний приклад роботи інтегратора при подачі на його вхід стрибкового сигналу. Початкова умова прийнята рівна нулю.
Приклад на рис. 7.40 відрізняється від попереднього подачею початкового значення через зовнішній порт. Початкове значення вихідного сигналу в даному прикладі задано рівним -10.
Рис. 7.39. Приклад застосування блоку Integrator та вікно його параметрів
Рис. 7.40. Інтегрування стрибкового сигналу з установкою початкового значення вихідного сигналу
4. Discontiniuties нелінійні блоки
4.1. Блок обмеження Saturation
Блок виконує обмеження величини сигналу.
Параметри:
1) Upper limit верхній поріг обмеження.
2) Lower limit нижній поріг обмеження.
3) Treat as gain when linearizing (прапорець) трактувати як підсилювач із коефіцієнтом передачі рівним 1 при лінеаризації.
Вихідний сигнал блоку дорівнює вхідному, якщо його величина не виходить за поріг обмеження. По досягненні вхідним сигналом рівня обмеження вихідний сигнал блоку перестає змінюватися й залишається рівним порогу. На рис. 7.41 показаний приклад використання блоку для обмеження синусоїдального сигналу. На малюнку приводяться часові діаграми сигналів і залежність вихідного сигналу блоку від вхідного.
Рис. 7.41. Приклад використання блоку Saturation та його параметри
4.2. Релейний блок Relay
Блок реалізує релейну нелінійність.
Основні параметри:
Вихідний сигнал блоку може приймати два значення. Одне з них відповідає включеному стану реле, друге виключеному. Перехід одного стану в інше відбувається стрибком при досягненні вхідним сигналом порога включення або вимикання реле. У тому випадку, якщо пороги включення й вимикання реле мають різні значення, то блок реалізує релейну характеристику з гістерезисом. При цьому значення порога включення повинне бути більше, ніж значення порога вимикання.
На рис. 7.42 показаний приклад використання блоку Relay. На часових діаграмах видно, що включення реле відбувається при досягненні вхідним сигналом величини 0,5, а вимикання при -0,5.
Рис. 7.42. Приклад використання блоку Relay та його параметри
5. Signal Routing маршрутизатори сигналів
5.1. Мультиплексор (змішувач) Mux
Блок поєднує вхідні сигнали у вектор.
Параметри:
Вхідні сигнали блоку можуть бути скалярними й (або) векторними. Якщо серед вхідних сигналів є вектори, то кількість входів можна задавати як вектор із вказівкою числа елементів кожного вектора. Наприклад, вираз [2 3 1] визначає три вхідних сигнали, перший сигнал вектор із двох елементів, другий сигнал вектор із трьох елементів, і останній сигнал скаляр. У тому випадку, якщо розмірність вхідного вектора не збігається із зазначеної в параметрі Number of Inputs, то після початку розрахунку Simulink видасть повідомлення про помилку. Розмірність вхідного вектора можна задавати як -1 (мінус один). У цьому випадку розмірність вхідного вектора може бути будь-якою. Параметр Number of Inputs можна задавати також у вигляді списку міток сигналів, наприклад: Vector1, Vector2, Scalar. У цьому випадку мітки сигналів будуть відображатися поруч із відповідними сполучними лініями. Сигнали, що подаються на входи блоку повинні бути одного типу (дійсного або комплексного).
Приклади використання блоку Mux показані на рис. 7.43.
Рис. 7.43. Приклади використання блоку Mux та його параметри
5.2. Демультиплексор (роздільник) Demux
Demux розділяє вхідний векторний сигнал на окремі складові.
Параметри:
Вхідним сигналами у звичайному режимі є вектор, сформований будь-яким способом. Вихідними сигналами є скаляри або вектори, кількість яких і розмірність визначається параметром Number of Outputs і розмірністю вхідного вектора. Якщо кількість виходів P (значення параметра Number of Outputs) дорівнює розмірності вхідного сигналу N, то блок виконує поділ вхідного вектора на окремі елементи. Якщо кількість виходів P менше, ніж розмірність вхідного сигналу N, то розмірність перших P-1 вихідних сигналів дорівнює відношенню N/P, округленому до найближчого більшого числа, а розмірність останнього вихідного сигналу дорівнює різниці між розмірністю вхідного сигналу й сумою розмірностей перших P-1 виходів. Наприклад, якщо розмірність вхідного сигналу дорівнює 8, а кількість виходів дорівнює 3, то перші два вихідних вектори будуть мати розмірність ceil(8/3)=3, а останній вихідний вектор буде мати розмірність 8-(3+3)=2. Параметр Number of Outputs може бути заданий також за допомогою вектора, що визначає розмірність кожного вихідного сигналу. Наприклад, вираз [2 3 1] визначає три вихідних сигнали, перший сигнал вектор із двох елементів, другий сигнал вектор із трьох елементів, і останній сигнал скаляр. Розмірність можна також задавати як -1 (мінус один). У цьому випадку розмірність відповідного вихідного сигналу визначається як різниця між розмірністю вхідного вектора й сумою розмірностей заданих вихідних сигналів. Наприклад, якщо розмірність вхідного вектора дорівнює 6, а параметр Number of Outputs заданий вираженням [1 -1 3], то другий вихідний сигнал буде мати розмірність 6-(3+1)=2.
Приклади використання блоку Demux показані на рис. 7.44.
Рис. 7.44. Приклади використання блоку Demux та його параметри
5.3. Блок перемикача Switch
Switch виконує перемикання вхідних сигналів по сигналу керування.
Параметри: Threshold поріг керуючого сигналу.
Якщо сигнал керування, що подається на середній вхід блоку більше, ніж величина граничного значення Threshold, то на вихід блоку проходить сигнал з першого (верхнього) входу. Якщо сигнал керування стане менше, ніж граничне значення, то на вихід блоку буде надходити сигнал із другого (нижнього) входу.
На рис. 7.45 показаний приклад роботи блоку Switch, коли сигнал на керуючому вході ключа дорівнює 1, то на вихід блоку проходить гармонійний сигнал. Якщо ж керуючий сигнал дорівнює нулю, то на вихід проходить нульовий сигнал від блоку Constant. Граничне значення керуючого сигналу задано рівним 0,5.
Рис. 7.45. Застосування перемикача Switch та його параметри
5.4. Блок ручного перемикача Manual Switch
Блок виконує перемикання вхідних сигналів по команді користувача.
Параметри: Немає.
Командою на перемикання є подвійне натискання лівою клавішею мишки на зображенні блоку. При цьому зображення блоку змінюється, показуючи, який вхідний сигнал у цей момент проходить на вихід блоку. Перемикання блоку можна виконувати як до початку моделювання, так і в процесі розрахунку.
На рис. 7.46 показаний приклад використання блоку Manual Switch.
Рис. 7.46. Приклад використання блоку Manual Switch
6. Math Operations блоки математичних операцій
6.1. Abs блок обчислення модуля
Блок виконує обчислення абсолютного значення величини сигналу.
Параметри: Saturate on integer overflow (прапорець) подавляти переповнення цілого. При встановленому прапорці обмеження сигналів цілого типу виконується коректно.
Приклад використання блоку Abs, що обчислює модуль поточного значення синусоїдального сигналу, показаний на рис. 7.47.
Рис. 7.47. Приклад використання блоку Abs
6.2. Блок обчислення суми Sum
Блок виконує обчислення суми поточних значень сигналів.
Параметри:
Кількість входів і операція (додавання або віднімання) визначається списком знаків параметра List of sign. При цьому мітки входів позначаються відповідними знаками. У параметрі List of sign можна також указати число входів блоку. У цьому випадку всі входи будуть підсумовуючими. Якщо кількість входів блоку перевищує 3, то зручніше використовувати блок Sum прямокутної форми. Блок може використовуватися для підсумовування скалярних, векторних або матричних сигналів. Типи сигналів суми повинні збігатися. Не можна, наприклад, подати на той самий підсумовуючий блок сигнали цілого й дійсного типів. Якщо кількість входів блоку більше, ніж один, то блок виконує поелементні операції над векторними й матричними сигналами. При цьому кількість елементів у матриці або векторі повинне бути однаковим. Якщо в якості списку знаків указати цифру 1 (один вхід), то блок можна використовувати для визначення суми елементів вектора.
Приклади використання блоку Sum показані на 7.48.
Рис. 7.48. Приклади використання блоку Sum та його параметри
6.3. Блок множення Product
Блок виконує обчислення добутку поточних значень сигналів.
Параметри:
Якщо параметр Number of inputs заданий списком, що включає крім знаків множення також знаки ділення, то мітки входів будуть позначені символами відповідних операцій. Блок може використовуватися для операцій множення або розподілу скалярних векторних або матричних сигналів. Типи вхідних сигналів блоку повинні збігатися. Якщо як кількість входів указати цифру 1 (один вхід), то блок можна використовувати для визначення добутку елементів вектора.
Приклади використання блоку Product при виконанні скалярних і поелементних операцій показані на 7.49.
При виконанні матричних операцій необхідно дотримувати правил їхнього виконання. Наприклад, при множенні двох матриць необхідно, щоб кількість рядків першої матриці рівнялося кількості стовпців другої матриці.
Рис. 7.49. Приклади використання блоку Product та його параметри
6.4. Підсилювач Gain
Блок виконуює множення вхідного сигналу на постійний коефіцієнт.
Параметри:
Параметр Multiplication блоку Gain може бути додатним або відємним числом, як більше, так і менше 1. Коефіцієнт підсилення можна задавати у вигляді скаляра, матриці або вектора, а також у вигляді виразу, що обчислюється. У тому випадку, якщо параметр Multiplication заданий як Element-wise K*u, то блок виконує операцію множення на заданий коефіцієнт скалярного сигналу або кожного елемента векторного сигналу. У противному випадку блок виконує операцію матричного множення сигналу на коефіцієнт заданий матрицею. За згодою коефіцієнт підсилення є дійсним числом типу double. Для операції поелементного підсилення вхідний сигнал може бути скалярного, векторного або будь-якого матричного типу, за винятком логічного (boolean). Елементи вектора повинні мати однаковий тип сигналу. Вихідний сигнал блоку буде мати той же самий тип, що й вхідний сигнал. Параметр блоку Gain може бути скаляром, вектором або матрицею будь-якого типу, за винятком логічного (boolean). При обчисленні вихідного сигналу блок Gain використовує наступні правила:
Приклади використання блоку Gain при виконанні скалярних і поелементних операцій показані на 7.50.
Рис. 7.50. Приклади використання блоку Gain та його параметри
6.5. Блок обчислення математичних функцій Math Function
Блок виконує обчислення математичної функції.
Параметри:
exp експонентна функція.
log функція натурального логарифма.
10^u обчислення ступеня 10.
log10 функції логарифма.
magnitude^2 обчислення квадрата модуля вхідного сигналу.
square обчислення квадрата вхідного сигналу.
sqrt квадратний корінь.
pow введення в ступінь.
conj обчислення комплексно-спряженого числа.
reciprocal обчислення частки від ділення вхідного сигналу на 1.
hypot обчислення кореня квадратного із суми квадратів вхідних сигналів (гіпотенузи прямокутного трикутника за значеннями катетів).
rem функція, що обчислює залишок від ділення першого вхідного сигналу на другий.
mod функція, що обчислює залишок від ділення з урахуванням знака.
transpose транспонування матриці.
hermitian обчислення ермітової матриці.
auto автоматичне визначення типу.
real дійсний сигнал.
complex комплексний сигнал.
Тип вихідного сигналу залежить від типу вхідного сигналу й параметра блоку Output signal type.
Приклади використання блоку Math Function та його параметри показані на рис. 7.51.
Рис. 7.51. Приклади використання блоку Math Function та його параметри
6.6. Блок обчислення тригонометричних функцій Trigonometric Function
Блок виконує обчислення тригонометричної функції.
Параметри:
При векторному або матричному вхідному сигналі блок виконує поелементне обчислення заданої функції.
Приклади використання блоку Trigonometric Function та його параметри показані на рис. 7.52.
Рис. 7.52. Приклади використання блоку Trigonometric Function та його параметри
6.7. Блок визначення мінімального або максимального значення MinMax
Блок визначає максимальне або мінімальне значення із всіх сигналів, що надходять на його входи.
Параметри:
Вхідні сигнали блоку можуть бути скалярними або векторними. Блок визначає максимальне або мінімальне значення із всіх скалярних сигналів, що надходять на його входи. Якщо вхідні сигнали є векторними, то блок виконує поелементну операцію пошуку мінімального або максимального значення. У цьому випадку розмірності векторів повинні збігатися. Якщо кількість вхідних портів блоку задано рівним 1, то блок може використовуватися для знаходження мінімального або максимального значення у вхідному векторі.
Приклади використання блоку MinMax та його параметри показані на рис. 7.53.
Рис. 7.54. Приклади використання блоку MinMax та його параметри
У даному розділі розглянуті тільки бібліотекі та їх блоки, необхідні для початкового рівня користування Simulink. Більш детально з іншими бібліотеками Simulink та їх параметрами можна ознайомитися з додаткової літератури [2].
Вирішення алгебричних рівнянь графічним методом за допомогою Simulink.
Розглянемо наступний приклад. Змінна x змінює своє значення від -10 до 10 за 10 секунд. Отримати графічну залежність y=f(x), якщо
.
Використаємо для створення змінної x блок Slope з бібліотеки Sources. За умовою x змінює своє значення на 20 одиниць за 10 секунд, тому параметр Slope обраховується як 20/10=2. Для зміщення сигналу x на -10 віднімаємо від вихідного сигналу зі Slope 10 за допомогою суматора. Змінна x створена. Час моделювання заданий 10 секунд. Структурна схема у Simulink заданого рівняння показана на рис. 7.55. Для виводу графіка y=f(x) потрібно додати на вихід схеми блок XYGraph. Графіки y=f(x) та x(t) також зображені на рис. 7.55.
Рис. 7.55. Приклад складання структурної схеми для графічного вирішення алгебричного рівняння
Розглянемо наступний приклад. Задана система алгебричних рівнянь
.
Змінна х змінюється від -25 до 40 за 20 секунд. Отримати графічні залежності y1=f(x) та y2=f(x). Занести дані у робочу область MatLab та використати команди для побудови графіків, оформити їх та підписати осі.
Структурна схема для розвязання системи алгебричних рівнянь зображена на рис. 7.56. Для занесення масивів x, y1 та y2 використані блоки To Workspace з бібліотеки Sinks. У цих блоках виставлений формати виводу array та присвоєні наступні назви змінним: x х, y1 y1, y2 y2. Програма для побудови та оформлення графіків буде мати наступний вигляд
plot(x,y1,'r-','LineWidth',2) %побудова першого графіка
hold %затримка
plot(x,y2,'b--','LineWidth',2) %побудова другого графіка
xlabel('агрумент х','FontName','Arial','FontSize', 12)
ylabel('функція y','FontName','Arial','FontSize', 12)
title('графіки залежності y_1(x) та y_2(x)','FontName','TimesNewRoman','FontSize',12)
grid %активація сітки
axis([-25 40 -200000 200000]) %масштабування графіків
Побудовані і оформлені за даною програмою графіки, що є рішенням для системи алгебричних рівнянь показані на рис. 7.57.
Рис. 7.56. Структурна схема для вирішення системи алгебричних рівнянь
Рис. 7.57. Графічний розвязок системи алгебричних рівнянь
Розглянемо ще один приклад. Задане алгебричне рівняння вигляду
.
Змінна х змінюється від -100 до 100 за 100 секунд. Отримати графічну залежності y=f(x). Занести дані у робочу область MatLab та використати команди для побудови графіків, оформити їх та підписати осі.
Структурна схема для розвязання цього рівняння зображена на рис. 7.58. Для занесення масивів x, y використані блоки To Workspace з бібліотеки Sinks. У цих блоках виставлений формати виводу array та присвоєні наступні назви змінним: x х, y y. Програма для побудови та оформлення графіків буде мати наступний вигляд
plot(x,y,'r-','LineWidth',2) %побудова першого графіка
xlabel('агрумент х','FontName','Arial','FontSize', 12)
ylabel('функція y','FontName','Arial','FontSize', 12)
title('графіки залежності y(x)','FontName','TimesNewRoman', 'FontSize',12)
grid %активація сітки
Побудований і оформлений за даною програмою графік, що є рішенням для алгебричного рівняння показані на рис. 7.59.
Рис. 7.58. Структурна схема для вирішення алгебричного рівняння
Рис. 7.59. Графічний алгебричного рівняння
Побудова заданої траєкторії руху
У задачах автоматизації електромеханічних систем важливим є питання відпрацювання обєктом керування заданої траєкторії руху. Нехай задана траєкторія, що зображена на рис. 7.60. Необхідно скласти структурну схему з блоків Simulink для задання цієї траєкторії та побудувати за допомогою відповідних команд.
Рис. 7.60. Задана траекторія руху
На початку руху потрібно задати пряму розгону. Це можна зробити за допомогою блоку Ramp з параметром Slope=314/5=62.8 та обмежити його наростання блоком Saturation з параметром верхньої межі обмеження Upper Limit=314 (Lover Limit можна поставити рівним 0 або залишити за умовчуванням так як він ні на що не впливає у даному прикладі). Ця початкова схема та вихідний сигнал показані на рис. 7.61.
Рис. 7.61. Початок формування траекторії
Далі у час 15 секунд потрібно відняти від вихідного сигналу 114 для того, щоб отримати величину 200. Це робиться за допомогою блоків Sum та Step. У параметрі Step Time блока Step необхідно поставити 15, а параметри Final Value=114. Цей блок необхідно підключити до «-» суматора на вихідному сигналі. Ця частина схеми та відповідна частина траєкторії зображени на рис. 7.62.
Рис. 7.62. Другий етап формування траєкторії
Наступним етапом буде на 25-й секунді підключення блоку Ramp з відємним коефіцієнтом нахилу для досягнення сигналом величини -200 за 20 секунд (з 25-ї по 45-у секунди) Slope=-400/20=-20 та обмежити його на виході блоком Saturation з параметром Lover Limit=-400 (параметр Upper Limit можна задати 0 або залишити за умовчуванням). Цей сигнал необхідно подати на додатній вхід суматора. Цей етап формування траєкторії показаний на рис. 7.63.
Рис. 7.63. Третій етап формування траєкторії
Далі за допомогою блоку Step у 55 секунд віднімаємо від вихідного сигнала 114 для отримання величини -314. Для цього вводяться наступні параметри блока Step Time=55, Final Value=114 та його сигнал заводиться на відємний вхід суматора. Цей етап формування траєкторії показаний на рис. 7.64.
Рис. 7.64. Четвертий етап формування траєкторії
Останнім етапом є зниження сигналу до 0 за 5 секунд, починаючи з 65-ї секунди. Для цього знову застосовується блок Ramp з параметрами Start Time=65, Slope=314/5=68.2 та блок Saturation на виході з параметром Upper Limit=314 (Lover Limit можна поставити рівним 0 або залишити за умовчуванням). Цей сигнал необхідно подати на додатній вход суматора. Сформована траєкторія та структурна схема показані на рис. 7.65.
Рис. 7.65. Сформована траекторія та її структурна схема
Створення заданих сигналів
Розглянемо створення заданого сигналу на прикладі синусоїди u(t)=3sin(2t), що показана на рис. 7.66. Необхідно привести її до вигляду, що зображений на рис. 7.67.
Рис. 7.66. Вигляд заданої синусоїди u(t)=3sin(2t)
Рис. 7.67. Вигляд зміненої синусоїди
Як видно з рис. 7.66 період синосоїди дорівнює π. Щоб отримати синусоїду, зображену на рис. 7.67, потрібно починаючи у час t=3π/4 выдключати подачу синусоїдального сигналу, у час t=5π/4 знову включати, у час t=7π/4 виключати и т.д. Застосовуємо блок Switch з параметром Threshold=0 і критерієм переключення u2>= Threshold, що буде перемикатися у потрібний час. На верхній вхід подається задана синусоїда за допомогою блоку SineWave, на нижній вхід подається нульовий сигнал за допомогою блоку Constant. На керуючий вхід блоку у відповідні моменти часу потрібно подавати ступінчаті сигнали -1 (для переключення на нижній вхід) та +1 (для переключення на верхній вхід). Структурна схема, що реалізує змінену синусоїду, показана на рис. 7.68.
Рис. 7.68. Структурна схема для створення зміненої синусоїди
Таблиця 7.1.
№ бр. |
Час зміни x |
Діапазон зміни x |
Вигляд рівняння |
1 |
10 с |
-30…30 |
|
2 |
20 с |
-35…35 |
|
3 |
30 с |
-40…40 |
|
4 |
40 с |
-55…55 |
|
5 |
50 с |
-60…60 |
|
6 |
60 с |
-75…75 |
|
7 |
70 с |
-90…90 |
|
8 |
80 с |
-105…105 |
Таблиця 7.2.
№ бр. |
Час зміни x |
Діапазон зміни x |
Вигляд системи рівнянь |
1 |
10 с |
-100…50 |
|
2 |
15 с |
-50…10 |
|
3 |
20 с |
-45…70 |
|
4 |
25 с |
-60…70 |
|
5 |
30 с |
-105…40 |
|
6 |
35 с |
-90…20 |
|
7 |
40 с |
-20…65 |
|
8 |
45 с |
-130…30 |
Таблиця 7.3.
№ бр. |
Вигляд зміненої синусоїди |
1 |
|
2 |
|
3 |
|
4 |
|
5 |
|
6 |
|
7 |
|
8 |
Таблиця 7.4.
№ бр. |
Вигляд заданої траєкторії |
№ бр. |
Вигляд заданої траєкторії |
1 |
5 |
||
2 |
6 |
||
3 |
7 |
||
4 |
8 |
7.3. Зміст звіту
Звіт з лабораторної роботи має містити наступні матеріали:
7.4. Контрольні запитання
Лабораторна робота № 8
вирішення диференційних рівнянь за допомогою структурних схем
Тривалість лабораторної роботи 2 год.
Мета роботи ознайомитися з принципами складання структурних схем для вирішення диференційних рівнянь та правилами виводу графіків їх розвязків.
Побудова структурної схеми для вирішення диференційного рівняння першого порядку із заданими початковими умовами
Нехай задане диференційне рівняння першого порядку
з заданими початковими умовами .
Перетворимо це рівняння у зручний вигляд для побудови структурної схеми. Старша похідна залишається зліва, всі інші доданки справа. Таким чином, рівняння матиме наступний вигляд
.
Створення структурної схеми для вирішення диференційного рівняння будь-якого порядку починається з вибору кількості інтегруючих блоків (Integrator). Ця кількість залежить від порядку рівняння. Так як задане диференційне рівняння першого порядку, то структурна схема обмежиться одним інтегратором. На вході інтегратора буде похідна від функції , на виході сама функція , як показано на рис. 8.1.
Рис. 8.1. Початок створення структурної схеми для вирішення диференційного рівняння першого порядку
Наступним кроком є визначення кількості доданків, які утворюють похідну. Як видно з останнього рівняння, таких доданків буде три: , та . Таким чином до входу інтегратора підключається суматор (Sum) з трьома входами (два додатних та один відємний). Так як диференціювання відбувається за змінною , то для підключення першого доданку необхідно створити цю змінну за допомогою блока Sine Wave та помножити цей сигнал на константу 1/2 (блок Gain). Ця частина структурної схеми зображена на рис. 8.2.
Рис. 8.2. Другий етап створення структурної схеми для вирішення диференційного рівняння першого порядку
На другий додатній вхід суматора підключається константа (блок Constant) 3/2, а на відємний вхід сигнал y з вихода інтегратора, помножений на 5 за допомогою блоку Gain. Таким чином, структурна схема диференційного рівняння першого порядку складена. Для виводу до робочої області масиву функції y на вихід інтегратора підключається блок To Workspace з назвою «y» та форматом даних «Array». Для створення сигналу часу t використаємо блок Clock та також підключимо його до блоку To Workspace з назвою «t» та форматом даних «Array». Також у блоці Integrator в параметрі Initial Condition необхідно задати початкові умови, тобто поставити 1. Створена структурна схема показана на рис. 8.3.
Рис. 8.3. Структурна схема для вирішення диференційного рівняння першого порядку
Час моделювання підбирається експериментальним шляхом до появи усталеного руху. У даному прикладі він підібран 20 секунд. Програма у М-файлі для побудови графіка рішення заданого рівняння біде наступною
figure; %створення графічного вікна
plot(t,y,'b-','LineWidth',2); %побудова графіка рішення
xlabel('Час t, c'); %підписи осей та графіка
ylabel('Функція y');
title('Графік рішення диференційного рівняння першого порядку');
grid; %активація сітки
Графік, побудований за даною програмою показан на рис. 8.4.
Рис. 8.4. Графік вирішення диференційного рівняння першого порядку
Розглянемо приклад складання структурної схеми для диференційного рівняння другого порядку. Нехай задане рівняння має наступний вигляд
з початковими умовами , .
Перетворимо це рівняння у зручний вигляд для побудови структурної схеми. Старша похідна залишається зліва, всі інші доданки справа. Таким чином, рівняння матиме наступний вигляд
.
Так як це диференційне рівняння другого порядку, потрібно використати два інтегратора, зєднані послідовно, як зображено на рис. 8.5.
Рис. 8.5. Початок створення структурної схеми для вирішення диференційного рівняння другого порядку
Методика подальшого складання структурної схеми аналогічна попередній. Для формування масиву часу застосований блок Clock, що множиться на 2 за допомогою блоку Gain та подається на блок Trigonometric Function для отримання сигналу . Структурна схема для вирішення диференійного рівняння другого порядку зображена на рис. 8.6.
Рис. 8.6. Структурна схема для вирішення диференційного рівняння другого порядку
Початкові умови та задаються у блоках Integrator та Integrator1. Програма для побудови графіків розвязків та буде мати наступний вигляд
figure; %створення графічного вікна
subplot(2,1,1); %відкриття першого графічного підвікна
plot(t,y,'b-','LineWidth',2); %побудова графіка y(t)
xlabel('Час t, c'); %підписи осей та графіка
ylabel('Функція y');
title('Графік рішення диференційного рівняння другого порядку');
grid; %активація сітки
subplot(2,1,2); %відкриття другого графічного підвікна
plot(t,y1,'b-','LineWidth',2); %побудова графіка y(t)
xlabel('Час t, c'); %підписи осей
ylabel('Функція y1');
grid; %активація сітки
Графіки залежностей та показані на рис.8.7.
Рис. 8.7. Графік вирішення диференційного рівняння другого порядку
На основі вищевикладеної методики можна складати структурні схеми для вирішення диференційних рівнянь будь-якого порядку з заданими початковими умовами або без них.
Будь-яка похідна у диференційному рівнянні може містити нелінійність, що перетворює його на нелінійне. Розглянемо приклад вирішення такого рівняння.
Нехай задано нелінійне диференційне рівняння третього порядку вигляду
.
Воно містить квадрат другої похідної. Також можна побачити, що у рівнянні відсутня складова з першою похідною. Це спрощує структурну схему, тому що буде відсутній один доданок.
Методика складання структурної схеми не відрізняється від попередньої, окрім того що потрібно піднести другу похідну до квадрату за допомогою блоку Product.
Структурна схема для вирішення цього рівняння показана на рис. 8.8.
Рис. 8.8. Структурна схема для вирішення нелінійного диференційного рівняння третього порядку
Програма для виводу графіків на екран матиме вигляд
figure; %створення графічного вікна
subplot(2,2,1); %відкриття першого графічного підвікна
plot(t,y,'b-','LineWidth',2); %побудова графіка y(t)
xlabel('Час t, c'); %підписи осей та графіка
ylabel('Функція y');
grid; %активація сітки
subplot(2,2,2); %відкриття другого графічного підвікна
plot(t,y1,'b-','LineWidth',2); %побудова графіка y(t)
xlabel('Час t, c'); %підписи осей
ylabel('Функція y1');
grid; %активація сітки
subplot(2,2,3); %відкриття другого графічного підвікна
plot(t,y2,'b-','LineWidth',2); %побудова графіка y(t)
xlabel('Час t, c'); %підписи осей
ylabel('Функція y1');
grid; %активація сітки
subplot(2,2,4); %відкриття другого графічного підвікна
plot(t,y3,'b-','LineWidth',2); %побудова графіка y(t)
xlabel('Час t, c'); %підписи осей
ylabel('Функція y1');
grid; %активація сітки
Графіки залежностей , , та показані на рис.8.9.
Рис. 8.9. Графіки вирішення нелінійного диференційного рівняння третього порядку
Таблиця 8.1.
№ бр. |
Значення параметра a |
Вигляд рівняння, початкові умови |
|
Випадок 1 |
Випадок 2 |
||
1 |
2t |
cos(t) |
, |
2 |
3t |
2sin(t) |
, |
3 |
5t |
3cos(2t) |
, |
4 |
6t |
4sin(2t) |
, |
5 |
t |
cos(t)+sin(t) |
, |
6 |
7t |
2cos(t)-sin(t) |
, |
7 |
8t |
cos(2t) |
, |
8 |
10t |
sin(t)-cos(3t) |
, |
Таблиця 8.2.
№ бр. |
Колір лінії |
Тип маркера |
Тип лінії |
Положення легенди (чверті) |
Тип та розмір тексту |
1 |
жовтий |
крапка |
пунктир, 2 |
1 |
жирний курсив, 14 |
2 |
голубий |
кружок |
штрихова, 3 |
2 |
жирний курсив, 12 |
3 |
рожевий |
хрестик |
штрих-пунктир, 4 |
3 |
курсив, 15 |
4 |
червоний |
плюс |
пунктир, 2 |
4 |
жирний, 16 |
5 |
зелений |
зірка |
штрихова, 3 |
1 |
жирний курсив, 11 |
6 |
синій |
квадрат |
штрих-пунктир, 3 |
2 |
курсив, 15 |
7 |
жовтий |
ромб |
пунктир, 4 |
3 |
жирний, 14 |
8 |
червоний |
кружок |
штрихова, 2 |
4 |
жирний курсив, 16 |
Таблиця 8.3.
№ бригади |
Вигляд рівняння |
1 |
|
2 |
|
3 |
|
4 |
|
5 |
|
6 |
|
7 |
|
8 |
8.3. Зміст звіту
Звіт з лабораторної роботи має містити наступні матеріали:
8.4. Контрольні запитання
Лабораторна робота № 9
вирішення систем диференційних рівнянь за допомогою структурних схем
Тривалість лабораторної роботи 2 год.
Мета роботи ознайомитися з принципами складання структурних схем для вирішення систем диференційних рівнянь та правилами виводу графіків їх розвязків.
9.1. Основні теоретичні відомості
Побудова структурної схеми для вирішення ситеми диференційних рівняння другого порядку
Нехай задана система диференційних рівнянь другого порядку вигляду
.
Як і у випадку з одним диференційним рівнянням, цю систему необхідно привести до зручного вигляду, залишивши у кожному рівнянні зліва тільки похідну однієї з функцій, а всі інші доданки перенести вправо. Таким чином система перетвориться до вигляду
.
Створення структурної схеми для виріщення системи диференційних рівнянь починається з вибору кількості інтегруючих блоків (Integrator). Їх кількість залежить від порядку системи. Так як задана система другого порядку, структурна схема обмежується двома інтегруючими блоками. На вході першого інтегратора буде похідна від функції , на виході сама функція ; на вході другого інтегратора буде похідна від функції , на виході функція , як показано на рис. 9.1.
Рис. 9.1. Початок створення структурної схеми для вирішення системи диференційних рівнянь другого порядку
Наступним кроком є визначення кількості доданків, які утворюють похідну у кожному рівнянні. Як видно з останньої системи, таких доданків у кожному рівнянні буде пять: , , , , у першому рівнянні та , , , , у другому рівнянні. Таким чином до входу кожного інтегратора підключається суматор (Sum) з пятьма входами (три додатних і два відємних у першому та два додатних і три відємних у другому). Так як диференціювання відбувається за змінною , то для підключення у суматор доданків, що містять цю змінну ( та ) необхідно створити її за допомогою блоку Clock. Сигнали та можна отримати, встановивши на виході Clock блок Trigonometric Function з відповідними функціями. Ця частина структурної схеми зображена на рис. 9.2.
Рис. 9.2. Наступний етап створення структурної схеми для вирішення системи диференційних рівнянь другого порядку
На інші входи суматорів подаються доданки, що залишилися. Розглянемо перший суматор. На додатні входи подаються константа 3 та помножений на 6 за допомогою блоку Gain сигнал з виходу другого інтегратора. На відємні входи подаються помножений на 3 сигнал з виходу першого інтегратора та помножений на 2 сигнал з виходу другого суматора. Цей етап створення структурної схеми показаний на рис. 9.3.
Рис. 9.3. Третій етап створення структурної схеми для вирішення системи диференційних рівнянь другого порядку
Аналогічно підключаються входи другого суматора. Для виводу до робочої області масиву функцій та на вихід інтеграторів підключаються блоки To Workspace з назвами «y1» та «y2» відповідно та форматом даних «Array». Блок Clock також підключається до To Workspace з назвою «t» та форматом даних «Array». Повна структурна схема для вирішеня системи диференційних рівнянь другого порядку представлена на рис. 9.4.
Рис. 9.4. Структурна схема для вирішення системи диференційних рівнянь другого порядку
Час моделювання підбирається експериментальним шляхом до появи усталеного руху. У даному прикладі він підібран 3 секунди. Програма для побудови графіків розвязків та буде мати наступний вигляд
figure; %створення графічного вікна
subplot(2,1,1); %відкриття першого графічного підвікна
plot(t,y1,'b-','LineWidth',2); %побудова графіка y1(t)
xlabel('Час t, c'); %підписи осей та графіка
ylabel('Функція y1');
title('Графіки рішення системи диференційних рівнянь другого порядку');
grid; %активація сітки
subplot(2,1,2); %відкриття другого графічного підвікна
plot(t,y2,'b-','LineWidth',2); %побудова графіка y2(t)
xlabel('Час t, c'); %підписи осей
ylabel('Функція y2');
grid; %активація сітки
Графіки залежностей та показані на рис.9.5.
Рис. 9.5. Графіки вирішення системи диференційних рівнянь другого порядку
Побудова структурної схеми для вирішення ситеми диференційних рівняння третього порядку, що містить нелінійність
Розглянемо приклад складання структурної схеми для системи диференційних рівнянь третього порядку з нелінійностями.
Нехай задана наступна система
.
Як видно, у першому рівнянні є похідна з нелінійністю. Методика складання структурної схеми аналогічна вищевикладеній, з врахуванням того, що так як система третього порядку, схема включатиме три інтегруючих блоки. Структурна схема для розвязання цього рівняння показана на рис. 9.6.
Рис. 9.6. Структурна схема для вирішення системи диференційних рівнянь третього порядку, що містить нелінійності
Час моделювання підібраний 5 секунд. Програма для побудови графіків розвязків , та буде мати наступний вигляд
figure; %створення графічного вікна
subplot(3,1,1); %відкриття першого графічного підвікна
plot(t,y1,'b-','LineWidth',2); %побудова графіка y1(t)
xlabel('Час t, c'); %підписи осей та графіка
ylabel('Функція y1');
title('Графіки рішення системи диференційних рівнянь третього порядку');
grid; %активація сітки
subplot(3,1,2); %відкриття другого графічного підвікна
plot(t,y2,'b-','LineWidth',2); %побудова графіка y2(t)
xlabel('Час t, c'); %підписи осей
ylabel('Функція y2');
grid; %активація сітки
subplot(3,1,3); %відкриття третього графічного підвікна
plot(t,y3,'b-','LineWidth',2); %побудова графіка y3(t)
xlabel('Час t, c'); %підписи осей
ylabel('Функція y3');
grid; %активація сітки
Графіки залежностей , та показані на рис.9.7.
Рис. 9.7. Графіки вирішення системи диференційних рівнянь третього порядку
Іноді постає необхідність виводити розвязки на один графік для порівняня, аналізу і т.п. Програма для побудови розвязків , та на одному графіку буде наступною
figure; %створення графічного вікна
plot(t,y1,'b-','LineWidth',3); %побудова графіка y1(t)
xlabel('Час t, c'); %підписи осей та графіка
ylabel('Функції y1, y2, y3');
title('Графіки рішення системи диференційних рівнянь третього порядку');
grid; %активація сітки
hold; %затримка екрану
plot(t,y2,'r--','LineWidth',3); %побудова графіка y2(t)
plot(t,y3,'k-.','LineWidth',3); %побудова графіка y3(t)
Результати виконання програми показані на рис. 9.8.
Рис. 9.8. Вивід вирішення системи диференційних рівнянь третього порядку на один графік
Таблиця 9.1.
№ бр. |
Значення параметра a |
Вигляд системи рівнянь |
|
Випадок 1 |
Випадок 2 |
||
1 |
t |
sin(t)-cos(3t) |
|
2 |
2t |
2sin(t) |
|
3 |
3t |
3cos(2t) |
|
4 |
4t |
2sin(t) |
|
5 |
10t |
cos(3t) |
|
6 |
9t |
2cos(t)-sin(t) |
|
7 |
8t |
cos(2t) |
|
8 |
7t |
sin(t)-cos(3t) |
Таблиця 9.2.
№ бр. |
Колір лінії |
Тип маркера |
Тип лінії, розмір |
Положення легенди (чверті) |
Тип та розмір тексту |
1 |
жовтий |
крапка |
пунктир, 2 |
1 |
жирний курсив, 14 |
2 |
голубий |
кружок |
штрихова, 3 |
2 |
жирний курсив, 12 |
3 |
рожевий |
хрестик |
штрих-пунктир, 3 |
3 |
курсив, 15 |
4 |
червоний |
плюс |
пунктир, 2 |
4 |
жирний, 16 |
5 |
зелений |
зірка |
штрихова, 3 |
1 |
жирний курсив, 11 |
6 |
синій |
квадрат |
штрих-пунктир, 2 |
2 |
курсив, 15 |
7 |
жовтий |
ромб |
пунктир, 2 |
3 |
жирний, 14 |
8 |
червоний |
кружок |
штрихова, 4 |
4 |
жирний курсив, 16 |
Таблиця 9.3.
№ бригади |
Вигляд системи рівнянь |
1 |
|
2 |
|
3 |
|
4 |
|
5 |
|
6 |
|
7 |
|
8 |
9.3. Зміст звіту
Звіт з лабораторної роботи має містити наступні матеріали:
9.4. Контрольні запитання
Лабораторна робота № 10
вирішення диференційних рівнянь за допомогою редактора dee
Тривалість лабораторної роботи 2 год.
Мета роботи ознайомлення з вбудованим редактором диференційних рівнянь DEE, правилами запису диференційних рівнянь у редакторі, його основними параметрами та функціями та виводом розвязків рівнянь у вигляді графіків на екран.
Структура редактора диференційних рівнянь DEE
Редактор диференційних рівнянь DEE (Differential equation Editor) це спеціальний блок Simulink для розвязування систем диференційних рівнянь, що задані у явній формі Коші. Для виклику редактора необхідно набрати у командному вікні MatLab команду «dee». Після цього відкривається вікно, що зображене на рис. 10.1.
Рис. 10.1. Вікно DEE
Для відкриття редактора необхідно два рази натиснути правою клавішею миші на блок DEE. Вікно редактора зображено на рис. 10.2.
Рис. 10.2. Вікно редактора диференційних рівнянь DEE
Розглянемо підвікна цього редактора.
# of inputs задає кількість зовнішніх вхідних сигналів.
First order equations, f(x,u) вікно для запису правих частин диференційних рівнянь.
x0 початкові умови для системи диференційних рівнянь.
Output Equations, f(x,u) вікно для запису лівих частин диференційного рівняння.
Приклад створення та розвязання системи диференційних рівнянь
Розглянемо приклад створення, запису та виводу розвязку на екран системи диференційних рівнянь другого порядку.
Нехай задана наступна система диференційних рівнянь
із початковими умовами , .
Приводимо систему до вигляду у формі Коші
.
Редактор DEE вимагає задавати вхідні впливи (u) та вихідні змінні (x) у вигляді векторів, тому необхідно ввести «машинні» змінні
.
Після введення змінних система рівнянь прийме вид
.
Далі отримана система переноситься до вікна редактору, записуються початкові умови, кількість входів та виходів. Заповнене вікно редактора для заданого прикладу показане на рис. 10.3.
Рис. 10.3. Заповнене вікно редактора DEE для прикладу
Після заповнення вікна необхідно натиснути кнопку Done. Блок, що створився в результаті заповнення вікна підключається, як показано на рис. 10.4.
Рис. 10.4. Приклад підключення входів та виходів редактора DEE
Програма у М-файлі для виводу на екран графіків , та буде наступною
figure; %створення графічного вікна
subplot(3,1,1); %відкриття першого графічного підвікна
plot(t,x1,'b-','LineWidth',2); %побудова графіка x1(t)
xlabel('Час t, c'); %підписи осей та графіка
ylabel('Функція x1');
title('Графіки рішення системи диференційних рівнянь другого порядку за допомогою редактора DEE');
grid; %активація сітки
subplot(3,1,2); %відкриття другого графічного підвікна
plot(t,x2,'b-','LineWidth',2); %побудова графіка x2(t)
xlabel('Час t, c'); %підписи осей
ylabel('Функція x2');
grid; %активація сітки
subplot(3,1,3); %відкриття третього графічного підвікна
plot(t,u1,'b-','LineWidth',2); %побудова графіка u(t)
xlabel('Час t, c'); %підписи осей
ylabel('Функція u');
grid; %активація сітки
Графіки , та , що отримуються в результаті роботи програми показані на рис. 10.5.
Рис. 10.5. Графіки вирішення системи диференційних рівнянь за допомогою редактора DEE
Приклад вирішення системи диференційних рівнянь зі змінними коефецієнтами.
Перевагою редактору DEE є те, що коефіцієнти диференційного рівняння можуть бути змінними і задаватися як і вхідні сигнали за допомогою вхідних портів. Розглянемо для прикладу систему диференційних рівнянь третього порядку зі змінним коєфіцієнтом, що має наступний вигляд
із заданими початковими умовами , , , коефіцієнт, що змінюється в процесі роботи.
Зробимо перехід до «машинних» змінних
.
Переписується рівняння у відповідності до заміни
.
У такому вигляді система записується у вікно редактора, що показане на рис. 10.6.
Рис. 10.6. Вікно редактора, заповнене відповідно до прикладу
Нехай тепер коефіцієнт змінюється в процесі роботи з 0 до 10 у 2 секунди. Це робиться за допомогою блоку Step. Схема підключення блоку редактора показана на рис. 10.7.
Рис. 10.7. Схема підключення блоку редактора до прикладу
Програма для виводу графіків розвязків системи диференційних рівнянь на екран буде мати вигляд
figure; %створення графічного вікна
subplot(5,1,1); %відкриття першого графічного підвікна
plot(t,x1,'b-','LineWidth',2); %побудова графіка x1(t)
xlabel('Час t, c'); %підписи осей та графіка
ylabel('Функція x1');
title('Графіки рішення системи диференційних рівнянь третього порядку за допомогою редактора DEE');
grid; %активація сітки
subplot(5,1,2); %відкриття другого графічного підвікна
plot(t,x2,'b-','LineWidth',2); %побудова графіка x2(t)
xlabel('Час t, c'); %підписи осей
ylabel('Функція x2');
grid; %активація сітки
subplot(5,1,3); %відкриття третього графічного підвікна
plot(t,x3,'b-','LineWidth',2); %побудова графіка x3(t)
xlabel('Час t, c'); %підписи осей
ylabel('Функція x3');
grid; %активація сітки
subplot(5,1,4); %відкриття четвертого графічного підвікна
plot(t,u1,'b-','LineWidth',2); %побудова графіка u1(t)
xlabel('Час t, c'); %підписи осей
ylabel('Функція u1');
grid; %активація сітки
subplot(5,1,5); %відкриття пятого графічного підвікна
plot(t,u2,'b-','LineWidth',2); %побудова графіка u2(t)
xlabel('Час t, c'); %підписи осей
ylabel('Функція u2');
grid; %активація сітки
axis([0 5 -1 6]) %масштабування останнього графіка
Результати роботи програми показані на рис. 10.8.
Рис. 10.8. Графіки вирішення системи диференційних рівнянь зі змінним коефіцієнтом за допомогою редактора DEE
Таблиця 10.1.
№ бр. |
Значення параметра a(t) та час його активації |
Вигляд системи рівнянь |
|
Випадок 1 |
Випадок 2 |
||
1 |
4 на 6-й секунді |
cos(3t) на 2-й секунді |
|
2 |
10 на 5-й секунді |
2sin(t) на 4-й секунді |
|
3 |
12 на 7-й секунді |
cos(2t) на 5-й секунді |
|
4 |
3 на 8-й секунді |
sin(4t) на 10-й секунді |
|
5 |
2 на 10-й секунді |
2cos(5t) на 3-й секунді |
|
6 |
11 на 3-й секунді |
2cos(4t) на 12-й секунді |
|
7 |
5 на 4-й секунді |
cos(7t) на 5-й секунді |
|
8 |
12 на 15-й секунді |
3cos(8t) на 9-й секунді |
10.3. Зміст звіту
Звіт з лабораторної роботи має містити наступні матеріали:
10.4. Контрольні запитання
Лабораторна робота № 11
моделювання за допомогою структурних схем підсистем
Тривалість лабораторної роботи 4 год.
Мета роботи ознайомитися з принципами створення підсистем, їх маскуванням, параметризацією та створенням піктограм, навчитися використовувати підсистеми для моделювання складних структурних схем з змінними параметрами.
Загальні відомості про підсистеми (Subsystems)
Підсистема це фрагмент Simulink-моделі, оформлений у вигляді окремого блоку. Використання підсистем при складанні структурних схем має наступні переваги:
Використання підсистем і механізму їхніх блоків дозволяє створювати блоки, що не поступаються стандартним по своєму оформленню (власне вікно параметрів блоку, піктограма, довідка й т.п.). Кількість підсистем у моделі не обмежено, крім того підсистеми можуть містити в собі інші підсистеми. Рівень вкладеності підсистем також не обмежений. Зв'язок підсистеми з моделлю (або підсистемою верхнього рівня ієрархії) виконується за допомогою вхідних (блок In бібліотеки Sources) і вихідних (блок Out бібліотеки Sinks) портів. Додавання в підсистему вхідного або вихідного порту приводить до появи на зображенні підсистеми мітки порту, за допомогою якої зовнішні сигнали передаються усередину підсистеми або виводяться в основну модель. Перейменування блоків In або Out дозволяє змінити мітки портів, відображувані на піктограмі підсистеми зі стандартних (In і Out) на ті, які потрібні користувачеві.
Створення підсистем
Для створення в структурній схемі підсистеми можна скористатися трьома способами:
У якості приклада на рис.11.1-11.3 продемонстровано створення підсистеми звичайного алгебричного рівняння .
Рис. 11.1. Задане алгебричне рівняння
Рис. 11.2. Вибраний фрагмент та меню для створення підсистеми
Рис. 11.3. Підсистема та структурна схема, що знаходиться всередині її
Маскування підсистем
Механізм маскування підсистем дозволяє оформити підсистему як повноцінний бібліотечний блок, тобто оформити підсистему власним вікном параметрів, піктограмою, довідковою системою й т.п. Маскування підсистем дає користувачу наступні переваги:
Для виконання маскування наявної підсистеми необхідно попередньо виконати наступні дії:
Маскування підсистеми виконується за допомогою Mask Editor (редактор маски). Для запуску редактора маски необхідно виділити масковану підсистему й виконати команду у меню Edit→Mask Subsystem… або натиснути правою клавішею миші на підсистему та вибрати пункт Mask Subsystem… в меню, що відкрилося, як показано на рис. 11.4. Після запуску Mask Editor на екран буде виведене вікно редактора (рис. 11.4), що має 4 вкладки: Icon&Ports (Піктограма та порти), Parameters (Параметри) Initialization (Ініціалізація), Documentation (Документація).
Рис. 11.4. Запуск редактора маски та вікно його параметрів
Перша із вкладок забезпечує створення піктограми підсистеми та настроювання вигляду портів, друга дає можливість створити вікно діалогу для уведення параметрів, третя виконувати розрахунки параметрів і четверта дозволяє ввести опис блоку й створити його довідку. У верхній частині всіх вкладок є поле Mask Type, за допомогою якого можна задати ім'я блоку. У нижній частині вікна є 5 кнопок керування редактором:
Після того як маскування системи буде виконано, подвійне натискання на її зображенні буде відкривати вікно параметрів підсистеми, а не вікно структурної схеми. Відкрити саму підсистему для редагування або перегляду можна командою у меню Edit→Look under mask або натиснути правою клавішею миші на підсистему та вибрати пункт Look under mask у меню, що відкрилось.
Вікно параметрів створюється за допомогою вкладки Parameters (Параметри) редактора маски, що зображена на рис. 11.5.
Рис. 11.5. Вкладка Parameters редактора маски
Створення вікна параметрів
Для створення поля уведення параметра з його описом необхідно виконати наступні дії:
Рис. 11.6. Вкладка Initialization редактора маски
Команди ініціалізації являють собою звичайні команди мовою MatLab і можуть включати оператори та функції. Такі команди задають змінні, які будуть перебувати в робочій області маскованої підсистеми. Ці змінні доступні усередині підсистеми й можуть бути використані як параметри блоків підсистеми, а також для створення піктограми підсистеми. Команди ініціалізації виконуються в наступних випадках:
Приклад створення підсистеми
У якості приклада розглянемо маскування системи диференційних рівнянь другого порядку, що має вигляд
,
де , , , змінні параметри, що задаються користувачем, .
Структурна схема, що відповідає заданій системі показана на рис. 11.7.
Рис. 11.7. Структурна схема до прикладу
Застосувавши команду меню Edit→Create Subsystem структурна схема перетвориться до вигляду, що зображений на рис. 11.8.
Рис. 11.8. Структурна схема, згорнута у підсистему
Виконуємо команду Edit→Mask Subsystem… Далі заповнюється вкладка Parameters. У неї необхідно ввести чотири коєфіцієнта з типом edit. Вікно з введеними параметрами показано на рис. 11.9.
Рис. 11.9. Вікно Parameters з введеними параметрами до прикладу
Так як рівняння містить один параметр, що розраховується через інші, потрібно у вкладці Initialization ввести формулу для фого обчислення. Ця вкладка показана на рис. 11.10.
Рис. 11.10. Вікно Initialization з розрахунком параметра
По закінченню необхідно натиснути кнопку Apply, а потім кнопку OK. Тепер при двійному натисненні лівою клавішею миші на підсистему відкриється вікно для вводу параметрів, що показано на рис. 11.11. Після вводу параметрів структурну схему можна моделювати.
Рис. 11.11. Параметри підсистеми до прикладу
Створення піктограми підсистеми
Піктограма підсистеми створюється за допомогою вкладки Icon & Ports (Піктограма та порти) редактора маски. Вікно редактора маски з відкритою вкладкою Icon & Ports показане на рис. 11.12.
Вкладка містить наступні елементи:
Рис. 11.12. Вікно редактора маски з відкритою вкладкою Icon & Ports
Приклад створення підсистеми диференційного рівняння третього порядку з піктограмами.
У якості приклада розглянемо маскування системи диференційних рівнянь третього порядку, що має вигляд
,
де , , , , змінні параметри, що задаються користувачем, , .
Необхідно створити підсистему, замаскувати її та створити піктограми.
Структурна схема, що відповідає заданій системі показана на рис. 11.13.
Застосувавши команду меню Edit→Create Subsystem до кожного рівняння отримаємо три підсистеми. Називаємо входи та виходи відповідними іменами та отримаємо структурну схему з троьма підсистеми, що зображена на рис. 11.14. Внутрішня структура кожної підсистеми показана на рис. 11.15. Загальна підсистема показана на рис. 11.16.
Рис. 11.13. Структурна схема, що відповідає заданій системі рівнянь
Рис. 11.14. Підсистеми до кожного з диференційних рівнянь
Рис. 11.15. Внутрішня структура підсистем, що показані на рис. 11.14
Рис. 11.16. Загальна підсистема системи диференційного рівняння
Виконуємо команду Edit→Mask Subsystem… Далі заповнюється вкладка Parameters. У неї необхідно ввести пять параметрів з типом edit. Вікно з введеними параметрами показано на рис. 11.17. Після цього у вкладці Initialization вводяться формули для обчислення інших параметрів. Це вікно показане на рис. 11.18. По завершенню створимо декілька піктограм: помістимо всередині блоку текст «Differential Equations Subsystem» синього кольору та позначимо вхідні та вихідні порти зеленим та червоним кольорами відповідно. Кінцева структурна схема підсистеми до прикладу показана на рис. 11.19.
Рис. 11.17. Вікно з введеними параметрами до прикладу
Рис. 11.18. Вкладка Initialization з формулами для обчислення параметрів до прикладу
Рис. 11.19. Кінцева структурна схема підсистеми до прикладу
Текст команд, що записуються до вікна Icon Drawing Commands вкладки Icons & Ports буде наступним
color('blue')
disp('Differential Equations Subsystem')
color('red')
port_label('output',1,'x1')
port_label('output',2,'x2')
port_label('output',3,'x3')
color('green')
port_label('input',1,'u(t)')
Саме вікно з цими командами показано на рис. 11.20.
Рис. 11.20. Вікно з командами редагування піктограм до прикладу
Таблиця 11.1.
№ бр. |
Формули для визначення параметрів , , , |
Вигляд системи рівнянь |
1 |
||
2 |
||
3 |
||
4 |
||
5 |
||
6 |
||
7 |
||
8 |
11.3. Зміст звіту
Звіт з лабораторної роботи має містити наступні матеріали:
Лабораторна робота № 12
моделювання електромеханічних систем на основі двигуна постійного струму
Тривалість лабораторної роботи 4 год.
Мета роботи ознайомитися з математичною моделлю двигуна постійного струму та навчитись складати на основі її структурні схеми для математичного моделювання у Simulink, ознайомитися з типовими режимами роботи двигуна.
12.1. Основні теоретичні відомості
Математична модель двигуна постійного струму
У загальному випадку двигун постійного струму можна представити у вигляді схеми, зображеної на рис. 12.1.
Рис. 12.1. Схема підключення двигуна постійного струму
На цій схемі U постійна напруга живлення кола якоря, В; I струм якоря, А; E ЕРС двигуна, В. Для спрощення приймемо, що напруга кола збудження постійна і не регулюється.
За схемою на рис. 12.1 побудуємо схему заміщення кола якоря двигуна постійного струму, що зображена на рис. 12.2.
Рис. 12.2. Схема заміщення кола якоря двигуна постійного струму
На схемі прийняті наступні позначення індуктивний опір кола якоря, Гн; активний опір кола якоря, Ом.
Записуємо другий закон Кірхгофа для цього кола
.
ЕРС двигуна визначається, як
,
де добуток конструктивної сталої двигуна , та магнітного потоку , ; кутова швидкість обертання валу двигуна, рад/с.
Тепер переходимо до математичного опису механічної частини двигуна постійного струму. Якщо представити двигун одномасовим обєктом, то рівняння руху для нього матиме вигляд
,
де момент інерції двигуна, ; момент на валу двигуна, ;
момент навантаження на двигун, .
Момент двигуна визначається, як
.
Таким чином, двигун постійного струму описується системою диференційних рівнянь другого порядку та двох алгебричних рівнянь для переходу від механічної частини в електричну і навпаки, що має вигляд
.
За цими рівняннями побудуємо структурну схему в Simulink, враховуючи, що магнітний потік є номінальним та незмінним і його добуток на конструктивну сталу визначається за формулою
,
де , номінальні напруга та струм якоря (подані у каталозі або на паспортній табличці двигуна).
Номінальна швидкість обертання валу двигуна визначається, як
,
де номінальна частота обертання двигуна (подана у каталозі або на паспортній табличці двигуна), об/хв.
Якщо номінальний струм якоря невідомий, його можна знайти за наступним співвідношенням
,
де номінальна потужність двигуна (подана у каталозі або на паспортній табличці двигуна), Вт; номінальний коефіцієнт корисної дії (ККД) двигуна (поданий у каталозі або на паспортній табличці двигуна).
Таким чином структурна схема у Simulink двигуна постійного струму буде мати вигляд, зображений на рис. 12.3.
Рис. 12.3. Структурна схема двигуна постійного струму
У цій схемі передбачено, що напруга живлення двигуна складає 220 В і подається за допомогою блоку Step. Момент навантаження прийнятий нульовим. Ці два сигнали будуть вхідними у підсистемі. Вихідними сигналами є струм I, момент М, ЕРС Е та швидкість ω.
Створення підсистеми, маскування та моделювання режимів роботи двигуна постійного струму.
Для створення підсистеми скористаємось меню Edit-Create Subsistem. Після перейменування вхідних та вихідних портів схема, що отримується показана на рис. 12.4.
Рис. 12.4. Підсистема двигуна постійного струму
Тепер зробимо маскування підсистеми двигуна постійного струму. Вікно з параметрами маски, що вводяться користувачем показано на рис. 12.5. Вікно розрахункових параметрів показано на рис. 12.6. Вікно з налаштуванням піктограми показане на рис. 12.7. Результуюча структурна схема показана на рис. 12.8.
Рис. 12.5. Вікно з параметрами маски, що вводяться користувачем
Рис. 12.6. Вікно розрахункових параметрів
Рис. 12.7. Вікно з налаштуванням піктограми
Рис. 12.8. Результуюча підсистема двигуна постійного струму
Проведемо дослідження роботи двигуна постійного струму. Нехай задані наступні паспортні дані двигуна: , , , , , , .
Спочатку необхідно зробити пуск двигуна в холосту на номінальну напругу живлення, а після появи усталеного руху швидкості подати момент навантаження, рівний номінальному моменту двигуна. Після завершення перехідного процесу потрібно скинути момент навантаження, а потім знизити напругу живлення до 200 В. Отримати перехідні процеси струму, моменту двигуна, швидкості, ЕРС, моменту навантаження та напруги живлення. Структурна схема для цих режимів роботи зображеня на рис. 12.9. Графік перехідного процесу швидкості з поясненнями зображений на рис. 12.10.
Рис. 12.9. Підсистема для забезпечення заданих режимів роботи
Рис. 12.10. Графік перехідного процесу кутової швидкості обертання валу двигуна
Графіки перехідних процесів всіх параметрів системи зображені на рис. 12.11.
Рис. 12.11. Графіки перехідних процесів у двигуні постійного струму для заданих режимів роботи
Програма у М-файлі для побудови графіків буде наступною
figure; %створення графічного вікна
subplot(3,2,1); %відкриття першого графічного підвікна
plot(t,w,'b-','LineWidth',2); %побудова графіка w(t)
xlabel('Час t, c'); %підписи осей та графіка
ylabel('\omega, рад/с');
grid; %активація сітки
subplot(3,2,2); %відкриття другого графічного підвікна
plot(t,M,'b-','LineWidth',2); %побудова графіка M(t)
xlabel('Час t, c'); %підписи осей
ylabel('М, Н*м');
grid; %активація сітки
subplot(3,2,3); %відкриття третього графічного підвікна
plot(t,I,'b-','LineWidth',2); %побудова графіка I(t)
xlabel('Час t, c'); %підписи осей
ylabel('І, А');
grid; %активація сітки
subplot(3,2,4); %відкриття четвертого графічного підвікна
plot(t,E,'b-','LineWidth',2); %побудова графіка E(t)
xlabel('Час t, c'); %підписи осей
ylabel('Е, В');
grid; %активація сітки
subplot(3,2,5); %відкриття пятого графічного підвікна
plot(t,U,'b-','LineWidth',2); %побудова графіка U(t)
xlabel('Час t, c'); %підписи осей
ylabel('U, B');
axis([0 2 0 250]); %масштабування графіка напруги
grid; %активація сітки
subplot(3,2,6); %відкриття пятого графічного підвікна
plot(t,Mc,'b-','LineWidth',2); %побудова графіка Mc(t)
xlabel('Час t, c'); %підписи осей
ylabel('Мс, Н*м');
grid; %активація сітки
Таблиця 12.1.
№ бр. |
Паспортні дані двигуна постійного струму |
Масив часу ,…,, с |
, В |
, В |
,% |
||||||
, В |
, об/хв |
, Ом |
, Гн |
, |
, Вт |
||||||
1 |
220 |
1060 |
0,385 |
0.014 |
0,1 |
3200 |
0,825 |
1,1.5,2,2.5,3,4 |
20 |
30 |
100 |
2 |
220 |
1500 |
0,216 |
0.008 |
0,1 |
5300 |
0,855 |
1,2,3,4,5,6 |
30 |
40 |
90 |
3 |
220 |
1100 |
0,516 |
0.016 |
0,1 |
3200 |
0,795 |
1,1.5,2,2.5,3,4 |
40 |
50 |
80 |
4 |
220 |
1600 |
0,235 |
0.0071 |
0,1 |
6000 |
0,845 |
1,2,3,4,5,6 |
50 |
60 |
70 |
5 |
220 |
1050 |
0,385 |
0.014 |
0,1 |
3200 |
0,825 |
1,1.5,2,2.5,3,4 |
10 |
30 |
100 |
6 |
220 |
1475 |
0,216 |
0.008 |
0,1 |
5300 |
0,855 |
1,2,3,4,5,6 |
20 |
40 |
90 |
7 |
220 |
1080 |
0,516 |
0.016 |
0,1 |
3200 |
0,795 |
1,1.5,2,2.5,3,4 |
30 |
50 |
80 |
8 |
220 |
1620 |
0,235 |
0.0071 |
0,1 |
6000 |
0,845 |
1,2,3,4,5,6 |
40 |
10 |
70 |
12.3. Зміст звіту
Звіт з лабораторної роботи має містити наступні матеріали:
12.4. Контрольні запитання
список рекомендованої літератури
Зміст
Вступ 3
Лабораторна робота №1. Основи роботи з функціями, векторами та матрицями 4
Лабораторна робота №2. Побудова та правила оформлення графіків функцій 22
Лабораторна робота №3. Обробка та редагування графіків за допомогою функцій графічних вікон 37
Лабораторна робота №4. Програмування у М-файлах 54
Лабораторна робота №5. Чисельне вирішення диференційних рівнянь у М-файлах 71
Лабораторна робота №6. Символічні методи обчислення 81
Лабораторна робота №7. Основні бібліотеки блоків тулбоксу Simulink та їх застосування 101
Лабораторна робота №8. Вирішення диференційних рівнянь за допомогою структурних схем 171
Лабораторна робота №9. Вирішення систем диференційних рівнянь за допомогою структурних схем 181
Лабораторна робота №10. Вирішення диференційних рівнянь за допомогою редактора DEE 193
Лабораторна робота №11. Моделювання за допомогою структурних стем підсистем 203
Лабораторна робота №12. Моделювання електромеханічних систем на основі двигуна постійного струму 224
Список рекомендованої літератури 235