00 MATLAB SIMULINK Upatstvo Za Vezbi PDF

You might also like

Download as pdf or txt
Download as pdf or txt
You are on page 1of 211

ПРОФ.

Д-Р СТОЈЧЕ ДЕСКОВСКИ

MATLAB/SIMULINK

УПАТСТВО ЗА ВЕЖБИ

Учебна 2008/2009 година


2 MATLAB/SIMULINK – упатство за вежби

Забелешка

Овој материјал со наслов:

MATLAB/SIMULINK - УПАТСТВО ЗА ВЕЖБИ

настана како резултат на подготовките на студентите за користење на прог-


рамскиот пакет МАТЛАБ/СИМУЛИНК за вежби по предметите: теорија на
системи, автоматско управување, oперациски истражувања, системско мо-
делирање, механика на летање, динамика и управување на летала и систе-
ми на водење и управување. Наведените предмети авторот ги предава или
ги предавал порано на неколку високообразовни институции: Воено-техни-
чка академија Загреб, Воена академија „Генерал Михаило Апостолски“ –
Скопје, Технички факултет – Битола, Електротехнички факултет – Скопје
и Факултет за општествени науки – Скопје.
Во материјалот се опфатени сите елементи на МАТЛАБ/СИМУ-
ЛИНК кои биле/се потребни како поддршка на вежбите по наведените
предмети со прикладни примери за нивно користење, додека конкретните
вежби по предметите не се дел од ова упатство. Целта на подготовката на
ова упатство беше студентите да добијат прикладен текстуален материјал
со изработени примери кој на брз и ефикасен начин ќе им овозможи лесно
совладување на основите на МАТЛАБ/СИМУЛИНК и ќе им го олесни
неговото користење во вежбите по соодветниот предмет. Примерите во
форма на m.fileovi-ови или SIMULINK модели дадени се во работниот
директориум на МАТЛАБ – work на посебен директориум насловен со
0 Matlab Tutorial.

Проф. д-р Стојче Десковски


MATLAB/SIMULINK – упатство за вежби 3

ПРЕПОРАКИ ЗА ОЗНАЧУВАЊЕ НА ФАЈЛОВИТЕ


ИЗРАБОТЕНИ ВО MATLAB/SIMULINK

Ако се работи со повеќе фајлови на еден директориум доколку не се соодветно


означени тешко е нивното пронаоѓање, препознавање и користење. Од тие причи-
ни корисно е да се употреби соодветен систем во означувањето на фалјовите кој-
што ќе овозможи препознавање по предмет, глава, поглавје и проблем којшто се
решава.
Затоа се препорачува следниот систем на означување на фајловите во МАТЛАБ:
Име на фајлот: kkk_pgp_xx_ime na problemot.m (вообичаено со мали букви)
kkk - скратеница на предметот (книгата) - максимум три знака
p - пример
gp - g - реден број на главата во предметот, p – реден број на поглавјето
xx - реден број (или ознака) на примерот во главата
ime na problemot - името треба да асоцира на проблемот што се решава. Може да
се даде кратенка, или да се изостави бидејќи претходните симболи се доволни за
препознавање на фајлот.
Примери на означување на фајловите:
Во ова упатство за MATLAB (MATLAB TUTORIAL – MT) сите фајлови ќе бидат
именувани со mt. Пошто материјалот е разбиен во глави со редни броеви 1, 2, 3, ...
и поглавја, например во глава 3: 3.1.,3.2. 3.3, ... итн., во кои примерите се означени
со Пример 3.1.01, Пример 3.1.02.,..., Пример 3.2.01., Пример 3.2.02, ... Пример
3.3.01., Пример 3.3.02. ... итн., соодветните фајлови во MATLAB во името ќе
содржат дел pgp_xx = p31_01, p31_02, p32_01, p32_02, p33_01, p33_02 итн.
Целото име на фајлот за примерот Пример 3.1.01. во глава 3 и поглавје 3.1.
Полиноми и интерполација ќе се означи со mt_p31_01_polinomi.m.
За вежбите, например, по предметот Теорија на системи (ТС) за примерот од
Глава 5 и поглавје 2 којшто има реден број во поглавјето 20 (именуван како
Пример 5.2.20) програмското решение (m – фајлот) ќе се означи со ts_p52_20.m.
На студентите им се препорачува своите фајлови работени за вежби по соодветен
предмет да ги означуваат на следниов начин: По предметот Теорија на системи
(ТС) студентот Петревски Петре (ПП) својот фајл за вежбите во MATLAB/SI-
MULINK ќе го означи со ts_pp_xx_xx.m, каде на местата xx_xx може да користи
сопствени ознаки. Воведувањето ред во означувањето на фајловите што ги работат
студентите има за цел полесно идентификување и оцена на нивната работа на
вежбите по соодветните предмети.
4 MATLAB/SIMULINK – упатство за вежби

Промена на работниот директориум во МАТЛАБ

Во МАТЛАБ постои работен директориум насловен со „work“ во кој корисниците


работат и ги чуваат своите фајлови (програми). Меѓутоа за работа и чување на
фајловите може да се користат и други директориуми во кои од МАТЛАБ лесно се
преминува. Обично во „work“ може да се направат повеќе поддиректориуми – за секој
проблем, предмет или област посебно.
На пример, на Сл.1. во MATLAB6p5 е направен нов работен директориум „work1“ во
кој се креирани четири поддиректориуми (види Сл.2.)

Сл.1. Сл.2.
Промената на работниот директориум се врши со наредбата „cd“. Со следните приме-
ри е илустрирано користењето на оваа наредба.

Нека се наоѓаме во работниот директориум „work1“ којшто е тековен. Со наредбата


„cd,“ на екран го принтаме тековниот директориум, пример:
>> cd,
C:\MATLAB6p5\work1 (одговор на MATLAB)

Со „cd ..“ се поместуваме на директориум изнад тековниот, пример:


>> cd ..
>> (одговор на MATLAB)
>> cd, (проверка на тековниот директориум)
C:\MATLAB6p5 (одговор на MATLAB)
Со „cd (‘work1’) од дир. „MATLAB6p5“ слегуваме во дир. „work1“, пример:
C:\MATLAB6p5 (тековен директориум)
>> cd ('work1') (наредба за слегување во „work1“)
>> (одговор на MATLAB)
>> cd, (проверка на тековниот директориум)
C:\MATLAB6p5\work1 (одговор на MATLAB)
Влегување од „work1“ во поддиректориум „NIR proekt“, пример:
C:\MATLAB6p5\work1 (тековен директориум)
>> cd ('NIR proekt') (наредба за слегување во „NIR proekt“)
>> (одговор на MATLAB)
>> cd, (проверка на тековниот директориум)
C:\MATLAB6p5\work1\NIR proekt (одговор на MATLAB)
Итн. Ако за работа сме го избрале директориумот „NIR proekt“ сега од команд-
ниот прозор можеме лесно да манипулираме со фајловите во овој директориум (пови-
кување со „help“, извршување, користење во други програми, спремање итн.).
MATLAB/SIMULINK – упатство за вежби 5

СОДРЖИНА

ПРЕДГОВОР

1. ОСНОВИ НА МАТЛАБ .......................................................................... 9


1.1. Вовед .................................................................................................... 9
1.2. Почеток со работа во МАТЛАБ ..................................................... 10
1.3. Варијабли ........................................................................................... 14
1.4. Вградени функции ............................................................................ 15
1.5. Вектори ............................................................................................... 18
1.5.1. Генерирање вектори со ознаката (:)......................................... 20
1.5.2. Издвојување на елементите на векторот ................................ 20
1.5.3. Вектор колона .......................................................................... 21
1.5.4. Транспонирање ........................................................................ 21
1.5.5. Скаларен производ на вектори (*) .......................................... 22
1.5.6. Точкаст производ (.*) ............................................................... 25
1.5.7. Точкаст количник (делење) (./) ................................................ 27
1.5.8. Точкасто степенување (.^) 28
1.6. Елементарни матрични операции ................................................. 30
1.6.1. Димензија на матрица .............................................................. 31
1.6.2. Собирање и одземање на матрици .......................................... 32
1.6.3. Транспонирање на матрица ..................................................... 32
1.6.4. Специјални матрици ................................................................. 33
1.6.5 Единична матрица ..................................................................... 34
1.6.6. Дијагонална матрица ................................................................ 34
1.6.7. Конструкција на матрици ......................................................... 35
1.6.8. Издвојување на елементи на матрица ..................................... 37
1.6.9. Точкаст производ на матрици .................................................. 38
1.6.10. Множење на матрица со вектор ............................................ 39
1.6.11. Множење на матрици ............................................................. 40
1.6.12. Матрично „делење“ решавање на матрични равенки ........ 40
1.6.13. Својствени вредности ............................................................. 42
1.6.14. Примери и задачи ................................................................... 43
1.7. Графика – цртење во МАТЛАБ ..................................................... 45
1.7.1. Цртање на елементарни функции ........................................... 48
1.7.2. Повеќе графици ......................................................................... 50
1.7.3. Контрола на оските ................................................................... 51
1.7.4. Зголемување (zoom) .................................................................. 52
1.7.5. Подцртеж (subplot) …………………………………………… 53
1.7.6. Цртање на тродимензионални површини ............................... 55
6 MATLAB/SIMULINK – упатство за вежби

2. ПРОГРАМИРАЊЕ ВО МАТЛАБ …………………………………… 61


2.1. Циклуси ………………...………………...………………………... 61
2.2. Логички релации (тестирање) ………………...………………... 65
2.3. Логички оператори ………………...………………...…………… 66
2.4. While ЦИКЛУС ………………...………………...……………….. 69
2.5. if ..... then .... else .... end ………………...………………………… 71
2.6. Скрипт фајлови и функции ( m-фајлови) ……………………… 72
2.6.1 Скрипт м-фајлови ………………...………………….……..... 72
2.6.2 Функциски м-фајлови ………………...……………….......... 75
2.6.3 Примери на функции ………………...………………............ 78
2.7. Други вградени функции ………………...………………............. 81
2.7.1. Заокружување на броеви ………………...………………..... 81
2.7.2. Функцијата sum ………………...……………….................... 82
2.7.3. Функции max и min ………………...………………............. 83
2.7.4. Генерирање на случајни броеви ……………….................... 84
2.7.5. Функција find за вектори ………………...………..………... 85
2.7.6. Функцијата find за матрици ………………...………...…….. 87
2.8. Функциски функции ………………...……………….................... 88
2.8.1. Претставување на аналитичка функција во MATLAB ……. 88
2.8.2. Цртање на аналитички функции ………………..................... 88
2.8.3. Минимум на функција со една променлива ………………... 90
2.8.4. Нули на функција со една променлива ……………….......... 90
2.8.5. Нумеричко интегрирање (квадратура) ………………........... 90
2.9. Внес и запишување (експорт) на податоци ………………......... 92
2.9.1. Внес (читање) на податоци ………………...………………... 92
2.9.2. Експорт (запишување) на податоци ………………............... 93
2.9.3. Функција input ………………...………………..................... 94

3. НУМЕРИЧКИ МЕТОДИ ВО МАТЛАБ ………………...…………... 95


3.1. Полиноми и интерполација ……………………………………… 95
3.1.1. Нули на полиномот ………………………………………….. 96
3.1.2. Пресметување на вредноста на полиномот ………………… 96
3.1.3. Множење (конволуција) и делење
(деконволуција) на полиноми ……………………………… 97
3.1.4. Интерполација на податоци со полиним …………………… 97
3.2. Интерполација со полином ……………………………………… 99
3.2.1. Интерполационен полином …………………………………. 99
3.2.2. Лагранжова интерполација …………………………………. 101
3.2.3. Њутнова интерполација – напред ………………………….. 104
3.3. Нумеричко диференцирање (определување на извод) ……….. 106
3.3.1. Нумеричко диференцирање користејќи лимес ……………. 106
3.3.2. Нумеричко диференцирање со помош на
MATLAB/SIMULINK – упатство за вежби 7

Њутновиот интерполационен полином …………………………. 109


3.4. Нумеричко интегрирање …………………………………………. 110
3.4.1. Трапезно правило ……………………………………………. 110
3.4.2. Симпсоново правило ………………………………………… 112
3.4.3. Гаусова интеграција …………………………………………. 113
3.5. Решавање на системи линеарни алгебарски равенки ………... 115
3.5.1. Гаусова метода на елиминација …………………………… 119
3.5.2. Итеративна метода ( Гаус - Зајдел) ………………………… 121
3.6. Моделирање на податоци ………………………………………… 127
3.6.1. Полиномна регресија ………………………………………… 127
3.6.2. Општа функциска регресија ………………………………… 132
3.7. Решавање на обични диференцијални равенки ………………. 136
(Поглавјето не е напишано!)
3.7.1. Обични диференцијални равенки од прв ред ……………….
3.7.2. Ојлерова метода ........................................................................
3.7.3. Рунге-Кута методи ....................................................................
3.7.4. Диференцијални равенки од повисок ред ..............................
3.7.5. Системи линеарни диференцијални равенки .........................

4. ОСНОВИ НА SIMULINK 137


4.1. Што е SIMULINK? .......................................................................... 137
4.2. Стартување на SIMULINK ............................................................ 137
4.3. Фајлови на моделот ........................................................................ 139
4.4. Основни елементи – блокови и линии ........................................ 140
4.4.1 Блокови .................................................................................... 140
4.4.2 Линии ......................................................................................... 142
4.4.3 Едноставен пример ................................................................... 142
4.4.4 Модифицирање на блоковите ................................................. 143
4.5. Старт на симулацијата ................................................................... 145
4.6. Градење на системи .......................................................................... 149
4.6.1 Прибирање на блокови ............................................................. 149
4.6.2 Модифицирање на блоковите .................................................. 152
4.6.3 Поврзување на блоковите со линии ........................................ 153
4.6.4 Симулација ................................................................................ 158
4.6.5 Земање варијабли од МАТЛАБ ............................................... 158

5. МОДЕЛИРАЊЕ И СИМУЛАЦИЈА НА ДИНАМИЧКИ 161


СИСТЕМИ (Главата е делумно напишана)
5.1. Механички системи 161
5.2. Електрични системи
5.3. Електромеханички системи
8 MATLAB/SIMULINK – упатство за вежби

6. СИСТЕМИ НА УПРАВУВАЊЕ
(CONTROL SYSTEM TOOLBOX) 169
6.1. Полиноми ........................................................................................... 169
6.1.1 Нули на полиномот .................................................................... 169
6.1.2 Пресметување на вредноста на полиномот ............................. 171
6.1.3 множење (конволуција) и делење (деконволуција) на
полиноми .................................................................................... 171
6.1.4 Развој на парцијални дропки ................................................... 172
6.2. Функции за определување на Лапласовата трансформација
и за дефинирање на LTI системи ................................................. 177
6.2.1 Функција laplace ……………………………………………. 177
6.2.2 Функција tf …………………………………………………… 178
6.2.3 Оператори „s‟ и „z‟ .................................................................... 179
6.2.4 Функција ‘ss’ …………………………………………………. 180
6.2.5 Функции pole и zero ………………………………………… 181
6.3. Одзиви на линеарен систем .......................................................... 182
6.3.1 Функција initial ……………………………………………… 182
6.3.2 Функција impulse ……………………………………………. 184
6.3.3 Функција step ………………………………………………… 188
6.3.4 Функција lsim ………………………………………………… 189
6.4. Фреквенциски карактеристики на LTI системи ...................... 194
6.4.1 Функција bode ………………………………………………. 194
6.4.1 Функција margin ……………………………………………. 197
6.4.1 Функција nichols ……………………………………………. 199
6.4.1 Функција nyquist ……………………………………………. 199
6.5. Геометриско место на корените – ГМК (Root Locus) ………… 201
6.6. Matlab Command List …………………………………………….. 203

7. ЛИТЕРАТУРА (Делумно направено) 206

8. ПРИЛОЗИ (Tреба повеќе прилози) 207


Прилог A: help алатка 207
MATLAB/SIMULINK – упатство за вежби 9

1. ОСНОВИ НА МАТЛАБ

1.1. ВОВЕД

MATLAB е високо-организиран програмски јазик за примена во


инженерството и техниката. Тој вклучува во себе пресметување, визуелизација и
програмирање во рамките на едноставна за користење околина каде што
проблемите и решенијата се претставени во позната и блиска математичка
нотација. Типично користење на програмскиот пакет МАТЛАБ содржи:

 Елементарна математика и пресметки


 Линеарна алгебра
 Развој на алгоритми
 Моделирање, симулација и градење на прототипови
 Анализа на податоци, истражување и визуелна презентација
 Научни и инжењерски графици и графикони
 Развој на апликации влучувајќи развој на Графички Интерфејс за корисници

MATLAB е интерактивен систем чии основни типови на податоци се низи и


матрици кои не треба претходно да се дефинираат и димензионираат. Со тоа се
овозможува решавање на многу технички проблеми каде што се потребни големи
нумерички пресметки. Особено MATLAB-от е прикладен за решавање на
проблеми кои можат да се формулираат во векторска или матрична форма при што
потребното време за решавање е многу помало во споредба ако се користат
класичните програмски јазици како што се FORTRAN или C.

Imeto MATLAB е кратенка од MATrix LABaratory и оригинално бил дизај-


ниран да обезбеди лесен пристап до софтверските пакети LINPACK и EISPACK
кои претставувале најсовршени софтверски пакети за матрично сметање.

MATLAB-от во тек на време еволуирал и бил надограден преку котрибуција


на многу корисници. Во Универзитетските рамки, тој претставува стандардна
алатка и помошно средство на студентите по предметите математика, инжинер-
ство и научните истражувања. Во индустријата, MATLAB -от е најчесто користе-
на алатка (софтвер) за висока продуктивност во истражувањата, развој и анализи.

Една од важните карактеристики на MATLAB-от е постоење на


таканаречени toolboxes (алатки), кои претставуваат колекција на процедури на
веќе решени проблеми од дадена област. Алатките се сеопфатни MATLAB
функции (m-фајлови) со кои се проширува околината на MATLAB за решавање на
посебни класи на проблеми.
Областите за кои постојат вакви алатки вклучуваат: процесирање на
сигнали, управување на системи, невронски мрежи, фази логика, симулација,
обработка на слики и многу други.
10 MATLAB/SIMULINK – упатство за вежби

MATLAB-от поседува и свој програмски јазик кој што е матрично


ориентиран но ги има сите својства на програмски јазик како што се FORTRAN и
C++. Тој овозможува брзо и интерактивно програмирање на мали програми со
моментална проверка на точноста и коректноста на програмата како и креирање на
целосни и комплексни програми за корисници. Посебна погодност е постоење на
библиотеки кои овозможуваат користење и интеракција со процедури или
функции напишани во C++ или FORTRAN со што капацитетот и можностите на
MATLAB -от значително се зголемени.

1.2. ПОЧЕТОК СО РАБОТА ВО MATLAB

MATLAB е програма која се наоѓа во еден директориум што се креира за


време на инсталација на MATLAB-от. За ваши потреби, упатно е да креирате ваш
работен директориум во кој би се запишувале вашите податоци или m-фајловите.

MATLAB-от којшто е прилагоден за работа под WINDOWS се активира со


притискање на иконата за MATLAB поставена на екранот на мониторот. По извес-
но време, логото на MATLAB програмата се покажува следено со симболот
>>
каде >> претставува MATLAB promt што означува дека програмата е подготвена
работа, односно за прифаќање и за извршување на наредби.

Со наредбата help, корисникот има можност на лице место да добие


информации и помош за некој наредба. Со наредбата quit се излегува од
програмата MATLAB.

Користење на MATLAB-от како едноставен калкулатор

За првично запознавање со MATLAB -от, може да се искористат можности-


те на програмата да се користи како едноставен калкулатор.
Основните математички операции се:
+ собирање (Addition),
- одземање (Subtraction),
* множење (Multiplication),
/ делење (Division), и
^ степенување (Power),
кои се користат во комбинација со заградите ( ).
Командите се испишуваат после промтот >>.
Примери на користење на основните математички операции:
- Пример на степенување
>> 5^2
По притиснување на копчето Enter на тастатурата MATLAB-от ќе одговори со
ans =
25
MATLAB/SIMULINK – упатство за вежби 11

Пример примена на неколку основни математички операции:


>> 3.50*11/7+(25+6^3)
откако ќе се испише горната наредба, а по притискање на копчето Enter MATLAB-
от ќе одговари со:
ans =
246.5000
што претставува резултат од пресметките.
Варијаблата ans се испишува ако корисникот претходно не дефинирал
варијабла во која ќе биде сместен резултатот. Имено можно е да се напише:
>> x = 3.50*11/7+(25+6^3)
а одговорот на MATLAB-от ке биде
x=
246.5000
Сега како резултат се испишува варијаблата x. Треба да се напомне, дека со
самата наредба 3.50*11/7+(25+6^3), програмата резервира место за променливата x
во својот работен простор (мемориски дел), така што корисникот не е должен
експлицитно да дефинира варијабла, како што е случај кај другите програмски
јазици. Во текот на целата сесија променливата x е присутна освен ако со посебна
наредба не се избрише од работниот простор. Во било кое време во текот на
работата со наредбата:
>> x
x=
5.7500
можно е да се провери вредноста на променливата x.

Во случај ако не се сака печатењето на променливата, наредбата мора да


заврши со точка-запирка ( ;)
>> x = 2 + 3/4*5; y = 2^2, z = 3^1.5;
y=
4
Во претходната наредба, пресметани се три променливи x, y и z, отпечатени
во еден ред. При тоа наредбатите со која се определуваат x и z завршуваат со ; и
затоа не се печатат додека пак наредбата со која се определува y завршува со
запирка како сепаратор помеѓу две наредби а не со ; и затоа програмата веднаш ја
печати вредноста. За да се видат вредностите на x и z треба да се напише:
>> x
x=
5.7500
>> z
z=
5.1962
12 MATLAB/SIMULINK – упатство за вежби

Броеви и формати во MATLAB

MATLAB препознава неколку видови (типови) броеви дадени во табелата.

РБ Тип Примери
1. Цел број 1362, -217897
2. Реален број 1.234, -10.76
3. Комплексен број 3.21 - 4.3i ( i е имагинарна единица)
4. Inf Бесконечно, делење со нула
5. NaN Не е број , 0/0

Нотацијата "e" се користи за многу големи или многу мали бројки:


-1.3412e+03 = -1.3412x103 = -1341.2
-1.3412e-01 = -1.3412x10-1 = -0.13412

Сите пресметки во MATLAB се изведуваат со двојна прецизност (double


precision), што значи со точност до 15-тата децимала.
Форматот на кој начин MATLAB ги печати броевите се дефинира и се контро-
лира со наредбата "format".

РБ Команда Печатен пример: 45.7503820449325179


1. >> format short 45.7504 (4 децимални места)
2. >> format short e 4.5750e+001
3. >> format long 45.75038204493252 (15 децимални места)
4. >> format long e 4.575038204493252e+001
5. >> format bank 45.75 (2 децимални места)

После соодветната команда од горната табела броевите ќе бидат


заокружени на четири, на 15 или на две децимали или пак ќе бидат напишани со
помош на знакот „е‟.
На пример, вредноста на бројот  со командата format ќе биде запишан на
следниве начини:
>> format short
>> pi
ans =
3.1416

> format short e


>> pi
ans =
3.1416e+000
MATLAB/SIMULINK – упатство за вежби 13

>> format long


>> pi
ans =
3.14159265358979

>> format long e


>> pi
ans =
3.141592653589793e+000

>> format bank


>> pi
ans =
3.14

Ако треба да се вратиме на стандардниот формат кој е дефиниран при


самото вкључување на MATLAB-от, треба само да се испише само format.

Наредбата

>> format compact

е исто така корисна наредба ако не сакаме печатење на празни редови. На тој
начин повеќе информации можат да бидат испечатени.

Пример, со вклучувањето на MATLAB со format командата се добива


печатење со празни редови:

>> 34*3

ans =

102

После наредбата format compact следи испис:


>> format compact
>> 34*3
ans =
102
(во исписот нема празни редови).
14 MATLAB/SIMULINK – упатство за вежби

1.3. ВАРИЈАБЛИ (ПРОМЕНЛИВИ)


Имињата на варијаблите претставуваат комбинација на букви и бројки и
започнуваат со буква. Во следниот пример дадени се коректно означени промен-
ливи.

ProCredit, Tri2Plus, Y4, z21x6

Следниот пример покажува како не смеат да се означуваат променливите:

Pro-Credit=1, Tri2%Plus=2, Y@4=3, z21#x6=4

Препорака е да се користат имиња кои асоцираат на контекстот и приро-


дата за која се употребени варијаблите. На тој начин полесно при повторно
разгледување на програмот се идентифицира значењето и употребата на дадената
променлива.

Специјални имиња: MATLAB-от има резервирано имиња на некој про-


менливи или константи а кои не треба да се користат од страна на корисникот. На
пример eps = 2.2204е-16 = 2-54 е најмалиот број така што бројот 1+eps се разликува
од 1 во рамките на грешката која постои во пресметките поради конечниот збир,
или pi = 3.14159 =  .

Ако се работи со комплексни броеви тогаш MATLАB-от буквите i и j ги


смета како имагинарни големини (  1 ), освен ако корисникот не ги смени.

пример:

>> i,j, i=3


ans =
0 + 1.0000i
ans =
0 + 1.0000i
i=
3

Со првите две наредби се дефинираат два комплексни броја, додека со


третата наредба значењето на i е сменето и сега претставува вообичаена
променлива со вредност 3.

За вежбање пресметај те ги вредностите на следниве аритметички изрази:

1) -2^3+9 2) 2/3*3 3) 3*2/3 4) 3*4-5^2*2-3 5) (2/3^2*5)(3-4^3)^2


6) 3*(3*4-2*5^2-3)
MATLAB/SIMULINK – упатство за вежби 15

1.4. ВГРАДЕНИ ФУНКЦИИ

MATLAB како јазик од повисоко ниво во својата имплементација има


вградено и голем број елементарни и најчесто користени математички функции,
како што се например тригнометриските и експоненцијланите.
Во Табелата се дадени елементарните фунции кои се вградени во MATLAB:

Elementaru Math Functions - Елементарни математички функции


Trigonometric Functions – Тригонометриски функции
sin Sine (синус)
sinh Hiperbolic sine (хиперболен синус )
asin Inverse sine (аркус синус - arcsin)
asinh Inverse hyperbolic sine (аркус синус хиперболен)
cos Cosine (косинус)
cosh Hyperbolic cosine (хиперболен косинус)
acos Inverse cosine (аркус косинус)
acosh Inverse hyperbolic cosine (аркус косинус хиперболен)
tan Tangent (тангенс)
tanh Hyperbolic tangent (хиперболен тангенс)
atan Inverse tangent (аркус тангенс)
atan2 Four quadrant inverse tangent (четири квадрантен тангенс)
atanh Inverse hyperbolic tangent (аркус тангенс хиперболен)
coth Hyperbolic cotangent (хиперболен котангенс)
Exponential Functions – Експоненцијални функции
exp Exponential (експонент exp(x)= x )
e
log Natural logarithm (природен логаритам)
log10 Common (base 10) logarithm (логаритам со база 10)
log2 Base 2 logarithm and dissect floating point number (лог.со база 2)
pow2 Base 2 power and scale floating point number
sqrt Square root (квадратен корен)
Complex Function – Комплексни функции
abs Absolute value and complex magnitude (апсолутна вредност)
angle Phase angle (фазен агол)
conj Complex conjugate (комплексно конјугиран)
imag Imaginary part of complex number (имагинарен дел од к.б.)
real Real part of complex number (реален дек ог комплексен број)
Rounding and remainder – Заокружување и остаток
fix Round towards zero (заокружување на цел број поблиску до нула)
floor Round towards minus infinity (заокруж. на цел број поблиску до   )
ceil Round towards plus infinity (заокруж. на цел број поблиску до   )
round Round towards nearest integer (заокруж. на најблизок цел број)
mod Modulus (signed remainder after division) (слично со rem)
rem Remainder after division (остаток после делење)
sign Signum (signum – предзнак од број или функција sign(-3.26)=-1)
16 MATLAB/SIMULINK – упатство за вежби

Целосен опис на функциите може да се добие од MATLAB ако се отчука наредба


>>help funkcija

Користењето на елементарните функции е едноставно и се сведува на нивно


повикување со наредба која се испишува на ист начин како и во математиката.

>> x = 5*cos(pi/6), y = 5*sin(pi/6)


x=
4.3301

y=
2.5000

Во горниот пример пресметани се sin и cos вредностите за аргументот pi/6, при


тоа аргументите се задаваат во радијани.

>> acos(x/5), asin(y/5)


ans =
0.5236
ans =
0.5236

>> pi/6
ans =
0.5236

Со предходните наредби се пресметани инверзните функции на cos и sin и


како резултат добен е аргументот pi/6. Аргументите x и y се земени од
претходните пресметки и тие егзистираат во работниот простор на MATLAB-от се
додека експлицитно не ги избришеме. Во продолжение се дадени неколку примери
на користење на елементарните математички функции.

>> x = 9;format;
>> sqrt(x), exp(x), log(sqrt(x)),log10(x^2+6)
ans =
3
ans =
8.1031e+003
ans =
1.0986
ans =
1.9395

>> format long e, exp(log(9)), log(exp(9)


ans =
9.000000000000002e+000
ans =
9
>> format short
MATLAB/SIMULINK – упатство за вежби 17

exp(x) означува експоненцијална функција exp( x)  e додека log(x) е инверз-


x

ната фукција. Затоа во претходниот пример резултатот и во двата случаја е 9. Во


првиот пример поради наредбата format long e, резултатот е печатен со точност на
15 децимали при што се гледа дека во 15-тата децимала постои мала грешка на
заокружување. Со наредбата format short, повторно се враќа стандардниот начин
на презентација на броевите.

За вежби пресметајте ја вредноста на следниве изрази:

1. 3x , x  2 .
3
x2
2. , x6.
2
2 3
3. 7 x , x4. 4. 4 x , x  2 .
2
1 x 1
6. x  4 x , x  3 .
5. , x2.
x 1
7. 3x  4 x , x  2 . 8. 6 x  (6 x ) , x  10 .
2 3 0 0

9. 5(  x ) , x  3 .
3
1
10. , x4.
(  x )3
11. 500 x
60
, x  1,01 . 12.
10.000
, x  1,075 .
x120

e 0.2696*0.2  sin(2  0.2)


13. x 
0.01 3  ln 18

e 0.2696 x  sin(2  y )
14. x  3, y  5, z 
x  y  ln(x  y )

e 0.5 x  cos(2  y )
15. x  5.5, y  7.0, z  ( x  y ) 2 
x 2  y 2   ln(x 2  y 2 )

16. Дадени се два комплексни броеви:


z1  3  4 j i z2  7  10 j
одреди: z  z1  z2 , u  z , w  z1z  z2u, a | z |, b | w | ,
18 MATLAB/SIMULINK – упатство за вежби

1.5. ВЕКТОРИ

Векторите, односно низите, можат да се дефинираат на два начина: како


вектор-редица или вектор-колона. Вектор-редица е низа на броеви чии
елементи се одвоени или со запирка или со празно место (blank). Бројот на
елементите ја определува димензијата (должината) на векторот, а елементите
често се нарекуваат и компоненти на векторот. Елементите мора да бидат
затворени со аглести загради [ ] .

>> v = [1 3, sqrt(5)]
v=
1.0000 3.0000 2.2361

>> length(v)
ans =
3

Со примерот е покажано како се дефинира векторот x со три елементи, при


што третиот елемент е функција, што значи дека при дефинирање на вектор, како
елемент може да се користи било каква функција или аритметички израз што како
резултат при пресметувањето дава бројка. Празните места за раздвојување на
компонентите се од витално значење.

>> v2 = [ 3+ 4 5]
v2 =
7 5

>> v3 = [ 3 +4 5]
v3 =
3 4 5

При дефинирање на v2 празното место е ставено после + и MATLAB-от


извршил собирање на 3 и 4 и како резултат добеин е вектор со два елементи. Во
случај на векторот v3, празното место е пред +, и како резултат се добива вектор со
3 елементи.

Вектори со иста должина можат да се собираат, одземаат како и да се


множат со број. Како пример да покажеме собирање на векторите v и v3 кои се
претходно пресметани, множење со број и одземање.

>> v + v3
ans =
4.0000 7.0000 7.2361

>> v4 = 3*v
v4 =
3.0000 9.0000 6.7082
MATLAB/SIMULINK – упатство за вежби 19

>> v5 = 2*v - 3*v


v5 =
-7.0000 -6.0000 -10.5279

Вектор може да се формира со помош на други вектори:

>> w = [1 2 3], z = [8 9]
>> cd = [ 2*z, -w]
>> sort(cd)
w=
1 2 3
z=
8 9
cd =
16 18 -1 -2 -3
ans =
-3 -2 -1 16 18

Векторот cd е генериран користејќи ги векторите w и z. Командата sort


врши сортирање на елементите на векторот cd по големина, и оваа команда е
вградена функција на MATLAB-от.

Можно е исто така да се смени или да се испечати вредноста на даден


елемент на векторот.

>> w(2) = -2, w(3)


w=
1 -2 3
ans =
3

Вектор може да се користи и како аргумент на функција. На пример:

>> w = [ 2 4 9 16 25 ]
w=
2 4 9 16 25

>> sqrt(w)
ans =
1.4142 2.0000 3.0000 4.0000 5.0000

Функцијата sqrt (квадратен корен) зема елемент по елемент и генерира нов


вектор со елементи кои претставуваат квадратен корен на оригиналниот вектор w.
Оваа можност на MATLAB-от претставува моќно орадие во споредба со други
јазици, каде треба да се напише неколку реда програма за да се добие истиот
резултат. Овоа својство се нарекува векторизација на аритметиката.
20 MATLAB/SIMULINK – упатство за вежби

1.5.1. Генерирање вектори со ознаката (:)

Со ознаката две точки ( : ), можно е на пократок и покомпактен начин да се


генерират вектори.

>> 1:4
>> 3:7
>> 1:-1
ans =
1 2 3 4
ans =
3 4 5 6 7
ans =
Empty matrix: 1-by-0

Со првата наредба е генериран вектор во кој првиот елемент е еднаков на 1 а


последниот 4. Другите елементи се пополнуваат со чекор единица. Слично и
втората наредба генерира вектор каде првиот елемент е 3 и со чекор 1 се
пополнува се до последниот кој има вреднсот 7. Последната наредба генерира
празен вектор бидејќи горната граница -1 е помала од долната граница 1.

Генерално наредбата m : k : n генерира вектор со елементи што започнуваат со


m и со чекор k завршуваат со n (нема да се генерира елемент поголем од n).

>> 0.32 : 0.1 : 0.6


>> -1.4 : -0.3 : -2
ans =
0.3200 0.4200 0.5200
ans =
-1.4000 -1.7000 -2.0000

1.5.2. Издвојување на елементите на векторот

>> r5 = [1:2:6, -1:-2:-7]


r5 =
1 3 5 -1 -3 -5 -7
За да се издвојат елементите од третото до шестото место се користи наред-
бата:
>> r5(3:6)
ans =
5 -1 -3 -5
или ако сакаме алтернативни елементи тогаш:
>> r5( 1:2:7 )
ans =
1 5 -3 -7
Прашање: Што наредбата r5( 6:-2:1), дава како резултат ?
MATLAB/SIMULINK – упатство за вежби 21

1.5.3. Вектор колона

Вектор колона се дефинира на сличен начин како и вектор ред. Елементите


се одвоени со точка-запирка (;) или со нов ред.
>> c = [1; 3; sqrt(5)]
c=
1.0000
3.0000
2.2361

>> c2 = [3
4
5]
c2 =
3
4
5
>> c3 = 2*c - 3*c
c3 =
-7.0000
-6.0000
-10.5279

Вектор колони можат да се собират или одземаат ако имаат иста димен-
зија (ист број на елементи).

1.5.4. Транспонирање

Со постапката на транспонирање векторот-колона се претвара во вектор-ред


и обратно. Транспонирањето се означува со симболот ( ' ).

>> w = [ 1 -2 3 ], c = [ 1; 3; sqrt(5)]
w=
1 -2 3
c=
1.0000
3.0000
2.2361

>> w', c’
ans =
1
-2
3
ans =
1.0000 3.0000 2.2361
22 MATLAB/SIMULINK – упатство за вежби

>> t = w + 2*c'
t=
3.0000 4.0000 7.4721

>> T = 5*w' - 2*c


T=
3.0000
-16.0000
10.5279

>> T,t
T=
3.0000
-16.0000
10.5279
t=
3.0000 4.0000 7.4721

Во примерот погоре варијаблите T и t се различни, што значи дека


MATLAB-от прави разлика помеѓу мали и големи букви и променливите со исто
име но дефинирани со мали или со големи букви се сметаат како две посебни
променливи.
Ако променливата x е комплексен вектор, тогаш x‟ е комплексно коњугиран
транспониран вектор на векторот x.

>> x = [ 1+3i, 2-2i]


x=
1.0000 + 3.0000i 2.0000 – 2.0000i

>> x’
ans =
1.0 – 3.0000i
.0000 + 2.0000i

1.5.5. Скаларен производ на вектори (*)

Скаларен производ на два вектора со иста димензија преставува број (ска-


лар), кој се добива со собирање на производите на соодветните елементи. Значи,
прво се множат соодветните компоненти на векторот, а потоа резултатите се
собираат. Нека се u и v два n -димензионални вектори- колони
u  [u1, u2 ,...un ]T v  [v1 , v2 ,...vn ]T
Скаларниот производ ќе биде
n
uT v  [u1, u2 ,...un ]  [v1, v2 ,...vn ]T   ui vi  u1v1  u2v2  ...  unvn
1
MATLAB/SIMULINK – упатство за вежби 23

Пример. Нека се дадени два тродимензионални вектори


 10   20 
u   11 и v    21 .
 12   22

Нивниот скаларен производ ќе биде

uT v  10  20  (11)  (21)  12  (22)  167

Во MATLAB-от скаларниот производ се пресметува слично како во горниот


пример, на следниот начин:

>> u = [10; -11; 12 ], u’, v = [20; -21; -22]


>> prod = u’*v
u=
10
-11
12
u‟ =
10 -11 12
v=
20
-21
-22

prod =
167

MATLAB-от пресметува скаларен производ помеѓу вектор-ред и вектор-


колона. Имено ако имаме вектор:
>> w = [2, 1, 3]
w=
2 1 3
Тогаш при пресметување на скаларен производ помеѓу векторите u и w,
MatLab-от ќе пријави грешка.

>> u*w
??? Error using ==> *
Inner matrix dimensions must agree.
додека пак
u*w'
ans =
45
бидејќи со операцијата транспонирање, векторот-редица w е претворен во вектор-
колона.
24 MATLAB/SIMULINK – упатство за вежби

Под Еуклидова норма или должина на вектор која се одбележува со сим-


болот u се подразбира број кој се пресметува со формулата.
n
 ui
2
u   uT u
1

каде n е димензијата на векторот. Должината на даден вектор u  [10,  11, 12]T со


MATLAB-от може да се пресмета на два начина:

>> dol = sqrt(u’*u)


dol =
19.1050
или
>> dol = norm(u)
dol =
19.1050

Во последната наредба користена е вградената функција за пресметување на


нормата на даден вектор. MATLAB поседува повеќе такви функции кои делуваат
на векторите.

Пример:
Аголот  помеѓу два вектор-колони x и y e дефиниран е со равенството:
xT y
cos 
x y
Со помош на оваа формулата да се определи косинус на аголот помеѓу следниве
два вектори
x  [1, 2,3]T и y  [3, 2,1]T
потоа да се најде аголот изразен во степени.

Решение во MATLAB:
>> x=[1, 2, 3]';
>> y=[3, 2, 1]';
>> costheta=x'*y/(norm(x)*norm(y));
>> theta=acos(costheta);
>> thetad=theta*180/pi;
>> costheta, theta, thetad (печатење на резултатите)

costheta = (косинус од аголот  =theta)


0.7143
theta = (аголот  во радијани)
0.7752
thetad =
44.4153 (аголот  во степени)
MATLAB/SIMULINK – упатство за вежби 25

1.5.6. Точкаст производ (.*)

Втор начин да се помножат два вектора со исти димензии а така наречен


ХАДАМАРОВ производ. Тој не се користи често во математиката но претставува
непроценива можност и корист која ја поседува MATLAB-от. Ако u и v се два
вектора од ист тип (колона или ред), математичка дефиниција на овој производ
(точкаст производ) е вектор со компоненти:

u  v  [u1v1, u2v2 ,....,unvn ]

резултатот е вектор со иста димензија и од ист тип. Значи едноставно се множат


соодветните елементи на векторите.

Во МАТЛАБ-от овој производ се дефинира со операторот (.*).


>> u=[10; -11; 12];
>> v=[20; -21; -22];
>> u.*v, u'.*v'
ans = (производ на вектори колони u.*v)
200
231
-264

ans = (производ на вектори редици u.*v)


200 231 -264

Пример: Табеларно да се претстави функцијата y  x sin(x) za x=0.0:0.25:1.0.

Попрактично е да се работи со вектор-колона, и затоа прво треба да се


генерираат вреднсотите на x во форма на колона.

>>x = 0.0:0:25:1.0; или x = [0.0:0:25:1.0]; (овој запис дава вектор редица)


x=
0 0.2500 0.5000 0.7500 1.0000
>>
>> x = [0.0:0:25:1.0]’; (овој запис дава вектор колона)
x=
0
0.2500
0.5000
0.7500
1.0000

За да се пресмета y потребно е да се помножат соодевтните елементи на


векторот x и векторот spx= sin(x) којшто се добива со пресметката:
26 MATLAB/SIMULINK – упатство за вежби

>> spx=sin(pi*x); % резултатот е вектор колона


ans =
0
0.7071
1.0000
0.7071
0.0000
Конечниот резултат у е даден во следната табела

х=x spx= sin(x) у = y  x sin(x)


0.000 0.0000 0.0000
0.2500 0.7071 0.1768
0.5000 1.0000 0.5000
0.7500 0.7071 0.5303
1.0000 0.0000 0.0000

Со помош на MATLAB-от пресметките се вршат со една наредба:


>> y = x.*sin(pi*x) % вредности на функцијата у
y=
0
0.1768
0.5000
0.5303
0.0000

Чекорите на пресметување кои што се кријат зад овој еден ред наредба се
следниве:
 Секој елемент на векторот-колона x се множи со бројот pi = 3.1495.
 Функцијата sin се пресметува за секој елемент на векторот добиен со претход-
ниот чекор. При тоа се добива нов вектор-колона
 Се врши точкасто множење помеѓу новодобиентиот вектоr sin(pi*x) и
векторот x и се генерира векторот y, чии елементи се бараните табеларни
вредности на функцијата.
Кусо, со следниве наредби во MATLAB може да се добие горната табела:
>> x=[0.0:0.25:1.0]’; % вектор колона – независна варијабла)
>> spx=sin(pi*x); % пресметка на sin(x) - вектор колона)
>> y=x.*spx; % пресметка на функцијата y  x sin(x)
>> [x, spx, y] % испис на решението во табела
ans = x sin(x) y  x sin(x)
0 0 0
0.2500 0.7071 0.1768
0.5000 1.0000 0.5000
0.7500 0.7071 0.5303
1.0000 0.0000 0.0000
MATLAB/SIMULINK – упатство за вежби 27

1.5.7. Точкаст количник ( делење ) ( ./ )

Не постои математички еквивалент за делење на еден вектор со друг. Во


MATLAB-от операторот ( ./ ) е дефиниран како операција на делење на елементот
на првиот вектор со соодветниот елемент на вториот вектор. Од оваа дефениција
произлегува дека векторите со иста димензија (должина), можат точкасто да се
делат.

>> a = 1:5, b = 6:10, a./b


a=
1 2 3 4 5
b=
6 7 8 9 10
ans =
0.1667 0.2857 0.3750 0.4444 0.5000

>> a./a
ans =
1 1 1 1 1

>> c = -2:2, a./c


c=
-2 -1 0 1 2

Warning: Divide by zero.


ans =
-0.5000 -2.0000 Inf 4.0000 2.5000

Во претходниот пример, дефиниран е векторот c чии трет елемент е нула.


При точкастото делење на a со c, се јавува порака дека се дели со нула, а како
резултат MATLAB-от испишува Inf, означувајќи со бесконечност резулт на деле-
њето со нула.

>> a.*b - 24 , ans./c


ans =
-18 -10 0 12 26

Warning: Divide by zero.


ans =
9 10 NaN 12 13

Во овој пример се јавува случај на 0/0, и како резултат MATLAB-от испи-


шува NaN, што значи дека третиот елемент не е број.

Пример: Да се оцени вредноста на лимесот:


sin(x)
lim
x 0 x
28 MATLAB/SIMULINK – упатство за вежби

Идејата е да се пресмета вредноста на количникот sin(x)/x за низа


вредности на x кои се доближуваат до 0. Нека таа низа се дефинира како вектор-
колона.
>> x = [0.1; 0.01; 0.001; 0.0001]
x=
0.1000
0.0100
0.0010
0.0001
тогаш
>> sin(pi*x)./x
ans =
3.0902
3.1411
3.1416
3.1416
што сугерира дека вредностите конвергираат кон . За да се добие подобро чуство,
нека се одземе  од секој елемент на ans. За печатење на поголем број на
децимални места, потребно е да се смени форматот.
>> format long
>> ans - pi
ans =
-0.05142270984032
-0.00051674577696
-0.00000516771023
-0.00000005167713

Сега е јасно, дека количникот конвергира кон , бидејќи грешката на


четвртиот елемент е во 8-та децимала.
Точкастото делење ( ./ ), се користи и за делење на скалар (број) со вектор.
>> 1./x
ans =
10
100
1000
10000

1.5.8. Точкасто степенување ( .^ )

За да се квадрира секој елемент на даден вектор, може да се искористи точкас-


тото множење на векторот со самиот себе u.*u. Но покомпактен начин е со
користење на точкасто степенување ( .^ ).

>> u = [10 11 12];


MATLAB/SIMULINK – упатство за вежби 29

>> u.^2
ans =
100 121 144

>> u.*u
ans =
100 121 144

>> u.^4
ans =
10000 14641 20736

>> v = [ 20; -21; -22]; w = [2, 1, 3];


>> v.^2
ans =
400
441
484

>> format, u.*w.^(-2)


ans =

2.5000 11.0000 1.3333

Треба да се забележи дека прво се пресметува ( .^ ), а потоа сите други опера-


ции по приоритет.
30 MATLAB/SIMULINK – упатство за вежби

1.6. ЕЛЕМЕНТАРНИ МАТРИЧНИ ОПЕРАЦИИ

Во МАТЛАБ матрица се креира со правоаголен поредок на броеви


опкружени со средни загради. Елементите од секој ред се одвоени со празни мес-
та или со запирки. Знакот точка-запирка ( ; ) може да се употреби за означување
на крајот на редот. Матрични елементи може да бидат било кои MATLAB изрази.
Вектор – колона и вектор – редица (од претходната точка) се специјални
случаеви на матрици.
Во математиката матриците се одбележуваат со аглести загради.
Например, некоја матрица А со 3Х3 елементи се запишсува во форма

 6 1 2
A   1 8 3 .
 2 4 9

За да се некоја матрица внесе во MATLAB, едноставно се внесуваат


вредностите ред по ред користејчи ја истата снтакса како и за векторите.
Наредбата
>> A = [6 1 2; -1 8 3; 2 4 9]
резултира во излез:
>> А =
6 1 2
-1 8 3
2 4 9

Ако не се употребува знакот точка-запирка ( ; ) тогаш секој ред мора да се


внесе во посебна (нова) линија:
>> A = [ 6 1 2
-1 8 3
2 4 9]
МАТЛАБ ќе одговори како и претходно:
>> А =
6 1 2
-1 8 3
2 4 9
MATLAB/SIMULINK – упатство за вежби 31

Одреден ред или колона на матрицата може да се адресира со помош на


симболот две точки ( : ).
На пример:
>> r3 = A(3,:)
резултира во:
>> r3 =
2 4 9
Слично, наредбата А(:,2) ги адресира сите елементи во втората колона.
Пример
>> c2 = A(:,2)
резултира во
>> c2 =
1
8
4

1.6.1. Димензија на матрица

Димензијата на некоја матрица се добива (определува) со командата size.


Например, ако се дадени две матрици B и x:
>> B=[-1 2 5;9 0 5]
>> x=[ 1;2;3];
нивните димензии ќе ги одредиме со наредбите
>> size(B), size(x)
ans =
2 3 (B е 2X3 матрица – 2 редици и 3 колони
ans =
3 1 (x e 3X1 матрица – 3 редици и 1 колона – матрица колона)

>> size(ans)
ans =
1 2

Бидејќи матрицата B е 2x3 а векторот x, 3x1, наредбата size ги дава бројот


на редовите и колоните. Бидејќи самиот излез се состои од две вредности,
променливата ans е сама вектор-ред затоа наредбата size(ans) дава вредност 1 и 2.
Можно е резултатот на наредбата size да се сочува за понатамошно користење во
пресметките.
32 MATLAB/SIMULINK – упатство за вежби

>> [r,c]=size(B'), S = size(B')


r= (редици)
3
c= (колони)
2
S=
3 2

1.6.2. Собирање и одземање на матрици


Матрици со иста димензија може да се собираат или одземаат. Пример:
>> A=[5 11 0 4; -7 3 7 6; 0 5 9 2];
>> B=[3 0 8 5; 4 1 3 -4; 12 0 3 4];
>> A+B
ans =
8 11 8 9
-3 4 10 2
12 5 12 6
>> A-B
ans =
2 11 -8 -1
-11 2 4 10
-12 5 6 -2

1.6.3. Транспонирање на матрица

Транспонирање на вектор врши трансформација на вектор-ред во вектор-


колона и обратно. Проширување на оваа идеја врз матриците, значи замена на
редовите со соодветните колони: првиот ред станува прва колона и т.н.
Транспонирање се врши со знакот ‘ .
>> D=[1:5; 6:10; 11:2:20];
>> D, D'
D=
1 2 3 4 5
6 7 8 9 10
11 13 15 17 19
ans =
1 6 11
2 7 13
3 8 15
4 9 17
5 10 19

>> size(D), size(D')


MATLAB/SIMULINK – упатство за вежби 33

ans =
3 5

ans =
5 3

1.6.4. Специјални матрици

MATLAB овозможува автоматско генерирање на бројни корисни видови на


матрици од било кој ред.
Наредбата ones(m,n) генерира mxn матрица со единици како нејзини еле-
менти:

>> P=ones(2,3)
P=
1 1 1
1 1 1

Наредбата zeros(m,n) генерира mxn матрица со нули:

>> Z=zeros(2,3), zeros(size(P')


Z=
0 0 0
0 0 0
ans =
0 0
0 0
0 0

Втората команда е пример за конструкција на матрица која се базира на


димензиите на дадена матрица.

Матрицата се нарекува квадратна ако има еднаков број на редови и колони


(nxn). Матрицата е симетрична ако е еднаква на својата транспонирана т.е. ако не
се менува при транспонирањето. Јасно е дека само квадратните матрици можат да
бидат симетрични.

>> S = [ 2, -1, 0; -1, 2, -1; 0, -1, 2]


S=
2 -1 0
-1 2 -1
0 -1 2

>> St = S'
St =
2 -1 0
-1 2 -1
0 -1 2
34 MATLAB/SIMULINK – упатство за вежби

>> S-St
ans =
0 0 0
0 0 0
0 0 0

1.6.5. Единична матрица

Единична матрица е квадратна матрица nxn, која само на главната


дијагонала има единици а сите други елементи се нули. Во MatLab-от единичната
матрица се генерира со наредбата eye(n).

>> I = eye(3), x = [8; -4; 1], I*x


I=
1 0 0
0 1 0
0 0 1
x=
8
-4
1
ans =
8
-4
1

Како што се гледа единичната матрица помножена со вектор или матрица го


дава истиот вектор или матрицата.

1.6.6. Дијагонална матрица

Дијагоналната матрица е слична на единичната матрица освен што


дијагоналните елементи не се нужно единици. Генерирање на дијагонална матрица
во MATLAB-от може да се направи на два начина. Првиот начин е директно
внесување на дијагоналната матрица.

>> D = [-3 0 0; 0 4 0; 0 0 2]
D=
-3 0 0
0 4 0
0 0 2

Но овој начин станува неефикасен кога е во прашање матрица со поголеми


димензии (пр. 100x100). Во таков случај се користи наредбата diag. Претходно се
дефинира вектор d кој ги содржи дијагоналните елементи на матрицата а потоа со
наредбата diag(d) се генерира бараната дијагонална матрица.
MATLAB/SIMULINK – упатство за вежби 35

>> d = [-3 4 2], D=diag(d)


d=
-3 4 2
D=
-3 0 0
0 4 0
0 0 2

Но ако A е матрица, наредбата diag(A), ги издвојува дијагоналните елемен-


ти во вектор.
>> F=[0 1 8 7; 3 -2 -4 2; 4 2 1 1]
F=
0 1 8 7
3 -2 -4 2
4 2 1 1

>> diag(F)
ans =
0
-2
1

Треба да се забележи дека матрицата не мора да биде квадратна.

1.6.7. Конструкција на матрици

Често е попрактично да големите матрици се конструираат од помали:


>> C = [ 0 1; 3 -2; 4 2]; x = [8; -4; 1];
>> G = [C x]
G=
0 1 8
3 -2 -4
4 2 1

>> A = [ 5 7 9; 1 -3 -7], B, H = [A;B]


A=
5 7 9
1 -3 -7
B=
-1 2 5
9 0 5
H=
5 7 9
1 -3 -7
-1 2 5
9 0 5
36 MATLAB/SIMULINK – упатство за вежби

Со горните наредби матрицата C е проширена со векторот x формирајќи


матрица G, додека со последната наредба генерирана е матрицата H со помош на
матриците A и B, така што после матрицата A е додадена матрицата B со
зголемување на бројот на редовите.

>> J= [1:4; 5:8; 9:12; 20 0 5 4]


J=
1 2 3 4
5 6 7 8
9 10 11 12
20 0 5 4

>> K = [diag(1:4) J; J' zeros(4,4)]


K=
1 0 0 0 1 2 3 4
0 2 0 0 5 6 7 8
0 0 3 0 9 10 11 12
0 0 0 4 20 0 5 4
1 5 9 20 0 0 0 0
2 6 10 0 0 0 0 0
3 7 11 5 0 0 0 0
4 8 12 4 0 0 0 0

Командата spy(K) генерира графичка презентација на местата на не-нултите


елементи на матрицата K, како и вкупниот број на не-нултите елементи.

>> spy(K), grid

9
0 1 2 3 4 5 6 7 8 9
nz = 34

Пример: табелирање на функции

Да се направи табела на функциите y=4sin(3x) и u=3sin(4x) за x =


0.0.1,0.2,....0.5
MATLAB/SIMULINK – упатство за вежби 37

>> x=0:0.1:0.5;
>> y=4*sin(3*x); u=3*sin(4*x);
>> [x',y',u']
ans =
0 0 0
0.1000 1.1821 1.1683
0.2000 2.2586 2.1521
0.3000 3.1333 2.7961
0.4000 3.7282 2.9987
0.5000 3.9900 2.7279

Задачата може да се реши со помал број на наредби.

>> x=(0:0.1:0.5)';
>> [x 4*sin(3*x) 3*sin(4*x) ]
ans =
0 0 0
0.1000 1.1821 1.1683
0.2000 2.2586 2.1521
0.3000 3.1333 2.7961
0.4000 3.7282 2.9987
0.5000 3.9900 2.7279

1.6.8. Издвојување на елементи на матрица

Можно е издвојување на дел од матрица т.е. субматрица, на еднаков начин


како и во случај на векторите. Секој елемент на матрица е индексиран спрема
редот и колоната на кои им припаѓа. Елементот во i-тиот ред и j-тата колона
математички се означува како Aij а во Matlabот со A(i,j). Така на пример:

>> J = [1:4; 5:8;9:12; 20 0 5 4]


J=
1 2 3 4
5 6 7 8
9 10 11 12
20 0 5 4

>> J(1,1)
ans =
1
>> J(2,3)
ans =
7

>> J(4,5)
??? Index exceeds matrix dimensions.
38 MATLAB/SIMULINK – упатство за вежби

>> J(4,1) = J(1,1) + 6


J=
1 2 3 4
5 6 7 8
9 10 11 12
7 0 5 4

>> J(1,1) = J(1,1)-3*J(1,2)


J=
-5 2 3 4
5 6 7 8
9 10 11 12
7 0 5 4

Од горните примери се гледа дека елементите на матрицата можат да се


повикуваат сами или да се менуваат и комбинираат едни со други. Во примерите
што следат покажано е како можат да се издвојат колони, редови или субматрици.

>> J(:,3) % tretata kolona se izdvojuva


ans =
3
7
11
5

>> J(:,2:3) % kolonite 2 i 3 se izdvoeni


ans =
2 3
6 7
10 11
0 5

>> J(4,:)
ans =
7 0 5 4

>> J(2:3,2:3)
ans =
6 7
10 11

1.6.9. Точкаст производ на матрици ( .* )

Точкастиот производ е дефиниран на ист начин како и кај векторите.


Бидејќи соодветните елементи се множат меѓусебно матриците мораат да имаат
иста димензија (ред).
>> A = [ 6 7 9; 1 -3 -7]
MATLAB/SIMULINK – упатство за вежби 39

A=
6 7 9
1 -3 -7
>> B = [ -1 2 5; 9 0 5]
B=
-1 2 5
9 0 5
>> A.*B
ans =
-6 14 45
9 0 -35
>> A.*B'
??? Error using ==> .*
Matrix dimensions must agree.

Во последниот пример се генерира грешка бидејќи транспонираната


матрица B' нема иста димензија како матрицата A.

1.6.10. Множење на матрица со вектор

Множење на матрица со вектор може да биде или од десно или од лево т.е.
Ax множење на матрица со вектор од десно и
xA множење на матрица со вектор од лево.
Најчесто се среќава множење од десно, Ax и затоа векторот x е вектор-
колона а бројот на колоните на матрицата A мора да е еднаков на бројот на
елементите на x.

>> x = [8; -4; 1]


x=
8
-4
1
>> A
A=
6 7 9
1 -3 -7
>> A*x
ans =
29
13
>> x*A
??? Error using ==> *
Inner matrix dimensions must agree.
За разлика од вообичаеното множење, тука Ax не е исто со xA, кога станува
збор за матрица и вектор.
40 MATLAB/SIMULINK – упатство за вежби

1.6.11. Множење на матрици

За да се помножат матрицата A со димензија mxn и мтрицата B со


димензија nxp, т.е. A*B, бројот на колоните на матрицата A мора да биде еднаков
со бројот на редовите на матрицата B, при што се добива матрицата C со
димензија mxp.

>> A = [5 7 9; 1 -3 -7]
A=
5 7 9
1 -3 -7

>>B = [ 0, 1; 3, -2; 4, 2]
B=
0 1
3 -2
4 2

>> C = A*B
C=
57 9
-37 -7
>> D = B*
D=
1 -3 -7
13 27 41
22 22 22

Како што се гледа и при множење на матриците не мора да биде исполнет


комутативниот закон, т.е. AB не е еднакво на BA.

1.6.12. Матрично „делење“ - решавање на матрични равенки

Во MATLAB се користат два симболи за несингуларно матрично делење:


A\ B е еквивалентно на A-1B
A/B е еквивалентно на AB-1
Во натамошните примери, поради трајно помнење на програмските реше-
нија ќе се користат скрипт m-file-ови. Креирањето на m-file-ови се обработува во
точка 2. Програмирање во МАТЛАБ.
Пример 1.6.1.
За дадената матрична равенка, Ax = B, да се одреди векторот x :

 4  2  10  x1   10
 2 10  12  x    32 
  2   
 4  6 16   x3   16
MATLAB/SIMULINK – упатство за вежби 41

Програмско решение:
% Primer 1.6.1
% file: mt_p16_01_linalgebra.m
%
A = [ 4 -2 -10; 2 10 -12; -4 -6 16];
B = [-10; 32; -16];
X = A\B
Решение:
X=
2.0000
4.0000
1.0000
Во MATLAB постојат бројни математички функции кои се изработени и
се достапни како М-фајлови. Списокот и употребата на овие функции се дадени
во Упатството за корисниците на МАТЛАБ (MATLAB User‟s Guide).

Пример 1.6.2.
Да се употреби функцијата inv за одредување на инверз од матрицата A
во Примерот 1.6.1., а потоа да се одреди векторот x.
Програмско решение:
% Primer 1.6.2
% File: mt_p16_02_linalgebra.m
%
A = [ 4 -2 -10; 2 10 -12; -4 -6 16];
B = [-10; 32; -16];
C = inv(A)
X = C*B
Решение:
C=
2.2000 2.3000 3.1000
0.4000 0.6000 0.7000
0.7000 0.8000 1.1000

X=
2
4
1

Пример 1.6.3.
Употреби ја функцијата за факторизација lu за изразување на матрицата А
од Примерот 1.6.2. како производ од горна и долна триаголна матрица, A = LU.
1 1
Потоа најди го x од X  U L B.
42 MATLAB/SIMULINK – упатство за вежби

Програмско решение (m-file):


% Primer 1.6.3
% File: mt_p16_03_linalgebra.m
%
A = [4 -2 -10; 2 10 -12; -4 -6 16];
B = [-10; 32; -16];
[L,U] = lu(A)
X = inv(U)*inv(L)*B
Решение:
L=
1.0000 0 0
0.5000 1.0000 0
-1.0000 -0.7273 1.0000

U=
4.0000 -2.0000 -10.0000
0 11.0000 -7.0000
0 0 0.9091

X=
2
4
1

1.6.13. Својствени вредности (Eigenvalues)

Ако А е n x n матрица, тогаш н броеви  кои ја задоволуваат равенката


Ax  x
се својствени вредности на матрицата А. Својствените вредности се наоѓаат со
употреба на eig(A) која ги одредува својствените вредности кои се испишуваат во
вектор колона.
Својствените вредности и својствените вектори може да се добијат со
MATLAB наредбата за нивно одредување
[X,D]=eig(A)
Дијагоналните елементои од D се својствени вредности, а колоните од X
се својствени вектори такви да е:
AX  XD .
MATLAB/SIMULINK – упатство за вежби 43

Пример. 1.6.4.
Одреди ги својствените вредности и својствените вектори на матрицата А:

0 1  1
A   6  11 6 

 6  11 5 
M-file (програмско решение):
% Primer 1.6.4
% File: mt_p16_04_eigenvalues.m
%
A = [0 1 -1; -6 -11 6; -6 -11 5];
[X,D] = eig(A)
Решение:
X = (Својствени вектори – колоните во матрицата)
0.7071 -0.2182 -0.0921
0.0000 -0.4364 -0.5523
0.7071 -0.8729 -0.8285

D = (Својствени вредности – дијагоналните елементи)


-1.0000 0 0
0 -2.0000 0
0 0 -3.0000

1.6.14. Примери и задачи

Да се решат следниве системи алгебарски равенки:

Пример 1.6.5.
x y z t  4
2x  y  t  2
3x  y  z  t  2
x  2 y  3 z  t  3

Решение. Горниот систем на равенки го запишуваме во матрична форма Ax = B,

1 1 1 1  x  4 
2  1 0 1   y   2 
 
3 1  z  1  z   2 
    
1  2  3 1   t   3

1
За непознатиот вектор х вреди x  A B .
44 MATLAB/SIMULINK – упатство за вежби

За решавање може да се примени кој било еден од горе понудените начини. Едно
програмско решение е:
% Primer 1.6.5
% File: mt_p16_05_linalgebra.m
%
A = [ 1 1 1 1; 2 -1 0 1; 3 2 -1 -1; 1 -2 -3 1];
B = [4; 2; 2; -3];
X = A\B
Решение: непознатиот вектор x  [ x y z t ]T е:
X=
0.8437 (x)
0.8750 (y)
1.0937 (z)
1.1875 (t)

Реши ги следниве системи на линеарни алгебарски равенки:

Задача 1.6.1.
2x  3y  z  t  1
x  y  z  t 1
3 x  y  z  2t  0
 x  z  t  2

Задача 1.6.2.
x  2y  z  t  3
xz t
2y  z  t
x  4 y  2z  t  1

Задача 1.6.3.
x  2y  w  0
3x  y  4 z  2w  3
2 x  3 y  z  5w  1
x  2 z  2w  1
MATLAB/SIMULINK – упатство за вежби 45

1.7. ГРАФИКА – ЦРТАЊЕ ВО МАТЛАБ

МАТЛАБ може да креира висококвалитетни 2D, 3D, линеарни, логаритам-


ски, полулогаритамски, поларни, бар и контурни графови на плотери, матрични
принтери, и на ласерски принтери.
Некои од 2-D типови графови се: plot, loglog, semilogx, semilogy, polar, i
bar.
Командата grid додава на графот мрежа, а командите title(‘tekst’),
xlabel(‘tekst’), ylabel(‘tekst’) и text(‘tekst’) може да се употребат за ставање
означување и ставање текст на графот.
Синтаксата за горните графови вклучува опционални симболи (.,+,*,o,x) и
бои (r,b,g,w). Например наредбата:
plot(t, y1,’r’ , t, y2, ‘+b’)
става црвена линија на првата крива, и плав+ знак на втората.
МАТЛАБ овозможува автоматско скалирање.
Командата
axis([ x min. x max. y min. y max.])
се користи за рачно скалирање. На пример:
axis([-10 40 -60 60])
прави скала на x оската од -10 до +40, а на y оската од - 60 до 60.
Пишувајќи axis поново се преоѓа на автоматско скалирање.
Наслов и лабели. За да се испише насловот и за да се лабелираат оските
се користат следниве наредби.
>> title(' Graph of y = sin(3pi x)')
>> xlabel('x axis')
>> ylabel('y-axis')

Низата на букви, помеѓу двата апострофи ( ' ' ) може да се состои од било
какви знаци. МАТЛАБ-от ги смета како низа на карактери.
Легенда. Кога на еден цртеж има нацртaно повеќе графици кои се
направени во различни бои или линии корисни е да е стави легенда . Легендата на
цртежот се става со наредбата:
>> legend('kriva 1', 'kriva 2')
при што помеѓу апострофите може да се напише соодветниот наслов за кривата.
Мрежа. Со наредбата grid на цртежот се става точкаста мрежа. Мрежата
може а се тргне повторно со наредбата grid или grid off.
46 MATLAB/SIMULINK – упатство за вежби

Со наредбата plot се цртаат линеарни графици. Постојат повеќе опции за


цртање од кои ќе се наведат најчесто употребуваните:

plot(x,y) го црта векторот y во функција на векторот x.

plot(y) црта колона од y во функција на индексот на елементите


If y е комплексен вектор, plot(y) е еквивалентен на plot(real(y),imag(y)).
Во сите други употреби на plot, имагинарниот дел се игнорира.

Различни типови на линии, плот симболи и бои може да се добијат со


наредбата:
plot(x,y,s) каде s е стринг од карактери направен од кои било или од сите
колони во табелата:

b blue - плава . point (точка) - solid (полна линија)


g green - зелена o circle (круг) : dotted (две точки)
r red – црвена x x-mark (х знак) -. dashdot (црта-точка)
c cyan - цијан + plus (плус) -- dashed (црткана лин.)
m magenta - магента * star (ѕвездичка)
y yellow - жолта s square (квадрат)
k black – црна d diamond (дијамант)
v triangle (down)
(триаголник долу)
^ triangle (up)
(триаголник горе)
< triangle (left)
(триаголник лево)
> triangle (right)
(триаголник десно)
p pentagram (пентаграм)
h hexagram (хексаграм)

На пример, plot(x,y,'c+:') црта цијан обоени двоточки означени со плусеви


(крстови) на секоја податок точка; plot(x,y,'bd') црта плави дијаманти на секоја
податок точка, но не црта било каква линија.

Наредбата plot(x1,y1,s1,x2,y2,s2,x3,y3,s3,...) комбинира графови дефини-


рани со тројките (x,y,s), каде x and y се вектори или матрици, а s – овите се стрин-
гови.
На пример, plot(x,y,'y-',x,y,'go') црта податоци двапати, со полна жолта
линија вметнувајќи зелени кругови во податочните точки.

Командата plot, ако бојата не е специфицирана, автоматски користи бои


кои се специфицирани под default. Default редослед на боите е како во горната
табела. Плавата боја е за една линија, а за повеќе линии се користат по редоследот
првите шест бои во табелата.
MATLAB/SIMULINK – упатство за вежби 47

За користењето на другите plot наредби (semilogx, semilogy, loglog, polar


bar, …) може да се прочита во МАТЛАБ, ако во командниот прозор се повикаат со
help naredba (например help loglog).

Наредбата plot3 црта линии и точки во 3-D просторот. plot3() е тродимен-


зионален аналог на plot().

Наредбата plot3(x,y,z), каде x, y и z се три вектори со иста должина, црта


линии во 3-D просторот преку точки чии координати се елементи на x, y and z.

Наредбата plot3(x,y,z), каде X, Y and Z се три матрици со иста големина,


црта неколку линии добивени од колоните на X, Y и Z.

Различни типови на линии, plot симболи и бои може да се добијат со


plot3(x,y,z,s) каде s е стринг со 1, 2 or 3 карактери направен од карактери од
карактерите како за plot наредбата.

Наредбата plot3(x1,y1,z1,s1,x2,y2,z2,s2,x3,y3,z3,s3,...) комбинира цртежи


дефинирани со четворката (x,y,z,s) , каде x , y и z се вектори или матрици а s –
овите се стрингови.
Пример за примена на наредбата plot3: хеликоида (завојница):
>> t=0:pi/50:10*pi;
>> plot3(sin(t),cos(t),t), grid;
На Сл.1.7.1. даден е резултатот од примерот.

Сл.1.7.1.

Користењето на горе наведените и други наредби за цртање графови во


МАТЛАБ ќе биде покажано подолу во дадените примери.
48 MATLAB/SIMULINK – упатство за вежби

1.7.1. Цртање на елементарни функции

MATLAB-от има можности на брз и на едноставен начин графички да


презентира елементарни функции како и да испишува наслови и лабели на
графиците.

Да претпоставиме дека треба да се исцрта функцијата y  sin(3x) за


0  x  1 . Постапката се состои во генерирање на вектор x со доволен број на
елементи со вредности помеѓу 0 и 1 и потоа да се пресметаат вредностите на
функцијата y. На тој начин се добиваат парови на броеви (x,y), кои во x-y
координатен систем ја дефинираат функцијата. Да претпоставиме дека се земени
N+1 точки со еднаков интервал h помеѓу нив.
>>N = 10; h= 1/N; x = 0:h:1;
Со горните наредби е дефиниран векторот x=0, 2h, 3h,...,1-h,1. Соодветните
вредности на функцијата y се пресметува со:
>> y=sin(3*pi*x);
Конечно може да се исцрта графикот со наредбата:
>>plot(x,y)

1 1

0.8 0.8

0.6 0.6

0.4 0.4

0.2 0.2

0 0

-0.2 -0.2

-0.4 -0.4

-0.6 -0.6

-0.8 -0.8

-1 -1
0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1 0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1

а) б)

Сл.1.7.2: а) График на y  sin(3x) за h = 0.1,


б) График на y  sin(3x) за h = 0.01

Резултатот е прикажан на Сл. 1 а), каде е сосема вочливо дека вредноста на


N е мала и затоа графикот нее гладок. Ако N се зголеми на 100, резултатот е
следниот.
>> N = 100; h=1/N; x = 0:h:1;
>> y = sin(3*pi*x); plot(x,y)

Како резултат се добива гафик со погладка крива прикажан на Сл.1.б).


MATLAB/SIMULINK – упатство за вежби 49

Примери:
Пример 1.7.1. Линеарен граф
Да се креира линеарен X-Y граф за следниве варијабли:

t 0 1 2 3 4 5 6 7 8 9 10 11 12
y 0 .5 1 2 4 7 11 14 15.5 16 16 16 16
За мал број податоци, може експлицитно да се внесат податоците во загра-
да. Тоа е направено во следниов M-File:
% Primer 1.7.1
% File: mt_p17_01_lingraf.m
%
t = [0 1 2 3 4 5 6 7 8 9 10 11 12];
y = [0 0.5 1 2 4 7 11 14 15.5 16 16 16 16];
plot(t,y), grid

Сл. 1.7.3. (за Пример 1.7.1) Сл.1.7.4. (за Пример 1.7.2)

Пример 1.7.2. Синусна функција


sin x
Да се нацрта функцијата y  за  4  x  4 . Графот да има
x
наслов (име - title), ознаки на оските (xlabel, ylabel) и мрежа (grid).
% Primer 1.7.2. Sinusna funkcija
% File:mt_p17_02_sin_funkcija.m
%
x = -4*pi: 0.05: 4*pi;
y = sin(x)./x;
plot(x,y)
title('Primer 1.7.2 Sinusna funkcija');
xlabel('x [rad]');
ylabel('y=sinx/x');
grid
50 MATLAB/SIMULINK – упатство за вежби

1.7.2. Повеќе графици

Повеќе графици можат да се прикажат на еден цртеж, како например


>> plot(x,y,'w-',x,cos(2*pi*x),'g--')
Исто така можно е да се додаде и легенда на цртежот
>> legend('Sin kriva','Cos kriva')
Со оваа наредба се исцртува листата на стиловите на линиите заедно со
описниот текст. MATLAB-от ја сместува легендата на соодветна позиција така да
не се појави колизија со самите криви (Сл.1.7.5).
Пример 1.7.3. Цртање две криви на еден граф
% Primer 1.7.3. dve krivi na eden graf
% File:mt_p17_03_dve_krivi.m
x=0:0.01:1;
plot(x,sin(3*pi*x),'b-',x,cos(3*pi*x),'g--')
legend('Sin kriva','Cos kriva')
title(' Multi-plot')
xlabel('x axis'), ylabel('y axis')
grid
Multi-plot
1
Sin kriva
0.8 Cos kriva

0.6

0.4

0.2
y axis

-0.2

-0.4

-0.6

-0.8

-1
0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1
x axis

Сл. 1.7.5: График на y  sin(3x) и y  cos(3x) за h = 0.01

HOLD наредба

При секоје повикување на plot, претходниот цртеж се брише и се црта


новиот грфик. Тоа секако не е соодветно ако подоцна треба на истиот цртеж да се
додаде нов график. За да се спречи бришење на цртежот, се користи наредбата
hold.
>> plot(x,y), hold
>> plot(x,y,'gx'), hold off
Наредбата hold ја задржува сликата, додека пак hold off ја “ослободува”, но
не ја брише. Ако се сака и бришење на сликата се користи наредбата clg.
MATLAB/SIMULINK – упатство за вежби 51

1.7.3. Контрола на оските

Еднаш одкако е генериран цртежот, можно е да се смени дијапазонот т.е.


интервалот на оските x и y.
>> clf, N=100; h=1/100; x=0:h:1;
>> y=sin(3*pi*x); plot(x,y), grid, axis([-0.5 1.5 -1.2 1.2])

Сл.1.7.6: Ефектот на промена на интервалот на оските

axis командата има четири параметри. Првите два параметри се минимум и


максимум вредности на x-оската додека последните два се минимум и максимум
вредности на y-оската. Аглестата заграда е задолжителна. Резултатот на овие
команди е покажан на Сл.1.7.6.
За вежба исчукајте ги командите и видите што се добива:
>> x = -1:0.1:1;
>> plot(x,sin(pi*x),'g-')
>> hold on
>> plot(x,cos(pi*x),'r-')

1.7.4. Зголемување (zoom)


Често се наметнува потреба да некој дел од графикот (сликата) биде зголемен
со цел да се видат деталите. Тоа се постига со наредбата
>>zoom
Со помош на покажувачот (pointer) на глушецот, се одбира местото на цртежот
кој треба да се зголеми и со притискање на левото копче на глушецот се врши
зголемување за два пати. Оваа постапка може да се повторува додека не се
постигне саканато зголемување. Со притискање на десното копче се намалува
цртежот за два пати.
Ако се сака да се зголеми одреден дел од цртежот, тогаш тој дел се оквирува
со правоаголна рамка на начин што со постојано притиснато левото копче
глушецот се движи се додека делот не се уоквири со правоаголна рамка.
52 MATLAB/SIMULINK – упатство за вежби

1.7.5. Подцртеж (SUBPLOT)

Наредбата subplot(m,n,p), or subplot(mnp), го дели прозорот за сликата на


m-х-n помали прозори (координатни оски), а со p се означени помалит слики
редослено од горниот лев агол па надесно по сите редови сликички. Например, со
наредбите, каде е m=2, n=2, p= 1,2,3,4:
subplot(2,2,1), plot(x,y,s), слика горе лево
subplot(2,2,2), plot(x,y,s), слика горе десно
subplot(2,2,3), plot(x,y,s), слика долу лево
subplot(2,2,4), plot(x,y,s), слика долу десно

Графичкиот екран (window), може да се подели на (mxn), помали


пенџерчиња и во секој од нив да се нацрта график.
Пример 1.7.4. Примена на наребата subplot.
% Primer 1.7.4. Subplot
% File:mt_p17_04_subplot.m
x=0:0.01:1;
subplot(221), plot(x,sin(3*pi*x)),grid
xlabel('x'), ylabel('sin 3 pi x')
subplot(222), plot(x,cos(3*pi*x)),grid
xlabel('x'), ylabel('cos 3 pi x')
subplot(223), plot(x,sin(6*pi*x)),grid
xlabel('x'), ylabel('sin 6 pi x')
subplot(224), plot(x,cos(6*pi*x)),grid
xlabel('x'), ylabel('cos 6 pi x')

Сл.1.7.7.

Наредбата subplot (22p) дефинира четири помали цртежи (subplot) 2x2, a сo


subplot (221) е селектиран првиот (1) потцртеж за цртање, со subplot (222),
вториот и тн. Редниот број на субплотот се дефинира по редови.
MATLAB/SIMULINK – упатство за вежби 53

Пример 1.7.5. Слика со повеќе потцртежи

Да се подели прозорот (сликата) на четири делови и да се нацртаат


графови на долу наведените функции за t од 0 до 3 со чекор од 0.0005.
Функциите кои треба да се нацртаат се:

1) Напон v  120 sin t и струја i  100 sin(t  ) во функција на t .
4
Графот на сликата да се нацрта во горниот агол лево.
2) Моќност p  v  i во функција на t . Графот на сликата да се нацрта
во горниот агол десно.
3) Три фази дадени со изразите:
2 4
f a  Fm sin t , f b  Fm sin(t  ), f c  Fm sin(t  ) , Fm  3.0 во
3 3
функција на t . Графот на сликата да се нацрта во долниот агол лево.
4) Граф во поларни координати за fR  3Fm . Поларниот граф на сликата
да се нацрта во долниот агол десно.

% Primer 1.7.5. Slika so povece grafovi


% File: mt_p17.05_slika_so_4_grafa.m
%
% CRTANJE CETIRI GRAFA NA EDNA SLIKA
% Primerot ima za cel samo da go demonstrira nacinot na crtanje
% cetiri grafici (dijagrami) na edna slika
%
clg
%
wt = 0: 0.05: 3*pi; % Agol fi=wt=w*t [rad]
v=120*sin(wt); % Sinusoidalen napon [V]
i=100*sin(wt-pi/4); % Sinusoidalna struja [A]
p=v.*i; % Momentna snaga (mok') [W]
%
Fm=3.0;
fa = Fm*sin(wt); % Tri fazi: fa, fb, fc
fb = Fm*sin(wt-2*pi/3);
fc = Fm*sin(wt-4*pi/3);
%
% Graf "gore - levo" na slikata:
subplot(221),plot(wt,v, wt,i),grid % Napon (v) i struja (i) vo f-cija od wt
title('Napon i struja')
xlabel('wt - agol [rad]');
%
54 MATLAB/SIMULINK – упатство за вежби

% Graf "gore - desno" na slikata:


subplot(222),plot(wt,p), grid % Momentna snaga (mok') vo f-cija od wt
title('Snaga (mok)')
xlabel('wt [rad]');
ylabel('Snaga (Wati) [W]');
%
% Graf "dolu - levo" na slikata:
subplot(223),plot(wt,fa,wt,fb,wt,fc),grid % Crtanje na trite fazi
title('Tri fazi');
xlabel('wt [rad]');
ylabel('Amplitudi');
%
% Graf "dolu - desno) na slikata (Graf vo polarni koordinati)
fR= 3/2*Fm*(wt+1)./(wt+1); % Vrtenje - rotacija
subplot(224),polar(wt,fR), grid % Crtanje graf vo polarni koordinati
title('Polaren graf')
%
% x = 3*sin(wt)
% y = 3*cos(wt)
% fR = sqrt(x.^2+y.^2)
% subplot(224),polar(wt,fR), grid % Crtanje graf vo polarni koordinati
% title('Polaren graf')

Sl. 1.7.8.
MATLAB/SIMULINK – упатство за вежби 55

1.7.6. Цртање на тродимензионални површини

Математички површина се дефинира со функцијата f(x,y) при што за


одредени вредности на x и y, таа поприма еднозначна или повеќезнача вредност.
Ако таа вредност се означи со z=f(x,y), тогаш може да се дефинира тројка на
броеви (x,y,z). Множество на овие тројки броеви, за зададени вреднсти на x и y,
претставени во три-димензионален Karteziev (правоаголен) систем формира повр-
шина во простор.
Зададените вреднсоти на x и y најчесто преставуаат некој праваголен регион
во (x,y) равнина и се определува со задавање на интервал на вреднсоти за x и y,
(пр. 2 < x < 4 и 1 < y < 3). Секако дека е невозможно да се пресмета вредноста на
фукцијата во сите точки на регионот. Заради тоа се формира мрежа на парови (x,y)
во кои функцијата се пресметува за да потоа се нацрта или користи за други
пресметки.
Во MatLab-от мрежата се генерира со маредбата meshgrid но претходно е
потребно да се генерираат вредностите на x и y за даден чекор.
>> x = 2:0.5:4; y=1:0.5:3;
>> [X,Y] = meshgrid(x,y);
>> X
>> Y
X=
2.0000 2.5000 3.0000 3.5000 4.0000
2.0000 2.5000 3.0000 3.5000 4.0000
2.0000 2.5000 3.0000 3.5000 4.0000
2.0000 2.5000 3.0000 3.5000 4.0000
2.0000 2.5000 3.0000 3.5000 4.0000
Y=
1.0000 1.0000 1.0000 1.0000 1.0000
1.5000 1.5000 1.5000 1.5000 1.5000
2.0000 2.0000 2.0000 2.0000 2.0000
2.5000 2.5000 2.5000 2.5000 2.5000
3.0000 3.0000 3.0000 3.0000 3.0000

Ако внимателно се анализираат матриците X и Y, лесно се забележува дека


паровите (X(i,j), Y(i,j)) т.е. соодветните елементи на X и Y се воедно паровите
(x,y) во кои фукцијата f(x,y) треба да се пресмета. Всушност MATLAB-от ги
користи матриците X и Y за да ги пресмета вредностите на f.

Пример 1.7.6: Да се нацрта површина определена со функцијата


f ( x, y)  ( x  3) 2  ( y  2) 2 , за 2 < x < 4 и 1 < y < 3.

% Primer 1.7.6. Graf na funkcija


% File mt_p17_06_Sedlo.m
%
[X,Y] = meshgrid(2:0.2:4, 1:0.2:3);
56 MATLAB/SIMULINK – упатство за вежби

Z = (X-3).^2- (Y-2).^2;
mesh(X,Y,Z)
title(' Sedlo '), xlabel('x'),ylabel('y')
Saddle

0.5

-0.5

-1
3
2.5 4
2 3.5
3
1.5
2.5
y 1 2
x

Сл.1.7.9.
Во овој пример искористена е вградена функцијата на MatLab-от
mesh(X,Y,Z) со која се исцртува тридимензионалната мрежа на површината.

2 ( x 2  y 2 )
Пример 1.7.7: a) Да се нацрта функцијата f   xye за -2 < x < 2, -2<y<2.
b) Да се определат вредностите и локациите на максималните и минималните
екстреми на функцијата.

% Primer 1.7.7. а) Graf na funkcija 3D


% File mt_p17_07_а_graf_na_funkcija_3D.m
[X,Y] = meshgrid(-2:0.1:2, -2:0.1:2);
f = -X.*Y.*exp(-2*(X.^2+Y.^2));
mesh(X,Y,f)
title('Funkcija f=-x*y*exp(-2*(x^2+y^2))'), xlabel('x'),ylabel('y')

Сл. 1.7.10.
MATLAB/SIMULINK – упатство за вежби 57

За да се определат екстремите на функцијата се користат следниве наредбите


во следниот m-file.

% Primer 1.7.7.b) Ekstremi na funkcija


% File mt_p17_07_b_graf_na_funkcija_3D.m
%
[X,Y] = meshgrid(-2:0.1:2, -2:0.1:2);
f = -X.*Y.*exp(-2*(X.^2+Y.^2));
fmax = max(max(f))
kmax = find(f==fmax)
Pos = [X(kmax), Y(kmax)]
contour(X,Y,f)
xlabel('x'), ylabel('y'), grid, hold on
plot(X(kmax),Y(kmax),'*')
text(X(kmax),Y(kmax),'Maximum')

fmax =
0.0920
kmax =
641
1041
Pos =
-0.5000 0.5000
0.5000 -0.5000

1.5

0.5 Maximum

0
y

-0.5 Maximum

-1

-1.5

-2
-2 -1.5 -1 -0.5 0 0.5 1 1.5 2
x

Сл.1.7.11.
58 MATLAB/SIMULINK – упатство за вежби

Пример 1.7.8.
Да се нацрта во правоаголни координати граф на Bessel-овата функција
Jo  x2  y2 .

% Primer 1.7.8. Graf na Bessel-ovata funkcija J0(sqrt(x^2+y^2))


% File mt_p17_08_Meshgrid.m
%
clg
[x,y]=meshgrid(-12:.5:12, -12:.5:12);
% meshgrid ja transformira specificiranata domena
% vo matrici x i y za ocenuvanje na z
%
r=sqrt(x.^2+y.^2);
z= bessel(0,r);
m=[-45 60];
%
% 3-D mesh plot
mesh(z,m),grid

Sl. 1.7.12. (За Пример 1.7.8)

Пример 1.7.9
sin r
Да се нацрта граф на функцијата z  , r  x 2  y 2 , ако x и y се менуваат
r
во границите -10 до 10 со чекор 0.5

% Пример 1.7.9. Graf na funkcijata z=sinr/r, r=sqrt(x^2+y^2)


% M-file: mt_p17_09_Meshgrid2.m:
%
MATLAB/SIMULINK – упатство за вежби 59

clg
[x,y]=meshgrid(-10:.5:10);
% meshgrid ja transfora specificiranata domena
% vo matrici x i y za ocenuvanje na z
%
r=sqrt(x.^2+y.^2)+eps;
z= sin(r)./r;
%
% 3-D mesh plot
mesh(x,y,z)

a) [x,y]=meshgrid(-10:.5:10);

b) [x,y]=meshgrid(-20:.5:20);

Сл. 1.7.13. Тродимензионален граф (зa Пример 1.7.9)


60 MATLAB/SIMULINK – упатство за вежби
MATLAB/SIMULINK – упатство за вежби 61

2. ПРОГРАМИРАЊЕ ВО МАТЛАБ

2.1. ЦИКЛУСИ

Доста често при решавање на поставена задача, се среќава повторување на


одреден број наредби. Секако, проблемот може да се реши ако истите наредби се
испишат онолку пати колку што е потребно. Овој пристап и може да биде
применет ако повторувањето е еднаш, два пати или неколку пати. Но проблемите
се јавуваат ако треба да се повторат стотици па и илјада пати. Секако никој нема
ни да се обиде истите наредби да ги препишува илјада пати. Вакви проблеми, во
сите програмски јазици се решаваат со постоење на наредби за циклуси.
MATLAB-от нее искључок. За да се види за што станува збор ќе дадеме пример.

Пример 2.1.1: Да се нацрта грaфикон на функцијата sin(nx) во интервалот –1 < x


< 1, за n = 1,2,3,...8.
Јасно е дека горната задача може да се реши со испишување на 8 посебни
команди за цртање. Но поедноставен начин би бил следниот:

% Primer 2.1.01.for - end ciklus


% File: mt_p21_01_for.m
%
x = -1:0.05:1;
for n = 1:8
subplot(4,2,n), plot(x,sin(n*pi*x))
end

1 1

0 0

-1 -1
-1 -0.5 0 0.5 1 -1 -0.5 0 0.5 1
1 1

0 0

-1 -1
-1 -0.5 0 0.5 1 -1 -0.5 0 0.5 1
1 1

0 0

-1 -1
-1 -0.5 0 0.5 1 -1 -0.5 0 0.5 1
1 1

0 0

-1 -1
-1 -0.5 0 0.5 1 -1 -0.5 0 0.5 1

Сл.2.1.1. Графикон на функцијата sin(nx) во интервалот


–1 < x < 1, за n = 1,2,3,...8.
62 MATLAB/SIMULINK – упатство за вежби

Сите команди кои се наоѓаат помеѓу наредбата for и end се повторуваат за n


кој започнува од 1 па 2,3 и се до 8. Наредбата subplot дефинира матрица од 4x2
субграфици и при n-тото повторување на циклусот, графикот се црта во n-тиот
субграфик.

Со командите во долната програма


% Primer 2.1.02.for - end ciklus
% File: mt_p21_02_for.m
%
x=-1: 0.05: 1;
for n=1:2:8
subplot(4,2,n),plot(x,sin(n*pi*x))
subplot(4,2,n+1), plot(x,cos(n*pi*x))
end
се цртаат функциите sin(nx) i cos(nx), za n = 1,3,5,7 една покрај
друга

1 1

0 0

-1 -1
-1 -0.5 0 0.5 1 -1 -0.5 0 0.5 1
1 1

0 0

-1 -1
-1 -0.5 0 0.5 1 -1 -0.5 0 0.5 1
1 1

0 0

-1 -1
-1 -0.5 0 0.5 1 -1 -0.5 0 0.5 1
1 1

0 0

-1 -1
-1 -0.5 0 0.5 1 -1 -0.5 0 0.5 1

Сл.2.1.2.
Како бројач во циклусот (во горниот случај тоа е n), може да се користи
било која легална променлива при што може за вредностите на бројачот да се
дефинираат и елементите на даден вектор. Тоа значи дека можно е да се користи
for циклус од следен вид.
MATLAB/SIMULINK – упатство за вежби 63

>> for brojac = [23 11 19 5.4 6]


..........................
>> end

Овој циклус се повторува 5 пати при што вредностите на brojac се


сукцесивно елементите на векторот.

Пример 2.1.03: Низата на Фибоначи започнува со броевите 0 и 1, а следните


елементи се добиваат како сума на предходните два елемента. Математички f1 = 0,
f2 = 1 и

f n  f n1  f n2 za n = 3,4,5.....

Тестирај дали односот f n / f n 1 се доближува до вредноста на златниот рез


( 5  1) / 2  1.618

>> F(1) = 0; F(2) = 1;


>> for i=3:20
>> F(i) = F(i-1)+F(i-2);
>> end
>> plot(2:19,F(3:20)./F(2:19),'o')
>> hold on
>> plot(2:19,F(3:20)./F(2:19),'-')
>> plot([0 20],((sqrt(5)+1)/2)*[1,1])

1.9

1.8

1.7

1.6

1.5

1.4

1.3

1.2

1.1

1
0 2 4 6 8 10 12 14 16 18 20

Сл. 2.1.3.
64 MATLAB/SIMULINK – упатство за вежби

Пример 2.1.4: Пресметај ги вредностите на следниве суми.

1 1 1 1
S 20  1  2
 2  2  ..... 2
2 3 4 20
1 1 1 1 1
S 21  1  2  2  2  ..... 2  2
2 3 4 20 21
...
1 1 1 1 1 1
S100  1  2  2  2  ..... 2  2  ...... 
2 3 4 20 21 100 2
Постојат вкупно 81 сума. Првата сума S20 може да се пресмета со наребата
sum(1./(1:20).^2). (Се користи вградената наредба sum со аргументите вектор-ред).
Соодветен код во MatLab би бил следниот.

>> S= zeros(100,1); % 1
>> S(20) = sum(1./(1:20).^2); % 2
>> for n =21:100 % 3
>> S(n) = S(n-1) +1/n^2; % 4
>> end % 5
>> clf; plot([20:100],S(20:100),'.',[20
100],[1,1]*pi^2/6,'-') % 6
>> axis([20 100 1.5 1.7]) % 7
>> [(98:100)' S(98:100)] % 8
ans =
98.0000 1.6348
99.0000 1.6349
100.0 1.6350

1.7

1.68

1.66

1.64

1.62

1.6

1.58

1.56

1.54

1.52

1.5
20 30 40 50 60 70 80 90 100

Сл.2.1.5.
MATLAB/SIMULINK – упатство за вежби 65

Програмата за пресметување и цртање на бараните суми се состои од


неколку наредби. Со првата наредба се определува вектор-ред S со 100 елементи
чии почетни вредности се 0. Со втората наредба се пресметува вреднста на S20,
користејќи ја вградената процедура sum. Со третата, четвртата и петата наредба
користејќи го for циклусот, се пресметуваат останатите вредности на сумите, со
тоа што на претходната сума се додава вредноста 1/n^2 i на тој начин се
пресметува следната сума Sn. Шестата и седмата наредба графички ги претставува
резултатите. На крај се печатат вредностите на последните три суми S98, S99 и S100.

2.2. ЛОГИЧКИ РЕЛАЦИИ (TЕСТИРАЊЕ)

MATLAB-от има можности за логичко тестирање. Во рамките на


MATLAB-от вистина (true) се означува со 1, а невистина (false) со 0.

true = 1, false = 0

Ако во тек на пресметки некоја променлива x добие некоја бројчана


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

x == 2 дали x е еднакво на 2 ?
x ~= 2 дали x е различито од 2?
x>2 дали x е поголемо од 2?
x<2 дали x е помало од 2?
x >= 2 дали x е поголемо или еднакво на 2?
x <= 2 дали x е помало или еднакво на 2?

Резултатот на лигичното тестирање е 1 или 0 во зависност дали тврдењето е


вистинито или не.

>> x = pi
x=
3.1416

>> x ~= 3, x ~= pi
ans =
1
ans =
0

Ако е x вектор или матрица, тестот се спроведува за секој елемент.

>> x = [ -2 pi 5; -1 0 1 ]
x =
-2.0000 3.1416 5.0000
-1.0000 0 1.0000

>> x == 0
66 MATLAB/SIMULINK – упатство за вежби

ans =
0 0 0
0 1 0

Со горната наредба испитуваме дали секој елемент на x е еднаков на нула.


Како резултат се добива повторно матрица со иста димензија како и матрицата x,
со тоа што сите елементи се 0 освен елементот (2,2), кој е 1 бидејќи тој елемент е
навистина нула што како ртезултата на логичкото тестирање дава вистина т.е. 1.

2.3. ЛОГИЧКИ ОПЕРАТОРИ

МАТЛАБ-от има можност да комбинира и врши определени операции врз


логичните променливи користејќи логични оператори.

& Логичко И (AND)


| Логичко ИЛИ (OR)
~ Логична негација НЕ (NOT)
xor Логичко XOR
any Вистинито ако било кој елемент на векторот не е нула
all Вистинито ако сите елементи на векторот се различни од нула

Со следните табели дефиниран е начинот на кој логичните оператори дејству-


ваат.

A B A&B
1 1 1
1 0 0
0 1 0
0 0 0

A B A|B
1 1 1
1 0 1
0 1 1
0 0 0

A ~A
1 0
0 1

A B xor(A,B)
1 1 0
1 0 1
0 1 1
0 0 0
MATLAB/SIMULINK – упатство за вежби 67

Со MATLAB-от истото може да се провери на следниот начин.

>> a=[1 1 0 0], b=[1 0 1 0]


>> a&b,a|b, xor(a,b)
a =
1 1 0 0
b =
1 0 1 0
ans =
1 0 0 0
ans =
1 1 1 0
ans =
0 1 1 0
any(x), all(x)

ans =
1 1 1
ans =
1 0 1

Бидејќи x е матрица, тогаш операторите any и all се применуваат на секоја


колона пооделно и резултатот е вектор-ред со број на елементи еднаков на бројот
на колони на матрицата x. Наредбата any(x) како резултат дава вектор-ред со сите
единици, бидејќи во секоја колона на матрицата x постои барем еден елемент
различен од нула. Наредбата all(x), резултира во вектор-ред чии втор елемент е
нула, бидејќи сите елементи на втората колона на матрицата x не се различни од
нула.

Користејќи ги можностите за логичко тестирање во комбинација со


логичките оператори, можно е да се формираат посложени логични искази.

>> x > 3 & x < 4


ans =
0 1 0
0 0 0

Горната, еден ред наредба може да се расчлени на следниве три наредби.

>> y = x>3, z = x<4, y&z


y =
0 1 1
0 0 0
z =
1 1 0
1 1 1
ans =
68 MATLAB/SIMULINK – упатство за вежби

0 1 0
0 0 0

Прво што може да се закључи е дека логичките тестирања имаат повисок


приоритет на извршување од логичните оператори. Затоа прво е реализирана
наредбата x>3 и како резултат се добива матрицата y која на места каде
елементите на x се поголеми од три има вредност 1, а таму каде се помали или
еднакви елементите на y се нула. Слично се добива и со наредбата x< 4, само што
сега друг е условот за тестирање. Одкако ќе се добијат матриците y i z, се
применува операторот AND (&), елемент по елемент, следејќи го правилото
дадено во тебелите. Резултатот на таа логична операција е матрицата дадена со
променливата ans.

>> x = [-2 pi 5; -5 -3 -1]


x =
-2.0000 3.1416 5.0000
-5.0000 -3.0000 -1.0000

>> x > 3 | x == -3 | x <= -5


ans =
0 1 1
1 1 0

Една од можните примени на логичните тестирања и логичната аритметика


е и маскирање (издвојување) на елемнти кои задоволуваат даден услов.

>> x, L = x >= 0
x =
-2.0000 3.1416 5.0000
-5.0000 -3.0000 -1.0000
L =
0 1 1
0 0 0

>> pos = x.*L


pos =
0 3.1416 5.0000
0 0 0

Матрицата pos ги содржи оние елементи кои се поголеми од 0 т.е.


ненегативните.

>> x = 0:0.05:6; y = sin(pi*x); Y= (y >=0).*y;


>> plot(x,y,':',x,Y,'-')
MATLAB/SIMULINK – упатство за вежби 69

0.8

0.6

0.4

0.2

-0.2

-0.4

-0.6

-0.8

-1
0 1 2 3 4 5 6

Сл.2.1.6.

2.4. While ЦИКЛУС

Доста често во тек на пресметките се јавува потреба одреден блок на


наредби да бидат повторени, но за разлика од for циклусот, не е познат точниот
број на повторувања веќе само условот со чие исполнување се завршува
повторувањето. Таков тип на проблеми во МАТЛАБ се реализира со while .... end
конструкцијата.

Пример 2.4.1: Која е најголемата вредност на n за да сумата

S  12  2 2  .....  n 2
биде помала од 100.

>> S =1; n = 1;
>> while S+ (n+1)^2 < 100
>> n = n+1;
>> S = S + n^2;
>> end
>> [n,S]

ans =
6 91

Дел на наредбите помеѓу while и end ќе бидат пресметани само ако условот
S+ (n+1)^2 < 100 е исполент (вистинит).
70 MATLAB/SIMULINK – упатство за вежби

Вежба: Во претходната вежба наместо 100, ставете 10 и пешки изработете го


примерот следејќи ги наредбите. Треба да се добие резултатот n=2 и S=5.

Пример 2.4.2.: Определи го приближно решението на равенката x = cos(x).

Решението на равенката може да се добие со итеративна метода. Ако


претпоставиме дека почетното решение е x = /4, тогаш со пресметување на низата
на броеви
xn  cos( xn1 ) n=2,3,4 ....

и со задоволувањето на условот дека | xn – xn-1 | е доволно мало, вредноста на xn ќе


биде бараното решение.

Метода 1:
>> x = zeros(1,20) ; x(1) = pi/4;
>> n = 1; d = 1;
>> while abs(d) > 0.001
>> n = n+1; x(n) = cos(x(n-1));
>> d = x(n)-x(n-1);
>> end
>> n,x
n=
14
x=
Columns 1 through 7
0.7854 0.7071 0.7602 0.7247 0.7487 0.7326 0.7435
Columns 8 through 14
0.7361 0.7411 0.7377 0.7400 0.7385 0.7395 0.7388
Columns 15 through 20
0 0 0 0 0 0

Постојат повеќе несовршености во горната програма. Векторот x се користи


за да се сочуваат резултатите на итерацијата во секој чекор. Но однапред не се знае
која димензија на векторот е доволна за да се запомнат сите вредности до
конечното решение. Во горниот пример 20 елементи беа доволни бидејќи условот
беше задоволен при 14-иот елемент. Може да се случи условот d<=0.001, да не
биде никогаш задоволен, и како резултат на тоа да се случи бесконечен цилус.
Затоа потребно е да се дефинира максимален број на чекори. Исто така не се од
интерес меѓу чекорите, туку само крајното решение.

Метода 2.

>> xold = pi/4; n = 1; d = 1;


>> while abs(d) > 0.001 & n < 20
>> n = n+1; xnew = cos(xold);
MATLAB/SIMULINK – упатство за вежби 71

>> d = xnew-xold;
>> xold = xnew;
>> end
>> [n, xnew, abs(d)]
ans =
14.0000 0.7388 0.0007

Во модифицираната верзија, условот е двоен. Не само што грешката треба


да е помала од 0.001 веќе циклусот се повторува се додека n < 20. На тој начин се
ограничува максималниот број на чекори во циклусот.

Општата форма на while наредбата е:

while логички тест


наредбите кои треба да се извршат
end

2.5. if ..... then .... else .... end

Во секоја па и наједноставна програма, со кој се решаваат практични


проблеми, често се јавува потреба одреден блок на наредби да се извршуваат ако
даден услов е задоволен. Можноста да се разгранува програмата и на тој начин да
се контролира текот на извршувањето е составен дел на секој посериозен
програмски јазик. Во таа смисла и MATLAB има конструкции со кои се насочува
извршувањето на програмата условено од исполнувањето на даден услов. Тоа се
постигнува со if ..... then .... else .... end
Како пример да се пресмета дали е e поголемо или помало од e :
>> a = pi^exp(1); c = exp(pi);
>> if a >= c
>> b = a^2 - c^2
>> end

Бидејќи немаме печатење на b, закључуваме дека a = e <c= e  . Почеста


ситуација е :

>> if a >= c
>> b = sqrt(a^2 - c^2)
>> else
>> b = 0
>> end
b =
0

со што се обезбедува b секогаш да има вредност и се потврдува дека a<c.


72 MATLAB/SIMULINK – упатство за вежби

Општата форма на if.... конструкцијата е:

if логички тест_1
команди кои се извршуваат ако
тест_1 е исполнет

elseif логички тест_2


команди кои се извршуваат ако
тест_2 е исполнет
.
.
.
else логички тест_к
команди кои се извршуваат ако
тест_к е исполнет
end

2.6. СКРИПТ ФАЈЛОВИ И ФУНКЦИИ ( m-ФАЈЛОВИ)

Во основа, MATLAB е програмски јазик интерпретер. Тоа значи дека секоја


наредба се интерпретира и се извршува веднаш печатејќи ги резултатите на екран.
Во случај ако треба истата наредба да се повтори, таа мора повторно да се испише.
Во таа смисла, MATLAB овозможува одредени олеснувања, како што е можноста
со копчето на тастатурата означено со горна стрелка да се листаат претходните
испишани наредби. На тој начин може да се повтори наредбата. Сепак, иако овој
елемент, донекаде е олеснување, сепак има свои недостатоци. Имено наредбите се
паметат во работниот простор на програмата се додека МАТЛАБ е активен.
Откако ќе се искључи MATLAB, сите запамтени променливи и наредби се бришат
и при повторно активирање на MATLAB тие не постојат во работниот простор. За
да се овозможи повторно користење на одредени наредби (тоа се воглавно група
на наредби кои често се користат), MATLAB има можности наредбите еднаш да се
испишат во посебен фајл (датотека), кои се нарекуваат m-фајлови, и истите m-
фајлови, откако MATLAB ќе се активира, се прочитаат и сместат во работниот
простор. М-фајловите се наоѓаат на дискот во директориумот на корисникот.

MATLAB познава два типа на m-фајлови: скрипт (описни) m-фајлови и


функциски m-фајлови.

2.6.1. Скрипт (описни) m-фајлови

Скрипт m-фајловите содржат една или повеќе наредби кои се извршуваат со


повикување на името на скрипт m-фајлот.
MATLAB/SIMULINK – упатство за вежби 73

Пример 2.6.1: Да се напише скрипт m-фајл со кој се пресметува површинатa на


еден триаголник ако се познати неговите страни.

Познато е дека површината на еден триаголник со зададени страни a,b и c е


дадена со формулата:

abc
A  s(s  a)(s  b)(s  b) каде s
2
Соодветните наредби во MATLAB се:

>> a=10;b=15;c=20;
>> s=(a+b+c)/2;
>> A=sqrt(s*(s-a)*(s-b)*(s-c))

A =
72.6184

Во случај ако треба да се смени вредноста на една страна и да се пресмета


новата површината, потребо е ново испишување на сите наредби, иако во другите
наредби не се направени измени. Случајот станува подрастичен ако е потребно да
се пресмета површината на десетици или стотици триаголници.

Овој проблем може да се надмине ако се формира скрип m-фајл, така што
наредбите со кои се пресметува површината се испишат во фајлот. Во конкретниот
пример формиран е скрипт m-фајл со име mt_p26_01_area.m и сместен е во
директориумот work.

mt_p26_01_area.m

s=(a+b+c)/2;
A=sqrt(s*(s-a)*(s-b)*(s-c))

Сега пресметувањето на површината може да се реализира на следниот


начин.

>> a=10;b=15;c=20;
>> mt_p26_1_area
A =
72.6184

>> a=3;b=4;c=5;
>> mt_p26_1_area

A =
6
74 MATLAB/SIMULINK – упатство за вежби

Од горните два примери може да се насети како MATLAB ги обработува


скрипт m-фајловите. Имено, програмата го наоѓа фајлот mt_p26_1_area.m и на
местото каде се повикува mt_p26_1_area.m ги уфрла наредбите кои се содржат
во фајлот. Тоа е направено интерно и не е видливо за корисникот. За корисникот е
важно дека се избегнува повторно испишување на наредбите, а што може да бара
доста време. Тоа посебно е корисно ако m-фајлот содржи повеќе десетици
наредби. Исто така важно е да се напомене дека променливите како што во
конкретниот пример се a, b и c мораат да бидат дефинирани и да постојат во
работниот простор. Друга битна карактеристика на скрипт фајловите е таа, што
тие експлицитно не враќаат вредности во главнaта програма, освен ако тоа не се
определи со тоа што наредбата нема да се заврши со ;. Во конкретниот пример тоа
е случај со променливата A (површина), која се испишува на екран бидејќи
наредбата со која се пресметува не завршува со ;.
Од сето кажано, може да се закључи дека скрипт m-фајловите, се корисни
ако постојат пресметки или множество на наредби кои често или стандардно се
потребни при пресметките. Карактеристичен пример е графичко исцртување на
зададена функција, при што во скрипт фајлот се дефинира изгледот на графиконот.
Подолу е даден еден таков пример.

Пример 2.6.02 - скрипт file за цртање на зададена функција

File mt_p26_02_crta.m

plot(x,y,'w-')
legend(' matematicka kriva')
title(' Crtez na fukcija ')
xlabel('x-oska'), ylabel('y-oska')
grid
Сега е можно следното
>> x=-pi:pi/20:pi;
>> y=sin(x);
>> mt_p26_02_crta

Crtez na fukcija
1
matematicka kriva
0.8

0.6

0.4

0.2
y-oska

-0.2

-0.4

-0.6

-0.8

-1
-4 -3 -2 -1 0 1 2 3 4
x-oska

Sl. 2.6.1.
MATLAB/SIMULINK – упатство за вежби 75

или исто така

>> x=-1:2/100:1;
>> y=x.^2;
>> mt_p26_02_crta

Crtez na fukcija
1
matematicka kriva
0.9

0.8

0.7

0.6
y-oska

0.5

0.4

0.3

0.2

0.1

0
-1 -0.8 -0.6 -0.4 -0.2 0 0.2 0.4 0.6 0.8 1
x-oska

Од примерите лесно се констатира дека векторите x и y мора да бидат


претходно дефинирани и присутни во работниот простор, бидејќи тие се
променливи кои се јавуваат и со кои работи скрипт m-фајлот.

2.6.2. Функциски m-фајлови

Функциските m-фајлови (функции, слично како и скрипт фајловите се


испишуваат во датотека и се чуваат на дискот во даден директориум. Разликата се
состои во тоа што функциите враќаат вредности на променливи како резултат од
пресметките кои се вршат во рамките на функцијата но исто така тие и примаат
вредности на променливи кои се користат во рамките на самата функција. Тоа
значи дека функциите не го користат работниот простор како преносен механизам
за земање или враќање на променливи. За илустрација, скрипт фајлот
mt_p26_01_area.m, ќе биде напишан во форма на функција.

function [A] = povr(a,b,c)


% presmetuva povrsina na triagolnik cii
% strani imaat dolzina a, b i c.
% Vlez:
% a, b, c : Dolzini na strani
% Izlez
% A: Povrsina na triagolnikot
76 MATLAB/SIMULINK – упатство за вежби

% Koristenje:
% Area = povr(2,3,4)
%------------------------------------------------
s = (a+b+c)/2;
A=sqrt(s*(s-a)*(s-b)*(s-c));
%----------- kraj na funkcijata povr -----------

Пред да се објаснат основните чекори за дефинирање и пишување на


функциските m-фајлови, ќе дадеме неколку примери на користење на погоре
дефинирана фукција povr. Претходно треба да се подвлече дека датотеката povr.m
е сочувана во директориумот E:\mat-vezb, и секогаш е достапна за користење.

>> povr(3,4,5)
>> Area = povr(3,4,5)
>> x=10;y=15;z=20;
>> A=povr(x,y,z)

ans =
6
Area =
6
A =
72.6184

Со горните наредби илустрирано е користењето на функциите како и сета


нивна флексибилност и корисност. Со првата наредба пресметана е површината на
триаголникот со страници 3,4 и 5 но бидејќи не е назначено во која променлива се
памети излезниот резултат МАТЛАБ автоматски резултатот го памети во
променливата ans. Со втората наредба резултатот на пресметките се доделува на
промелнивата Area. Третата наредба дефинира три променливи x, y и z кои се
влезни вредности на функцијата povr и со четвртата наредба се пресметува
површината за вредностите на x, y и z а резултатот се доделува на променливата A.
Со последната наредба A = povr(x,y,z) илустрирано е својството на функциите
дека тие како влезни параметри можат да примаат и променливи кои немаат исто
име како во самата дефиниција на функцијата, што не е случај каj скрипт
фајловите. Со други зборови сите променливи кои се користат во дефиницијата на
функцијата се локални променливи и тие не можат да бидат користени надвор од
функцијата. Така например во рамките на дефинцијата на функцијата povr.m
постои променлива s. Но ако се обидеме да ја испечатиме вредноста на s, се добива
следното.

>> s

??? Undefined function or variable 's'.


односно пораката дека променливата s е недифинiрана.

Но ако се сака вредноста на s (променливата всушност претставува


половина од збирот на страните), тогаш е потребно истата променлива да биде
MATLAB/SIMULINK – упатство за вежби 77

ставена како излезна променлива. Тоа може да се стори ако се промени заглавието
на функцијата во.

function [A,s] = povr(a,b,c)

Ваква функција може да биде повикана на повеќе начини:

1. Без променлива за придружување на вредноста.

>> povr(10,15,20)
ans =
72.6184

Резултатот е само површината ( првата променлива во излезната листа ) на


променливата ans.

2. Со придружување на една излезна вредност

>> Area = povr(10,15,20)


Area =
72.6184

Повторно втората излезна променлива се игнорира.

3. Со придружување на двете излезни променливи

>> [Area, hlen] = povr(10,15,20)

Area =
72.6184
hlen =
22.5000

Генерално, правилото за дефинирање на една функција се состои од


следниве чекори.

1. Одберите име на функцијата кое нема да биде исто како и име кое веќе постои
и се користи од страна на MATLAB. Во конкретниот пример името на
функцијата е povr и нејзината дефиниција (код) се наоѓа во фајлот povr.m.

2. Првата линија на фајлот мора секогаш да има форма

function [листа на излезни променливи] =


име_на_фукцијата [листа на влезни проемнливи]

Во нашиот пример тоа е:

function [A,s] = povr(a,b,c)


78 MATLAB/SIMULINK – упатство за вежби

3. Документирајте ја функцијата т.е. треба да се објасни на кратко кои пресметки


ги врши функцијата. Тие линии мораат да започнуваат со %, и MATLAB сите
линии кои започнуваат со % ги смета за коментар и се игнорираат кога
функцијата се повикува.

4. На крај се пишува кодот односно наредбите со кои се дефинира функцијата.


Препорачливо е поважните наредби ако не сите да бидат следени со коментар
кој би ја објаснил суштината на конкретната наредба, како би му овозможил
на друг корисник да разбере што функцијата работи.

Треба да се напомене дека првите линии на коментар по заглавието на


функцијата, MATLAB-от ги користи како помош за објаснување на функцијата.
Имено ако се напише

>> help povr

presmetuva povrsina na triagolnik cii


strani imaat dolzina a, b i c.
Vlez:
a, b, c : Dolzini na strani
Izlez
A: Povrsina na triagolnikot
Koristenje:
Area = povr(2,3,4)
------------------------------------------------

се испишуваат линиите на коментар по заглавието и затоа е препорачливо да


постои деталнен опис на функцијата.

2.6.3. Примери на функции

Да се напише функцијата за пресметување на низата на Фибоначи која е


дефинирана на следниот начин,

f1  0, f 2  1, f n  f n1  f n2 n=3,4,5.....

при што како влезна променлива да биде n iзлезот fn.

МЕТОД 1: Fajl E:\mat-prog\Fib1.m (да се променат имињата на фајловите!)

function f = Fib1(n)
% premetuva n-tiot broj vo
%nizata na Fibonaci
F = zeros(1,n+1);
F(2) = 1;
for i = 3:n+1
MATLAB/SIMULINK – упатство за вежби 79

F(i) = F(i-1) + F(i-2);


end
f = F(n);
%--------------- kraj---------------

МЕТОД 2: Fajl E:\mat-prog\Fib2.m

Првата метода од програмска точка на гледиште е доста неелегантна


бидејќи непотребно користи меморија за да ги сочува сите n елементи на низата.
Втората метода го елеминира користењето на вектори.

function f = Fib2(n)
% premetuva n-tiot broj vo
%nizata na Fibonaci
if n== 1
f=0;
elseif n==2
f=1;
else
f1 = 0; f2 = 1;

for i = 2:n-1
f = f1 + f2;
f1 = f2; f2 = f;
end
end
%--------------- kraj---------------

МЕТОДА 3: Fajl E:\mat-prog\Fib3.m

Оваа верзија ги користи можностите на MatLab-от за рекурзивно програмирање


т.е. функцијата сама себе се повикува.

function f = Fib3(n)
% premetuva n-tiot broj vo
% nizata na Fibonaci
if n== 1
f=0;
elseif n==2
f=1;
else
f = Fib3(n-1) + Fib3(n-2)
end
%--------------- kraj---------------

МЕТОДА 4: Fajl E:\mat-prog\Fib4.m


80 MATLAB/SIMULINK – упатство за вежби

Оваа верзија ја користи силината на векторизација т.е. матричното сметање.


Имено

function f = Fib4(n)
% premetuva n-tiot broj vo
% nizata na Fibonaci
A = [0 1;1 1];
y = A^n*[1;0];
f = y(1);
%--------------- kraj---------------

На крај да ги успоредиме резултатите.

>> x1 = Fib1(10)
>> x2 = Fib2(10)
>> x3 = Fib3(10)
>> x4 = Fib4(10)

x1 =
34
x2 =
34
x3 =
34
x4 =
34

Горните четири методи даваат исти резултати но затоа пак брзината со која
се вршат пресметките е различита. Тоа може да се покаже со мерење на времето
користејќи ги наредбите tic и toc, со кои се добива потрошеното време во секунди.

>> tic,x1 = Fib1(20),toc


>> tic,x2 = Fib2(20),toc
>> tic,x3 = Fib3(20),toc
>> tic,x4 = Fib4(20),toc

x1 =
4181
elapsed_time = 0.1700 sec
x2 =
4181
elapsed_time = 0 sec
x3 =
4181
elapsed_time = 31.8000 sec
x4 =
4181
elapsed_time = 0 sec
MATLAB/SIMULINK – упатство за вежби 81

2.7. ДРУГИ ВГРАДЕНИ ФУНКЦИИ

2.7.1 Заокружување на броеви

Постојат повеќе начини да се заокружат децималните броеви до целобројна


вредност.

>> x=[ -3.14 0 3.14 6.45 9.75], round(x)


x =
-3.1400 0 3.1400 6.4500 9.7500
ans =
-3 0 3 6 10

>> fix(x)
ans =
-3 0 3 6 9

>> floor(x)
ans =
-4 0 3 6 9

>> ceil(x)
ans =
-3 0 4 7 10

>> sign(x), rem(x,3)


ans =
-1 0 1 1 1
ans =
-0.1400 0 0.1400 0.4500 0.7500
Функцијата round врши заокружување на класичен начин т.е. ако е
децмалниот дел поголем од 0.5 се заокружува кон следниот цел број, додека во
спротивен случај кон претходниот помал цел број.
Функцијата fix заокружува на целобројниот дел од бројот односно го брише
децималниот дел.
Функцијата floor заокружува кон првиот помал цел број без разлика на
вредноста на децималниот дел.
Функцијата ceil заокружува кон првиот поголем цел број без разлика на
вредноста на децималниот дел.
Со функцијата sign се определува знакот на бројот.
Функцијата rem(x,k) го дава децималниот дел од бројот x до k децимали.
82 MATLAB/SIMULINK – упатство за вежби

2.7.2 Функцијата sum

Функцијата sum применета на вектор ја пресметува сумата на елементите на


векторот, додека применета на матрица ја определува сумата на елементите на
секоја колона на матрицата.

>>A = [1:3; 4:6; 7:9]


A=
1 2 3
4 5 6
7 8 9

>> s = sum(A), ss=sum(sum(A))


s=
12 15 18
ss =
45

>> x = pi/4*(1:3)'
>> A=[sin(x), sin(2*x), sin(3*x)]/sqrt(2)
x=
0.7854
1.5708
2.3562
A=
0.5000 0.7071 0.5000
0.7071 0.0000 -0.7071
0.5000 -0.7071 0.5000

>> s1 = sum(A.^2), s2 = sum(sum(A.^2))


s1 =
1.0000 1.0000 1.0000
s2 =
3.0000

Сумата на квадратите на елементите на секоја колона на матрицата A е 1, а


сумата на сите елементи на A е 3.

>> A*A'
ans =
1.0000 0 0
0 1.0000 0.0000
0 0.0000 1.0000

Призлегува дека производот AA' и A'A се еднакви на единична матрица.

>> S = eye(3)
MATLAB/SIMULINK – упатство за вежби 83

S =
1 0 0
0 1 0
0 0 1

>> A*A' - S
ans =
1.0e-015 *
-0.2220 0 0
0 -0.2220 0.0555
0 0.0555 -0.2220

>> A'*A - S
ans =
1.0e-015 *
-0.2220 0 0
0 -0.2220 0.0555
0 0.0555 -0.2220

Претходната констатација се потврдува со последниве две пресметки


бидејќи разликата од единична матрица е на ниво на нумеричката грешка на
заокружување.

2.7.3 Функции max и min

Овие функции дејствуваат на сличен начин како и функцијата sum. Ако


аргументот е векторот x тогаш max(x) го дава најголемиот елемент на векторот x,
а min(x) најмалиот.

>> x = [1.3 -2.4 0 2.3], max(x), max(abs(x))


x=
1.3000 -2.4000 0 2.3000
ans =
2.3000
ans =
2.4000

>> [m,j] = max(x)


m=
2.3000
j=
4

Кога се бара излезот да биде листа од две променливи, тогаш првата


променлива е максималниот елемент а втората променлива го означува индексот
т.е местото на максималниот елемент.
84 MATLAB/SIMULINK – упатство за вежби

За променливи од тип на матрици, max (A), враќа вектор-ред што ги содржи


најголемите ( максималните) елементи на секоја колона. За да се најде најголемиот
елемент на матрицата A, треба да се напише наредбата max(max(A)).

>> max(max(A)), min(min(A))


ans =
0.7071
ans =
-0.7071

2.7.4 Генерирање на случајни броеви

Функцијата rand(n,m) генерира матрица на случајни броеви со диманзија


mxn, со вредности помеѓу 0 и 1. Самата функција rand без аргументи генерира
еден случаен број помеѓу 0 и 1.

>> y = rand, Y=rand(2,3)


y=
0.9501
Y=
0.2311 0.4860 0.7621
0.6068 0.8913 0.4565

Повторување на овие команди ќе резултираат во други вредности.


>> y = rand, Y=rand(2,3)
y=
0.0185
Y=
0.8214 0.6154 0.9218
0.4447 0.7919 0.7382

Пример: Да се напише функциски m-фајл со кој се симулираат n фрлања на две


коцки.

Проблемот бара користење на случајни ( рандом) броеви бидејќи се


претпоставува дека е подеднаква веројатност да при фрање на коцка се добие број
од 1 до 6. Бидејќи функцијата rand дава број помеѓу 0 и 1, множејќи го со 6, се
добива број помеѓу 0 и 6 а со заокружување се добива целоброен број. За таа цел
потребно е да се користи наредбата

floor(1 + 6*rand)

file: E:\mat-prog\kocka.m

function [d] = kocka(n)


% simulira n frlawa na par kocki
% Vlez: n, broj na frlawa
MATLAB/SIMULINK – упатство за вежби 85

% Izlez: nx2 matrica, kade sekoj red se odnesuva na edno frlanje


% a kolonite gi oznacuvaat prvata i vtorata kocka.
%
% Upotreba: T = kocka(3)

d = floor(1 + 6*rand(n,2));
%------------------- kraj--------------------------------------

>> kocka(3)
ans =
2 6
3 3
6 6

Во конкретниот пример извршени се три фрлања од кои со првата коцка се


добиени вредностите 2, 3 и 6 а со втората 6, 3 и 6. Бидејќи веројатноста да падне
било кој број е еднаква треба да се очекува да после многу фрлања средната
вредност на добиените броеви кај двете коцки биде приближно ист и да тој
изнесува околу 3.5, што е теоретска вредност ако имаме бесконечно многу
фрлања. Тоа може да се провери со следната наредба.

>> sum(kocka(100))/100
ans =
3.5600 3.3100

2.7.5 Функција find за вектори

Функцијата find го дава редниот број (индекс) на сите елементи од векторот


x, кои задоволуваат даден услов.

>> x = -1:0.05:1;
>> y = sin(3*pi*x).*exp(-x.^2); plot(x,y,':')
>> k = find(y > 0.2)

k=
Columns 1 through 12
9 10 11 12 13 22 23 24 25 26 27 36
Columns 13 through 15
37 38 39
86 MATLAB/SIMULINK – упатство за вежби

0.8

0.6

0.4

0.2

-0.2

-0.4

-0.6

-0.8

-1
-1 -0.8 -0.6 -0.4 -0.2 0 0.2 0.4 0.6 0.8 1

Сл.2.7.1

>> hold on, plot(x(k),y(k),'o')


>> km = find(x>0.5 & y < 0)
km =
32 33 34

0.8

0.6

0.4

0.2

-0.2

-0.4

-0.6

-0.8

-1
-1 -0.8 -0.6 -0.4 -0.2 0 0.2 0.4 0.6 0.8 1

Сл.2.7.2.
MATLAB/SIMULINK – упатство за вежби 87

2.7.6. Функцијата find за матрици

find функцијата дејствува на дадена матрица на сличен начин како и на вектор.

>> A = [ -2 3 4 4; 0 5 -1 6; 6 8 0 1]
A=
-2 3 4 4
0 5 -1 6
6 8 0 1

>> k=find( A== 0)


k=
2
9

На овој начин определивме дека матрицата A има нули на позиција 2 и 9. За


да се интерпретираат овие вредности треба да се знае дека функцијата find прво е
реиндексира (пренумерира) матрицата A по системот ред-колона односно
елементите на матрицата А ги добиваат следните редни броеви.

1 4 7 10
2 5 8 11
3 6 9 12

>> n = find(A <= 0)

n=
1
2
8
9

>> A(n)
ans =
-2
0
-1
0

Во горниот пример n е вектор кој ги содржи индексите на оние елементи што


се помали или еднакви на 0 а со A(n) се печатат вредностите на тие елементи.
88 MATLAB/SIMULINK – упатство за вежби

2.8. ФУНКЦИСКИ ФУНКЦИИ

Во MatLab-от постојат вградени функции кои работат со аналитички


функции наместо нумерички низи т.е вектори или матрици. Тие функции
вклучуваат
 Нумеричко интегрирање на аналитички функции
 Оптимизација и решавање на нелинерни равенки
 Решавање на диференцијални равенки

2.8.1 Претставување на аналитичка функција во MATLAB

Во MatLabo-от аналитичката функција се дефинира така што експлицитно


ќе се испише во м-фајл. Името на m-фајлот е име на аналитичката функција која
MATLAB ја препознава во понатамошните поресметки. На пример да ја
разгледаме функцијата:
1 1
f ( x)   6
( x  0.3)  0.01 ( x  0.9) 2  0.04
2

Оваа функција може да се користи како аргумент на функциските функции.


Имено горната функција ја дефинираме во m-фајлот кој е нарен humps(x).

file e:\mat-vezbi\humps.m

function y=humps(x)
y = 1./((x-0.3).^2 + 0.01) + 1./((x-0.9).^2 + 0.04) –6;

2.8.2 Цртање на аналитички функции

Функцијата fplot се користи за цртање на аналитичка функција за даден


интервал на x променливата.

100

80

60

40

20

-20
-5 -4 -3 -2 -1 0 1 2 3 4 5

Сл. 2.8.1
MATLAB/SIMULINK – упатство за вежби 89

Сл.2.8.1. е нацртана со наредбата:


>> fplot('humps',[-5 5])
>> grid on
Можно е за аргумент експлицитно да се напише функцијата.
>> fplot(' 2*sin(x+3)', [-1 1])

1.5

0.5

-0.5

-1

-1.5

-2
-1 -0.8 -0.6 -0.4 -0.2 0 0.2 0.4 0.6 0.8 1

Сл.2.8.2.

Но можно е и следното
>> fplot('[2*sin(x+3), humps(x)]', [-5 5])

100

80

60

40

20

-20
-5 -4 -3 -2 -1 0 1 2 3 4 5

Сл.2.8.3.
90 MATLAB/SIMULINK – упатство за вежби

2.8.3 Минимум на функција со една променлива

За да се определи локален минимум во даден интервал на променливата x,


се користи функцијата fmin.

>> x = fmin('humps',0.3,1)
x=
0.6370

Последниве два аргумента 0.3 и 1 се долната и горната граница на


интервалот во чии граници се бара минималната вредност.

2.8.4 Нули на функција со една променлива

Функцијата fzero се користи за изнаоѓање на нули на дадена аналитичка


функција. Оваа функција може да биде повикана со една вредност од која треба да
се почне со барање на нулата или со две вредности со кои се дефинира интервалот
во кој треба да се најде нулата на аналитичката функција.

>> a = fzero('humps', -0.2)


a=
-0.1316

Во горниот пример се тргна од една точкa –0.2. fzero бара во околината на


оваа точка друга точка во која функцијата го менува знакот. Со тоа се дефинира
интервалот во која функцијата го менува знакот т.е проаѓа низ нулата. Ако е
познат интервалот во кој функцијата менува знак тогаш fzero може да се повика и
како:

>> a = fzero('humps', -0.3, 0.0)


a=
-0.1316
при што времето на пресметката е пократко.

2.8.5 Нумеричко интегрирање ( квадратура)

Често пати поради сложеноста или трансцедентноста на аналитичките функции


не е можно да се најде аналитичко решение на нивниот интеграл и затоа се
користи нумеричко интегрирање. MatLab-от обезбедува две функции за нумеричко
интегрирање
 quad Прилагодлива Simpsonova метода и
 quad8 Прилагодлива Wutn-Kouts метода

За да се определи интегралот за функцијата humps помеѓу 0 и 1 може да се


искористи следнава наредба.
>> q = quad('humps',0,1)
q =
MATLAB/SIMULINK – упатство за вежби 91

29.8583
пример: Да се определи должината на кривата во простор зададена параметриски.
x(t )  sin(2t ) y(t )  cos(t ) z (t )  t
za t  [0,3 ] .
Три димензионален цртеж на кривата е:

>> t=0:0.1:3*pi;
>> plot3(sin(2*t),cos(t),t)

10

0
1
0.5 1
0 0.5
0
-0.5
-0.5
-1 -1

Сл.2.8.4.

Должината на лакот на кривата даден е со формулата:

3


0
4 cos 2 (2t )  sin 2 (t )  1dt

За таа цел се кодира подинтегралната функција во м-фајл, например со име


hcurve.m.
fajl E:\mat-vezbi\hcurve.m (промени)
function f = hcurve(t)
f = sqrt(4*cos(2*t).^2 + sin(t).^2 +1);

Сега интегралот се пресметува со повикување на функцијата quad.

>> len = quad('hcurve',0,3*pi)


len =
17.2220

Но можно е и следното
>> fplot('[2*sin(x+3), humps(x)]', [-5 5])
92 MATLAB/SIMULINK – упатство за вежби

2.9. ВНЕС И ЗАПИШУВАЊЕ (ЕКСПОРТ) НА ПОДАТОЦИ

Секоја програма во основа врши обработка и анализа на податоци и како


резултат продуцира податоци кои можат да бидат презентирани во разна форма:
како нумерички вредности, текст или графички. Но за да може да се обработат
податоците тие претходно треба да бидат внесени т.е. програмот да ги прочита. Во
МатЛаб-от податоците можат да се внесат на неколку начини. Најдобриот начин
најчесто зависи од количеството на податоците, во која форма се достапни и тн.

2.9.1 Внес ( читање ) на податоци

 Наједноставен начин е експлицитно испишување на податоците во рамките на


самата сесија на МатЛаб-от директно во работниот простор. Во сите
претходни примери тој начин е користен при внесување на податоци за
векторите или матриците. Овој метот иако е релативно едноставен и директен
сепак е ефикасен за мал број податоци. Проблематичен станува кога треба да
се внесат поголем број на податоци на пример матрица со димензии 50x50,
што претставува 2500 податоци.

 Креирање т.е. испишување на податоците во m-фајл. Користејќи текст едитор


корисникот може да ги искуца (испише) податоците како скрипт м-фајл и
потоа во тек на сесијата да го повика m-фајлот. Овој метод е користен ако
податоците не се наоѓаат во компјутерот, на пример генерирани од друг
програм, и корисникот во секој случај треба да ги внесе. Всушност овој метод
е сличен на претходниот но неговата преднсот се состои во тоа што лесно
можат податоците да се сменат па повторно да се повика m-фајлот иновите
вреднсоти да се вшитаат во работната средина. Исто така податоците се во
форма на скрипт m-фајл спасени на диск и при повторно активирање на
MatLab-от брзо можат да се прочитаат. Во следниот пример креиран е фајлот
matdat.m во кој се сместени вредности на една матрица.

fajl E:\mat-vezbi\matdat.m (промени)

A = [ 0.2113 0.8098 0.4832 ; 0.0824 0.987 0.6512;


0.7599 0.4524 0.2749; 0.0087 0.8075 0.888];

Сега е можно да со наредбата,

>> matdat
>> A

A=
0.2113 0.8098 0.4832
0.0824 0.9870 0.6512
0.7599 0.4524 0.2749
0.0087 0.8075 0.8880
MATLAB/SIMULINK – упатство за вежби 93

да се прочита матрицата А, што е потвррдено со нејзиното печатење со


втората наредба.

 Податоците можат да се прочитаат од ASCII датотека (фајл). Податоците


мораат да се запишани во фајлот со иста должина на редот кој треба да заврши
со нов ред а броевите да бидат одделени со празни места. Овој фајл може да
биде корегиран (едитиран) со едноставен текст едитор. Например матрицата
во претходниот пример може да се прочита и од ASCII фајл. Читањето се
врши со наредбата load и името на фајлот а податоците се запомнуваат во
променливата со исто име како и фајлот.

fajl E:\mat-vrzbi\b.dat

0.2113 0.8098 0.4832


0.0824 0.9870 0.6512
0.7599 0.4524 0.2749
0.0087 0.8075 0.8880

>> load b.dat


>> b

b =
0.2113 0.8098 0.4832
0.0824 0.9870 0.6512
0.7599 0.4524 0.2749
0.0087 0.8075 0.8880

 Читање на податоци користејќи ги наредбите fopen, fread и другите наредби


на MatLab-от за најниско ниво ( ниво на бајт) на влез и излез на податоци.
Овој пристап е користен кога се читаат податоци генерирани од други
програми кои имаат свој сопствен формат на пишување. Бидејќи пристапот
користи елементарни операции на ниво на бајт бара повисоко знаење на
програмскиот јазик на MatLab-от и е надвор од целта за базичното
запознавање со MatLabo-от.

2.9.2 Експорт (запишување) на податоци

Слично како и при вчитување на податоци, постојат неколку начини за


запишување на податоците за евентуално идно користење или чување.

 За мал број податоци, мали матрици или вектори корисно е да се користи


наредбата diary со која се креира diary фајл. Во овој фајл се паметат сите
наредби или испишувања на екран за време на МатЛаб сесијата. Затоа ако се
се повика матрицата или векторот без ; вредностите ќе бидат испишани на
екранот и запишани во diary фајлот. Фајлот подоцна може да се едитира со
обичен текст едитор.
94 MATLAB/SIMULINK – упатство за вежби

 Податоците можат да се запишат во ASCII фајл со наредбата save и -ascii


опција. На пример,

A = rand(4,3);
save temp.dat A -ascii
type temp.dat

9.5012929e-001 8.9129897e-001 8.2140716e-001


2.3113851e-001 7.6209683e-001 4.4470336e-001
6.0684258e-001 4.5646767e-001 6.1543235e-001
4.8598247e-001 1.8503643e-002 7.9193704e-001

 Податоците можжат да се напишат во специјален формат користејќи ги


наредбите фопен, фњрите и како што е напомнато претходно и други
наредби кои оперираат на ниво на бајт при влезно излезните операции.

2.9.3 Функција input

Функцијата input испишува порака на екран и чека на одговор од


корисникот. Синтаксата е,

n = input(' poraka : ')

функцијата испишува на екран порака и враќа вредност за n број или вредност на


израз што ќе биде искуцан на тастатурата.

n = input(' Vnesi broj ')


Vnesi broj: 23
n =
23

Input исто така може да врати и К-наза а не само броеви. За да се добие К-


низата, наредбата треба да изгледа
v = input(' Ime i Prezime : ','s')
Ime i Prezime : Petre Petrevski
v =
Petre Petrevski
MATLAB/SIMULINK – упатство за вежби 95

3. НУМЕРИЧКИ МЕТОДИ ВО МАТЛАБ

Третата глава на ова упатство содржи поглавја во кои се обработуваат


полиноми, и интерполација, нумеричко диференцирање и интегрирање, решавање
на системи линеарни алгебарски равенки и моделирање на податоци. Темите се
поврзани со нумеричките методи кои се користат за решавање одредени инже-
нерски проблеми. МАТЛАБ-от како еден од високо организираните инженерско-
истражувачки програмски јазици овозможува сите нумерички методи лесно и бр-
зо се имплементираат. Освен наведените теми кои се обработуваат овде, посебно
ќе се обработи решавањето на обични диференцијални равенки со примена на
МАТЛАБ како и други теми од областа на применетата математика. Поедини теми
ќе бидат обработувани наменски зависно од предметот во којшто се користат и тоа
за време на вежбите по конкретниот предмет.

3.1. ПОЛИНОМИ И ИНТЕРПОЛАЦИЈА

Полиноми се континуирани финкции кои претставуваат линерана комбина-


ција на мономи. Например полиномот1
p ( x)  x 3  2 x  5
е полином од трет степен.
Во MATLAB-от, полиномот се претставува со помош на вектор-ред кој ги
содржи коефициентите на полиномот тргнувајќи од најголемиот до најмалиот
степен.
>> p = [ 1 0 -2 -5]
p =
1 0 -2 -5
Коефициентите кои не се присутни во полиномот се зададат со нула на
нивното соодветно место.
Од повеќето функции за работа со полиноми ќе ги спомнеме следниве:
conv множење на полиноми
dekonv делење на полиноми
polyval пресметување на вредноста на полиномот
roots определување на нулите на полиномот
poly определување на полином ако се знаат нулите
polyfit итерполација на податоци со полином

1
Primerot e zemen od upatstvoto za MATLAB
96 MATLAB/SIMULINK – упатство за вежби

3.1.1. Нули на полиномот

Функцијата roots пресметува нули на даден полином т.е. ја определува


вредноста на независната променлива за која полиномот добива нулта вреднсот.
Нулите на полиномот се определуваат со, при што функцијата roots ги пресметува
и комплексните корени:

>> r = roots(p)

r=
2.0946
-1.0473 + 1.1359i
-1.0473 - 1.1359i

По дефиниција, нулите на полиномот се памтат како вектор-колона.


Обратна функција на roots е функцијата poly. Со неа се опредлеуваат
коефициентите на полиномот ако се познати неговите нули.

>> p2 = poly(r)

p2 =
1.0000 -0.0000 -2.0000 -5.0000

roots и poly се инверзни функции една на друга до ниво на скалирање (множење


на целиот полином со некој број) и грешката на заокружување. Фунцијата poly
исто така се користи и за пресметување на карактеристичниот полином за дадена
матрица за да потоа со користење на roots се определат и сопствените вредности
на матрицата2

>> A = [ -5.0 -52.06; 0.092 -0.433];


>> p2 = poly(A)
>> r = roots(p2)

p2 =
1.0000 5.4330 6.9545
r=
-3.3683
-2.0647

3.1.2 Пресметување на вредноста на полиномот

Функцијата polyval ја пресметува вредноста на полиномот за дадени


вредности на независната променлива. Например вредноста на плиномот p(x) од
претходните примери за x = 5 е:

2
primerot e zemen od knigata "MATLAB i dodatni moduli Control system toolbox i Simulink " od
Latinka ^alasan i Menka Petkovska, Mikro kwiga, Beograd
MATLAB/SIMULINK – упатство за вежби 97

>> polyval(p,5)

ans =
110

Можна е следната наредба:

>> x = [ 0.1 0.5 1 2 3 4 5];


>> v = polyval(p,x)

v=
-5.1990 -5.8750 -6.0000 -1.0000 16.0000 51.0000 110.0000

3.1.3 Множење (конволуција) и делење ( деконволуција) на полиноми

Множењето и делењето на полиноми кореспондира на операциите конволу-


ција и деконволуција. За овие две операции се користат функциите conv и deconv.
Како пример да ги помножиме следниве два полинома:

a(s)  s 2  2s  3 i b(s)  4s 2  5s  6

>> a = [ 1 2 3]; b = [ 4 5 6];


>> c = conv(a,b)

c=
4 13 28 27 18

Ако сега полиномот со коефициентите дадени преку вектор-редот c се


подели со a треба да се добие полиномот b.

>> [q,r] = deconv(c,a)

q=
4 5 6
r=
0 0 0 0 0

Вектор-редот r е полином на остатокот. Бидејќи неговите коефициенти се


нула произлегува дека векторите се делат без остаток а резултатниот полином
количник даден е со векторот q.

3.1.4 Интерполација на податоци со полином

Функцијата polyfit ги определува коефициентите на полином со кој се


интерполираат дадените податоци во смисла на најмала квадратна грешка. Во
најопшта форма функцијата се задава со следниве параметри.
98 MATLAB/SIMULINK – упатство за вежби

p = polyfit(x,y,n)
каде што x и y се векторите кои ги содржат податоците што треба да се
интерполираат, а n е редот на полиномот чии коефициенти треба да се определат.

>> x = [ 1 2 3 4 5]; y = [ 5.5 43.1 128 290.7 498.4];


>> p = polyfit(x,y,3)

p =
-0.1917 31.5821 -60.3262 35.3400

Сега како илустрацијата и споредба ќе ги нацртаме податоците и полиномот


пресметан со функцијата polyfit.
>> x2 = 1:.5:5;
>> y2 = polyval(p,x2);
>> plot(x,y,'o',x2,y2)
>> grid on

500

450

400

350

300

250

200

150

100

50

0
1 1.5 2 2.5 3 3.5 4 4.5 5

Сл.3.1.1.

Пример 3.1.2.

>> x = [0.1 0.3 0.4 0.44 0.5 0.7 0.8];


>> y = [ 1 1.5 1.6 1.4 1.1 1.1 1.5];
>> c = polyfit(x,y,4)

c =
13.2447 1.3735 -20.3555 10.3114 0.1641

>> x1 = 0.1:0.01:0.8;
MATLAB/SIMULINK – упатство за вежби 99

>> y1 = polyval(c,x1);
>> plot(x1,y1,x,y,'*')

1.6

1.5

1.4

1.3

1.2

1.1

0.9
0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8

3.2. ИНТЕРПОЛАЦИЈА СО ПОЛИНОМ

Во претходните примери, во кој е користена вградената функција polyfit,


полиномот се одбира така да сумата на квадратите на разликата ( грешката) помеѓу
вредноста на полиномот и податоците е најмала во однос на сите други полиноми.
Вака определен полином најчесто не проваѓа низ точките со кои се дефинирани
емпириските податоци и во литературата често ќе се сретне терминот
апроксимација со полином со метода на најмали квадрати. Но интерполацијата
може да се реализира ако се постави услов дека полиномот мора да прима
вредности кои се еднакви на податоците за иста вредност на независната
променлива3.

3.2.1 Интерполационен полином

Проблемот на изнаоѓање на коефициентите на полиномот се сведува на


решавање на систем на линеарни равенки, каде матрицата на системот е позната
под име Вандермондеова матрица4. Пресметувањето на оваа матрица ќе го
реализираме со м-функцијата.

3
Vidi del 1.3 vo predavawata za vtoriot semestar
4
Isto
100 MATLAB/SIMULINK – упатство за вежби

function [A]= myvander(x)


%-----------
% funkcija vander presmetuva Vandermundovata matrica
% Vlez: x vektor-kolona na nezavisnata promenliva
% vo koja se dadeni podatocite
% Izlez: matrica A
%-----------
n = length(x);
for i=1:n
j= n-i;
A(:,i)=x.^(j);
end

Пример на сесија во MatLab:

>> x = [ 0 1 3 ]';
>> fx = [ -5 1 25]';
>> A = myvander(x)
>> coef = A\fx

A =
0 0 1
1 1 1
9 3 1
coef =
2
4
-5

Наредбата coef = A\fx претставува вграден оператор за решавање на


систем на равенки. Математички треба да се чита како coef = A-1*fx.

Полиномот на итерполацијата гласи:

f ( x)  2 x 2  4 x  5

Графички приказ за оценка е даден на следниот график реализиран со


наредбите.

>> x1 = 0:0.2:3.4;
>> y1 = polyval(coef,x1);
>> plot(x1,y1,x,fx,'*')
MATLAB/SIMULINK – упатство за вежби 101

35

30

25

20

15

10

-5
0 0.5 1 1.5 2 2.5 3 3.5

Сл.3.2.1

Треба да се напомене дека во рамките на MatLab-от постои специјална


вградена функција за генерирање на Вандермондеовата матрица, фунцијата
vander(x). Имено,

>> A = vander(x)

A =
0 0 1
1 1 1
9 3 1

ја пресметува истата матрица како и со користење на функцијата myvander. Но


доста често при практичното решавање на проблемите ќе се среќаваме од
потребата за пишување на свои функции и затоа myvander е дадена како
илустрација за пишување и користење на м-функциски датотеки. Секако дека се
пишуваат м-функции само таму каде не постојат веќе вградени функции а и кога
се пишуаат сопствени функции, препорачливо е што повеќе да се користат
вградените функции за решавање на пооделни сегменти на проблемот.

3.2.2 Лагранжова интерполација

Лагранжовата интерполација е еден специфичен вид на интерполација со


полином а се состои од конструкција на полиноми L0(x), L1(x),...., Ln(x), кои
експлицитно задоволуваат услов да се анулираат во сите точки на независната
порменлива x, освен во една точка во која примаат вредност 15.

5
Vidi del 1.4 vo predavawata za vtoriot semestar
102 MATLAB/SIMULINK – упатство за вежби

Во MatLab-от не постои вградена функција за определување на


Лагранжовоит полином и затоа треба да се напише м-функција. Во примерот што
следува дадена е м-функција за Лангранжовата интерполација. Секако дека е
можно, во зависност од знаењата и креативноста на програмерот, истиот програм
да биде напишан поинаку но резултатите треба да бидат идентични.

function [C,L] = lagrange(X,Y)


%------------------------------------------------------------
%LAGRANGE Konstrukcija na polinom so metoda na Lagranzova
% interpolacija
% Nacin na povikuvawe
% [C] = lagrange(X,Y)
% [C,L] = lagrange(X,Y)
% Inputs
% X vector na vrednostite na nezavisnata promenliva
% Y vector na zavisnata promenliva
% Izlez
% C lista na koeficienti za Lagrange polinom
% L matrica koja gi sodrzi poedinecnite Lagrange polnomi
%
%-----------------------------------------------------------

n1 = length(X);% dolzina na vektorot X, broj na elementi


n = n1-1;
L = zeros(n1,n1);% se generira matrica so n1xn1 nuli
for k=1:n+1, % formirane na koeficientite na Lagrange plinom
V = 1; % so koristene na poly(r1)za kreirawe na polinom
for j=1:n+1, % so poznati koreni, i conv(P2,P1)
if k ~= j, % za mnozenje na polinomi.
V = conv(V,poly(X(j)))/(X(k)-X(j));
end
end
L(k,:) = V;
end
C = Y*L;

Како илустрација за користење на m-фукнцијата lagrange, ќе се користиме


со примерот за m-функцијата myvander во претходната глава.

>> x = [ 0 1 3];
>> y = [ -5 1 25];
>> [coef,L] = lagrange(x,y)

coef =
2.0000 4.0000 -5.0000
L =
MATLAB/SIMULINK – упатство за вежби 103

0.3333 -1.3333 1.0000


-0.5000 1.5000 0
0.1667 -0.1667 0

Вредностите на коефициентите се идентични бидејќи и двата пристапа се


однесуваат на полиномна апроксимација. Предноста на Лагранжовата
интерполација се состои во тоа што не треба да се решава систем на равенки, чие
решение може да биде нестабилно во случај на голем број на податоци. Во
конкретниот пример со 3 вредности овој проблем не се јавува заради мал број на
податоци.
Редовите на матрицата L, ги содржат коефициентите на поединачните
Лагранжеови полиноми и тоа: првиот ред се однесува на L0(x), вториот на L1(x) и
третиот на L2(x) полином, при што полиномите ги задоволуваат следните услови:
L0(0) = 1, L0(1) = 0, L0(3) = 0
L1(0) = 0, L1(1) = 1, L1(3) = 0
L2()) = 0, L2(1) = 0, L2(3) = 1
а самиот полином е линеарна комбинација на L полиномите.

L(x) = -5*L0(x) + 1*L1(x) + 25*L2(x)


Графички L полиномите можат да се претстават со следниот програм.
>> x = 0:0.1:3;
>> L0 = L(1,:); L1=L(2,:);L2=L(3,:);
>> y0 = polyval(L0,x);
>> y1 = polyval(L1,x);
>> y2 = polyval(L2,x);
>> plot(x,y0,x,y1,x,y2)
>> grid on

1.2

0.8

0.6

0.4

0.2

-0.2

-0.4
0 0.5 1 1.5 2 2.5 3

Сл.3.2.2
104 MATLAB/SIMULINK – упатство за вежби

Знаејќи ги коефициентите на полиномот (елементите на вектор-редот coef)


лесно може да се пресметаат вредностите на зависната променлива за оние
вредности на независната променлива кои не се присутни во податоците. На
пример:
>> x1 = [ 0.5 1.5 2];
>> y1 = polyval(coef,x1)

y1 =
-2.5000 5.5000 11.0000

3.2.3. Њутнова интерполација - напред

Њутновата интерполација е друга метода со која дадени податоци се


интерполираат. Резултатот е исто така полином при што коефициентите на
полиномот се пресметуваат користејќи ја методата на конечни разлики6.

function [C,D] = newtint(X,Y)


%-----------------------------------------------------------
%NEWTINT metoda na Newtonova interpolacija
% Nacin na povikuvanje
% [C] = newtint(X,Y)
% [C,D] = newtint(X,Y)
% Vlez:
% X vector na nezavisnata promenliva
% Y vector na zavisnata promenliva
% Izlez
% C koeficientite na Newton-oviot polinom
% D tabela na konecni razliki
%
%------------------------------------------------------------
n = length(X);
D = zeros(n,n);
D(:,1) = Y';
for j=2:n,
for k=j:n,
D(k,j) = (D(k,j-1)-D(k-1,j-1))/(X(k)-X(k-j+1));
end
end
C = D(n,n);
for k=(n-1):-1:1,
C = conv(C,poly(X(k)));
m = length(C);
C(m) = C(m) + D(k,k);
end

6
Vidi del 1.5 vo predavawata za vtoriot semestar
MATLAB/SIMULINK – упатство за вежби 105

Вектор-редот C ги содржи коефициентите на полиномот, додека колоните


на матрицата D се 0-та, 1, 2, .... к-та конечна разлика, при што вредностите на
конечните разлики се делени со соодветниот факториел. Така на пример  f (x)
k

(к-тата колона) е поделена со k !. Разликата помеѓу примерите дадени во


предавањата и резултатите во имплементацијата на методата во MatLab-от се
состои во горе наведеното објаснение.

Пример 17:

>> x = [0 1 2]; y=[ -5 1 11];


>> [C,D] = newtint(x,y)

C =
2 4 -5
D =
-5 0 0
1 6 0
11 10 2

Пример 28:

>> x = [ 0 1 2 3 4]; fx=[ -5 1 9 25 55];


>> [C,D]=newtint(x,fx)

C =
0 1 -2 7 -5
D =
-5 0 0 0 0
1 6 0 0 0
9 8 1 0 0
25 16 4 1 0
55 30 7 1 0

Да ја пресметаме вредноста на функцијата во точката 1.5

>> a = 1.5;
>> vrd = polyval(C,a)

vrd =
4.3750

7
Primerot e od predavawata za vtoriot semestar
8
Isto
106 MATLAB/SIMULINK – упатство за вежби

3.3. НУМЕРИЧКО ДИФЕРЕНЦИРАЊЕ (ОПРЕДЕЛУВАЊЕ НА ИЗВОД)

Нумеричкото диференцирање е постапка со која се пресметува првиот извод


на функција во однос на една нејзина променлива. Најчесто, под оваа постапка се
подразбира диференцирање на функции кои се дадени во нумеричка ( бројчана)
форма, иако методата може да се користи и за диференцирање на функции кои се
зададени во аналитичка форма. Потребата за нумеричко диференцирање на
аналитички функции се јавува кога не сме во состојба да извршиме аналитичко
диференцирање поради комплексноста на самата функција. И во двата случаи
станува збор за извод во дадена точка на функцијата при што се добива бројчана
вредност како резултат.

3.3.1. Нумеричко диференцирање користејќи лимес

Во основа на нумеричкото диференцирање е геометриската интерпретација


на изводот, т.е дека изводот е тангес од аголот што го зафаќа тангентата на
кривата, во дадена точка, со позитивната насока на x-оската. Математички тоа
може да се претстави со следниот лимес9.

f f ( x 0  h)  f ( x 0  h )
f ( x0 )  lim  lim
x 0 x h 0 2*h
Ако горниот лимес е конечен и има вредност тогаш велиме дека функцијата
има извод во точката x0.

Една можна реализација на м-функција, со која се пресметува извод во


дадена точка на функцијата f, е дадена во следниот пример.

function [H,D,E,n] = difflim(f,x,toler)


%-----------------------------------------------------------
%DIFFLIM Numericka aproksimacija na f'(x).
% Metodata se bazira na presmetuvanje na limes.
% Primer na povikuvnje:
% [H,D,E,n] = difflim('f',x,toler)
% Vlez:
% f name of the function
% x differentiation point
% Izlez:
% H vector na golemina na cekori
% D vector na priblizna vrednost na izvodot
% E vector na greska vo sekoj cekor
% n elementot D(n) "najdobra aproksimacija na f'(x)"
%

9
Vidi del 2.1 vo predavawata za vtoriot semestar
MATLAB/SIMULINK – упатство за вежби 107

% (Diferenciranje koristejki limes).


%---------------------------------------------------------
h = 1; %1
max1 = 15; %2
H(1) = h; %3
D(1) = (feval(f,x+h) - feval(f,x-h))/(2*h); %4
E(1) = 0; %5
for n = 1:2 %6
h = h/10; %7
H(n+1) = h; %8
D(n+1) = (feval(f,x+h) - feval(f,x-h))/(2*h); %9
E(n+1) = abs(D(n+1) - D(n)); %10
end %11
n = 2; %12
while ((E(n)>toler)) & n<max1 %13
h = h/10; %14
H(n+1) = h; %15
D(n+1) = (feval(f,x+h) - feval(f,x-h))/(2*h); %16
E(n+1) = abs(D(n+1) - D(n)); %17
n = n+1; %18
end %19
n = length(D)-1; %20
% kraj na funkcijata............

Името на m-фунцијата е difflim, при што како влезни параметри се: името
на функцијата f, точката во која се бара изводот x и толеранција, toler, на грешката
во вредноста на изводот. Самата функцијата ф треба да биде зададена и
дефинирана како м-функциска датотека. Во нашиот пример тоа е функцијата
cos(x) а дефинирана е со следната m-функциската датотека.

file:f.m

function z = f(x)
z = cos(x);

при што датотеката се наоѓа во работниот директориум. Треба да се повлече дека и


името на м-датотеката ( фајлот) и името на функцијата мора да се исти.

Излезот, т.е, резултатот на пресметиките на финкцијата difflim е даден со


четири променливи. Векторот H ги содржи вредностите на чекорите кои се
менуваат во секоја интерација со цел да се уточни вредноста на изводот. Векторот
D ги содржи вредностите на изводот во соодветниот чекор а векторот E
припадната грешка. Brojot n е редниот број на елементот на D кој истовремено
претставува конечна вредност на изводот кој ја задоволува толеранцијата (
грешката ).

Во следниот дел чекор по чекор ќе биде објаснета програмата со цел да


студентот добие чуство што и како м-функцијата работи и истовремено да стане
108 MATLAB/SIMULINK – упатство за вежби

фамилијарен со програмирањето во МатЛабот. Ние и во следните примери по


потреба одредени програми ќе ги објасниме чекор по чекор. За оние програми кои
не се објаснети, претпоставка е дека студентот има доволно познавања или
доволно информации од објаснетите програми да може самиот да направи анализа.
Сепак кључно е студентот мора да ја поснава методата и алгоритмот за да може да
го интерпретира програмот.

Како што е кажано м-фукнцијата difflim се базира на методата на


пресметување на извод преку лимес. Во таа смисла програмата се состои од:

1-чекор: Се дефинира почетниот чекор со вреднсот 1.


2: Максимален број на итерации е ограничен на 15.
3: Вредноста на првиот чекор се памети како прв елемент на
векторот на чекори H.
4: Се користи формулата (**) за пресметување на првата
апроксимација на изводот, при што истата се памети во векторот
D. За пресметка на вредноста на функцијата f во дадена точка се
користи вградената функција feval('f',x).

Како пример да ги пресметаме вредностите на функцијата f во точката 1.8 и


-0.2

>> x = 0.8;
>> h = 1;
>> f1 = feval('f',x+h)
>> f2 = feval('f',x-h)
>> izv = (f1-f2)/(2*h)

f1 =
-0.2272
f2 =
0.9801
izv =
-0.6036

Најчеста грешка што се прави е испуштање на апострофите 'f', бидејќи


функцијата feval го бара името на функцијата.

5: Почетната грешка во првиот чекор се поставува на нула.


6: Се користи for циклусот за пресметка на изводот и грешката во следните
два чекори. Овие вредности се потребни како иницијални за понатамошна
итерација.

13: Со помош на while циклусот се пресметуваат сукцесивните вредности на


изводот заедно со припадните грешки и истите се сместуваат во векторите
D(n) и E(n). Циклусот while се повторува се додека грешката т.е.
апсолутната разлика помеѓу два последователни изводи стане помала од
дозволената толеранција.
MATLAB/SIMULINK – упатство за вежби 109

20: Се пресметува n, со кој се означува елементот на векторот D како конечно


решение на вредноста на првиот извод.

Користењето на m-функцијата може да се илустрира со следната MatLab сесија.

>> x0 = 0.8;
>> toler = 1e-7;
>> [H,D,E,n] = difflim('f',x0,toler);
>> n,H(n),D(n),E(n)

n =
4
ans =
1.0000e-004
ans =
-0.7174
ans =
1.1836e-007

Пресметките покажуваат дека во четвртата итерација е постигната бараната


точност и вредноста на изводот во точката x=0.8 изнесува D(4)=-0.7174, при што
чекорот за нумеричко диференцирање е H(4)=0.0001 а постигната грешка
E(4)=0.000000118.

3.3.2. Нумеричко диференцирање со помош на Њутновиот


интерполационен полином

Нумеричко диференцирање за функции кои што се зададени бројчано


(нумерички) во основа се реализира во два чекора. Во првиот чекор се врши
полиномна апроксимација и од како ќе се определат коефициентите на полиномот
истиот се диференцира во дадената точка. За поточна пресметка на вредноста на
изводот потребна е апроксимација со полином од повисок ред10.

Во следниот пример, дадена е м-функција со која се определува првиот


извод во точката x0 на функција дефинирана со векторите x (абциса) и y
(ордината). Во самото тело на функцијата се користат три функции од кои
newtint(x,y) е m-функција која ги определува коефициентите на Њутновиот
интерполационен полином. Истата е дефинирана во делот 2.3 и таа е корисничка
м-функција, т.е. напишана од корисникот. Функциите polyder со која се врши
диференцирање на полиномот (види help) и функцијата polyval се вградени
MatLab функции. Овој пример е доста едукативен во смисла како корисникот
треба да ги пишува своите функции со користење на вградените m-функции.

function vr = newtdiff(x,y,x0)
[C,D] = newtint(x,y);

10
Vidi 2.3 od predavawata vo vtoriot semestar
110 MATLAB/SIMULINK – упатство за вежби

derc = polyder(C);
vr = polyval(derc,x0);

Како пример за употреба на newtdiff да го пофториме примерот од


претходниот дел 3.1.

Пример:

>> x = 0:0.2:1.2;
>> y = cos(x);
>> x0 = 0.8;
>> izvod = newtdiff(x,y,x0)

izvod =
-0.7174

Пример11

>> x=1:0.05:1.3;
>> y = sqrt(x);
>> x0 = 1.0;
>> izvod = newtdiff(x,y,x0)

izvod =
0.5000

3.4. НУМЕРИЧКО ИНТЕГРИРАЊЕ

Во првиот дел на овоа учебно помагало, се запознавме со функциите quad и


quad8 со кои се врши нумеричка интеграција на функции зададени аналитички. Но
слично како и кај диференцирањето во случај на бројчано зададени функции
нумеричката интеграција се врши преку интеграција на полиномот со кој се
апроксимираат податоците. Од теоретските анализи12 произлегуваат два
едноставни алгоритми кои најчесто се користат за нумеричка интеграција.

3.4.1 Трапезно правило

Со трапезното правило интегрирањето се реализира преку сумација на


површини на трапези. Следната m-функција е пример на програмирање на
трапезното правило.

11
Od predavawata na strana 24
12
Vidi 3.2 od predavawata vo vtoriot semestar
MATLAB/SIMULINK – упатство за вежби 111

function v = trapez(x,y)
n = length(x);
m = length(y);
if m ~= n
display(' x i y nemaat ednakov broj na podatoci ')
break
end
v = 0;
for k=1:n-1
v=v+(x(k+1)-x(k))*(y(k+1)+y(k))/2.0;
end

Како влезни параметри се векторите на податоци x и y, а излезот е интеграл


на функцијата y помеѓу точките x(1) и x(n).

Пример13

>> x = 0.4:0.1:1.0;
>> y = exp(x)./x;
>> integral = trapez(x,y)

integral =
1.7950

Пример14

>> x = 0:pi/12:pi/2;
>> y = sin(x);
>> integral = trapez(x,y)

integral =
0.9943

Во горниот пример пресметан е интеграл на функцијата sin(x) во


интервалот [0,pi/2], чија врдност теоретски изнесува 1. Заради мал број на
интервали а и користењето на трапезното правило внесува одредена грешка. За да
се зголеми точноста потребно е да се зголеми бројот на интервалите односно
намали чекорот на интеграција.

>> x = 0:pi/500:pi/2;
>> y = sin(x);
>> format compact
>> integral = trapez(x,y)

13
od predavawata na st. 29
14
od predavaqata na st. 30
112 MATLAB/SIMULINK – упатство за вежби

integral =
0.99999671012970

Со намален број на чекори вредноста на интегралот се доближува до 1, но


се уште грешката е во 5-тата децимала а бројот на интервали е 500. Големиот број
на интервали а не така голема точност ја прави оваа метода непопуларна и покрај
својата едноставност.

3.4.2 Симпсоново правило

Симпсоновото правило е метода која со помал број на интервали може да


постигне поголема точност15. Во случај на еднакви интервали м-функцијата би
можела да се напише на следниот начин.

function v = simpson(h,y)
%-------------------------------
% vlezni parametri
% h cekor na integracija ( interval)
% y() vrednosti na funkcijata t.e podatoci vo brojcana forma
%-------------------------------
n = length(y);
% se ispituva dali ima neparen broj na podatoci
% ako ne da se namali za eden
m = n;
if rem(n,2) == 0
m = n-1;
end
m,n
v = 0.0;
for k=2:m-1
if rem(k,2)== 0
v = v+4.0*y(k);
else
v = v+2.0*y(k);
end
end
v = h*(v + y(1)+y(m))/3;
% vo slucaj na paren broj na tocki dodaj ja
% poslednata povrsina koristejki trapezno pravilo
if rem(n,2) == 0
v = v+h*(y(n)+y(n-1))/2;
end

Пример

15
Vidi 3.2.3 od predavawata vo vtoriot semestar
MATLAB/SIMULINK – упатство за вежби 113

>> h = pi/500;
>> x = 0:h:pi/2;
>> y = sin(x);
>> integral = simps1(h,y)

integral =
1.0000

3.4.3. Гаусова интеграција

Гаусовата интеграција е ефикасна и задоволително точна метода за


интегрирање на посложени аналитички функции. Во случај на функции зададени
во нумеричка форма прво треба да се изврши интерполација со полином или
некоја друга аналитичка функција па потоа да се примени Гаусовата метода. Во
суштина методата се состои во зобирање на вредностите на функцијата во јазлите,
помножени со соодветни тежински фактори 16. Во зависност од бараната точност
на пресметките може интеграцијата да биде со помалку или повеќе јазлни точки.
Но веќе со релативно мал број на јазли можно е да се постигне задоволителна
точност.

Со следната m-функција gauss5, дадена е програмата за Гаусовата метода


со 5 јазли.

function sum = gauss5(f,a,b)


%-------------------------------------------------------------------
% Vlez
% f ime na funcijata
% a left endpoint of [a,b]
% b right endpoint of [a,b]
% A table of abscissas
% W table of weights
% Return
% sum rezultat na integracija
%-----------------------------------------------------------
A = [-0.90617985 -0.53846931 0.0 0.53846931 0.90617985];
W = [0.23692689 0.47862867 0.56888889 0.47862867 0.23692689];
n = length(A);
sum = 0;
fct = (b-a)/2;
for k = 1:n
z = A(k);
w = W(k);
x = (b*(z+1)+a*(1-z))/2;

16
Vidi 3.3 od predavawata vo vtoriot semestar
114 MATLAB/SIMULINK – упатство за вежби

fz = fct*feval(f,x);
sum = sum+w*fz;
end

За илустрација на Гаусовата метода ќе ги решиме сите претходни примери.

пример

>> a = 0;
>> b = pi/2;
>> integral = gauss5('f',a,b)

integral =
1.0000

при што функцијата f е зададена како m-фајл.

function z = f(x)
z = sin(x);

пример

>> a = 0.4;
>> b = 1.0;
>> integral = gauss5('f',a,b)

integral =
1.7904

при што f функцијата е зададена so:

function z = f(x)
z = exp(x)/x;

пример

>> a = 1;
>> b = 2;
>> integral = gauss5('ff',a,b)

integral =
0.6931

при што финкцијата ff е зададена со m-фајлот:

function z = ff(x)
z = 1./x;
MATLAB/SIMULINK – упатство за вежби 115

На крај последниот пример да го решиме со користење на вградените


функции quad и quad8.
>> a = 1;
>> b = 2;
>> err = 1.e-5;
>> format long;
>> integral = quad('ff',a,b,err)

integral =
0.69314722007998

>> a = 1;
>> b = 2;
>> err = 1.e-5;
>> integral = quad8('ff',a,b,err)

integral =
0.69314718056011

3.5. РЕШАВАЊЕ НА СИСТЕМИ ЛИНЕАРНИ АЛГЕБАРСКИ РАВЕНКИ

Едно од централните места во нумеричките методи зазема решавањето на


системи на линеарни алгебарски равенки. Генерално кажано, во секој математички
модел со кој се опишуваат физичките феномени, се јавува потреба од решавање на
систем на линеарни равенки. Дури одредени инжењерски проблеми можат да се
моделираат и сведат на систем на линеарни равенки. Како едноставен пример да ја
спомнеме полиномната интерполација која се сведува на решавање на систем на
равенки каде матрицата на системот е Вандермондовата матрица. Постојат многу
такви примери но тоа е надвор од целта на овој материјал. Впрочем фактот дека
самиот MATLAB, е развиен околу едно езгро, кое првично искључиво беше
направено да им олесни на корисниците користење на пакетот за решавање на
линеарни системи. Затоа MATLABOT и има доста богата библиотека на вградени
функции и оператори кои манипулираат со матрици.

За почеток да решиме неколку примери на системи со вградените функции.

Пример 3.5.1

2x1 + x2 = 4
x1 - x2 = -1

или
2 1   x1   4 
Ax  b t.e 1  1  x    1
  2   

MATLAB наредби:
116 MATLAB/SIMULINK – упатство за вежби

>> A=[2 1; 1 -1];


>> b = [4 -1]';
>> x = A\b
>> c = A*x
>> err = b-c

x=
1
2
c=
4
-1
err =
0
0

Претходниот пример илустрира користење на вградениот оператор \ кој во


случај на матрици означува делење од лево на векторот-колоната b со матрицата A
и се добива решение вектор-колоната x. Всушност математички решението на
ситемот e:

x  A1b каде A-1 е инверзна матрица на матрицата A.

Со користење на инверзна матрица системот може да се реши и на следниот


начин.

>> Ainv = inv(A)


>> x = Ainv*b

Ainv =
0.3333 0.3333
0.3333 -0.6667
x=
1.0000
2.0000

Предноста на решавање на систем на равенки со операторот на делење е во


тоа што MatLab-от во позадина користи алгоритми кои водат сметка за
стабилноста на решението како и тоа да со операторот за делење, може да се решат
и системи кои имаат повеќе равенки од непознати но тогаш решението е во смисла
на најмала квадратна грешка. На пример да додадеме уште една равенка т.е. ред во
матрицата А.

A (3,:) = [ 1 1]
b(3) = 4
x = A\b
c = A*x
MATLAB/SIMULINK – упатство за вежби 117

razlika = b-c
err = norm(razlika)

A=
2 1
1 -1
1 1
b=
4
-1
4
x=
1.0714
2.2857
c=
4.4286
-1.2143
3.3571
razlika =
-0.4286
0.2143
0.6429
err =
0.8018

Решението x e решение кое дава најмала вкупна квадратна грешка на


елементите на одстапувањето razlika. Имено ако за решение земеме:

x1 =
1.09
2.24
кое се разликува во втората децимала од решението x грешката е:

>> x1 = [1.09 2.24]'


>> c1 = A*x1
>> raz1 = b - c1
>> err1 = norm(raz1)
>> err1 - err

x1 =
1.0900
2.2400
c1 =
4.4200
-1.1500
3.3300
raz1 =
-0.4200
0.1500
118 MATLAB/SIMULINK – упатство за вежби

0.6700
err1 =
0.8049
ans =
0.0031

Последната наредба ја пресметува разликата на двете грешки и јасно е дека


новата квадратна грешка е поголема од првата.

Пример 3.5.2:

>> A = [ 10 -7 0; -3 2 6; 5 -1 5]
>> b = [7 4 6]'
>> x = A\b
>> c = A*x
>> err = b-c

A=
10 -7 0
-3 2 6
5 -1 5
b=
7
4
6
x=
0
-1
1
c=
7
4
6
err =
0
0
0

Пример 3.5.3:

>> A = [ 1.0 0.8 0.64;1.0 0.9 0.81; 1.0 1.1 1.21]


>> b = [erf(0.8) erf(0.9) erf(1.1)]'
>> x = A\b
>> c = A*x
>> err = b-c

A=
1.0000 0.8000 0.6400
1.0000 0.9000 0.8100
MATLAB/SIMULINK – упатство за вежби 119

1.0000 1.1000 1.2100


b=
0.7421
0.7969
0.8802
x=
-0.0122
1.2937
-0.4386
c=
0.7421
0.7969
0.8802
err =
1.0e-015 *
0.1110
0
0

Во горниот пример erf(x) е вградена функција. Види ја дефиницијата


користејќи се со help erf. Грешката err е од редот на 10-15, што практично значи
дека е нула.

3.5.1 Гаусова метода на елиминација

Гаусовата метода или позната уште како Гаус-Јордан-ова метода, е


најпозната метода која задолжително се среќава во секој учебник на нумерички
методи. Поради својата едноставност и лесно програмирање таа нејчесто се
користи за решавање на системи со релативно мал број на равенки (30x30). Од
друга страна, во случај на мал број на равенки кои можат и рачно да се решат, оваа
метода задолжително се користи. Слаба страна на методата е нејзината нестабил-
ност при голем систем на равенки, затоа што нумеричките грешки се акумулираат
и може да се случи да се јави сунгуларност т.е. делење со нула. За вакви системи
развиени се посебни алгоритми а и самиот МАТЛАБ има вградени функции со кои
може да се избегне проблемот.

Функцијата gaussj е програма со кој се имплементира Gaus-Jordan методата.


Им се препорачува на студентите детално да ја анализираат програмата, бидејќи во
неа се искористени предностите на матричното и векторското сметање кои ги
овозможува MATLAB-от. Така на пример со една наредба (8 ред) се врши
векторско одземање што инаку со други класични програмски јазици би требало
да се користи додатен for циклус и да се одзема елемент по елемент.
120 MATLAB/SIMULINK – упатство за вежби

function X = gaussj(A,B)
%--------------------------------------------------------------
%GAUSSJ Gauss-Jordan metoda za resavawe na linearni ravenki
% Povikuvanje
% X = gaussj(A,B)
% Vlez
% A coeficienti na matricata
% B vector na desnata strana
% Izlez
% X vector na resenie
%----------------------------------------------------------------
[n n] = size(A); %1
A = [A';B']'; %2
X = zeros(n,1); %3
for p = 1:n, %4
for k = [1:p-1,p+1:n], %5
if A(p,p)==0, break, end %6
mult = A(k,p)/A(p,p); %7
A(k,:) = A(k,:) - mult*A(p,:); %8
end %9
end %10
X = A(:,n+1)./diag(A); %11

Пример 3.5.4:
>> A = [ 1.0 0.8 0.64;1.0 0.9 0.81; 1.0 1.1 1.21]
>> b = [erf(0.8) erf(0.9) erf(1.1)]'
>> x = gaussj(A,b)
>> c = A*x
>> err = b-c

A=
1.0000 0.8000 0.6400
1.0000 0.9000 0.8100
1.0000 1.1000 1.2100
b=
0.7421
0.7969
0.8802
x=
-0.0122
1.2937
-0.4386
c=
0.7421
0.7969
0.8802
err =
1.0e-015 *
MATLAB/SIMULINK – упатство за вежби 121

0.1110
0.1110
0.2220

Пример

>> A = [ 10 -7 0; -3 2 6; 5 -1 5]
>> b = [7 4 6]'
>> x = gaussj(A,b)
>> c = A*x
>> err = b-c

A=
10 -7 0
-3 2 6
5 -1 5
b=
7
4
6
x=
0
-1.0000
1.0000
c=
7.0000
4.0000
6.0000
err =
1.0e-013 *
-0.3109
0.1066
-0.0355

3.5.2 Итеративна метода (Gaus - Zajdel)

Оваа метода исто така доста често се користи, поради својата едноставност
и многу лесно програмирање. Може да се користи за системи со било која
големина но недостаток на методата е што претходно системот на линеарни
равенки прво треба да се трансформира во форма за итерација и при тоа треба да
биде задоволен условот за конвергенција.

Функцијата gseid е пример на една имплементација во MatLab-от нa Gaus-


Zejdel-овата метода.
122 MATLAB/SIMULINK – упатство за вежби

function [P,dP,Z] = gseid(A,B,P,delta,max1)


%-------------------------------------------------------------
% GSEID Gauss-Seidel iteraciona metoda
% Se povikuva
% [X,dX] = gseid(A,B,P,delta,max1)
% [X,dX,Z] = gseid(A,B,P,delta,max1)
%
% Vlez
% A mtricata na sistemot
% B vectorot na desnata strana
% P poceten vector na iteracija
% delta tolerancija na greska
% max1 maximalen broj na iteratcii
%
% Izlez
% X vector resenie
% dX greska vo sekoja iteracija
% Z matrica na resenija vo sekoja iteracija
%--------------------------------------------------------------
Z = P';
n = length(B);
Pold = P;
for k=1:max1,
for r = 1:n,
Sum1 = B(r) - A(r,[1:r-1,r+1:n])*P([1:r-1,r+1:n]);
P(r) = Sum1/A(r,r);
end
dP = abs(Pold-P);
err = norm(dP);
relerr = err/(norm(P)+eps);
Pold = P;
Z = [Z;P'];
if (err<delta)|(relerr<delta), break, end
end

Пример 3.5.5:

>> A = [ 10 1 1; 2 10 1; 2 2 10]
>> b = [12 13 14]'
>> x0 = [ 1.07 0.4 2.3]'
>> toler = 1.e-8
>> maxiter = 20
>> [x,DX,Z] = gseid(A,b,x0,toler,maxiter)
>> c = A*x
>> err = b-c
MATLAB/SIMULINK – упатство за вежби 123

A=
10 1 1
2 10 1
2 2 10
b=
12
13
14
x0 =
1.0700
0.4000
2.3000
toler =
1.0000e-008
maxiter =
20
x=
1.0000
1.0000
1.0000
DX =
1.0e-008 *
0.2106
0.0150
0.0451
Z=
1.0700 0.4000 2.3000
0.9300 0.8840 1.0372
1.0079 0.9947 0.9995
1.0006 0.9999 0.9999
1.0000 1.0000 1.0000
1.0000 1.0000 1.0000
1.0000 1.0000 1.0000
1.0000 1.0000 1.0000
1.0000 1.0000 1.0000
c=
12.0000
13.0000
14.0000
err =
1.0e-009 *
0.3013
0.4511
0
124 MATLAB/SIMULINK – упатство за вежби

Пример 3.5.6:
>> A = [ 8 1 1; 1 5 -1; 1 -1 5]
>> b = [26 7 7]'
>> x0 = [ 1.07 0.4 2.3]'
>> toler = 1.e-6
>> maxiter = 20
>> [x,DX,Z] = gseid(A,b,x0,toler,maxiter)
>> c = A*x
>> err = b-c
A=
8 1 1
1 5 -1
1 -1 5
b=
26
7
7
x0 =
1.0700
0.4000
2.3000
toler =
1.0000e-006
maxiter =
20
x=
3.0000
1.0000
1.0000
DX =
1.0e-005 *
0.1308
0.0940
0.0450
Z=
1.0700 0.4000 2.3000
2.9125 1.2775 1.0730
2.9562 1.0234 1.0134
2.9954 1.0036 1.0016
2.9993 1.0005 1.0002
2.9999 1.0001 1.0000
3.0000 1.0000 1.0000
3.0000 1.0000 1.0000
3.0000 1.0000 1.0000
c=
26.0000
7.0000
7.0000
MATLAB/SIMULINK – упатство за вежби 125

err =
1.0e-005 *
0.1389
-0.0450
0

Интересентно е да провериме дали почетниот вектор на итерацијата x0 =


[1.07 0.4 2.3]' има влијание на точноста и бројот на итерации. За таа цел
ќе почнеме со векторот x0 кој е далеку од решението.

>> A = [ 8 1 1; 1 5 -1; 1 -1 5]
>> b = [26 7 7]'
>> x0 = [ 107 -24 32]'
>> toler = 1.e-6
>> maxiter = 20
>> [x,DX,Z] = gseid(A,b,x0,toler,maxiter)
>> c = A*x
>> err = b-c

A=
8 1 1
1 5 -1
1 -1 5
b=
26
7
7
x0 =
107
-24
32
toler =
1.0000e-006
maxiter =
20
x=
3.0000
1.0000
1.0000
DX =
1.0e-006 *
0.4888
0.3509
0.1679
Z=
107.0000 -24.0000 32.0000
2.2500 7.3500 2.4200
2.0288 1.4782 1.2899
2.9040 1.0772 1.0346
126 MATLAB/SIMULINK – упатство за вежби

2.9860 1.0097 1.0047


2.9982 1.0013 1.0006
2.9998 1.0002 1.0001
3.0000 1.0000 1.0000
3.0000 1.0000 1.0000
3.0000 1.0000 1.0000
3.0000 1.0000 1.0000
c=
26.0000
7.0000
7.0000
err =
1.0e-006 *
0.5188
-0.1679
0

И во овој случај се добива точното решение со незначителен мал број на


додатни итерации (плус две), што укажува дека системот силно го задоволува
условот за конвергенција. Се охрабруваат студентите да на сличен начин пробаат
повеќе примери како би се здобиле со чувство за проблемот.

На крај да решиме уште еден пример од предавањата даден на страна 48.


При тоа ќе започнеме со трансформираниот систем даден на страна 49 со кој се
обезбедува конвергенцијата.

>> A = [ 65 17 -13 7
23 56 11 -19
-5 3 47 20
16 12 17 18]
>> b = [84 36 18 25]'
>> x0 = [ 1.07 0.4 2.3 0.5]'
>> toler = 1.e-8
>> maxiter = 100
>> [x,DX,Z] = gseid(A,b,x0,toler,maxiter);
>> [iter,m]=size(Z);
>> x,iter
>> c = A*x
>> err = b-c

A=
65 17 -13 7
23 56 11 -19
-5 3 47 20
16 12 17 18
b=
84
36
18
MATLAB/SIMULINK – упатство за вежби 127

25
x0 =
1.0700
0.4000
2.3000
0.5000
toler =
1.0000e-008
maxiter =
100
x =
1.6181
-0.3788
0.8241
-0.5752
iter =
33
c =
84.0000
36.0000
18.0000
25.0000
err =
1.0e-006 *
0.3173
-0.2172
0.1472
0.0000

3.6. МОДЕЛИРАЊЕ НА ПОДАТОЦИ

Под моделирање на податоци се подразбира определување на финкционал-


на зависност односно крива која “најдобро” го опишува трендот на множеството
на точки. За разлика од интерполацијата, каде кривата треба да поминува низ
зададените точки (податоци), при моделирањето т.е апроксимацијата17, кривата
треба “најдобро” да го опише трендот на податоците. Во статистиката оваа
постапка се нарекува регресија а кривата регресиона крива. Критериумот за
“најдобро” може да биде различит, но најчесто е тоа минималната вкупна
квадратна грешка ( на англиски least square error LSQ ).

17
Vo angliskata literatura ovoj vid na aproksimacija se narekuva "fitting". Vo na{iot jazik
soodveten prevod ne postoi zatoa ~esto mo`e da se sretne samiot zbor fiting. Najblisku do
prevodot e "aproksimacija" iako vo angliskata literatura zborot aproksimacija (aproximation)
e poseben zbor. Vo statistikata postapkata se narekuva regresija a krivata regresiona kriva.
128 MATLAB/SIMULINK – упатство за вежби

3.6.1 Полиномна регресија

Полиномната регресија за моделирање на податоците користи полиноми


како претпоставена теоретска крива. Користејќи го LSQ критериумот се
определуваат коефициентите на полиномот. Бидејќи овој тип на функции доста
често се користат МАТЛАБ-от има вградена m-функција за полиномна регресија
polyfit. Сепак ние ќе напишеме наша m-функција за полиномна регресија со цел
студентите подлабоко да навлезат во техниката на програмирањето.

Нека се зададени емпириските податоци y  ( y1 , y 2 ,...., y n ) кои соодвест-


вуваат на мерните места или точки x  ( x1 , x2 ,..., xn ) .Полиномната регресија се
состои во определувањето на коефициентите на полиномот

p(s)  ak x k  ak 1 x k 1  ....  a1 x  a0

така да пресметаните коефициенти ak, ak-1,...,a1,a0 даваат најмала вредност на


квадратната грешка.

S   j 1 ( p( x j )  y j ) 2
n

После определени математички операции проблемот се сведува на


решавање на систем на равенки.
 y1 
 y 
 ak   2 
a   y3 
 k 1 
' 
A A .   A  . 
'

   . 
 a1   
 a 0   y n 1 
y 
 n 

каде матрицата A има облик:


MATLAB/SIMULINK – упатство за вежби 129

 x1k x1k 1 . x1 1
 k 
 x2 x 2k 1 . x2 1
 x3k . x3k 1 . x3 1
 
A . . . . .
 . . . . .
 k k 1

 x n 1 x n 1 . x n 1 1
 xk x nk 1 1
 n . xn

Димензијата на матрицата A е (n,(k+1)) каде n е број на податоци а (k+1) е


број на непознати коефициенти, додека A' е транспонирана матрица на A.

M-функцијата polylsq е MATLAB програма со која се пресметуваат коефи-


циентите на полиномот.

function [C,Err]= polylsq(x,y,k)


%-------------------------------
% Polinomna regresija
% Vlez:
% y : vektor na podatoci
% x : vektor na tocki koi soodvestvuvaat na podatocite
% k : redot na polinomot
% Izlez:
% C : vektor na koeficienti
% Err : Vkupna kvadratna greska
%---------------------------------
% proveri dali x i y se vektor-koloni ako ne transformiraj gi vo vektor-koloni
[nr,nc] = size(y);
if nr == 1
y=y';
n=nc;
end

[mr,mc] = size(x);
if mr == 1
x = x';
m = mc;
end
n = length(y);
m = length(x);
if m ~= n
display(' x i y nemaat ist broj na podatoci'), break
end
A = zeros(n,k+1); %1
for j = 1:k+1 %2
A(:,j)= x.^(k+1-j); %3
130 MATLAB/SIMULINK – упатство за вежби

end %4
S = A'*A; %5
b = A'*y; %6
C = S\b; %7
Err = norm((y-A*C)); %8

Во рамките на for циклусот ( наредби 2-4) се генерира матрицата A. Со


наредбата 5 се формира матрицата A'A а со 6-та наредба, десната страна на
системот исто така се транансформира, множејќи ја со A'. Седмата наредба го
користи вградениот оператор \ за решавање на систем на линерани равенки со што
се добива решението за непознатите коефициенти. Осмата наредба ја пресметува
вкупната квадратна грешка.

Пример 3.6.1:

>> x =[0 1 2 3 4 5 6];


>> y =[ 2 3 5 5 8 9 10];
>> [C,Err]=polylsq(x,y,1)

C =
1.3929
1.8214
Err =
1.2956

Полиномот од прв ред кој во смисла на најмала вкупна квадратна грешка


(Err = 1.2956 ) ги моделира податоците е:

p( x)  1.3929 x  1.8214

Ако сакаме да користиме полином од повисок ред (пр. к=2) повикувањето


на m-функцијата би било со следниве параметри.

>> x =[0 1 2 3 4 5 6];


>> y =[ 2 3 5 5 8 9 10];
>> [C1,Err1]=polylsq(x,y,2)

C1 =
0.0119
1.3214
1.8810
Err1 =
1.2910

Разликата е во тоа што третиот параметар на m-функцијата polylsq е 2.


Грешката е нешто помала. Да пробаме со полином од трет степен.

>> x =[0 1 2 3 4 5 6];


MATLAB/SIMULINK – упатство за вежби 131

>> y =[ 2 3 5 5 8 9 10];
>> [C3,Err3]=polylsq(x,y,3)

C3 =
-0.0278
0.2619
0.7659
2.0476
Err3 =
1.2247

Во овој случај грешката Err3 = 1.2247 е најмала и би можеле да прифатиме


дека полиномот од трет степен по критериумот на грешка е најдобра полиномна
регресија. Секако може да се постави прашање ако некој од полиномите со
повисок ред даваат помала грешка зашто тој полином не се земе? Всушност,
изборот на конечниот полином во пракса, не зависи само од вредноста на грешката
веќе е од битно значење и неговиот ред. Имено во горните примери разликата во
грешките на полиномите од прв и трет ред се незначителни во однос на
манипулациите и пресметките кои треба во понатамошната анализа да се прават со
полиномите. Секако дека полиномот од прв ред е многу поедноставен од
полинимот од трет или повисок ред. Но во случај кога таа разлика е значителна
тогаш не треба да се избегнува полином од повисок ред.

Горната дискусија може и графички да се илустрира.


>> x1 = 0.0:0.2:6.2;
>> y1 = polyval(C,x1);
>> y3 = polyval(C3,x1);
>> plot(x,y,'o',x1,y1,'-',x1,y3,'--')

11

10

1
0 1 2 3 4 5 6 7

Сл.3.6.1.
132 MATLAB/SIMULINK – упатство за вежби

На горниот график, крукчињата се податоците, полната линија е регресијата


со полином од прв ред а испрекинатата линија е полиномот од трет ред. Јасно се
гледа дека и полиномот од прв ред задоволително добро ги апроксимира (фитира)
податоците.

На крај да ги провериме нашите резултати со вградената функција polyfit.

>> [C1,Q1] = polyfit(x,y,1)


>> [C2,Q2] = polyfit(x,y,2)
>> [C3,Q3] = polyfit(x,y,3)

C1 =
1.3929 1.8214
Q1 =
R: [2x2 double]
df: 5
normr: 1.2956
C2 =
0.0119 1.3214 1.8810
Q2 =
R: [3x3 double]
df: 4
normr: 1.2910
C3 =
-0.0278 0.2619 0.7659 2.0476
Q3 =
R: [4x4 double]
df: 3
normr: 1.2247
Резултатите се идентични, со тоа што во случајов грешката е означена со
normr.

3.6.2 Општа функциска регресија

Во претходниот дел како функции со кои се врши регресија земени се


полиномите од к-тиот степен. Но генерално може да се разгледуваат било кои
функции. Имено може најопшто да се дефинира кривата на следниот начин.

f ( x)  ak qk ( x)  ak 1qk 1 ( x)  ....  a1q1 ( x)

при што функциите qk(x) се одбираат така да задоволуваат дадени услови или пак
ја презентираат физиката на проблемот. Не постои некое правило за избор на
функциите но најчест критериум е физикалниот контекс на проблемот како и
искуството. Сега матрицата A би добила форма.
MATLAB/SIMULINK – упатство за вежби 133

 q k ( x1 ) q k 1 ( x1 ) . q 2 ( x1 ) q1 ( x1 ) 
 q (x ) q k 1 ( x 2 ) . q2 ( x2 ) q1 ( x 2 ) 
 k 2
 q k ( x3 ) q k 1 ( x3 ) . q 2 ( x3 ) q1 ( x3 ) 
 
A . . . . . 
 . . . . . 
 
q k ( x n 1 ) q k 1 ( x n 1 ) . q 2 ( x n 1 ) q1 ( x n 1 )
 q (x ) q1 ( x n ) 
 k n q k 1 ( x n ) . q2 ( xn )

Како најчести функции кои се користат, покрај полиномите, се


експонецијалните, бидејќи се во основа на поголем број физички закони.
Системот, претставен со горната матрица, се уште е линеарен, но понекогаш
се јавуваат и случаеви кога непознатите параметри ak, се во рамките на самите
функции qk. При такви регресии станува збор за нелинеарен проблем на најмали
квадрати (non-linear least sqyare NLSQ). Но понекогаш со одредени математички
трансформации проблемот може да се линеаризира. Например доста често се
користи следнава функција за регресија.

f ( x)  a1q1 ( x) kade q1 ( x)  e bx

каде покрај коефициентот a1 непознатиот параметар е и b кој е во рамките на


функцијата q1.

Но со логаритмирање на левата и десната страна проблемот може да се


линеаризира.
ln( f ( x))  ln a1  bx
или напишано во препознатлива форма:

y  c  bx каде y  ln( f ( x)) a c  ln( a1 )

Проблемот е сведен на полиномна регресија од прв ред, каде наместо


оригиналните податоци се користи нивниот природен логаритам. Тоа ни овозмо-
жува да ја искористиме m-функцијата polylsq.

Следниот пример е илустрација на претходниот коментар.

>> x = 0:0.1:3;
>> a = 5.5;
>> b=-1.2;
>> y = a*exp(b*x);
>> n=length(y);
>> z = rand(1,n)-0.2;
>> y1 = y+z;
>> plot(x,y1,'o')
134 MATLAB/SIMULINK – упатство за вежби

0
0 0.5 1 1.5 2 2.5 3

На графикот се покажани симулирани емпириски податоци. Тие се добиени


кога на теоретската вредност на функцијата y се додадени случајни вредности
помеѓу -0.2 и 0.2. Низ овие точки треба да се повлече експоненцијална крива y =
a*exp(b*x).

>> ylg = log(y1);


>> [C,Err] = polylsq(x,ylg,1)
>> alg = C(2)
>> breg = C(1)
>> areg = exp(alg)
>> yteor = areg*exp(breg*x);
>> plot(x,y1,'o',x,yteor,'-')

C=
-0.8863
1.5706
Err =
2.8748
alg =
1.5706
breg =
-0.8863
areg =
4.8095
MATLAB/SIMULINK – упатство за вежби 135

0
0 0.5 1 1.5 2 2.5 3

Од пресметките произлегува дека параметарот a добиен со регресијата


изнесува 4.8095 а параметарот b e -0.8863. Теоретските вредности се 5.5 и -1.2. На
горниот график покажани се симулираните емпириски податоци и регресионата
експоненцијална крива при што може да се забележи дека трендот на податоците е
задоволително “објаснет”, со регресионата крива.
136 MATLAB/SIMULINK – упатство за вежби

3.7. РЕШАВАЊЕ НА ОБИЧНИ ДИФЕРЕНЦИЈАЛНИ РАВЕНКИ


MATLAB/SIMULINK – упатство за вежби 137

4. ОСНОВИ НА SIMULINK

4.1. ШТО Е SIMULINK

SIMULINK е графичко проширување на MATLAB прикладно за модели-


рање и симулација на системи. Во SIMULINK, системите се цртаат на екранот
како блок дијаграми. Возмоѓни се голем број на блок дијаграми како што се: пре-
носни функции, суматори итн., исто така и виртуелни влезни и излезни елементи
како што се функциски генератори и осцилоскопи. Simulink е интегриран во
MATLAB и податоците можат лесно да бидат прансферирани помеѓу програмите.
Во ова упатство SIMULINK се применува на примери од упатството за MATLAB
за моделирање на системи, проектирање на контролери и симулација на системи.
SIMULINK е поддржан од опертативните системи Unix, Macintosh и Windows; и е
вклучен во студенската верзија на MATLAB за персонални компјутери.
SIMULINK поддржува линеарни, нелинеарни, временски дискретни и
континуирани, мултиваријабилни системи. SIMULINK заедно со MATLAB – от и
Control System toolbox –от формира потполн систем за анализа.

4.2. СТАРТУВАЊЕ НА SIMULINK

SIMULINK се стартува од командниот прозор на MATLAB (MATLAB


Command Windows) така што после знакот „>>“ треба да се отчука „simulink“ и
потоа да се притисне копчето Enter на тастатурата (види Сл.4.2.1)

Сл.4.2.1. Стартување на SIMULINK од командниот прозор


Алтернативно, SIMULINK може да се стартува со кликнување на копчето

.
И во двата случаеви ќе се отвори прозорот со библиотеката на блокови
(Simulink Library Browser) даден на Сл.4.2.3. Со кликнување на белото копче во
горниот лев агол на прозорецот ќе се отвори работното поле во кое може да го
цртаме нашиот Simulink модел (Сл.4.2.2).
138 MATLAB/SIMULINK – упатство за вежби

Сл.4.2.2. Работно поле во Simulink библиотека

Сл.4.2.3. Simulink библиотека


MATLAB/SIMULINK – упатство за вежби 139

4.3. ФАЈЛОВИ НА МОДЕЛОТ

Во Simulink, модел претставува колекција на блокови, кои воопшто, го


презентираат системот. Освен тоа, за цртање нов модел во празно работно поле
(Сл.4.2.2) може да се повика претходно нацтран модел којшто се наоѓа спремен во
соодветен работен директориум (напр. work) во MATLAB. Повикувањето на
претходно изработен фајл на моделот може да се направи од менито File или од
командниот прозор на MATLAB. Како пример, ќе го повикаме фајлот со име
mt_p42_01_Primer.mdl.

1) Повикување од командниот прозор (Сл.4.2.1)


После знакот >> го отчукуваме името на фајлот без екстензија:
>> mt_p42_01_Primer
и, после Enter ќе се појави фајлот (Симулинк моделот на Сл 4.3.1). При тоа
треба да сме позиционирани во работниот директориум во којшто се наоѓа
бараниот фајл.
2) Повикување од менито File
Го отвораме менито File, а потоа кликнуваме на Open при што ќе ни се отвори
работниот директориум каде лесно ќе го пронајдеме бараниот фајл -
mt_p42_01_Primer. mdl (в.Сл.4.3.2 и Сл.4.3.2.).

3) Користење на Ctrl+O
Истиот резултат ќе се добие ако се наоѓаме во MATLAB и ако на тастатурата
отчукаме Ctrl+O. Ке ни се отвори работниот директориум каде лесно ќе го најдеме
бараниот фајл - mt_p42_01_Primer.mdl

Сл.4.3.1. Фајлот во Simulink mt_p42_01_Primer кој може


да се отвори на еден од трите наведени начини
140 MATLAB/SIMULINK – упатство за вежби

Сл.4.3.2. Повикување на фајл изработен во Simulink

Отворениот фајл (Сл.4.3.1) на којшто е презентиран симулациски модел


на едноставен динамички систем опишан со преносна функција од прв ред може
да се симулира, или да се користи како основа за градење на нов модел кој ќе се
запамти под друго – новио име.

4.4. ОСНОВНИ ЕЛЕМЕНТИ – БЛОКОВИ И ЛИНИИ

Постојат две главни класи на објекти во Simulink: блокови (blocks) и


линии (lines). Блоковите се користат за генерирање, модифицирање, спојување,
излез и прикажување на сигнали. Линиите се користат за пренос на сигнали од
еден блок кон друг.

4.4.1. Блокови
На Сл.4.4.1. прикажан е основниот прозор на библиотеката на блокови
каде може да се видат сите основни групи блокови – тулбоксови во Симулинк за
МАТЛАБ верзија 6.5. Тулбоксовите содржат наменски блокови од определени
области кои се гледаат од насловите.
При стартувањето на Симулинк на еден од опишаните начини во точката
4.2., прво се отвора прозорот прикажан на Сл.4.4.1.а). Овде може да ги видиме
основните групи блокови во Simulink. Ако кликнемe (два пати) на Continuous ќе
ја видиме содржината на оваа група блокови за моделирање на континуални
системи (Сл.4.4.1. б) . На сличен начин може да се прегледа целокупната содржина
на Simulink библиотеката.
Преносот на некој од блоковите од поедина библиотека во работното поле
се остварува така што се кликнува со глушецот и држејќи го левото копче на
глушецот означениот блок се пренесува во работното поле.
MATLAB/SIMULINK – упатство за вежби 141

а) б)
Сл.4.4.1. Групи блокови во СИМУЛИНК (за МАТЛАБ 6.5)

Во Simulink постојат неколку општи класи на блокови:


 Континуални системи (Continuous) – блокови за временски континуални
системи,
 Нелинеарни блокови (Diskontinuities) – блокови за различни
нелинеарности во системите,
 Дискретни системи (Discrete) – блокови за временски дискретни системи
(преносни функции, модели во просторот на состојба итн.),
 Табели (Look-Up Tables) – блокови за моделирање табели (за системи со
променливи параметри и слично),
 Математички операции (Math Operations) – блокови за сите математички
операции кои се користат во симулациските модели,
 Блокови за конекција на сигнали (Signal Routing),
 Понори (Sinks) – за излез и прикажување на сигнали,
 Извори (Sources) – за генерирање на различни сигнали,
 Кориснички дефинирани функции (User Defined Functions)
и други.

Блоковите имаат од нула до неколку влезни терминали и нула до неколку


излезни терминали. Неупотребен влезен терминал е означен со мал отворен
триаголник. Неупотребен излезен терминал е означен со мала триаголна точка.
Блокот прикажан На Сл.4.4.2. има еден неупотребен влезен терминал и еден
неупотребен излезен терминал (терминал = крај, приклучок, клема).
142 MATLAB/SIMULINK – упатство за вежби

Сл. 4.4.2. Блок „Преносна функција“ се еден влезен нупотребен


и еден излезен неупотребен терминал.

4.4.2. Линии

Линиите пренесуваат сигнали во правец покажан со стрелката. Линиите


мораат секогаш да пренесуваат сигнали од излезниот терминал на еден блок до
влезниот терминал на другиот блок. Со исклучок на ова е линијата која го
издвојува сигналот од друга линија носејќи го на други два блока, како што е
покажано на Сл.4.4.3.

Сл. 4.4.3. Линија која го раздвојува сигналот на два крајни блока

Линиите никогаш неможат да уфрлат сигнал во друга линија:


линиите мора да се комбинираат со употреба на блокови како што се напр.
суматори.
Сигналот може да биде или скаларен сигнал или векторски сигнал. За
системи со еден влез и еден излез (SISO – Single-Input, Single – Output Systems),
општо се користат скаларни сисгнали. За системи со повеќе влезови и повеќе
излези (MIMO – Multi-Input, Multi–Output Systems), често се користат
векторски сигнали кои се состојат од два или повеќе скаларни сигнали.
Линиите кои се користат за пренос на скаларни или векторски сигнали се
идентични. Типот на сигнали што се пренесува по линијата е одреден со
блоковите на едниот или на другиот крај на линијата.

4.4.3. Едноставен пример

Моделот во примерот mt_p42_02_Primer (Sl.4.4.4) содржи три блока: Step,


Transfer function и Scope. Блокот Step претставува блок извор (source block) во
кој се генерира влезен сигнал u=S(t) во форма на одскочна (степ) функција. Овој
MATLAB/SIMULINK – упатство за вежби 143

сигнал се пренесува преку линијата во правец определен со стрелката до


преносната функција која е линеарен блок. Преносната функција го модифицира
нејзиниот влезен сигнал и на излезот дава нов сигнал y=y(t) кој преку линијата се
пренесува на блокот Scope којшто е блок понор (sink block). Блокот Scope се
користи за прикажување на сигналот слично какао на осцилоскоп.

Сл.4.4.4. Едноставен пример – систем со преносна функција од прв ред


Постојат повеќе видови на блокови во Simulink, а некои од нив ќе бидат
дискутирани подоцна. За сега ќе разгледуваме само три кои се употребени во
примерот на Сл.4.4.4.

4.4.4. Модифицирање на блоковите

Блоковите можат да се модифицирани со двојно кликнување на нив. На


пример, ако двапати се кликне на блокот “Transfer Fcn” на Сл.4.4.4. ќе се појави
следниов дијалог-прозорец.
Овој дијалог-прозорец содржи полиња за броителот и именителот на
преносната функција. Со внесување вектор кој ги содржи коефициентите на
зададените полиноми во броителот и именителот, преносната функција ќе биде
внесена. На пример, за промена на полиномот во именителот со s^2+2s+1, во
полето Denominator треба да се внесе: [1 2 1] и да се притисне копчето Close, posle
после што промената ќе биде извршена како на Сл.4.4.6.

Сл.4.4.5. Дијалог-прозорец за блокот “Transfer Fcn”


144 MATLAB/SIMULINK – упатство за вежби

Сл.4.4.6. Променет блок “Transfer Fcn”

Блокот "Step" исто така може два пати да се кликне при што ќе се отвори
следниов дијалог-прозорец.

Сл.4.4.7. Дијалог прозорец за блокот "Step"

Default параметрите во овој дијалог-прозорец генерираат "step" функција


која настанува во моментот t=1 sec, од почетното ниво 0 на ниво 1. (со други
зборови , единичен скок во t=1). Секој од овие параметри може да биде променет.
Овој дијалог-прозорец треба да се затвори пред да се продолжи со работа.
Најкомплициран од овие три блока е блокот "Scope" . Со двоен клик на
него се појавува празен екран на осцилоскоп прикажан на долната слика Сл.4.4.8.
MATLAB/SIMULINK – упатство за вежби 145

Сл.4.4.8. Празен екран на блокот "Scope"

Кога симулацијата е извршена, сигналот што доаѓа на блокот "Scope" ќе


биде прикажан на овој екран.. Подетално работата на блокот "Scope" нема да се
опишува во оваа точка. Единствено ќе се користи само функцијата за автоскали-
рање која се извршува со притискање на копчето означено со двоглед .

4.5. СТАРТ НА СИМУЛАЦИЈАТА

За да се стартува симулацијата, ќе работиме со следнииот фајл на моделот


со преносна функција од втор ред: mt_p42_03_Primer.mdl.
Се отвора овој фајл во Simulink следејќи ги претходните инструкции во
ова поглавје. Треба да се појави прозорецот на Сл.4.4.9.

Сл.4.4.9. Симулациски модел на систем од втор ред


146 MATLAB/SIMULINK – упатство за вежби

Пред да се стартува симулацијата на овој систем, прво може да се отвори


екранот на осцилоскопот со кликнување два пати на блокот Scope. Потоа за старт
на симулацијата треба да се кликне на копчето “Simulation”. Ќе се отвори менито
како на Сл.4.4.10.

Сл.4.4.10. Стартување на симулацијата

Со притискање на копчето „Start” симулацијата ќе почне и многу брзо ќе


заврши. На осцилоскопот ќе се појави сликата прикажана на Сл.4.4.11.

Сл.4.4.11. Резултат на симулацијата – Одговор на системот од втор ред


побуден со одскочна (или степ) функција.

Приметуваме дека излезот на системот има многу ниско ниво во однос на


оските на осцилоскопот. За да го поправиме ова го притискаме копчето за
автоматско скалирање означено со двоглед . Со тоа ќе се изврши прескалирање на
оските и ќе се добие одговор како на Сл.4.4.12.
MATLAB/SIMULINK – упатство за вежби 147

Сл.4.4.12. Прескалиран одзив на системот

Симулацијата можевме да ја старуваме и ако во прозорецот на моделот ги


притиснеме копчињата “Ctrl-T”. Ефектот ќе биде ист.
На Сл.4.4.12. забележуваме дека одзивот на степ побуда не почнува до t =
1. Ова може да се промени со кликнување два пати на блокот "step".
Сега ќе ги промениме параметрите на системот и системот повторно ќе го
симулираме. Со двоен клик на блокот "Transfer Fcn" го отвораме дијалог-
прозорецот на овој блок и поставуваме нови вредности во именителот на
преносната функција: [1 20 400]
Со преактивирање на симулацијата, сега може да пробаме со
притиснување на Ctrl-T, на осцилоскопот ќе добиеме рамна црта, но со
притиснување на копчето за автоматско скалирање (двоглед) ќе го добиеме
одзивот какао на Сл.4.4.13 б).

а) б)
Сл.4.4.13. а) нови параметри на системот, б) одзив на системот под а)

Може да приметиме дека копчето за автоскалирање ја менува само


вертикалната оска на осцилоскопот. Бидејќи новата преносна функција има многу
брз одзив, тој е компресиран во многу тесен дел од екранот на осцилоскопот. Ова
во суштина не е проблем на осцилоскопот туку е во врска со самата симулација.
148 MATLAB/SIMULINK – упатство за вежби

Simulink го симулирал системот за полни 10 секунди дури иако системот има


постигнато стационарна состојба за многу пократко време - после една секунда.
За да се корегира ова треба да се променат параметрите на самата
симулација. В о прозорецот на моделот влегуваме во менито Simulation и ја
селектираме опцијата Simulation Parameters . Ќе годобиеме дијалог-боксот на
Сл.4.4.14.

а) б)
Сл.4.4.14. Dialog-box Simulation Parameters а) стари параметри, б) нови параметри

Како може да се види, постојат повеќе опции за избор на параметрите за


симулација. Ние ке се концентрираме само на избор на времето за старт и стоп на
симулацијата (Simulation time: Start time … – Stop time…). На пример ќе извршиме
промена на времето за симулација и тоа Start time од 0.0 на 0.8 (бидејќи одзивот
на степ не се чувствува до t=1.0). Времето за стоп на симулацијата Stop time ќе го
промениме од 10.0 на 2.0 кое треба да биде кусо после смирувањето на системот.
Го затвораме дијалог-прозорецот и ја прстартуваме симулацијата. После
притискање на копчето за автоскалирање (двоглед) на екранот на осцилоскопот
треба да добиеме многу подобар приказ на одзивот на системот на степ побуда,
какао е прикажано на Сл.4.4.15.

Сл.4.4.15. Одзив на системот на Сл.4.4.14 а) на степ побуда


MATLAB/SIMULINK – упатство за вежби 149

4.6. ГРАДЕЊЕ НА СИСТЕМИ

Во оваа точка ќе научиме како се градат системи користејќи блокови за


градење од библиотеките на блокови што ги има Simulink (Simulink's Block
Libraries). Како пример ќе покажеме какао се гради системот што е прикашана на
Сл. 4.6.1.

Сл.4.6.1. Едноставен систем на автоматско управување

При градењето на системот најпрво треба да се соберат сите потребни


блокови од библиотеките на блокови (block libraries). Потоа се модифицираат
блоковите (им се подесуваат параметрите) така што тие треба да одговараат на
блоковите во дадениот модел. И на крај блоковите се поврзуваат со линии со што
се комплетира системот. После ова се симулира комплетниот систем за да се
верифицира дали работи.

4.6.1. Прибирање на блокови

Следете ги долните чекори за да ги соберете потребните блокови:


1) Влезете во Simulink (како во точка 4.2) и креирајте нов модел (со New од File
менито или со Ctrl-N, или со притискање на белото копче – празен лист)). Се
добива празен прозорец како на Сл 4.6.2. б) во кој ќе понатаму се соберат
потребните блокови и ќе се креира системот.
150 MATLAB/SIMULINK – упатство за вежби

а) б)

Сл.4.6.2. а) Дел од прозорот за избор на библиотеки во Симулинк,


б) Отворен празен прозорец за креирање на системот

На Сл.4.6.2. а) е прикажан главниот Simulink прозорец (кој е отворен со


кликнување два пати) на кој може да ги видиме основните библиотеки:
Continuous (континуални системи), Discontinuities, Discrete, Look-Up Tables,
Math Operations (математички операции), … , Signal Routing, Sinks (понори),
Sources (извори), User-Defined Functions. Болдираните библиотеки ќе ги
користиме за нашиот пример. На Сл.4.6.2. а) е исто така отворена библиотеката
Continuous и во десниот дел на прозорецот може да ја видиме нејзината содржина
(Derivative, Integrator, State Space, Transfer FCN, Transport Delay, Variable Transport
Delay, Zero-Pole). Останатите за нас потребни библиотеки може да ги отворите со
двоен клик и да ја видите нивната содржина.

2) Со двоен клик на Sources ја отвораме библиотеката со изворите кои се


користат за генерирање на сигнали (Сл.4.6.3.а). Нас ни треба генератор на степ
функција и затоа со глушецот курсорот го позиционираме на блокот “Step”, го
притискаме левото копче на глушецот и го држиме. Така држејќи го копчето
го повлекуваме блокот “Step” према отворениот празен прозорец каде го
отпуштаме. Со тоа во прозорецот за моделирање на системот го донесовме
првиот блок – изворот на степ сигнал (Сл.4.6.3.б). На ист начин ги
пренесуваме останатите потребни блокови од соодветните библиотеки.
3) Со двоен клик ја отвораме библотеката Math Operations (математички
операции), и од таму пренесуваме еден суматор (Sum) и еден засилувач
(Gain). Oва е прикажано на Сл.4.6.4.а)
MATLAB/SIMULINK – упатство за вежби 151

а) б)
Сл.4.6.3. а) Дел од библиотеката Sources (извори), б) Пренесен извор – степ
генератор во прозорот за градење на системот

а) б)

Сл.4.6.4. а) Пренесен суматор и засилувач од библиотеката Math Operations


(математички операции) , б) пренесени две преносни функции од библиотеката
Continuous (континуални системи)

4) Со двоен клик ја отвораме библотеката Continuous (континуални системи) и


од таму пренесуваме две преносни функции (за ПИ регулаторот и за објектот
види Сл.4.4.1). Ова е прикажано на Сл.4.6.4.б).
Од потребните елементи останува уште да донесеме инсрумент за
прикажување на одзивот на системот. Тоа го правиме во следниот чекор.
5) Со двоен клик ја отвараме библиотеката Sinks (понори) и од таму земаме
еден осцилоскоп (блок Scope). Со ова се комплетирани сите елементи
(блокови) за градење на системот.
Прозорот со сите елементи е прикажан на Сл.4.6.5.
152 MATLAB/SIMULINK – упатство за вежби

Сл.4.6.5 Прозор со сите блокови за градење на системот

Треба да се напомене дека точно центрирање на блоковите во прозорот не е


потребно. Тие после собирањето и модификацијата (подесувањето на
параметрите) лесно се распоредуваат со повлекување откако на блоковите ќе се
постави курсорот и ќе се дрзи левото копче на глушецот. Два блока не смее да
имаат исто име. Затоа на вториот блок Transfer Function автоматски на името му е
додаден индекс 1. Тоа се прави со сите идентични блокови доколку ги има повеќе
од 1. Името на блоковите подоцна може да се промени и да се напише име кое
одговара на содрзината/намената на блокот.

4.6.2. Модифицирање на блоковите

Треба да се направат следните чекори за да се модифицираат блоковите во вашиот


модел.
- Двапати кликнете на блокот за сумирање – Sum. Бидејќи вториот влез треба да
има знак минус во полето “List of signs” внесете +-. Затворете го дијалог-
прозорецот.
- Двапати кликнете на блокот „Gain“. Променете го засилувањето на 2.5 и
затворете го дијалог-прозорецот.
- Двапати кликнете на блокот „Transfer Fcn“. Променете го броителот во [1 2], а
именителот во [1 0]. Потоа затворете го дијалог-прозорецот.
- Двапати кликнете на блокот „Transfer Fcn1“. Поставе те го броителот на [1], а
именителот на [1 2 4]. Затворете го дијалог-прозорецот.
После модификацијата на блоковите, внесувајќи ги параметрите од моделот
што треба да го симулираме, елементите на системот изгледаат какао на
Сл.4.6.6.
MATLAB/SIMULINK – упатство за вежби 153

Сл.4.6.6. Прозор со модифицираните блокови

- Во овој чекор ги менуваме имињата на блоковите. Тоа се прави со кликнување


на постојното име при што се овозможува да се испише ново име кое одговара
на намената на блокот. Овде ќе ги промениме имињата на преносните
функции. Со кликнување на зборовите „Transfer Fcn“ го менуваме името на
блокот во “PI Regulator”. Потоа на исти начин го менуваме името на втората
преносна функција „Transfer Fcn1“ во “Objekt”. Едитирањето на имињата се
завршува со кликнување некаде надвор од името што го менуваме. После
промената на имињата прозорот со блоковите на системот изгледа какао на
Сл.4.6.7.

Сл.4.6.7. Прозор со променети имиња на блоковите

4.6.3. Поврзување на блоковите со линии

Сега кога блоковите се точно подесени тие треба да се поврзат помеѓу себе. За
поврзување треба да се направат следниве чекори.
- Со глувчето курсорот го донесуваме на излезот на блокот „Step“. Кога ќе се
појави крст го стиснуваме левото копче на глувчето и држејќи го повлекуваме
154 MATLAB/SIMULINK – упатство за вежби

линија кон првиот влез во суматорот. Чим ќе се појави крст со дупли линии
тоа е знак дека спојот ќе биде направен и го отпуштаме левото коппче на
глувчето. Спојот можеше да се направи и во спротивна насока, прво да се
позициониравме на влезот во суматорот (ќе се појави крст и стрелката на
линијата) , а потоа, со притиснато лево копче на глушецот, влечеме линија кон
излезот од блокот „Step“. Резултатот ќе биде ист и ќе изгледа како на Сл.4.6.8.

Сл.4.6.8. Изглед на поврзувањето на два блока

- На сосема ист начин продолжуваме да ги поврзуваме другите блокови.


Линиите мора да извираат од излезните терминали на блоковите и да
завршуваат со стрелка на влезните терминали на блоковите. Не смее да виси
ниту една стрелка во воздух, бидејќи тоа значи дека спојот не е направен. По
поврзувањето на плоковите прозорот на моделот изгледа какао на Сл. 4.6.9.

Сл.4.6.9. Изглед на прозорот после поврзувањето на блоковите

- Линијата која остана ненацртана е повратната врска од излезот на објектот до


негативниот влез на суматорот. Оваа линија се разликува од претходните од
MATLAB/SIMULINK – упатство за вежби 155

две причини. Прво бидејќи оваа линија го поврзува излезот и влезот на


системот таа не може да се повлече како права линија туку мора да биде барем
два пати прекршена и затоа мора да се нацрта во неколку етапи. Второ, не
постои излезен терминал од кого се стартува, така линијата мора да излегува
од постоечка линија. За цртање на оваа линија курсорот го поставуваме на
линијата измеѓу блоковите “Objekt” и“Scope”, го притискаме копчето Ctrl и
држиме, а потоа го притискаме левото копче на глушецот (ќе се појави крст на
линијата) и држејќи го повлекуваме линија надолу и лево. Резултатот на оваа
операција е прикажан на Сл.4.6.10.

Сл.4.6.10. Изглед на прозорот после повлекување линија за повратната врска

- Сега на оваа парцијална испрекината линија имаме отворена стрелка која


може да се третира како излезен терминал. Од оваа стрелка-терминал
повлекуваме линија до негативниот влез на суматорот на вообичаен начин.
Системот со затворена повратна врска е прикажан на Сл.4.6.11.

Сл.4.6.11. Изглед на прозорот после затворањето на повратната врска


156 MATLAB/SIMULINK – упатство за вежби

- Сега, после спојувањето на сите блокови и затворањето на повратната врска


добиен е системот на Сл.4.6.11. До сега не водевме сметка за естетскиот
изглед на сликата туку само за изборот на блоковите, модификацијата и
коректното поврзување. Следи фаза на дотерување на сликата што подрзбира
порамнување на блоковите, нивно зголемување или смалување, исправување
на линиите и разместување на блоковите на прикладна оддалеченост. Ова се
работи така што се доведува курсорот на избраниот блок, се стиснува левото
копче на глушецот и се држи. Влечејќи го глушецот блокот можеме да го
поместуваме во кој било правец. Така имаме можност за порамнување на
блоковите и за исправување на линиите како и за разместување на блоковите
на прикладна оддалеченост. Зголемувањето или смалувањето на блоковите се
врши така што прво ги маркираме со кликнување и отпуштање на левото
копче на глушецот по претходно позиционирање на одбраниот влок.
Маркираниот блок го зголемуваме (смалуваме) доведувајќи го курсорот на
еден од аглите на блокот при што ќе се појави коса црта со две стрелки во чии
насоки го повлекуваме глушецот со цел да го зголемиме (или смалиме)
блокот. Резултатот од наведените активности е прикажан на Сл.4.6.12.

Сл.4.6.12. Изглед на системот после дотерувањето на сликата

- Конечно, останува да се испишат одредени ознаки и натписи на сликата. Се


испишуваат ознаките на сигналите во системот, а може да се стават и било
какови натписи или поголем текст за одредени појаснувања. За да се постави
било каков знак или натпис се кликнува два пати на точката каде што сакаме
да биде испишан текстот. Ознаките на сигналите ги ставаме над линиите што
ги поврзуваат блоковите. Со двоен клик над линијата се отвора празно
прозорче во кое ја пишуваме ознаката или текстот. На овој начин на Сл.4.6.13
се испишани сигналите: r – референтен сигнал, e – сигнал на грешка, u –
управувачки сигнал, y – излезен сигнал.
MATLAB/SIMULINK – упатство за вежби 157

Сл.4.6.13. Изглед на системот со испишани ознаки на сигналите

- За да се зачува моделот во менито File се селектира командата Save As и


јајлот се спрема на определен директориум под соодветно израно име. Ние
фајлот ќе го спремиме под име mt_p46_02_primer.mdl. Името на фајлот при
секое негово повикување ќе биде испишано во горниот лев агол (види
Сл.4.6.14).

Сл.4.6.14. Симулациски модел на системот на автоматско управување


спремен на фајл со име mt_p46_02_primer.mdl

Симулацискиот модел на системот прикажан на Сл.4.6.14 дефинитивно е


направен какао треба и сега може да се стартува симулацијата.
158 MATLAB/SIMULINK – упатство за вежби

4.6.4. Симулација

Сега пошто симулацискиот модел е комплетен, може да се врши негова


симулација. Во менито Simulation се селектира опцијата Start за да се стартува
симулацијата. Со двоен клик на блокот Scope се гледа излезот. Се кликнува
копчето за автоскалирање (двоглед) при што се добива одзивот прикажан на
Сл.4.6.15.

Сл.4.6.15. Одзив на системот на степ побуда

4.6.5. Земање варијабли од MATLAB

Во некои случаеви, параметри, какао што е засилувањето, може да бидат


пресметани во МАТЛАБ и потоа да се употребат во Simulink моделот. Во овој
случај не е потребно резултатот да се внесува директно во Симулинк. На пример,
да претпоставиме дека во МАТЛАБ сме го пресметале засилувањето содржано во
варијаблата K. Ова може да го имитираме со внесување на следната команда во
командниот прозор на МАТЛАБ:

>> K=2.5

Овa варијабла сега може да се употреби во Simulink во блокот „Gain“. Во


нашиот симулинк модел, со двоен клик на блокот „Gain“ се отвора следниот
дијалог-бокс во кој, во полето Gain пишуваме К наместо неговата бројна вредност.
MATLAB/SIMULINK – упатство за вежби 159

Сл.4.6.16. Задавање вредности на параметарот К од


командниот прозор на МАТЛАБ

Го затвораме дијалог прозорецот. Во симулацискиот модел во блокот Gain


ќе стои ознаката К наместо бројка (Сл.4.6.17).

Сл.4.6.17. Задавање на параметар (засилување) од командниот прозор на МАТЛАБ

Сега може да се рестартира симулацијата и да се види излезот на


осцилоскопот „Scope“. Резултатот треба да биде истиот како порано. Ако се
споредат Сл.4.6.15 и новодобиената слика Сл.4.6.18.
160 MATLAB/SIMULINK – упатство за вежби

Сл.4.6.18. Одзив на системот со засилување К=2.5 зададено


од командниот прозор на МАТЛАБ

Задавањето на параметрите на системот од командниот прозор на МАТЛАБ


овозможува да ги менуваме вредностите на параметрите без да интервенирами во
Симулинк моделот. Така на пример сега мо\е да го промениме засилувањето К
задавајки во командниот прозор нова вредност:
>> К=5
и да ја стартуваме симулацијата. Повторувајќи ја постапката за стартување како
што беше претходно направено, го добиваме новиот резултат – одзивот на Сл.
4.6.19.

Сл.4.6.19. Одзив на системот со засилување К=5 зададено


од командниот прозор на МАТЛАБ

Освен варијабли, сигнали и дури цели системи може да бидат разменети


помеѓу МАТЛАБ и Симулинк.
MATLAB/SIMULINK – упатство за вежби 161

5. МОДЕЛИРАЊЕ И СИМУЛАЦИЈА НА ДИНАМИЧКИ СИСТЕМИ

Динамичките перформанси на физикалните системи се добиваат со


примена на физикалните закони на механиката, електротехниката, механиката на
флуиди, термодинамиката итн. Воопшто физикалните динамички системи се
опишуваат со диференцијални равенки кои можат да бидат нелинеарни или
линеарни. Доколку е можно се настојува описот да биде направен со линеарни
диференцијални равенки со константни коефициенти. Повеќе за моделирањето на
динамичките системи ќе биде дадено на предавањата.

5.1. МЕХАНИЧКИ СИСТЕМИ

Пример 5.1.1. Механички систем со маса, пружина и придушувач

Системот е даден на Сл. 5.1.1.

m - masa
k - konstanta na pru`inata Dijagram na slobodno telo
c - koeficient na viskozno pridu{uvawe
k
kx
F (t ) F (t )
c m m
cx

Trieweto na trkalata so
podlogata se zanemaruva
x

Сл. 5.1.1. Механички систем со маса, пружина и придушувач

Со примена на вториот Њутнов закон за движењето на масата на Сл. 5.1.1


во насока на x оската се добива следнава равенка:

d 2x dx
m 2
 c  kx  F (t ) (5.1.1.)
dt dt
или

d 2 x c dx k 1
2
  x  F (t ) (5.1.2)
dt m dt m m
каде се:
162 MATLAB/SIMULINK – упатство за вежби

F(t) - надворешна сила наложена на масата;


kx - сила на пружината, к – константа на пружината,
dx
c  cx - придушна сила на цилиндерот, c – коефициент на придушување,
dt
Сега равенката (5.1.2) може да се напише во форма:

c k 1
x   x  x  F (t ) (5.1.3)
m m m
Состојбата на механичкиот систем на Сл.5.1.1 се карактеризира со
позицијата на масата одредена со поместувањето x и со брзината ма масата
одредена со dx / dt  x . Ако овие варијабли на состојба ги означиме со:
x1  x
(5.1.4)
x2  x
тогаш диференцијалната равенка од втор ред (5.1.3) може да се запише во форма
на систем со две диференцијални равенки од прв ред, односно:
x1  x2
1 (5.1.5)
x 2  [ F (t )  cx 2  kx1 ]
m
Нека во почетокот (t=0) , до кога масата била во мирување, почне да
делува константна сила F(t)=25N . Нека се останатите параметри на системот:
N
m  1[kg], k  25[ N / m], c  5[ ]
m/ s
Потребно е да се направи програма во МАТЛАБ за симулација на
механичкиот систем и да се нацртаат одзивите – варијаблите на состојба во
функција на времето како и граф во фазната рамнина.

Во МАТЛАБ за решавање на диференцијални равенки прво се формира


М-фајл функција во кој се пресметуваат десните страни на диференцијалните
равенки, а потоа се формира главна програма М-фајл во кој се дефинираат
условите за симулација, се повикува соодветна рутина за интеграција (ode23 или
друга), и се дефинира цртањето на одѕивите.

Функција fc_mehsist.m:
%
function dx = fc_mehsyst(t,x); % Gi presmetuva izvodite na varijablite na sostojba
%
% Parametri na sistemot
F = 25; % Nadvoresna sila - Step vlez [N]
m =1; % Masa [kg]
c = 5; % Koeficient an prigusniot element [N/m/s]
k = 25; % Koeficient na pruzinata [N/m]
%
% Presmetka na desnite strani na diferencijalnite ravenki
dx = [x(2) ; 1/m*( F - c*x(2) - k*x(1))];
MATLAB/SIMULINK – упатство за вежби 163

М – фајл: mt_p51_01_fc_mehsist.m
% Glavna programa: Mehanicki sistem-Masa pruzina-prigusuvac
% Ime na fajlot: mt_p51_01_fc_mehsist.m
% Funkcii: fc_mehsist.m
%
t0 = 0; % Pocetno vreme
tf = 3; % Konecno vreme
x0 = [0, 0]; % Pocetni uslovi
tol = 0.001; % Tocnost
trace = 0; % Ako ne e nula, sekoj cekor se pecati
%
% Integracija na diferencijalnite ravenki:
[t,x] = ode23('fc_mehsist',t0,tf,x0,tol,trace);
%
% Crtanje na rezultatite:
subplot(211),plot(t,x)
title('Vremenski odziv na meh.translatoren sistem')
xlabel('t [s]')
text(2,1.2,'Pomestuvanje d')
text(2,.2,'Brzina v')
%
d = x(:,1); % Pomestuvanje
v = x(:,2); % Brzina
%
subplot(212), plot(d, v)
title('Brzinata V vo funkcija na pomestuvanjeto d')
xlabel('Pomestuvanje d')
ylabel('Brzina V')
%

Сл. 5.1.2.
164 MATLAB/SIMULINK – упатство за вежби

Пример 5.1.2. Нишало

Се разгледува едноставно нишало илустрирано на Сл. 5.1.3. каде метална


топка со тежина G  mg[kg] е обесена во точката О со бестежински стап долг L
[m]. Системот реално е нелинеарен и вклучува вискозно пригушување со
N
коефициент на придушување C [ ].
m/ s
Ако е  [rad ] агол на отклонот на стапот од рамнотежната состојба,
брзината на крајот на стапот (брзината на топката) ќе биде VT  x  L и
тангенцијалната сила која делува во насока на прирастот на аголот (во насока на x
оската на Сл.5.1.3) ќе биде:

FT  G sin   CL

O

L

FN +x

M mx  mL  FT
 G sin
m
 Cx G cos
x  VT  L

G  mg

Сл.5.1.3. Нишало

Од вториот Њутнов закон следи:


mL  FT

Комбинирајќи ги горните две равенки за силите се добива:

mL  CL  G sin   0


MATLAB/SIMULINK – упатство за вежби 165

Ова е нелинеарна диференцијална равенка од втор ред. Ако воведеме


ознаки за варијаблите на состојба на системот: x1   (аголна позиција на ниша-
лото) и x2   (аголна брзина), тогаш горната равенка може да се запише во фор-
ма на систем од две диференцијални равенки од прв ред:
x1  x2
C G
x 2   x2  sin x1
m mL
Горните равенки се погодни за решавање во MATLAB. Затоа прво се фор-
мира M-file функција fc_nisalo.m во која се пресметуваат десните страни (изво-
дите), а потоа се креира M-file главна програма mt_p51_02_fc_nisalo.m. Овие два
фајла се дадени подолу.

M-File: Функција
%
function dx = fc_nisalo(t,x); % Presmetuvanje na izvodite
% na varijablite na sostojba
% Parametri na nisaloto
%
G = 2; % Tezina na nisaloto[N]
L = 0.6; % Dolzina na stapot [m]
C = 0.02; % Koeficient na prigusuvanje [N/m/s]
g0 = 9.81; % Zabrzuvanje na zemjinata teza [m/s^2]
m = G/g0; % Masa na nisaloto [kg]
%
% Presmetka na desnite strani na dif. ravenki
%
dx = [x(2); (-C/m)*x(2)-G/(m*L)*sin(x(1))]; % dx = d/dt(x)
%
% GLAVNA PROGRAMA
% SUL_PrV2_2_fc_nisalo.m
%
clg
%
t0 = 0; % pocetno vreme
tf = 5; % krajno vreme
x0 = [1, 0]; % pocetni uslovi
tol = 0.0001; % tocnost
trace = 0; % ako ne e nula sekoj cekor se pecati
%
% Integracija na dif. ravenki
[t,x] = ode23('fc_nisalo',t0,tf,x0,tol,trace);
%
% Crtanje na varijablite:
%
subplot(211),plot(t,x), grid
166 MATLAB/SIMULINK – упатство за вежби

title('Vremenski odgovor na nisalo so krut stap')


xlabel('t [s]')
text(3.2,3.1,'Brzina [m/s]')
text(3.2,1.2,'Agol [rad]')
%
teta = x(:,1); % Agolna pozicija
dteta = x(:,2); % Agolna brzina
%
subplot(212),plot(teta, dteta), grid
title('Graf na nisaloto vo faznata ramnina')
xlabel('Agolna pozicija [rad]')
ylabel('Agolna brzina [rad/s]')
%
Фаријаблите на состојба во функција на времето и во фазната рамнина се
нацртани на графиците на Сл. 5.1.4. и Сл. 5.1.5. при што се направени две
симулации со различно конечно време на интеграција tf. Во овој пример е
покажано какао на една слика се цртаат два графа. Исто така примерот покажува
какао се решаваат нелинеарни диференцијални равенки.

Сл. 5.1.4. Одѕиви на нишалото на Сл. 5.1.3. (tf=5 s)


MATLAB/SIMULINK – упатство за вежби 167

Сл. 5.1.5. Одѕиви на нишалото на Сл. 5.1.3. (tf=20 s)


168 MATLAB/SIMULINK – упатство за вежби
MATLAB/SIMULINK – упатство за вежби 169

6. СИСТЕМИ НА УПРАВУВАЊЕ (CONTROL SYSTEM TOOLBOX)

6.1. ПОЛИНОМИ

Полиноми се континуирани функции кои претставуваат линерана комбина-


ција на мономи. Например полиномот
p( s )  s 3  2s  5
е полином од трет степен.
Во MATLAB-от, полиномот се претставува со помош на вектор-ред кој ги
содржи коефициентите на полиномот тргнувајќи од најголемиот до најмалиот
степен.
>> p = [ 1 0 -2 -5]
p =
1 0 -2 -5
Коефициентите кои не се присутни во полиномот се зададат со нула на
нивното соодветно место.
Од повеќето функции за работа со полиноми ќе ги спомнеме следниве:

РБ Функција Опис
1. conv множење на полиноми
2. deconv делење на полиноми
3. poly определување на полином ако се знаат нулите
4. roots определување на нулите на полином
5. polyval пресметување на вредноста на полином
6. polyder диференцирање на полином
7. polifit определување на полином со кој се апроксимираат
дадени податоци
8. polivalm пресметување на вредностите на матричен полином
9. residue развој на парцијални дропки (резидуали)

6.1.1. Нули на полиномот

Функцијата roots пресметува нули на даден полином т.е. ја определува


вредноста на независната променлива за која полиномот добива нулта вредност.
Нулите на полиномот се определуваат со, при што функцијата roots ги пресметува
и комплексните корени:

>> p = [ 1 0 -2 -5]
>> r = roots(p)
170 MATLAB/SIMULINK – упатство за вежби

r =
2.0946
-1.0473 + 1.1359i
-1.0473 - 1.1359i

Пример 6.1.1.: Najdi gi korenite na polinomot:

s 6  9s 5  31.25s 4  61.25s 3  67.75s 2  14.75s  15


Matlab re{enie:

>> p2=[1 9 31.25 61.25 67.75 14.75 15];


>> r = roots(p2)

r=
-4.0000
-3.0000
-1.0000 + 2.0000i
-1.0000 - 2.0000i
0.0000 + 0.5000i
0.0000 - 0.5000i

По дефиниција, нулите на полиномот се памтат како вектор-колона. Обрат-


на функција на roots е функцијата poly. Со неа се опредлеуваат коефициентите на
полиномот ако се познати неговите нули.

>> r =[2.0946, -1.0473 + 1.1359i, -1.0473 - 1.1359i];


>> p1 = poly(r)

p1 =
1.0000 -0.0000 -2.0000 -5.0000

Пример 6.1.2.
>> r2 = [ -4.0, -3.0, -1.0 + 2.0i, -1.0 - 2.0i, 0.0 + 0.5i, 0.0 - 0.5000i];
>> p2 = poly(r2)

p2 =
1.0000 9.0000 31.2500 61.2500 67.7500 14.7500 15.0000

roots и poly се инверзни функции една на друга до ниво на скалирање (множење


на целиот полином со некој број) и грешката на заокружување. Фунцијата poly
исто така се користи и за пресметување на карактеристичниот полином за дадена
матрица за да потоа со користење на roots се определат и сопствените вредности
на матрицата [9]
MATLAB/SIMULINK – упатство за вежби 171

>> A = [ -5.0 -52.06; 0.092 -0.433];


>> p3 = poly(A)
>> r3 = roots(p3)

p3 =
1.0000 5.4330 6.9545
r3 =
-3.3683
-2.0647

6.1.2 Пресметување на вредноста на полиномот

Функцијата polyval ја пресметува вредноста на полиномот за дадени


вредности на независната променлива. Например вредноста на пoлиномот
p( x)  x 3  2 x  5 за x = 5 ќе биде:
>> p = [1 0 -2 -5];
>> polyval(p,5)

ans =
110

Можна е следната наредба:

>> x = [ 0.1 0.5 1 2 3 4 5];


>> v = polyval(p,x)

v =
-5.1990 -5.8750 -6.0000 -1.0000 16.0000
51.0000 110.0000
Вредностите на полиномот се пресметани за секоја зададена вредност на x.

6.1.3 Множење (конволуција) и делење ( деконволуција) на полиноми

Множењето и делењето на полиноми кореспондира на операциите конволу-


ција и деконволуција. За овие две операции се користат функциите conv и deconv.
Како пример да ги помножиме следниве два полинома:

a(s)  s 2  2s  3 i b(s)  4s 2  5s  6

>> a = [ 1 2 3]; b = [ 4 5 6];


>> c = conv(a,b)

c =
4 13 28 27 18
172 MATLAB/SIMULINK – упатство за вежби

Ако сега полиномот со коефициентите дадени преку вектор-редот c се


подели со a треба да се добие полиномот b.

>> [q,r] = deconv(c,a)

q =
4 5 6
r =
0 0 0 0 0

Вектор-редот r е полином на остатокот. Бидејќи неговите коефициенти се


нула произлегува дека векторите се делат без остаток а резултатниот полином
количник даден е со векторот q.

6.1.4. Развој на парцијални дропки

Рационална функција е однос (количник) на два полинома која има


форма:

Bs  bm s m  bm1s m1  ...  b1s  b0


H s    . (1)
As  an s n  an1s n1  ...  a1s  a0

За m  n ,
H (s) е позната како права (proper) рационална функција, а за
m  n функцијата H (s) е позната како неправа (improper) рационална
функција.
Ако се означат корените на полиномот во именителот со p1, p2 , ..., pn
тогаш именителот A(s) може да се запише во факторизирана форма:
As   an s  p1 s  p2 ...s  pn  , (2)

а H (s) може да се запише како:


Bs  Bs 
H s    n , (3)

As  a s  p1 s  p2 ...s  pn 

Развојот на парцијални дропки е техника за развој на H (s) во форма


на сума од елементарни членови.
За развој на парцијални дропки се користи функцијата residue чија
примена ќе биде покажана подолу.
MATLAB/SIMULINK – упатство за вежби 173

Различни и реални корени

Кога корените p1 , p2 , ... , pn се раззлични и реални, тогаш со развојот на


парцијални дропки функцијата H (s) може да се изрази како

H s  
K1 K2 Kk Kn
  ...   ...  , (4)
s  p1 s  p2 s  pk s  pn
каде константите K k се нарекуваат резидиуми (остатоци) кои може да бидат
пресметани со командата residue:
[k,p]=residue(b,a)
која ги пресметува резидијумите: k  [ K1, K 2 , ..., K n ] и корените на
карактеристичниот полином p  [ p1, p2 , ..., pn ] .

Пример 6.1.3:
s2
H ( s) 
s  4s 2  3s
3

>> b = [1 2];
>> a = [1 4 3 0];
>> [k,p] = residue(b,a)

k=
-0.1667
-0.5000
0.6667
p=
-3
-1
0
1 1 2
0.1667 0.5000 0.6667
H ( s)      6  2  3
s  (3) s  (1) s0 s  3 s 1 s

Различни комплексни корени


s 2  2s  1
H ( s) 
s 3  3s 2  4s  2
>> b = [1 -2 1];
>> a = [1 3 4 2];
>> [k,p = residue(b,a)

k=
-1.5000 + 2.0000i
-1.5000 - 2.0000i
4.0000
174 MATLAB/SIMULINK – упатство за вежби

p=
-1.0000 + 1.0000i
-1.0000 - 1.0000i
-1.0000

 1.5  j 2  1.5  j 2 4
H (s)   
s 1 j s 1 j s 1

Корени што се повторуваат


Во овој случај кога m  n функцијата H (s)

B( s)
H ( s) 
A( s)
може да се изрази како
Kp K p 1
H s  
K1 K2 Kn
  ...   ... .....  , (5)
s  p1 ( s  p1 ) 2
( s  pk ) p s  p p 1 s  pn

Пример 6.1.4:
5s  1
H ( s) 
s  3s  2
3

>> b = [5 -1];
>> a = [1 0 -3 -2];
>> [k,p] = residue(b,a)

k=
1.0000
-1.0000
2.0000
p=
2.0000
-1.0000
-1.0000
1 1 2
H ( s)   
s  2 s  1 ( s  1) 2
MATLAB/SIMULINK – упатство за вежби 175

Развој на неправи рационални функции

Се разгледува рационална функција


B( s)
H ( s) 
A( s)
во која степенот на полиномот B(s) е поголем од степенот на полиномот
A(s), (m  n).
Со делење на полиномите , H (s) може да се запише во форма:
R( s )
H ( s )  Q( s ) 
A( s)
каде количникот Q(s ) е полином од ѕ со степен m  n и остаток R(s) којшто е
полином со степен стриктно помал од n . Така R(s) / A(s) е права рационална
функција која може да биде развиена во парцијални дропки.
Развојот на парцијални дропки на неправа рационална функција во
МАТЛАБ се пресметува со примeна на наредбата residue во форма:
[k,p,q]=residue(b,a). Оваа функција ги идредува резидуите k  [ K1, K 2 , ..., K n ] ,
корените (половите) p  [ p1, p2 , ..., pn ] и коефициентите од делењето на двата
полиноми q  [q1 , q2 , ... , qnm ] .

Пример 6.1.5.:
s 3  2s  4
H (s) 
s 2  4s  2

>> b = [1 0 2 -4];
>> a = [1 4 -2];
>> [k,p,q] = residue(b,a)

k=
20.6145
-0.6145
p=
-4.4495
0.4495
q=
1 -4
20.6145 0.6145
H ( s)  s  4  
s  4.4495 s  0.4495
176 MATLAB/SIMULINK – упатство за вежби

Добивање рационална функција – инверзна операција на претходната

Ако се зададени резидуите k  [ K1, K 2 , ..., K n ] , корените


p  [ p1, p2 , ..., pn ] и коефициентите q  [q1, q2 , ..., qn  m ] тогаш со наредбата
[b,a] = residue(k,p,q) се добива рационалната функција
B( s)
H ( s)  .
A( s)

Пример 6.1.6. Го земаме претходниот пример:

>> k = [20.6145 -0.6145];


>> p = [ -4.4495 0.4495];
>> q = [ 1 -4];
>> [b,a] = residue(k,p,q)

b=
1.0 0.0 2.0 -4.0
a=
1.0 4.0 -2.0

s 3  2s  4
H ( s) 
s 2  4s  2
MATLAB/SIMULINK – упатство за вежби 177

6.2. ФУНКЦИИ ЗА ОДРЕДУВАЊЕ НА ЛАПЛАСОВАТА ТРАНСФОР


МАЦИЈА И ЗА ДЕФИНИРАЊЕ НА LTI СИСТЕМИ:
laplace, tf, ss , pole, zero, еoператори: ‘s’ и ‘z’

6.2.1 Функција laplace

Со функцијата laplace се одредува Лапласовата трансформација од


временски функции – оригинали. Со долните примери се покажува нејзината
примена.

Пример 6.2.1:
Да се одреди Лапласовата трансформација од следниве функции:
x  e2t , x  a sin(t ), x  a sin(t )  b cos(t )
__________________
% Laplace_1.m
clear; pack; clc
syms x t
x = exp(-2*t);
X = laplace(x)
Одговор на Матлаб:
X=
1/(s+2)

(syms – кратенка за конструирање симболички објекти – формули)

___________________
% Laplace_2.m
clear; pack; clc
syms x t a w
x = a*sin(w*t);
X = laplace(x)

X=
a*w/(s^2+w^2)

__________________
% Laplace_3.m
clear; pack; clc
syms x t a b w
x = a*sin(w*t)+b*cos(w*t);
X = laplace(x)

X=
a*w/(s^2+w^2)+b*s/(s^2+w^2)
178 MATLAB/SIMULINK – упатство за вежби

Функции за дефинирање на LTI (Linear Time Invariant) системи:

6.2.2 Функција tf

Континуални системи:
форма: G=tf(num,den)
аргументи: num – вектор на коефициентите на полиномот во броителот на
преносната функција G(s) ;
den – вектор на коефициентите на полиномот во именителот
на преносната функција G(s)
Пример 6.2.2.
2s  3
Преносната функција G( s)  во Матлаб се презентира како:
s  4s  1
2

>> G=tf([2 3],[1 4 1])


Матлаб одговара со:
Transfer function:
2s+3
-------------
s^2 + 4 s + 1

Пример 6.2.3.
5s
Преносната функција G ( s )  во Матлаб може да се презентира се
s 2
2

презентира како:
>> num=[5 0]; den=[1 0 2];
>> G=tf(num,den)
Матлаб одговара на ист начин:
Transfer function:
5s
-------
s^2 + 2

Дискретни системи:
форма: G=tf(num,den,Тѕ)
аргументи: num – вектор на коефициентите на полиномот во броителот на
преносната функција G(z ) ;
den – вектор на коефициентите на полиномот во именителот
на преносната функција G(z )
Тѕ – периода на одбирање
MATLAB/SIMULINK – упатство за вежби 179

Пример 6.2.4.
1
Преносната функција G ( z )  во Матлаб се презентира
z  0.2 z  0.2
2

како:
>> G=tf([1],[1 -0.2 0.2], 2)
Матлаб одговара со:
Transfer function:
1
-----------------
z^2 - 0.2 z + 0.2
Sampling time: 2

Пример 6.2.5.
z2
Преносната функција G ( z )  во Матлаб може да се презентира и
z
како:
>> num = [1 2]; den = [1 0]; Ts=1;
>> G = tf(num, den,Ts)
Матлаб одговара со:
Transfer function:
z+2
-----
z
Sampling time: 1

6.2.3 Оператори ‘s’ и ‘z’

Континуални системи
форма: s=tf(„s‟); G=(bm*s^m+…+b1*s+b0)/(an*s^n+…+a1*s+a0);

Пример 6.2.6.
2s  3
Преносната функција G( s)  во Матлаб се презентира како:
s  4s  1
2

>> s=tf('s');
>> G=(2*s+3)/(s^2+4*s+1)
Матлаб одговара со:
Transfer function:
2s+3
-------------
s^2 + 4 s + 1
180 MATLAB/SIMULINK – упатство за вежби

Дискретни системи

форма: z=tf(„s‟, Ts); G=(bm*z^m+…+b1*z+b0)/(an*z^n+…+a1*z+a0);

Пример 6.2.6.
z 1
Преносната функција G ( s)  во Матлаб се презентира
z  0.2 z  0.2
2

како:
>> z=tf('z',1);
>> G=(z+1)/(z^2-0.2*z+0.2)
Матлаб одговара со:
Transfer function:
z+1
-----------------
z^2 - 0.2 z + 0.2

6.2.4 Функција ‘ss’

Функцијата ss креира state-space модел (модел во просторот на состојба)


или конвертира LTI модел во простор на состојба.
Креирање:
sys = ss(A,B,C,D) креира временски континуален модел во просторот на
состојба (a continuous-time state-space (ss) model) SYS со матрици A,B,C,D. Излезот
SYS е ss објект. Може да се постави D=0 што значи нул матрица со соодветни
димензии.
sys = ss креира празен ss објект.
форма: G=ss(A,B,C,D)
аргументи: A, B, C, D се матрици на моделот во просторот на состојба:
x  Ax  Bu
y  Cx  Du
Пример 6.2.7: Систем од втор ред со еден влез и со еден излез:
 x1   1 2   x1  0
 x    0  1  x   1u
 2   2   

x 
y  1 0 1 
 x2 
Matlab интерпретација на горните равенки:

>> A=[-1 2; 0 -1]; B=[0; 1]; C=[1 0]; D=[0];


>> G=ss(A,B,C,D)
MATLAB/SIMULINK – упатство за вежби 181

Матлаб одговара со:

a=
x1 x2
x1 -1 2
x2 0 -1

b=
u1
x1 0
x2 1

c=
x1 x2
y1 1 0

6.2.5. Функции pole и zero


Slu`at za odreduvawe na polovite i nulite na sistemot.

форма: p=pole(G); z=zero(G);


аргументи: G e LTI модел на системот (генериран со функциите tf или ss)
p и z се вектори на половите и нулите на системот, респективно.

Пример 6.2.8
Дадена е преносната функција:
2s  3 3
G(s)  ; полови: p1,2  2  3 ; нули: z1    1.5
s  4s  1
2 2
Одредување на нулите и половите во МАТЛАБ:
>> s=tf('s');
>> G=(2*s+3)/(s^2+4*s+1);
>> p=pole(G)
>> z=zero(G)
Одговорот на МАТЛАБ е:
p=
-3.7321
-0.2679
z=
-1.5000
182 MATLAB/SIMULINK – упатство за вежби

6.3. ODZIVI NA LINEAREN SИSTEM


Функции: initial, impulse, step, lsim

6.3.1. Funkcija initial

Оваа функција дава одзив на LTI систем на почетни услови. Системот е


опишан во просторот на состојба:
x  Ax , x(0)  x 0
y  Cx
Опции:
initial(sys,x0) - црта одзив на непобуден систем описан во просторот на состојба
(state-space model) sys (креиран со ss) со почетен услов x0 на векторот на состојба.
Временскиот интервал и бројот на точки се бира автоматски.
initial(sys,x0,tfinal) – симулира временски одзив од t=0 до конечното време t=tfinal.
initial(sys,x0,Т) – специфицира временски вектор T кој се користи за симулација.
За континуални системи Т се задава во форма 0:dt:Tf.
initial(sys1,sys2,...,x0,T) црта одзив на повеќе LTI модели SYS1,SYS2,... на еден
граф. Векторот T е опционален.
Исто така може да се специфицира боја, стил на линијата и маркер за секој систем,
како на пример: initial(sys1,'r',sys2,'y--',sys3,'gx',x0).

Кога се користат аргументи на левата страна [Y,T,X] = INITIAL(SYS,X0)


тогаш функцијата го дава и одзивот Y, векторот на времето T користено за симула-
ција и траекториите на состојбата X.

Пример 6.3.1:
Електричното коло на Сл.6.3.1 е опишано со следниве равенки во
матрична форма:

 1
 x1 (t )   0 C  x1 (t )   0 
 x (t )   1 R  x (t )   1 u (t ) (1)
 2      2   L 
 L L

 x (t ) 
y (t )  1 0 1  ,
 x2 (t )
каде варијаблите на состојба се: x1 (t )  U C (t ) - напон на кондензаторот и
x2 (t )  i(t ) - струјаја во колото, а како излез е земен напонот на кондензаторот:
y(t )  uc (t )  x1 (t ) )
Компактната матрична форма на записот на равенките (1) е:
MATLAB/SIMULINK – упатство за вежби 183

x (t )  Ax(t )  Bu (t ) (2)
y (t )  Cx(t )  Du (t )
каде матриците на системот A , B , C и D се одредени со:

 1
 0 0  0 
A  C    0 1000 , B   1    , C  [1 0], D  [0] . (3)
R  
   10  10 
1
 L   
 10
 L L

Потребно е да се одреди одзивот, напонот на кондензаторот, U c (t ) , на


почетен услов U c (0)  5V , односно x(0)  x0  [5 0]T .
R L


i (t ) U c (t )
DC U (t ) C

Сл.6.3.1. Електрично коло- сериски RLC спој


параметри: R  4, L  0.10 H , C  1000 F
Решението на задачата е дадено во m-фајлот mt_p631_elsist_1.m, а одзивот
на системот на почетениот услов е прикажан на Сл.6.3.2.
% Primer 6.3.1 Elektricno kolo
% File: mt_p631_elsist_1.m
%
A=[0 1000;-10 -40]; B=[0;10]; C=[1 0]; D=[0];
G=ss(A,B,C,D);
x0=[5 0];
initial(G,x0),grid

Sl.6.3.2. Одзив на почетен услов на системот од Пример 6.3.1


184 MATLAB/SIMULINK – упатство за вежби

Пример 6.3.2:
За системот опишан со преносна функција
1
G( s)  (1)
s  2s  1
2

да се одреди одзивот на почетен услов: x(0)  [1 3]T .


Решението во Матлаб е дадено подолу.
% Primer 6.3.2
% File: mt_p63_02_initial.m
%
num = [1];
den = [1 2 1];
[A,B,C,D] = tf2ss(num,den);
x0=[1 3];
initial(A,B,C,D,x0), grid

Sl.6.3.3. Одзив на почетен услов на системот од Пример 2

6.3.2. Funkcija IMPULSE

Оваа функција дава одзив на импулс на LTI модели.


Опции:
IMPULSE(SYS) црта одзив на импулс на LTI модел SYS (креиран со tf, zpk, или
SS). За модели со повеќе влезови се применуваат независни команди на секој влез.
Временскиот опсег и бројот на точки се избира автоматски.
IMPULSE(SYS,TFINAL) симулира одзив на импулс од t=0 до конечно време
t=TFINAL.
IMPULSE(SYS,T) – користи временски вектор T креиран од корисникот.
MATLAB/SIMULINK – упатство за вежби 185

IMPULSE(SYS1,SYS2,...,T) црта одзив на импулс на повеќе LTI модели


SYS1,SYS2,... на еден граф, Векторот на времето е опционален. Исто така може да
се слспецифицира боја, вид на линија и маркер за секој систем какао на пример:
impulse(sys1,'r',sys2,'y--',sys3,'gx').
Кога се користат аргументи на левата страна, [Y,T] = IMPULSE(SYS) функцијата
го враќа одзивот на излезот Y и векторот на времето T користено за симулација.

Пример 6.3.3:
% Primer 6.3.3
% File: mt_p63_03_initial.m
A=[-1 2;0 -1]; B=[0;1];
C=[1 0]; D=[0];
impulse(A,B,C,D), grid;

Сл.6.3.4. Одзив на импулс на системот


од примерот 6.3.3.

Пример 6.3.4
% Primer 6.3.4
% File: mt_p63_04_initial.m
% Elektricno kolo - odziv na impuls
% File: elsist_2_impulse.m
A=[0 1000;-10 -40]; B=[0;10]; C=[1 0]; D=[0];
sys=ss(A,B,C,D);
impulse(sys), grid

Сл.6.3.5. Одзив на импулс на системот од Пример 6.3.4


186 MATLAB/SIMULINK – упатство за вежби

Пример 6.3.5.
Импулсeн одзив на МИМО систем:
% Primer 6.3.5 MIMO sistem - odziv na impuls
% File: mt_p63_05_MIMO_sistem_1_impulse.m
A=[-3 1; 1 -3];
B=[1 2; 2 1];
C=[1 0; 0 1];
D=[0 0; 0 0];
sys=ss(A,B,C,D);
impulse(sys), grid

Сл.6.3.6. Одзив на импулс на системот од примерот 6.3.5

Како може да се види од сликата, за МИМО системоt командата impulse


ги дава сите графици кои одговараат на различни комбинации на влезовите и на
излезите. Над графиците се назначени броевите на влезовите, а десно од графици-
те се назначени броевите на излезите.

Пример 6.3.6:
Краткопериодичната динамика на движењето на авион во вертикалната
рамнина се опишува со следниов модел (R.Nelson: Flight Srtability and Automatic
Control, Second Edition, page 369):

   0.334 1.0       0.027


 q     2.52  0.387   q      2.6   m
        
каде векторот на состојба го чинат нападниот агол на авионот x1   и аголната
брзина на извишување x2  q . Моделот има еден влез – отклонот на кормилото
MATLAB/SIMULINK – упатство за вежби 187

за висина u   m . Да се определи одзивот на авионот на импулсна команда.


Како излез да се земе комплетниот вектор на состојба.
Долниот m – фајл го решава проблемот.
a) Koristena opcija impulse(sys),
% Primer 6.3.6
% Model na avion - odziv na impuls
% File: mt_p63_06_avion_odziv_impulse.m
A=[-0.334 1.0; -2.52 -0.387];
B=[-0.027; -2.6];
C=[1 0; 0 1];
D=[0; 0];
sys=ss(A,B,C,D);
impulse(sys), grid
Одзивот е прикажан на Сл.6.3.7 а).

a) b)
Сл.6.3.7. Одзив на импулс на системот-авионот од примерот 6.3.6

b) Koristena opcija impulse(sys,t),


% Primer 6.3.6b
% Model na avion - odziv na impuls
% Se koristi opcijata impulse(sys,t)
% File: mt_p63_06b_avion_odziv_impulse_sys_t.m
A=[-0.334 1.0; -2.52 -0.387];
B=[-0.027; -2.6];
C=[1 0; 0 1];
D=[0; 0];
t=0:0.01:10;
sys=ss(A,B,C,D);
impulse(sys,t), grid
Одзивот е прикажан на Сл.6.3.7 б).
188 MATLAB/SIMULINK – упатство за вежби

6.3.3. Funkcija STEP

Функцијата step дава одзив на системот на степ функција.


форма: step(G)
аргументи: G e LTI модел на системот (генериран со функцијата tf или ss).

Пример 6.3.7
Нека е системот опишан со преносна функција:
s 1
G( s)  .
s  s 1
2

Функцијата step(G) генерира одзив како на Сл.6.3.8


m-file:
% Primer 6.3.7
% Odziv na step
% File: mt_p63_07_step_1.m
s=tf('s');
G =(s+1)/(s^2+s+1);
step(G), grid

Сл.6.3.8. Одзив на степ

Пример 6.3.8. Одзив на степ на авион од Примерот 6.3.6.


m – file:
% Primer 6.3.6
% Model na avion - odziv na step
% File: mt_p63_08_step_2_avion.m
A=[-0.334 1.0; -2.52 -0.387];
B=[-0.027; -2.6];
C=[1 0; 0 1];
D=[0; 0];
sys=ss(A,B,C,D);

Сл.6.3.9. Одзив на авион нa степ


побуда
MATLAB/SIMULINK – упатство за вежби 189

Ако функцијата step се повика во следнава форма:


[y,t] = step(G);
векторите t и y содржат автоматски одбрани временски моменти и вредности на
одзивот на степ побуда во тие моменти, респективно; графикот на одзивот на степ
не се исцртува.
Ако функцијата step се повика во следнава форма:
y=step(g,t);
при што однапред е дефиниран векторот на временските моменти t во кои се
пресметува одзивот на степ, вредностите на одзивот во тие моменти се содржани
во векторот y.

Пример 6.3.9
s 1
Нека е зададена преносната функција G ( s )  . Следниов фајл е
s  s 1
2

пример за користње на опцијата y=step(G,t):


m-file:
% Primer6.3.9
% Odziv na step
% File: mt_p63_09_step_3.m
s=tf('s');
G =(s+1)/(s^2+s+1);
t=0:0.1:25;
y=step(G,t);
plot(t,y),grid

Сл.6.3.10. Одзив на step

6.3.4. Funkcija lsim

Функцијата lsim овозможува одзив на LTI систем нa произволен влезен


сигнал.
Форма: y=lsim(G,u,t);
Аргументи: G e LTI модел на системот којшто е генериран со функци
јата tf или ss;
t е вектор на временскоте моменти во кои треба да се
пресмета одзивот на системот
u е влезен вектор на системот во моментите кои се одредени
со векторот t .
190 MATLAB/SIMULINK – упатство за вежби

Пример 6.3.10.
Нека е системот опишан со преносната функција
Y ( s) s 1
G( s)   2 (1)
U ( s) s  s  1
и нека на влезот делува сигнал како на Сл.6.3.11.
Потребно е да се одреди одзивот на системот на оваа побуда. На графот да
се нацртаат и побудниот сигнал u(t) и одзивот y(t).

U(t)
1

0 20 40 60 80 100 t

-1

Сл.6.3.11. Влезен сигнал во системот

% Primer 6.3.10.
% Odziv na proizvolna pobuda
% File: mt_p63_10_lsim_1.m
%
s=tf('s');
G=(s+1)/(s^2+s+1);
t=0:0.1:100;
for i=1:length(t)
u(i)=0;
if (t(i)>=20)&(t(i)<40)
u(i)=1;
end
if (t(i)>=60)&(t(i)<80)
u(i)=-1;
end
end
y=lsim(G,u,t);
Сл.6.3.12. Одзив на побуда како на Сл.6.3.11
plot(t,u,'b'),grid; hold on;
plot(t,y,'r'); hold off;
На Сл.6.3.12 со плава боја е прикажан влезот на системот со преносна
функција (1) , а со црвената неговиот излез.
MATLAB/SIMULINK – упатство за вежби 191

Пример 6.3.11. (Дискретен систем)


% Primer 6.3.11.
% Odziv na proizvolna pobuda
% File: mt_p63_11_lsim_2.m
%
Ta=1;
G=tf)[1], [1 -0.2 0.2], Ts);
t=0:Ts:50;
for i=1:length(t)
u(i)=0;
if (t(i)>=10)&(t(i)<30)
u(i)=1;
end
if (t(i)>=25)&(t(i)<35)
u(i)=1;
end
end
y=lsim(G,u,t); Сл.6.3.13 Одзиви на дискретен систем
plot(t,u,'b-o'); hold on;
plot(t,y,'r-o'); hold off;
grid;

На Сл 6.3.13. со плава боја е прикажан влезот на системот со преносна


функција:
1
G( z )  ,
z  0.2 z  0.2
2

а со црвената боја неговиот излез.

Опција на функцијата lsim za симулација на LTI системи опишани во


просторoт на состојба:
[Y,T,X] = LSIM(SYS,U,T,X0)
каде траекторијата во просторот на состојба X, е матрица со LENGTH(T) редици и
толку колони колку што системот има варијабли на состојба.
Системот се задава со матриците A, B, C и D, односно
SYS=SS(A,B,C,D),
може да се користи и формата:
[Y,T,X] = LSIM(A,B,C,D,U,T,X0).
За цртање на сигналите – одзивите може да се користат стандардните plot опции.
192 MATLAB/SIMULINK – упатство за вежби

Пример 6.3.12
Да се одреди одзивот на авион чија динамика е опишана во просторот на
состојба со равенките:

   0.334 1.0       0.027


 q     2.52  0.387   q      2.6   m
        

 y1  1 0   0
 y   0 1  q   0  m
 2     
каде векторот на состојба го чинат нападниот агол на авионот x1   и аголната
брзина на извишување x2  q . Моделот има еден влез – отклонот на кормилото
за висина u   m . Отклонот на кормилото се менува како во претходниот
пример, Пример 6.3.8 (Сл.6.3.9), со тоа што амлитудата на овој сигнал изнесува 0.1
радијан.
m – file:
% Primer 6.3.12
% Model na avion - odziv na proizvolen signal
% File: mt_63_12_lsim_2_avion.m
%
% Matrici na sistemot
A=[-0.334 1.0; -2.52 -0.387]; B=[-0.027; -2.6];
C=[1 0; 0 1]; D=[0; 0];
%
% Vrema za simulacija
t=0:0.1:100;
%
% pocetni uslovi
x0=[0 0];
%
% Generiranje na vlezniot signal
for i=1:length(t)
u(i)=0;
if (t(i)>=20)&(t(i)<40)
u(i)=0.1;
end
if (t(i)>=60)&(t(i)<80)
u(i)=-0.1;
end
end
% Simulacija
[y,x] = lsim(A,B,C,D,u,t,x0); % ili sys=ss(A,B,C,D); [y,x] = lsim(sys,u,t,x0)
% Zna;ewe na varijablite:
alfa = x(:,1); % napaden agol
q = x(:,2); % agolna brzina na izvisuvanje
MATLAB/SIMULINK – упатство за вежби 193

deltam = u; % otklon na kormiloto za visina


%
% Crtanje
figure(1)
plot(t,alfa,t,deltam,'r --'),grid, xlabel('t [s]'), ylabel('alfa [rad], deltam [rad]'),...
title('Odziv na napadniot agol alfa na pobuda deltam=u(t)'),legend('alfa','deltam')
figure(2)
plot(t,q,t,deltam,'r --'),grid, xlabel('t [s]'), ylabel('q [rad/s], deltam [rad]'),...
title('Odziv na agolnata brzina q na pobuda deltam=u(t)'),legend('q','deltam')

Сл.6.3.14. Одзив на нападниот агол на отклон на кормилото како на Сл.6.3.11

Сл.6.3.15. Одзив на аголната брзина на извишување на отклон на


кормилото како на Сл.6.3.11.
194 MATLAB/SIMULINK – упатство за вежби

6.4 ФРЕКВЕНЦИСКИ КАРАКТЕРИСТИКИ НА LTI СИСТЕМИ

6.4.1. Функција bode

Форма: bode(G)
Аргументи: G е LTI модел на системот генериран со функцијата tf или
со функцијата ss

Пример 6.4.1
Даден е систем со преносна функција:
1000( s  1)
G( s)  (1)
( s  0.1)(s  100)
Функцијата bode(G) ja генерира сликата на Сл.6.4.1, со помош на следниот m-фајл:

% Primer 6.4.01
% Frekvenciski karaktristiki na LTI sistemi
% File: mt_p64_01_bode_1.m
%
% Prensna funkcija na sistemot
s=tf('s');
G=1000*(s+1)/((s+0.1)*(s+100));
bode(G), grid

Сл.6.4.1 Фреквенциска амплитудна и фазна карактеристика на


системот опишан со преносната функција (1)
MATLAB/SIMULINK – упатство за вежби 195

Ако функцијата bode се повика во форма:


[m,ph]=bode(G,w);
при што однапред е дефиниран векторот на фреквенција w во кои се пресметуваат
амплитудната и фазната карактеристика, вредностите на амплитудната и на фазна-
та карактеристика во дадените фреквенции содржани се во векторите m и ph,
респективно; вредностите на засилувањето (амплитудата) содржани во векторот m
искажани се во неозначени броеви.
Пример 6.4.2
% Primer 6.4. 2
% Frekvenciski karaktristiki na LTI sistemi
% Se koristi bode funkcija vo forma: [m,ph]=bode(G,w)
% File: mt_p64_02_bode_2.m
%
% Prenosna funkcija na sistemot
s=tf('s');
G=10/(s^2+2*s+10);
w=0:0.1:20;
%
[mag,ph]=bode(G,w);
m(1,:)=mag(1,1,:);
p(1,:)=ph(1,1,:);
%
subplot(2,1,1); plot(w,m); grid;
xlabel('Frekvencija [rad/s]');
ylabel('Amplituda');
%
subplot(2,1,2); plot(w,p); grid;
xlabel('Frekvencija [rad/s]');
ylabel('Faza [stepeni]');

Сл.6.4.2. Амплитудна и фазна фреквенциска карактеристика на системот со


преносна функција G=10/(s^2+2*s+10);
196 MATLAB/SIMULINK – упатство за вежби

Пример 6.4.3
Бодеов дијаграм кога се зададени полиномите во броителот и именителот
на преносната функција – наредба bode(num,den).

% Primer 6.4.3
% Bode dijagram so komandata bode(num,den)
% File: mt_p64_03_bode_num_den.m
%
clc
clear all
clf
num=10;
den=[1 5 5 0];
bode(num,den);
grid;

Сл.6.4.3 Амплитудна и фазна фреквенциска карактеристика на системот со


преносна функција G=10/(s^3+5*s^2+5*s);

Пример 6.4.4
Бодеов дијаграм кога се зададени полиномите во броителот и именителот
на преносната функција и кога посебно се дефинира опсегот на фреквенцијата:
наредба bode(num,den,w).

% Primer 6.4.4
% Bode dijagram so komandata bode(num,den,w)
% File: mt_p64_04_bode_num_den_w.m
MATLAB/SIMULINK – упатство за вежби 197

%
clc
clear all
clf
num=10;
den=[1 5 5 0];
w=logspace(-1, 4, 100);
bode(num,den,w);
grid;

Сл.6.4.4 Амплитудна и фазна фреквенциска карактеристика на системот со


преносна функција G=10/(s^3+5*s^2+5*s) со дефиниран опсег на фреквенцијата

6.4.2. Функција margin

Функцијата margin служи за одредување на амплитудното и фазнотo


осигурување (gain and phase margins) [vidi SAU: Z.Vukic, S.Milic].
Амплитудното осигурување (gain margin) Gm [dB] се дефинира како она
засилување кое е неопходно системот да се доведе на граница на стабилноста, т.е.
1
Gm 
G ( jcg )

каде G( jcg ) е засилување на фреквенцијата cg на која фазната карактеристика


го сече правецот   180 deg . Амплитудното осигурување се дава во децибели:

Gm_dB = 20*log10(Gm)
198 MATLAB/SIMULINK – упатство за вежби

Фазното осигугурување е онај износ на фазното доцнење на пресечната


фреквенција cp кое е потребно системот да дојде на граница на стабилноста.
Фазното осигурување изнесува
Pm  180   (cp )
За стабилни системи амплитудното и фазното осигурување се позитивни
величини ( Gm  0, Pm  0 ) , а за нестабилни системи се негативни.
Функцијата [Gm,Pm,Wcg,Wcp] = MARGIN(SYS) ги пресметува амплитуд-
ното осигурување Gm, фазното осигурување Pm, и придружените пресечни
фреквенции: Wcg и Wcp За SISO модел SYS со отворена повратна врска,
континуален или дискретен.

Пример 6.4.5
Ако преносната функција на отворениот систем е дадена со преносната
функција од претходните примери, G=10/(s^3+5*s^2+5*s), да се одреди амлитуд-
ното и фазното осигурување и содветните пресечни фреквенции.
М.фајл:
% Primer 6.4.5
% Odreduvanje na amplitudnoto i faznoto osiguruvanje
% File: mt_p64_05_margin_num_den.m
clc
clear all
clf
num=10;
den=[1 5 5 0];
margin(num,den);
grid;

Сл 6.4.5. Амлитудно и фазно осигурување во примерот 6.4.5


MATLAB/SIMULINK – упатство за вежби 199

6.4.3. Функција nichols

Николсовите дијаграми се одредуваат со командата nichols(num,den). Во


долниот пример е илустрирана примената.
% Primer 6.4.6
% Odreduvanje na Nikolsovite dijagrami
% File: mt_p64_06_nichols_num_den.m
%
clc
clear all
clf
num=10;
den=[1 5 5 0];
nichols(num,den);
ngrid;
За цртање на Николсовиот дијаграм се користи командата ngrid.

Сл.6.4.6. Николсов дијаграм

6.4.4. Функција nyquist

Функцијата nyquist се користи за цртање на Најквистов дијаграм.


Примената на наредбата nyquist(num,den) e дадена во примерот Пример 6.4.7.
Командата nyquist(num,den) ги зема и негативните и позитивните вред-
ности за фреквенцијата. Поради тоа на сликата Сл.6.4.7 глдаме крива која е
симетрична во однос на х-оската.
200 MATLAB/SIMULINK – упатство за вежби

Сл.6.4.7 Најквистов дијаграм

Ако сакаме дијаграм само за позитивните вредности на фреквенцијата,


тогаш го користиме следниов М.фајл:
% Primer 6.4.8
% Nyquist-ov dijagram
% File: mt_p64_08_nyquist_num_den_w.m
%
clc
clear all
clf
num=10;
den=[1 5 5 0];
w=0:0.1:100;
[re,im,w]=nyquist(num,den,w);
plot(re,im);
grid

Сл.6.4.8 Најквистов дијаграм

Сите горни команди може да се искористат за системо кои се опишани во


просторот на состојба.
MATLAB/SIMULINK – упатство за вежби 201

6.5 ГЕОМЕТРИСКО МЕСТО НА КОРЕНИТЕ - ГМК


(ROOT LOCUS)

Цртањето на геометриското место на корените - ГМК (root locus) е многу


лесно и брзо со примена на МАТЛАБ. Ова е многу поочигледно за покомплексни
системи од оние кои се користени во долните примери.
За да се најде ГМК се користи командата rlocus(num,den) каде num и den
се однесуваат на полиномите во преносната функција на отворениот систем.
Системот на автоматско упрвување е прикажан на Сл.6.5.1.

R(s )  E (s ) num Y (s )
 K G(s) 
den

Сл.6.5.1 Затворен систем на автоматско управување

Во примерите се користи преносна функција


num 1
G( s)   3 (1)
den s  5s 2  5s

Пример 6.5.1

% Primer 6.5.1
% Geometrisko mesto na
% korenite GMK (root locus)
% File: mt_p65_01_rlocus_1.m
%
clc
clear all
clf
num=1;
den=[1 5 5 0];
rlocus(num,den);

Сл.6.5.2 ГМК за системот на Сл.6.5.1

ГМК на Сл.6.5.2 е нацртан за вредности на засилувањето од 0 до некоја


специфицирана вредност со што се овозможува да се заклуува за однесувањето и
стабилноста на системот.
Ако би сакале да ги дефинираме вредностите на засилувањето К, тогаш
треба К да се дефинира како во примерот Пример 6.5.2 даден подолу.
202 MATLAB/SIMULINK – упатство за вежби

Пример 6.5.2
Дефинирање на промената на засилувањето од 0 до 100.

% Primer 6.5.2
% Geometrisko mesto na
% korenite GMK (root locus)
% File: mt_p65_02_rlocus_2.m
%
clc
clear all
clf
K=0:1:100;
num=1;
den=[1 5 5 0];
rlocus(num,den,K);
Сл.6.5.3 ГМК за системот на Сл.6.5.1 за К=0:1:100

Сл.6.5.3 ГМК за системот на Сл.6.5.1 за К=0:1:100

Пример 6.5.3
Дефинирање на промената на засилувањето К по сегменти

% Primer 6.5.3
% Geometrisko mesto na
% korenite GMK (root locus)
% File: mt_p65_03_rlocus_3.m
%
clc
clear all
clf
k1=0:2:10;
k2=11:0.5:90;
k3=91:10:500;
K=[k1 k2 k3];
num=1;
den=[1 5 5 0]; Сл.6.5.3 ГМК за системот на Сл.6.5.1 при
rlocus(num,den,K); промена на К по сегменти со различен чекор
MATLAB/SIMULINK – упатство за вежби 203

6.6. Matlab Commands List

The following list of commands can be very useful for future reference. Use "help" in
Matlab for more information on how to use the commands.

In these tutorials, we use commands both from Matlab and from the Control Systems
Toolbox, as well as some commands/functions which we wrote ourselves. For those
commands/functions which are not standard in Matlab, we give links to their
descriptions. For more information on writing Matlab functions, see the function page.

Note:Matlab commands from the control system toolbox are highlighted in red.
Non-standard Matlab commands are highlighted in green.
Command Description
abs Absolute value
acker Compute the K matrix to place the poles of A-BK, see also place
axis Set the scale of the current plot, see also plot, figure
bode Draw the Bode plot, see also logspace, margin, nyquist1
c2dm Continuous system to discrete system
clf Clear figure (use clg in Matlab 3.5)
conv Convolution (useful for multiplying polynomials), see also deconv
ctrb The controllability matrix, see also obsv
deconv Deconvolution and polynomial division, see also conv
det Find the determinant of a matrix
dimpulse Impulse response of discrete-time linear systems, see also dstep
Linear-quadratic requlator design for discrete-time systems, see also
dlqr
lqr
dlsim Simulation of discrete-time linear systems, see also lsim
dstep Step response of discrete-time linear systems, see also stairs
eig Compute the eigenvalues of a matrix
eps Matlab's numerical tolerance
feedback Feedback connection of two systems.
figure Create a new figure or redefine the current figure, see also subplot, axis
for For, next loop
format Number format (significant digits, exponents)
function Creates function m-files
grid Draw the grid lines on the current plot
gtext Add a piece of text to the current plot, see also text
204 MATLAB/SIMULINK – упатство за вежби

help HELP!
hold Hold the current graph, see also figure
if Conditionally execute statements
imag Returns the imaginary part of a complex number, see also real
Impulse response of continuous-time linear systems, see also step,
impulse
lsim, dlsim
input Prompt for user input
inv Find the inverse of a matrix
Generate grid lines of constant damping ratio (zeta) and settling
jgrid time (sigma), see also sgrid, sigrid, zgrid
legend Graph legend
length Length of a vector, see also size
linspace Returns a linearly spaced vector
lnyquist1 Produce a Nyquist plot on a logarithmic scale, see also nyquist1
log natural logarithm, also log10: common logarithm
loglog Plot using log-log scale, also semilogx/semilogy
logspace Returns a logarithmically spaced vector
Linear quadratic regulator design for continuous systems, see also
lqr
dlqr
lsim Simulate a linear system, see also step, impulse, dlsim.
Returns the gain margin, phase margin, and crossover frequencies, see
margin
also bode
norm Norm of a vector
Draw the Nyquist plot, see also lnyquist1. Note this command was
nyquist1 written to replace the Matlab standard command nyquist to get
more accurate Nyquist plots.
obsv The observability matrix, see also ctrb
ones Returns a vector or matrix of ones, see also zeros
place Compute the K matrix to place the poles of A-BK, see also acker
plot Draw a plot, see also figure, axis, subplot.
poly Returns the characteristic polynomial
polyadd Add two different polynomials
polyval Polynomial evaluation
print Print the current plot (to a printer or postscript file)
pzmap Pole-zero map of linear systems
rank Find the number of linearly independent rows or columns of a matrix
MATLAB/SIMULINK – упатство за вежби 205

real Returns the real part of a complex number, see also imag
rlocfind Find the value of k and the poles at the selected point
rlocus Draw the root locus
roots Find the roots of a polynomial
rscale Find the scale factor for a full-state feedback system
Set(gca,'Xtick',xticks,'Ytick',yticks) to control the number and spacing of
set
tick marks on the axes
series Series interconnection of Linear time-independent systems
Generate grid lines of constant damping ratio (zeta) and natural
sgrid
frequency (Wn), see also jgrid, sigrid, zgrid
Generate grid lines of constant settling time (sigma), see also jgrid, sgrid,
sigrid zgrid
size Gives the dimension of a vector or matrix, see also length
sqrt Square root
Create state-space models or convert LTI model to state space, see
ss
also tf
ss2tf State-space to transfer function representation, see also tf2ss
ss2zp State-space to pole-zero representation, see also zp2ss
stairs Stairstep plot for discreste response, see also dstep
step Plot the step response, see also impulse, lsim, dlsim.
subplot Divide the plot window up into pieces, see also plot, figure
text Add a piece of text to the current plot, see also title, xlabel, ylabel, gtext
Creation of transfer functions or conversion to transfer function, see
tf
also ss
tf2ss Transfer function to state-space representation, see also ss2tf
tf2zp Transfer function to Pole-zero representation, see also zp2tf
title Add a title to the current plot
Returns the bandwidth frequency given the damping ratio and the rise or
wbw settling time.
Add a label to the horizontal/vertical axis of the current plot, see also
xlabel/ylabel
title, text, gtext
zeros Returns a vector or matrix of zeros
Generates grid lines of constant damping ratio (zeta) and natural
zgrid
frequency (Wn), see also sgrid, jgrid, sigrid
zp2ss Pole-zero to state-space representation, see also ss2zp
zp2tf Pole-zero to transfer function representation, see also tf2zp
206 MATLAB/SIMULINK – упатство за вежби

7. ЛИТЕРАТУРА
1. The MathWorks, Inc. MATLAB, Using MATLAB, Natick, 1999.
2. The MathWorks, Inc. MATLAB, Using MATLAB Graphics, Natick, 1999.
3. Matlab na straneh podjetja MathWorks,
http://www.mathworks.com/products/matlab/
4. M. Saje, D. Zupan, Kinematika in dinamika, http://www.km.fgg.uni-
lj.si/predmeti/KiD/KD.htm
5. MATLAB Educational Sites, http://www.eece.maine.edu/mm/matweb.html
6. University of New Hampshire: MATLAB-tutorial,
http://spicerack.sr.unh.edu/˜mathadm/tutorial/software/matlab/
7. University of Florida: MATLAB Tutorial, http://www.math.ufl.edu/help/matlab-
tutorial/
8. Jordanovski, Lj. Osnovi na MATLAB so primeri, upatstvo, PMF Skopje
9. L. Kalašan, M. Petkovska: MATLAB i dodatni moduli „ Controls Szstem Toolbox
and Simulink, Verzija 4.2. za Windows, Beograd,
10. Hadi Saadat: Computational Aids in Control Systems Using Matlab, McGraw-Hill,
Inc. New York, 1993.
11. Hadi Saadat: Power System Analysis, Second edition, McGraw-Hll Primis, New
York, 2002.
12. Delores M. Etter: Engineering Problem Solving with Matlab, Second Edition,
Prentice Hall, Inc, New Jersey, 1993.
13. Norman S. Nise: Control Systems Engineering, Third Edition, John Wiley and
Sons, Inc, New York, 2000.
14. Richard C. Dorf, Robert H. Bishop: Modern Control Systems, Ninth Edition,
Prentice Hall Inc. 2001.
15. Robert H. Bishop: Modern Control Systems Analisys and Design Using MATLAB,
Addison – Weley Publishing Company, New York, 1993.
16. Robert H. Bishop: Modern Control Systems Analisys and Design Using MATLAB
and SIMULINK, Addison – Weley Longman, Inc. Menlo Park, California, 1997.
17. SIMULINK – Dynamic System Simulation for MATLAB – Using SIMULINK
Version 3, The Math Works, Inc. 1999. (http://www.mathworks.com )
18. Control Tutorials for Matlab, Carnegie Melon, University of Michigan,
http://www.engin.umich.edu/group/ctm/
19. Десковски, С.: Системи на автоматско управување, предавања во учебната
2006/2007, ФЕИТ, Скопје, 2007..
20. Stojić, M.: Sistemi automatskog upravljanja, Elektronski fakultet, Niš, 2004.
21. Vukić Z., Kuljača Lj.: Automatsko upravljanje - analiza linearnih sustava,
Kigen d.o.o. Zagreb. 2005.
MATLAB/SIMULINK – упатство за вежби 207

8. П Р И Л О З И

ПРИЛОГ A: HELP АЛАТКА

MatLab-от, како и секој друг програм има богата информациона база за сите
вградени функции која се повикува со наредбата help, при што за секоја функција
постои и кратко објаснување на нејзината примена.
help

HELP topics:
matlab\general - General purpose commands.
matlab\ops - Operators and special characters.
matlab\lang - Programming language constructs.
matlab\elmat - Elementary matrices and matrix manipulation.
matlab\elfun - Elementary math functions.
matlab\specfun - Specialized math functions.
matlab\matfun - Matrix functions - numerical linear algebra.
matlab\datafun - Data analysis and Fourier transforms.
matlab\polyfun - Interpolation and polynomials.
matlab\funfun - Function functions and ODE solvers.
matlab\sparfun - Sparse matrices.
matlab\graph2d - Two dimensional graphs.
matlab\graph3d - Three dimensional graphs.
matlab\specgraph - Specialized graphs.
matlab\graphics - Handle Graphics.
matlab\uitools - Graphical user interface tools.
matlab\strfun - Character strings.
matlab\iofun - File input/output.
matlab\timefun - Time and dates.
matlab\datatypes - Data types and structures.
matlab\winfun - Windows Operating System Interface Files DDE/ActiveX)
matlab\demos - Examples and demonstrations.

For more help on directory/topic, type "help topic".

help general

General purpose commands.


MATLAB Toolbox Version 5.2 18-Dec-1997

General information
help - On-line help, display text at command line.
helpwin - On-line help, separate window for navigation.
helpdesk - Comprehensive hypertext documentation and roubleshooting.
demo - Run demonstrations.
ver - MATLAB, SIMULINK, and toolbox version information.
208 MATLAB/SIMULINK – упатство за вежби

whatsnew - Display Readme files.


Readme - What's new in MATLAB 5.1

Managing the workspace.


who - List current variables.
whos - List current variables, long form.
clear - Clear variables and functions from memory.
pack - Consolidate workspace memory.
load - Load workspace variables from disk.
save - Save workspace variables to disk.
quit - Quit MATLAB session.

Managing commands and functions.


what - List MATLAB-specific files in directory.
type - List M-file.
edit - Edit M-file.
lookfor - Search all M-files for keyword.
which - Locate functions and files.
pcode - Create pre-parsed pseudo-code file (P-file).
inmem - List functions in memory.
mex - Compile MEX-function.

Managing the search path


path - Get/set search path.
addpath - Add directory to search path.
rmpath - Remove directory from search path.
editpath - Modify search path.

Controlling the command window.


echo - Echo commands in M-files.
more - Control paged output in command window.
diary - Save text of MATLAB session.
format - Set output format.

Operating system commands


cd - Change current working directory.
copyfile - Copy a file.
pwd - Show (print) current working directory.
dir - List directory.
delete - Delete file.
getenv - Get environment variable.
mkdir - Make directory.
! - Execute operating system command (see PUNCT).
dos - Execute DOS command and return result.
unix - Execute UNIX command and return result.
vms - Execute VMS DCL command and return result.
web - Open Web browser on site or files.
computer - Computer type.
MATLAB/SIMULINK – упатство за вежби 209

help elmat

Elementary matrices and matrix manipulation.

Elementary matrices.
zeros - Zeros array.
ones - Ones array.
eye - Identity matrix.
repmat - Replicate and tile array.
rand - Uniformly distributed random numbers.
randn - Normally distributed random numbers.
linspace - Linearly spaced vector.
logspace - Logarithmically spaced vector.
meshgrid - X and Y arrays for 3-D plots.
: - Regularly spaced vector and index into matrix.

Basic array information.


size - Size of matrix.
length - Length of vector.
ndims - Number of dimensions.
disp - Display matrix or text.
isempty - True for empty matrix.
isequal - True if arrays are identical.
isnumeric - True for numeric arrays.
islogical - True for logical array.
logical - Convert numeric values to logical.

Matrix manipulation.
reshape - Change size.
diag - Diagonal matrices and diagonals of matrix.
tril - Extract lower triangular part.
triu - Extract upper triangular part.
fliplr - Flip matrix in left/right direction.
flipud - Flip matrix in up/down direction.
flipdim - Flip matrix along specified dimension.
rot90 - Rotate matrix 90 degrees.
: - Regularly spaced vector and index into matrix.
find - Find indices of nonzero elements.
end - Last index.
sub2ind - Linear index from multiple subscripts.
ind2sub - Multiple subscripts from linear index.

Special variables and constants.


ans - Most recent answer.
eps - Floating point relative accuracy.
realmax - Largest positive floating point number.
realmin - Smallest positive floating point number.
210 MATLAB/SIMULINK – упатство за вежби

pi - 3.1415926535897....
i, j - Imaginary unit.
inf - Infinity.
NaN - Not-a-Number.
isnan - True for Not-a-Number.
isinf - True for infinite elements.
isfinite - True for finite elements.
flops - Floating point operation count.
why - Succinct answer.

Specialized matrices.
compan - Companion matrix.
gallery - Higham test matrices.
hadamard - Hadamard matrix.
hankel - Hankel matrix.
hilb - Hilbert matrix.
invhilb - Inverse Hilbert matrix.
magic - Magic square.
pascal - Pascal matrix.
rosser - Classic symmetric eigenvalue test problem.
toeplitz - Toeplitz matrix.
vander - Vandermonde matrix.
wilkinson - Wilkinson's eigenvalue test matrix.

help isnumeric

ISNUMERIC True for numeric arrays.


ISNUMERIC(A) returns 1 if A is a numeric array and 0 otherwise.
For example, sparse arrays, and double precision arrays are
numeric while strings, cell arrays, and structure arrays are not.
See also ISCELL, ISSTRUCT, ISOBJECT, ISSPARSE.

help find

FIND Find indices of nonzero elements.


I = FIND(X) returns the indices of the vector X that are
non-zero. For example, I = FIND(A>100), returns the indices
of A where A is greater than 100. See RELOP.
[I,J] = FIND(X) returns the row and column indices of
the nonzero entries in the matrix X. This is often used
with sparse matrices.
[I,J,V] = FIND(X) also returns a vector containing the
nonzero entries in X. Note that find(X) and find(X~=0)
will produce the same I and J, but the latter will produce
a V with all 1's.
See also SPARSE, IND2SUB.
MATLAB/SIMULINK – упатство за вежби 211

Погоре се дадени неколку примери како може да се користи help наредбата. Им


се препорачува на студентите исцрпно дa го користат help за да се запознаат со
сите вградени функции како и со нивните можности. Во рамките на еден ваков
воведен курс не е возможно да се изложат и со примери да се објаснат сите
аспекти и можности на MatLab-от.

You might also like