matlab upatstvo za vezbi

211
ПРОФ. Д-Р СТОЈЧЕ ДЕСКОВСКИ MATLAB/SIMULINK УПАТСТВО ЗА ВЕЖБИ Учебна 2008/2009 година

Upload: dimitar-markov

Post on 13-Apr-2015

235 views

Category:

Documents


2 download

DESCRIPTION

Matlab Upatstvo Za Vezbi, Programiranje vo matlab

TRANSCRIPT

Page 1: Matlab Upatstvo Za Vezbi

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

MATLAB/SIMULINK

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

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

Page 2: Matlab Upatstvo Za Vezbi

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

Забелешка

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

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

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

рамскиот пакет МАТЛАБ/СИМУЛИНК за вежби по предметите: теорија на системи, автоматско управување, oперациски истражувања, системско мо-

делирање, механика на летање, динамика и управување на летала и систе-

ми на водење и управување. Наведените предмети авторот ги предава или ги предавал порано на неколку високообразовни институции: Воено-техни-

чка академија Загреб, Воена академија „Генерал Михаило Апостолски“ –

Скопје, Технички факултет – Битола, Електротехнички факултет – Скопје

и Факултет за општествени науки – Скопје.

Во материјалот се опфатени сите елементи на МАТЛАБ/СИМУ-

ЛИНК кои биле/се потребни како поддршка на вежбите по наведените

предмети со прикладни примери за нивно користење, додека конкретните вежби по предметите не се дел од ова упатство. Целта на подготовката на

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

со изработени примери кој на брз и ефикасен начин ќе им овозможи лесно

совладување на основите на МАТЛАБ/СИМУЛИНК и ќе им го олесни неговото користење во вежбите по соодветниот предмет. Примерите во

форма на m.fileovi-ови или SIMULINK модели дадени се во работниот

директориум на МАТЛАБ – work на посебен директориум насловен со

0 Matlab Tutorial.

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

Page 3: Matlab Upatstvo Za Vezbi

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 може да користи

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

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

вежбите по соодветните предмети.

Page 4: Matlab Upatstvo Za Vezbi

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“, извршување, користење во други програми, спремање итн.).

Page 5: Matlab Upatstvo Za Vezbi

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

Page 6: Matlab Upatstvo Za Vezbi

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. Нумеричко диференцирање со помош на

Page 7: Matlab Upatstvo Za Vezbi

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. Електромеханички системи

Page 8: Matlab Upatstvo Za Vezbi

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

Page 9: Matlab Upatstvo Za Vezbi

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

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

1.1. ВОВЕД

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

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

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

проблемите и решенијата се претставени во позната и блиска математичка

нотација. Типично користење на програмскиот пакет МАТЛАБ содржи:

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

Линеарна алгебра

Развој на алгоритми

Моделирање, симулација и градење на прототипови

Анализа на податоци, истражување и визуелна презентација

Научни и инжењерски графици и графикони

Развој на апликации влучувајќи развој на Графички Интерфејс за корисници

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

матрици кои не треба претходно да се дефинираат и димензионираат. Со тоа се

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

нумерички пресметки. Особено MATLAB-от е прикладен за решавање на

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

класичните програмски јазици како што се FORTRAN или C.

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

ниран да обезбеди лесен пристап до софтверските пакети LINPACK и EISPACK

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

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

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

алатка и помошно средство на студентите по предметите математика, инжинер-

ство и научните истражувања. Во индустријата, MATLAB -от е најчесто користе-

на алатка (софтвер) за висока продуктивност во истражувањата, развој и анализи.

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

таканаречени toolboxes (алатки), кои претставуваат колекција на процедури на

веќе решени проблеми од дадена област. Алатките се сеопфатни MATLAB

функции (m-фајлови) со кои се проширува околината на MATLAB за решавање на

посебни класи на проблеми.

Областите за кои постојат вакви алатки вклучуваат: процесирање на

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

обработка на слики и многу други.

Page 10: Matlab Upatstvo Za Vezbi

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

Page 11: Matlab Upatstvo Za Vezbi

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

Page 12: Matlab Upatstvo Za Vezbi

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

Page 13: Matlab Upatstvo Za Vezbi

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

(во исписот нема празни редови).

Page 14: Matlab Upatstvo Za Vezbi

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)

Page 15: Matlab Upatstvo Za Vezbi

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)=

xe )

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)

Page 16: Matlab Upatstvo Za Vezbi

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

Page 17: Matlab Upatstvo Za Vezbi

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

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

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

првиот пример поради наредбата format long e, резултатот е печатен со точност на

15 децимали при што се гледа дека во 15-тата децимала постои мала грешка на

заокружување. Со наредбата format short, повторно се враќа стандардниот начин

на презентација на броевите.

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

1. 33 , 2 .x x

2.

2

, 6 .2

xx

3. 27 , 4 .x x 4.

34 , 2 .x x

5.

1

1

1, 2 .

xx

x

6. 24 , 3 .x x x

7. 2 33 4 , 2 .x x x 8.

0 06 (6 ) , 10 .x x x

9. 35( ) , 3 .x x

10. 3

1, 4 .

( )x

x

11. 60500 , 1,01 .x x

12. 120

10.000, 1,075 .x

x

13. 18ln301.0

)2.02sin(2.0*2696.0

ex

14. )ln(

)2sin(,5,3

2696.0

yxyx

yezyx

x

15.

)ln(

)2cos()(,0.7,5.5

2222

5.02

yxyx

yeyxzyx

x

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

jzjz 10743 21 i

одреди: |||,|,,, 2121 wbzauzzzwzuzzz ,

Page 18: Matlab Upatstvo Za Vezbi

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

Page 19: Matlab Upatstvo Za Vezbi

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-от претставува моќно орадие во споредба со други

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

Page 20: Matlab Upatstvo Za Vezbi

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), дава како резултат ?

Page 21: Matlab Upatstvo Za Vezbi

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

Page 22: Matlab Upatstvo Za Vezbi

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 -димензионални вектори- колони

Tnuuu ],...,[ 21u

Tnvvv ],...,[ 21v

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

nn

n

iiT

nnT vuvuvuvuvvvuuu ...],...,[],...,[ 2211

1

2121vu

Page 23: Matlab Upatstvo Za Vezbi

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

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

12

11

10

u и

22

21

20

v .

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

167)22(12)21()11(2010 vuT

Во 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 е претворен во вектор-

колона.

Page 24: Matlab Upatstvo Za Vezbi

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

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

болот u се подразбира број кој се пресметува со формулата.

uuuT

n

iu 1

2

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

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

>> dol = sqrt(u’*u)

dol =

19.1050

или

>> dol = norm(u)

dol =

19.1050

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

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

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

Пример:

Аголот помеѓу два вектор-колони x и y e дефиниран е со равенството:

yx

yxT

cos

Со помош на оваа формулата да се определи косинус на аголот помеѓу следниве

два вектори

T]3,2,1[x и

T]1,2,3[y

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

Решение во 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 (аголот во степени)

Page 25: Matlab Upatstvo Za Vezbi

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

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

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

ХАДАМАРОВ производ. Тој не се користи често во математиката но претставува

непроценива можност и корист која ја поседува MATLAB-от. Ако u и v се два

вектора од ист тип (колона или ред), математичка дефиниција на овој производ

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

],....,,[ 2211 nnvuvuvu vu

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

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

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

>> u=[10; -11; 12];

>> v=[20; -21; -22];

>> u.*v, u'.*v'

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

231

-264

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

200 231 -264

Пример: Табеларно да се претстави функцијата )sin( xxy 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 којшто се добива со пресметката:

Page 26: Matlab Upatstvo Za Vezbi

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

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

ans =

0

0.7071

1.0000

0.7071

0.0000

Конечниот резултат у е даден во следната табела

х=x spx= )sin( x у = )sin( xxy

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; % пресметка на функцијата )sin( xxy

>> [x, spx, y] % испис на решението во табела

ans = x )sin( x )sin( xxy

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

Page 27: Matlab Upatstvo Za Vezbi

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, што значи дека третиот елемент не е број.

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

x

x

x

)sin(lim

0

Page 28: Matlab Upatstvo Za Vezbi

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];

Page 29: Matlab Upatstvo Za Vezbi

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

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

ции по приоритет.

Page 30: Matlab Upatstvo Za Vezbi

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

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

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

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

та или со запирки. Знакот точка-запирка ( ; ) може да се употреби за означување

на крајот на редот. Матрични елементи може да бидат било кои MATLAB изрази.

Вектор – колона и вектор – редица (од претходната точка) се специјални

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

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

942

381

216

A .

За да се некоја матрица внесе во 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

Page 31: Matlab Upatstvo Za Vezbi

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 да се сочува за понатамошно користење во

пресметките.

Page 32: Matlab Upatstvo Za Vezbi

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')

Page 33: Matlab Upatstvo Za Vezbi

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

Page 34: Matlab Upatstvo Za Vezbi

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) се генерира бараната дијагонална матрица.

Page 35: Matlab Upatstvo Za Vezbi

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

Page 36: Matlab Upatstvo Za Vezbi

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

0 1 2 3 4 5 6 7 8 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

Page 37: Matlab Upatstvo Za Vezbi

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.

Page 38: Matlab Upatstvo Za Vezbi

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]

Page 39: Matlab Upatstvo Za Vezbi

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, кога станува

збор за матрица и вектор.

Page 40: Matlab Upatstvo Za Vezbi

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-1

B

A/B е еквивалентно на AB-1

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

нија ќе се користат скрипт m-file-ови. Креирањето на m-file-ови се обработува во

точка 2. Програмирање во МАТЛАБ.

Пример 1.6.1.

За дадената матрична равенка, Ax = B, да се одреди векторот x :

16

32

10

1664

12102

1024

3

2

1

x

x

x

Page 41: Matlab Upatstvo Za Vezbi

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.

Потоа најди го x од .BLUX 11

Page 42: Matlab Upatstvo Za Vezbi

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 матрица, тогаш н броеви кои ја задоволуваат равенката

xAx

се својствени вредности на матрицата А. Својствените вредности се наоѓаат со

употреба на eig(A) која ги одредува својствените вредности кои се испишуваат во

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

Својствените вредности и својствените вектори може да се добијат со

MATLAB наредбата за нивно одредување

[X,D]=eig(A)

Дијагоналните елементои од D се својствени вредности, а колоните од X

се својствени вектори такви да е:

XDAX .

Page 43: Matlab Upatstvo Za Vezbi

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

Пример. 1.6.4.

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

5116

6116

110

A

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.

332

23

22

4

tzyx

tzyx

tyx

tzyx

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

3

2

2

4

1321

113

1012

1111

t

z

y

x

z

За непознатиот вектор х вреди BAx1 .

Page 44: Matlab Upatstvo Za Vezbi

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

Решение: непознатиот вектор Ttzyx ][x е:

X =

0.8437 (x)

0.8750 (y)

1.0937 (z)

1.1875 (t)

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

Задача 1.6.1.

2

023

1

132

tzx

tzyx

tzyx

tzyx

Задача 1.6.2.

124

2

32

tzyx

tzy

tzx

tzyx

Задача 1.6.3.

122

1532

3243

02

wzx

wzyx

wzyx

wyx

Page 45: Matlab Upatstvo Za Vezbi

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.

Page 46: Matlab Upatstvo Za Vezbi

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 редослед на боите е како во горната

табела. Плавата боја е за една линија, а за повеќе линии се користат по редоследот

првите шест бои во табелата.

Page 47: Matlab Upatstvo Za Vezbi

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.

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

МАТЛАБ ќе биде покажано подолу во дадените примери.

Page 48: Matlab Upatstvo Za Vezbi

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

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

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

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

графиците.

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

10 x . Постапката се состои во генерирање на вектор 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)

а)0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1

-1

-0.8

-0.6

-0.4

-0.2

0

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

-1

-0.8

-0.6

-0.4

-0.2

0

0.2

0.4

0.6

0.8

1

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

б) График на )3sin( xy за 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.б).

Page 49: Matlab Upatstvo Za Vezbi

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. Синусна функција

Да се нацрта функцијата x

xy

sin за 44 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

Page 50: Matlab Upatstvo Za Vezbi

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

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

-0.8

-0.6

-0.4

-0.2

0

0.2

0.4

0.6

0.8

1 Multi-plot

x axis

y ax

is

Sin krivaCos kriva

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

HOLD наредба

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

новиот грфик. Тоа секако не е соодветно ако подоцна треба на истиот цртеж да се

додаде нов график. За да се спречи бришење на цртежот, се користи наредбата

hold.

>> plot(x,y), hold

>> plot(x,y,'gx'), hold off

Наредбата hold ја задржува сликата, додека пак hold off ја “ослободува”, но

не ја брише. Ако се сака и бришење на сликата се користи наредбата clg.

Page 51: Matlab Upatstvo Za Vezbi

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) на глушецот, се одбира местото на цртежот

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

зголемување за два пати. Оваа постапка може да се повторува додека не се

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

цртежот за два пати.

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

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

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

Page 52: Matlab Upatstvo Za Vezbi

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

вториот и тн. Редниот број на субплотот се дефинира по редови.

Page 53: Matlab Upatstvo Za Vezbi

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

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

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

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

Функциите кои треба да се нацртаат се:

1) Напон tv sin120 и струја )4

sin(100

ti во функција на t .

Графот на сликата да се нацрта во горниот агол лево.

2) Моќност ivp во функција на t . Графот на сликата да се нацрта

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

3) Три фази дадени со изразите:

,sin tFf ma ),3

2sin(

tFf mb )

3

4sin(

tFf mc , 0.3mF во

функција на t . Графот на сликата да се нацрта во долниот агол лево.

4) Граф во поларни координати за mFfR 3 . Поларниот граф на сликата

да се нацрта во долниот агол десно.

% 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]');

%

Page 54: Matlab Upatstvo Za Vezbi

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.

Page 55: Matlab Upatstvo Za Vezbi

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: Да се нацрта површина определена со функцијата 22 )2()3(),( yxyxf , за 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);

Page 56: Matlab Upatstvo Za Vezbi

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

Z = (X-3).^2- (Y-2).^2;

mesh(X,Y,Z)

title(' Sedlo '), xlabel('x'),ylabel('y')

2

2.5

3

3.5

4

1

1.5

2

2.5

3-1

-0.5

0

0.5

1

x

Saddle

y

Сл.1.7.9.

Во овој пример искористена е вградена функцијата на MatLab-от

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

Пример 1.7.7: a) Да се нацрта функцијата )(2 22 yxxyef за -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.

Page 57: Matlab Upatstvo Za Vezbi

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

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

-1.5

-1

-0.5

0

0.5

1

1.5

2

x

y

Maximum

Maximum

Сл.1.7.11.

Page 58: Matlab Upatstvo Za Vezbi

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

Пример 1.7.8.

Да се нацрта во правоаголни координати граф на Bessel-овата функција

.22 yxJo

% 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

Да се нацрта граф на функцијата 22,

sinyxr

r

rz , ако x и y се менуваат

во границите -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:

%

Page 59: Matlab Upatstvo Za Vezbi

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)

Page 60: Matlab Upatstvo Za Vezbi

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

Page 61: Matlab Upatstvo Za Vezbi

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

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

2.1. ЦИКЛУСИ

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

одреден број наредби. Секако, проблемот може да се реши ако истите наредби се

испишат онолку пати колку што е потребно. Овој пристап и може да биде

применет ако повторувањето е еднаш, два пати или неколку пати. Но проблемите

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

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

MATLAB-от нее искључок. За да се види за што станува збор ќе дадеме пример.

Пример 2.1.1: Да се нацрта грaфикон на функцијата sin(nx) во интервалот –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 -0.5 0 0.5 1-1

0

1

-1 -0.5 0 0.5 1-1

0

1

-1 -0.5 0 0.5 1-1

0

1

-1 -0.5 0 0.5 1-1

0

1

-1 -0.5 0 0.5 1-1

0

1

-1 -0.5 0 0.5 1-1

0

1

-1 -0.5 0 0.5 1-1

0

1

-1 -0.5 0 0.5 1-1

0

1

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

–1 < x < 1, за n = 1,2,3,...8.

Page 62: Matlab Upatstvo Za Vezbi

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(nx) i cos(nx), za n = 1,3,5,7 една покрај

друга

-1 -0.5 0 0.5 1-1

0

1

-1 -0.5 0 0.5 1-1

0

1

-1 -0.5 0 0.5 1-1

0

1

-1 -0.5 0 0.5 1-1

0

1

-1 -0.5 0 0.5 1-1

0

1

-1 -0.5 0 0.5 1-1

0

1

-1 -0.5 0 0.5 1-1

0

1

-1 -0.5 0 0.5 1-1

0

1

Сл.2.1.2.

Како бројач во циклусот (во горниот случај тоа е n), може да се користи

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

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

for циклус од следен вид.

Page 63: Matlab Upatstvo Za Vezbi

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

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

..........................

>> end

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

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

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

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

f2 = 1 и

21 nnn fff za n = 3,4,5.....

Тестирај дали односот 1/ nn ff се доближува до вредноста на златниот рез

618.12/)15(

>> 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])

0 2 4 6 8 10 12 14 16 18 201

1.1

1.2

1.3

1.4

1.5

1.6

1.7

1.8

1.9

2

Сл. 2.1.3.

Page 64: Matlab Upatstvo Za Vezbi

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

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

22222020

1.....

4

1

3

1

2

11 S

222222121

1

20

1.....

4

1

3

1

2

11 S

...

222222100100

1......

21

1

20

1.....

4

1

3

1

2

11 S

Постојат вкупно 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

20 30 40 50 60 70 80 90 1001.5

1.52

1.54

1.56

1.58

1.6

1.62

1.64

1.66

1.68

1.7

Сл.2.1.5.

Page 65: Matlab Upatstvo Za Vezbi

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

Page 66: Matlab Upatstvo Za Vezbi

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

Page 67: Matlab Upatstvo Za Vezbi

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 =

Page 68: Matlab Upatstvo Za Vezbi

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,'-')

Page 69: Matlab Upatstvo Za Vezbi

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

0 1 2 3 4 5 6-1

-0.8

-0.6

-0.4

-0.2

0

0.2

0.4

0.6

0.8

1

Сл.2.1.6.

2.4. While ЦИКЛУС

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

наредби да бидат повторени, но за разлика од for циклусот, не е познат точниот

број на повторувања веќе само условот со чие исполнување се завршува

повторувањето. Таков тип на проблеми во МАТЛАБ се реализира со while .... end

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

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

222 .....21 nS

биде помала од 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 е исполент (вистинит).

Page 70: Matlab Upatstvo Za Vezbi

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

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

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

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

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

претпоставиме дека почетното решение е x = /4, тогаш со пресметување на низата на броеви

)cos( 1 nn xx 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);

Page 71: Matlab Upatstvo Za Vezbi

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.

Page 72: Matlab Upatstvo Za Vezbi

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-фајлот.

Page 73: Matlab Upatstvo Za Vezbi

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

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

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

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

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

))()(( bsbsassA каде 2

cbas

Соодветните наредби во 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

Page 74: Matlab Upatstvo Za Vezbi

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

-4 -3 -2 -1 0 1 2 3 4-1

-0.8

-0.6

-0.4

-0.2

0

0.2

0.4

0.6

0.8

1 Crtez na fukcija

x-oska

y-o

ska

matematicka kriva

Sl. 2.6.1.

Page 75: Matlab Upatstvo Za Vezbi

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

или исто така

>> x=-1:2/100:1;

>> y=x.^2;

>> mt_p26_02_crta

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

0.1

0.2

0.3

0.4

0.5

0.6

0.7

0.8

0.9

1 Crtez na fukcija

x-oska

y-o

ska

matematicka kriva

Од примерите лесно се констатира дека векторите 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

Page 76: Matlab Upatstvo Za Vezbi

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 (променливата всушност претставува половина од збирот на страните), тогаш е потребно истата променлива да биде

Page 77: Matlab Upatstvo Za Vezbi

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)

Page 78: Matlab Upatstvo Za Vezbi

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. Примери на функции

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

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

2121 ,1,0 nnn fffff 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

Page 79: Matlab Upatstvo Za Vezbi

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

Page 80: Matlab Upatstvo Za Vezbi

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

Page 81: Matlab Upatstvo Za Vezbi

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 децимали.

Page 82: Matlab Upatstvo Za Vezbi

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)

Page 83: Matlab Upatstvo Za Vezbi

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

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

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

т.е местото на максималниот елемент.

Page 84: Matlab Upatstvo Za Vezbi

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

Page 85: Matlab Upatstvo Za Vezbi

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

Page 86: Matlab Upatstvo Za Vezbi

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

-1 -0.8 -0.6 -0.4 -0.2 0 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

-1 -0.8 -0.6 -0.4 -0.2 0 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.

Page 87: Matlab Upatstvo Za Vezbi

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) се печатат вредностите на тие елементи.

Page 88: Matlab Upatstvo Za Vezbi

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

2.8. ФУНКЦИСКИ ФУНКЦИИ

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

функции наместо нумерички низи т.е вектори или матрици. Тие функции

вклучуваат

Нумеричко интегрирање на аналитички функции

Оптимизација и решавање на нелинерни равенки

Решавање на диференцијални равенки

2.8.1 Претставување на аналитичка функција во MATLAB

Во MatLabo-от аналитичката функција се дефинира така што експлицитно

ќе се испише во м-фајл. Името на m-фајлот е име на аналитичката функција која

MATLAB ја препознава во понатамошните поресметки. На пример да ја

разгледаме функцијата:

604.0)9.0(

1

01.0)3.0(

1)(

22

xxxf

Оваа функција може да се користи како аргумент на функциските функции.

Имено горната функција ја дефинираме во 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 променливата.

-5 -4 -3 -2 -1 0 1 2 3 4 5-20

0

20

40

60

80

100

Сл. 2.8.1

Page 89: Matlab Upatstvo Za Vezbi

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

Сл.2.8.1. е нацртана со наредбата:

>> fplot('humps',[-5 5])

>> grid on

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

>> fplot(' 2*sin(x+3)', [-1 1])

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

-1.5

-1

-0.5

0

0.5

1

1.5

2

Сл.2.8.2.

Но можно е и следното >> fplot('[2*sin(x+3), humps(x)]', [-5 5])

-5 -4 -3 -2 -1 0 1 2 3 4 5-20

0

20

40

60

80

100

Сл.2.8.3.

Page 90: Matlab Upatstvo Za Vezbi

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 =

Page 91: Matlab Upatstvo Za Vezbi

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

29.8583

пример: Да се определи должината на кривата во простор зададена параметриски.

)2sin()( ttx )cos()( tty ttz )(

za ]3,0[ t .

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

>> t=0:0.1:3*pi;

>> plot3(sin(2*t),cos(t),t)

-1

-0.5

0

0.5

1

-1

-0.5

0

0.5

10

2

4

6

8

10

Сл.2.8.4.

Должината на лакот на кривата даден е со формулата:

3

0

22 1)(sin)2(cos4 dttt

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

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])

Page 92: Matlab Upatstvo Za Vezbi

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

Page 93: Matlab Upatstvo Za Vezbi

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 фајлот. Фајлот подоцна може да се едитира со

обичен текст едитор.

Page 94: Matlab Upatstvo Za Vezbi

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

Page 95: Matlab Upatstvo Za Vezbi

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

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

Третата глава на ова упатство содржи поглавја во кои се обработуваат

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

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

поврзани со нумеричките методи кои се користат за решавање одредени инже-

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

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

ќе се обработи решавањето на обични диференцијални равенки со примена на

МАТЛАБ како и други теми од областа на применетата математика. Поедини теми

ќе бидат обработувани наменски зависно од предметот во којшто се користат и тоа

за време на вежбите по конкретниот предмет.

3.1. ПОЛИНОМИ И ИНТЕРПОЛАЦИЈА

Полиноми се континуирани финкции кои претставуваат линерана комбина-

ција на мономи. Например полиномот1

52)( 3 xxxp

е полином од трет степен.

Во 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

Page 96: Matlab Upatstvo Za Vezbi

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

Page 97: Matlab Upatstvo Za Vezbi

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.

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

32)( 2 sssa i 654)( 2 sssb

>> 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 ги определува коефициентите на полином со кој се

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

Page 98: Matlab Upatstvo Za Vezbi

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

1 1.5 2 2.5 3 3.5 4 4.5 50

50

100

150

200

250

300

350

400

450

500

Сл.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;

Page 99: Matlab Upatstvo Za Vezbi

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

>> y1 = polyval(c,x1);

>> plot(x1,y1,x,y,'*')

0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.80.9

1

1.1

1.2

1.3

1.4

1.5

1.6

3.2. ИНТЕРПОЛАЦИЈА СО ПОЛИНОМ

Во претходните примери, во кој е користена вградената функција polyfit,

полиномот се одбира така да сумата на квадратите на разликата ( грешката) помеѓу

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

Вака определен полином најчесто не проваѓа низ точките со кои се дефинирани

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

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

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

променлива3.

3.2.1 Интерполационен полином

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

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

под име Вандермондеова матрица4. Пресметувањето на оваа матрица ќе го

реализираме со м-функцијата.

3 Vidi del 1.3 vo predavawata za vtoriot semestar

4 Isto

Page 100: Matlab Upatstvo Za Vezbi

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.

Полиномот на итерполацијата гласи:

542)( 2 xxxf

Графички приказ за оценка е даден на следниот график реализиран со

наредбите.

>> x1 = 0:0.2:3.4;

>> y1 = polyval(coef,x1);

>> plot(x1,y1,x,fx,'*')

Page 101: Matlab Upatstvo Za Vezbi

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

0 0.5 1 1.5 2 2.5 3 3.5-5

0

5

10

15

20

25

30

35

Сл.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

Page 102: Matlab Upatstvo Za Vezbi

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 =

Page 103: Matlab Upatstvo Za Vezbi

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

0 0.5 1 1.5 2 2.5 3-0.4

-0.2

0

0.2

0.4

0.6

0.8

1

1.2

Сл.3.2.2

Page 104: Matlab Upatstvo Za Vezbi

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

Page 105: Matlab Upatstvo Za Vezbi

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

Вектор-редот C ги содржи коефициентите на полиномот, додека колоните

на матрицата D се 0-та, 1, 2, .... к-та конечна разлика, при што вредностите на

конечните разлики се делени со соодветниот факториел. Така на пример )(xfk

(к-тата колона) е поделена со 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

Page 106: Matlab Upatstvo Za Vezbi

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

3.3. НУМЕРИЧКО ДИФЕРЕНЦИРАЊЕ (ОПРЕДЕЛУВАЊЕ НА ИЗВОД)

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

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

подразбира диференцирање на функции кои се дадени во нумеричка ( бројчана)

форма, иако методата може да се користи и за диференцирање на функции кои се

зададени во аналитичка форма. Потребата за нумеричко диференцирање на

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

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

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

вредност како резултат.

3.3.1. Нумеричко диференцирање користејќи лимес

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

на изводот, т.е дека изводот е тангес од аголот што го зафаќа тангентата на

кривата, во дадена точка, со позитивната насока на x-оската. Математички тоа

може да се претстави со следниот лимес9.

h

hxfhxf

x

fxf

hx *2

)()(limlim)( 00

000

Ако горниот лимес е конечен и има вредност тогаш велиме дека функцијата

има извод во точката 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

Page 107: Matlab Upatstvo Za Vezbi

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 кој истовремено

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

грешката ).

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

студентот добие чуство што и како м-функцијата работи и истовремено да стане

Page 108: Matlab Upatstvo Za Vezbi

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 се повторува се додека грешката т.е.

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

дозволената толеранција.

Page 109: Matlab Upatstvo Za Vezbi

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

Page 110: Matlab Upatstvo Za Vezbi

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

Page 111: Matlab Upatstvo Za Vezbi

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

Page 112: Matlab Upatstvo Za Vezbi

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

Page 113: Matlab Upatstvo Za Vezbi

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

Page 114: Matlab Upatstvo Za Vezbi

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;

Page 115: Matlab Upatstvo Za Vezbi

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

или

bAx t.e

1

4

11

12

2

1

x

x

MATLAB наредби:

Page 116: Matlab Upatstvo Za Vezbi

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:

bAx 1 каде 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

Page 117: Matlab Upatstvo Za Vezbi

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

Page 118: Matlab Upatstvo Za Vezbi

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

Page 119: Matlab Upatstvo Za Vezbi

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 циклус и да се одзема елемент по елемент.

Page 120: Matlab Upatstvo Za Vezbi

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 *

Page 121: Matlab Upatstvo Za Vezbi

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-овата метода.

Page 122: Matlab Upatstvo Za Vezbi

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

Page 123: Matlab Upatstvo Za Vezbi

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

Page 124: Matlab Upatstvo Za Vezbi

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

Page 125: Matlab Upatstvo Za Vezbi

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

Page 126: Matlab Upatstvo Za Vezbi

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

Page 127: Matlab Upatstvo Za Vezbi

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.

Page 128: Matlab Upatstvo Za Vezbi

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

3.6.1 Полиномна регресија

Полиномната регресија за моделирање на податоците користи полиноми

како претпоставена теоретска крива. Користејќи го LSQ критериумот се

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

често се користат МАТЛАБ-от има вградена m-функција за полиномна регресија

polyfit. Сепак ние ќе напишеме наша m-функција за полиномна регресија со цел

студентите подлабоко да навлезат во техниката на програмирањето.

Нека се зададени емпириските податоци ),....,,( 21 nyyyy кои соодвест-

вуваат на мерните места или точки ),...,,( 21 nxxxx .Полиномната регресија се

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

01

1

1 ....)( axaxaxasp k

k

k

k

така да пресметаните коефициенти ak, ak-1,...,a1,a0 даваат најмала вредност на квадратната грешка.

n

j jj yxpS1

2))((

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

решавање на систем на равенки.

n

n

k

k

y

y

y

y

y

A

a

a

a

a

AA

1

3

2

1

'

0

1

1

'

.

..

каде матрицата A има облик:

Page 129: Matlab Upatstvo Za Vezbi

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

1.

1.

.....

.....

1..

1.

1.

1

1

1

11

3

1

33

2

1

22

1

1

11

n

k

n

k

n

n

k

n

k

n

kk

kk

kk

xxx

xxx

xxx

xxx

xxx

A

Димензијата на матрицата 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

Page 130: Matlab Upatstvo Za Vezbi

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 ) ги моделира податоците е:

8214.13929.1)( xxp

Ако сакаме да користиме полином од повисок ред (пр. к=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];

Page 131: Matlab Upatstvo Za Vezbi

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,'--')

0 1 2 3 4 5 6 71

2

3

4

5

6

7

8

9

10

11

Сл.3.6.1.

Page 132: Matlab Upatstvo Za Vezbi

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 Општа функциска регресија

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

полиномите од к-тиот степен. Но генерално може да се разгледуваат било кои

функции. Имено може најопшто да се дефинира кривата на следниот начин.

)(....)()()( 1111 xqaxqaxqaxf kkkk

при што функциите qk(x) се одбираат така да задоволуваат дадени услови или пак

ја презентираат физиката на проблемот. Не постои некое правило за избор на

функциите но најчест критериум е физикалниот контекс на проблемот како и

искуството. Сега матрицата A би добила форма.

Page 133: Matlab Upatstvo Za Vezbi

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

)()(.)()(

)()(.)()(

.....

.....

)()(.)()(

)()(.)()(

)()(.)()(

121

1112111

3132313

2122212

1112111

nnnknk

nnnknk

kk

kk

kk

xqxqxqxq

xqxqxqxq

xqxqxqxq

xqxqxqxq

xqxqxqxq

A

Како најчести функции кои се користат, покрај полиномите, се

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

Системот, претставен со горната матрица, се уште е линеарен, но понекогаш

се јавуваат и случаеви кога непознатите параметри ak, се во рамките на самите

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

квадрати (non-linear least sqyare NLSQ). Но понекогаш со одредени математички

трансформации проблемот може да се линеаризира. Например доста често се

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

)()( 11 xqaxf kade bxexq )(1

каде покрај коефициентот a1 непознатиот параметар е и b кој е во рамките на

функцијата q1.

Но со логаритмирање на левата и десната страна проблемот може да се линеаризира.

bxaxf 1ln))(ln(

или напишано во препознатлива форма:

bxcy каде ))(ln( xfy a )ln( 1ac

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

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

жува да ја искористиме 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')

Page 134: Matlab Upatstvo Za Vezbi

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

0 0.5 1 1.5 2 2.5 30

1

2

3

4

5

6

На графикот се покажани симулирани емпириски податоци. Тие се добиени кога на теоретската вредност на функцијата 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

Page 135: Matlab Upatstvo Za Vezbi

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

0 0.5 1 1.5 2 2.5 30

1

2

3

4

5

6

Од пресметките произлегува дека параметарот a добиен со регресијата

изнесува 4.8095 а параметарот b e -0.8863. Теоретските вредности се 5.5 и -1.2. На

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

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

задоволително “објаснет”, со регресионата крива.

Page 136: Matlab Upatstvo Za Vezbi

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

3.7. РЕШАВАЊЕ НА ОБИЧНИ ДИФЕРЕНЦИЈАЛНИ РАВЕНКИ

Page 137: Matlab Upatstvo Za Vezbi

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

Page 138: Matlab Upatstvo Za Vezbi

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

Сл.4.2.2. Работно поле во Simulink библиотека

Сл.4.2.3. Simulink библиотека

Page 139: Matlab Upatstvo Za Vezbi

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 кој може

да се отвори на еден од трите наведени начини

Page 140: Matlab Upatstvo Za Vezbi

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 библиотеката.

Преносот на некој од блоковите од поедина библиотека во работното поле

се остварува така што се кликнува со глушецот и држејќи го левото копче на

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

Page 141: Matlab Upatstvo Za Vezbi

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. има еден неупотребен влезен терминал и еден

неупотребен излезен терминал (терминал = крај, приклучок, клема).

Page 142: Matlab Upatstvo Za Vezbi

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) во форма на одскочна (степ) функција. Овој

Page 143: Matlab Upatstvo Za Vezbi

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”

Page 144: Matlab Upatstvo Za Vezbi

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.

Page 145: Matlab Upatstvo Za Vezbi

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

Сл.4.4.8. Празен екран на блокот "Scope"

Кога симулацијата е извршена, сигналот што доаѓа на блокот "Scope" ќе

биде прикажан на овој екран.. Подетално работата на блокот "Scope" нема да се

опишува во оваа точка. Единствено ќе се користи само функцијата за автоскали-

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

4.5. СТАРТ НА СИМУЛАЦИЈАТА

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

со преносна функција од втор ред: mt_p42_03_Primer.mdl.

Се отвора овој фајл во Simulink следејќи ги претходните инструкции во

ова поглавје. Треба да се појави прозорецот на Сл.4.4.9.

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

Page 146: Matlab Upatstvo Za Vezbi

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

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

екранот на осцилоскопот со кликнување два пати на блокот Scope. Потоа за старт

на симулацијата треба да се кликне на копчето “Simulation”. Ќе се отвори менито

како на Сл.4.4.10.

Сл.4.4.10. Стартување на симулацијата

Со притискање на копчето „Start” симулацијата ќе почне и многу брзо ќе

заврши. На осцилоскопот ќе се појави сликата прикажана на Сл.4.4.11.

Сл.4.4.11. Резултат на симулацијата – Одговор на системот од втор ред побуден со одскочна (или степ) функција.

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

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

автоматско скалирање означено со двоглед . Со тоа ќе се изврши прескалирање на

оските и ќе се добие одговор како на Сл.4.4.12.

Page 147: Matlab Upatstvo Za Vezbi

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. а) нови параметри на системот, б) одзив на системот под а)

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

вертикалната оска на осцилоскопот. Бидејќи новата преносна функција има многу брз одзив, тој е компресиран во многу тесен дел од екранот на осцилоскопот. Ова

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

Page 148: Matlab Upatstvo Za Vezbi

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 а) на степ побуда

Page 149: Matlab Upatstvo Za Vezbi

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. б) во кој ќе понатаму се соберат потребните блокови и ќе се креира системот.

Page 150: Matlab Upatstvo Za Vezbi

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.а)

Page 151: Matlab Upatstvo Za Vezbi

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.

Page 152: Matlab Upatstvo Za Vezbi

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.

Page 153: Matlab Upatstvo Za Vezbi

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

Сл.4.6.6. Прозор со модифицираните блокови

- Во овој чекор ги менуваме имињата на блоковите. Тоа се прави со кликнување

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

на намената на блокот. Овде ќе ги промениме имињата на преносните

функции. Со кликнување на зборовите „Transfer Fcn“ го менуваме името на блокот во “PI Regulator”. Потоа на исти начин го менуваме името на втората

преносна функција „Transfer Fcn1“ во “Objekt”. Едитирањето на имињата се

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

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

Сл.4.6.7.

Сл.4.6.7. Прозор со променети имиња на блоковите

4.6.3. Поврзување на блоковите со линии

Сега кога блоковите се точно подесени тие треба да се поврзат помеѓу себе. За

поврзување треба да се направат следниве чекори.

- Со глувчето курсорот го донесуваме на излезот на блокот „Step“. Кога ќе се појави крст го стиснуваме левото копче на глувчето и држејќи го повлекуваме

Page 154: Matlab Upatstvo Za Vezbi

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

линија кон првиот влез во суматорот. Чим ќе се појави крст со дупли линии

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

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

позициониравме на влезот во суматорот (ќе се појави крст и стрелката на

линијата) , а потоа, со притиснато лево копче на глушецот, влечеме линија кон

излезот од блокот „Step“. Резултатот ќе биде ист и ќе изгледа како на Сл.4.6.8.

Сл.4.6.8. Изглед на поврзувањето на два блока

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

Линиите мора да извираат од излезните терминали на блоковите и да

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

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

Сл.4.6.9. Изглед на прозорот после поврзувањето на блоковите

- Линијата која остана ненацртана е повратната врска од излезот на објектот до

негативниот влез на суматорот. Оваа линија се разликува од претходните од

Page 155: Matlab Upatstvo Za Vezbi

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

две причини. Прво бидејќи оваа линија го поврзува излезот и влезот на

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

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

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

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

линијата измеѓу блоковите “Objekt” и“Scope”, го притискаме копчето Ctrl и

држиме, а потоа го притискаме левото копче на глушецот (ќе се појави крст на

линијата) и држејќи го повлекуваме линија надолу и лево. Резултатот на оваа

операција е прикажан на Сл.4.6.10.

Сл.4.6.10. Изглед на прозорот после повлекување линија за повратната врска

- Сега на оваа парцијална испрекината линија имаме отворена стрелка која

може да се третира како излезен терминал. Од оваа стрелка-терминал

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

Системот со затворена повратна врска е прикажан на Сл.4.6.11.

Сл.4.6.11. Изглед на прозорот после затворањето на повратната врска

Page 156: Matlab Upatstvo Za Vezbi

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

- Сега, после спојувањето на сите блокови и затворањето на повратната врска

добиен е системот на Сл.4.6.11. До сега не водевме сметка за естетскиот

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

коректното поврзување. Следи фаза на дотерување на сликата што подрзбира

порамнување на блоковите, нивно зголемување или смалување, исправување

на линиите и разместување на блоковите на прикладна оддалеченост. Ова се

работи така што се доведува курсорот на избраниот блок, се стиснува левото

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

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

блоковите и за исправување на линиите како и за разместување на блоковите

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

копче на глушецот по претходно позиционирање на одбраниот влок.

Маркираниот блок го зголемуваме (смалуваме) доведувајќи го курсорот на

еден од аглите на блокот при што ќе се појави коса црта со две стрелки во чии

насоки го повлекуваме глушецот со цел да го зголемиме (или смалиме)

блокот. Резултатот од наведените активности е прикажан на Сл.4.6.12.

Сл.4.6.12. Изглед на системот после дотерувањето на сликата

- Конечно, останува да се испишат одредени ознаки и натписи на сликата. Се

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

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

да биде испишан текстот. Ознаките на сигналите ги ставаме над линиите што

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

прозорче во кое ја пишуваме ознаката или текстот. На овој начин на Сл.4.6.13

се испишани сигналите: r – референтен сигнал, e – сигнал на грешка, u –

управувачки сигнал, y – излезен сигнал.

Page 157: Matlab Upatstvo Za Vezbi

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 дефинитивно е

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

Page 158: Matlab Upatstvo Za Vezbi

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 пишуваме К наместо неговата бројна вредност.

Page 159: Matlab Upatstvo Za Vezbi

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

Сл.4.6.16. Задавање вредности на параметарот К од

командниот прозор на МАТЛАБ

Го затвораме дијалог прозорецот. Во симулацискиот модел во блокот Gain

ќе стои ознаката К наместо бројка (Сл.4.6.17).

Сл.4.6.17. Задавање на параметар (засилување) од командниот прозор на МАТЛАБ

Сега може да се рестартира симулацијата и да се види излезот на

осцилоскопот „Scope“. Резултатот треба да биде истиот како порано. Ако се

споредат Сл.4.6.15 и новодобиената слика Сл.4.6.18.

Page 160: Matlab Upatstvo Za Vezbi

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

Сл.4.6.18. Одзив на системот со засилување К=2.5 зададено

од командниот прозор на МАТЛАБ

Задавањето на параметрите на системот од командниот прозор на МАТЛАБ

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

Симулинк моделот. Така на пример сега мо\е да го промениме засилувањето К

задавајки во командниот прозор нова вредност:

>> К=5

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

4.6.19.

Сл.4.6.19. Одзив на системот со засилување К=5 зададено

од командниот прозор на МАТЛАБ

Освен варијабли, сигнали и дури цели системи може да бидат разменети

помеѓу МАТЛАБ и Симулинк.

Page 161: Matlab Upatstvo Za Vezbi

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

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

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

примена на физикалните закони на механиката, електротехниката, механиката на

флуиди, термодинамиката итн. Воопшто физикалните динамички системи се

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

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

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

5.1. МЕХАНИЧКИ СИСТЕМИ

Пример 5.1.1. Механички систем со маса, пружина и придушувач

Системот е даден на Сл. 5.1.1.

m - masa

k - konstanta na pru`inata

c - koeficient na viskozno pridu{uvawe

xc

kx

)(tFm

x

c

k

m)(tF

Dijagram na slobodno telo

Trieweto na trkalata so

podlogata se zanemaruva

Сл. 5.1.1. Механички систем со маса, пружина и придушувач

Со примена на вториот Њутнов закон за движењето на масата на Сл. 5.1.1

во насока на x оската се добива следнава равенка:

)(2

2

tFkxdt

dxc

dt

xdm (5.1.1.)

или

)(1

2

2

tFm

xm

k

dt

dx

m

c

dt

xd (5.1.2)

каде се:

Page 162: Matlab Upatstvo Za Vezbi

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

F(t) - надворешна сила наложена на масата;

kx - сила на пружината, к – константа на пружината,

xcdt

dxc - придушна сила на цилиндерот, c – коефициент на придушување,

Сега равенката (5.1.2) може да се напише во форма:

)(1

tFm

xm

kx

m

cx (5.1.3)

Состојбата на механичкиот систем на Сл.5.1.1 се карактеризира со

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

одредена со xdtdx / . Ако овие варијабли на состојба ги означиме со:

xx

xx

2

1 (5.1.4)

тогаш диференцијалната равенка од втор ред (5.1.3) може да се запише во форма

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

])([

1122

21

kxcxtFm

x

xx

(5.1.5)

Нека во почетокот (t=0) , до кога масата била во мирување, почне да

делува константна сила F(t)=25N . Нека се останатите параметри на системот:

]/

[5],/[25],[1sm

NcmNkkgm

Потребно е да се направи програма во МАТЛАБ за симулација на

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

Во МАТЛАБ за решавање на диференцијални равенки прво се формира

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

равенки, а потоа се формира главна програма М-фајл во кој се дефинираат

условите за симулација, се повикува соодветна рутина за интеграција (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))];

Page 163: Matlab Upatstvo Za Vezbi

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.

Page 164: Matlab Upatstvo Za Vezbi

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

Пример 5.1.2. Нишало

Се разгледува едноставно нишало илустрирано на Сл. 5.1.3. каде метална

топка со тежина ][kgmgG е обесена во точката О со бестежински стап долг L

[m]. Системот реално е нелинеарен и вклучува вискозно пригушување со

коефициент на придушување ]/

[sm

NC .

Ако е ][rad агол на отклонот на стапот од рамнотежната состојба,

брзината на крајот на стапот (брзината на топката) ќе биде LxVT и

тангенцијалната сила која делува во насока на прирастот на аголот (во насока на x

оската на Сл.5.1.3) ќе биде:

CLGFT sin

mgG

TFmLxm sinG

cosG

+x

L

m

O

xC

LVx T

NF

M

Сл.5.1.3. Нишало

Од вториот Њутнов закон следи:

TFmL

Комбинирајќи ги горните две равенки за силите се добива:

0sin GCLmL

Page 165: Matlab Upatstvo Za Vezbi

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

Ова е нелинеарна диференцијална равенка од втор ред. Ако воведеме

ознаки за варијаблите на состојба на системот: 1x (аголна позиција на ниша-

лото) и 2x (аголна брзина), тогаш горната равенка може да се запише во фор-

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

122

21

sin xmL

Gx

m

Cx

xx

Горните равенки се погодни за решавање во 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

Page 166: Matlab Upatstvo Za Vezbi

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)

Page 167: Matlab Upatstvo Za Vezbi

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

Сл. 5.1.5. Одѕиви на нишалото на Сл. 5.1.3. (tf=20 s)

Page 168: Matlab Upatstvo Za Vezbi

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

Page 169: Matlab Upatstvo Za Vezbi

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

6. СИСТЕМИ НА УПРАВУВАЊЕ (CONTROL SYSTEM TOOLBOX)

6.1. ПОЛИНОМИ

Полиноми се континуирани функции кои претставуваат линерана комбина-

ција на мономи. Например полиномот

52)( 3 sssp

е полином од трет степен.

Во MATLAB-от, полиномот се претставува со помош на вектор-ред кој ги

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

степен.

>> p = [ 1 0 -2 -5]

p =

1 0 -2 -5

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

нивното соодветно место.

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

6.1.1. Нули на полиномот

Функцијата roots пресметува нули на даден полином т.е. ја определува вредноста на независната променлива за која полиномот добива нулта вредност.

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

и комплексните корени:

>> p = [ 1 0 -2 -5] >> r = roots(p)

РБ Функција Опис

1. conv множење на полиноми

2. deconv делење на полиноми

3. poly определување на полином ако се знаат нулите

4. roots определување на нулите на полином

5. polyval пресметување на вредноста на полином

6. polyder диференцирање на полином

7. polifit определување на полином со кој се апроксимираат

дадени податоци

8. polivalm пресметување на вредностите на матричен полином

9. residue развој на парцијални дропки (резидуали)

Page 170: Matlab Upatstvo Za Vezbi

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

r =

2.0946

-1.0473 + 1.1359i

-1.0473 - 1.1359i

Пример 6.1.1.: Najdi gi korenite na polinomot:

1575.1475.6725.6125.319 23456 ssssss

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]

Page 171: Matlab Upatstvo Za Vezbi

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линомот

52)( 3 xxxp за 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.

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

32)( 2 sssa i 654)( 2 sssb

>> a = [ 1 2 3]; b = [ 4 5 6];

>> c = conv(a,b)

c =

4 13 28 27 18

Page 172: Matlab Upatstvo Za Vezbi

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. Развој на парцијални дропки

Рационална функција е однос (количник) на два полинома која има

форма:

....

...

011

1

011

1

asasasa

bsbsbsb

sA

sBsH

nn

nn

mm

mm

(1)

За nm , )(sH е позната како права (proper) рационална функција, а за

nm функцијата )(sH е позната како неправа (improper) рационална

функција.

Ако се означат корените на полиномот во именителот со nppp ,...,, 21

тогаш именителот )(sA може да се запише во факторизирана форма:

nn pspspsasA ...21 , (2)

а )(sH може да се запише како:

,...21 n

n pspspsa

sB

sA

sBsH

(3)

Развојот на парцијални дропки е техника за развој на )(sH во форма

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

За развој на парцијални дропки се користи функцијата residue чија

примена ќе биде покажана подолу.

Page 173: Matlab Upatstvo Za Vezbi

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

Различни и реални корени

Кога корените nppp ,...,, 21 се раззлични и реални, тогаш со развојот на

парцијални дропки функцијата )(sH може да се изрази како

,......2

2

1

1

n

n

k

k

ps

K

ps

K

ps

K

ps

KsH

(4)

каде константите kK се нарекуваат резидиуми (остатоци) кои може да бидат

пресметани со командата residue:

[k,p]=residue(b,a)

која ги пресметува резидијумите: ]...,,,[ 21 nKKKk и корените на

карактеристичниот полином ],...,,[ 21 npppp .

Пример 6.1.3:

sss

ssH

34

2)(

23

>> b = [1 2];

>> a = [1 4 3 0];

>> [k,p] = residue(b,a)

k =

-0.1667

-0.5000

0.6667 p =

-3

-1

0

sssssssH 3

2

12

1

3

6

1

0

6667.0

)1(

5000.0

)3(

1667.0)(

Различни комплексни корени

243

12)(

23

2

sss

sssH

>> 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

Page 174: Matlab Upatstvo Za Vezbi

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

p =

-1.0000 + 1.0000i

-1.0000 - 1.0000i

-1.0000

1

4

1

25.1

1

25.1)(

sjs

j

js

jsH

Корени што се повторуваат

Во овој случај кога nm функцијата )(sH

)(

)()(

sA

sBsH

може да се изрази како

,........)(

...)( 1

1

21

2

1

1

n

n

p

p

pk

p

ps

K

ps

K

ps

K

ps

K

ps

KsH

(5)

Пример 6.1.4:

23

15)(

3

ss

ssH

>> 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

2)1(

2

1

1

2

1)(

ssssH

Page 175: Matlab Upatstvo Za Vezbi

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

Развој на неправи рационални функции

Се разгледува рационална функција

)(

)()(

sA

sBsH

во која степенот на полиномот )(sB е поголем од степенот на полиномот

).(),( nmsA

Со делење на полиномите , )(sH може да се запише во форма:

)(

)()()(

sA

sRsQsH

каде количникот )(sQ е полином од ѕ со степен nm и остаток )(sR којшто е

полином со степен стриктно помал од n . Така )(/)( sAsR е права рационална

функција која може да биде развиена во парцијални дропки.

Развојот на парцијални дропки на неправа рационална функција во

МАТЛАБ се пресметува со примeна на наредбата residue во форма:

[k,p,q]=residue(b,a). Оваа функција ги идредува резидуите ]...,,,[ 21 nKKKk ,

корените (половите) ],...,,[ 21 npppp и коефициентите од делењето на двата

полиноми ],...,,[ 21 mnqqqq .

Пример 6.1.5.:

24

42)(

2

3

ss

sssH

>> 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

4495.0

6145.0

4495.4

6145.204)(

ssssH

Page 176: Matlab Upatstvo Za Vezbi

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

Добивање рационална функција – инверзна операција на претходната

Ако се зададени резидуите ]...,,,[ 21 nKKKk , корените

],...,,[ 21 npppp и коефициентите ],...,,[ 21 mnqqqq тогаш со наредбата

[b,a] = residue(k,p,q) се добива рационалната функција

)(

)()(

sA

sBsH .

Пример 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

24

42)(

2

3

ss

sssH

Page 177: Matlab Upatstvo Za Vezbi

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

6.2. ФУНКЦИИ ЗА ОДРЕДУВАЊЕ НА ЛАПЛАСОВАТА ТРАНСФОР

МАЦИЈА И ЗА ДЕФИНИРАЊЕ НА LTI СИСТЕМИ:

laplace, tf, ss , pole, zero, еoператори: ‘s’ и ‘z’

6.2.1 Функција laplace

Со функцијата laplace се одредува Лапласовата трансформација од

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

примена.

Пример 6.2.1:

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

)cos()sin(),sin(,2 tbtaxtaxex 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)

Page 178: Matlab Upatstvo Za Vezbi

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

Функции за дефинирање на LTI (Linear Time Invariant) системи:

6.2.2 Функција tf

Континуални системи:

форма: G=tf(num,den)

аргументи: num – вектор на коефициентите на полиномот во броителот на

преносната функција )(sG ;

den – вектор на коефициентите на полиномот во именителот

на преносната функција )(sG

Пример 6.2.2.

Преносната функција 14

32)(

2

ss

ssG во Матлаб се презентира како:

>> G=tf([2 3],[1 4 1])

Матлаб одговара со:

Transfer function:

2 s + 3

-------------

s^2 + 4 s + 1

Пример 6.2.3.

Преносната функција 2

5)(

2

s

ssG во Матлаб може да се презентира се

презентира како:

>> num=[5 0]; den=[1 0 2];

>> G=tf(num,den)

Матлаб одговара на ист начин:

Transfer function:

5 s

-------

s^2 + 2

Дискретни системи:

форма: G=tf(num,den,Тѕ)

аргументи: num – вектор на коефициентите на полиномот во броителот на

преносната функција )(zG ;

den – вектор на коефициентите на полиномот во именителот

на преносната функција )(zG

Тѕ – периода на одбирање

Page 179: Matlab Upatstvo Za Vezbi

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

Пример 6.2.4.

Преносната функција 2.02.0

1)(

2

zzzG во Матлаб се презентира

како:

>> 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

zzG

2)(

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

како:

>> 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.

Преносната функција 14

32)(

2

ss

ssG во Матлаб се презентира како:

>> s=tf('s');

>> G=(2*s+3)/(s^2+4*s+1)

Матлаб одговара со:

Transfer function:

2 s + 3

-------------

s^2 + 4 s + 1

Page 180: Matlab Upatstvo Za Vezbi

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

Дискретни системи

форма: z=tf(„s‟, Ts); G=(bm*z^m+…+b1*z+b0)/(an*z^n+…+a1*z+a0);

Пример 6.2.6.

Преносната функција 2.02.0

1)(

2

zz

zsG во Матлаб се презентира

како:

>> 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 се матрици на моделот во просторот на состојба:

DuCxyBuAxx

Пример 6.2.7: Систем од втор ред со еден влез и со еден излез:

2

1

2

1

2

1

01

1

0

10

21

x

xy

ux

x

x

x

Matlab интерпретација на горните равенки:

>> A=[-1 2; 0 -1]; B=[0; 1]; C=[1 0]; D=[0];

>> G=ss(A,B,C,D)

Page 181: Matlab Upatstvo Za Vezbi

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

Дадена е преносната функција:

14

32)(

2

ss

ssG ; полови: 322,1 p ; нули: 5.1

2

31 z

Одредување на нулите и половите во МАТЛАБ:

>> 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

Page 182: Matlab Upatstvo Za Vezbi

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

6.3. ODZIVI NA LINEAREN SИSTEM

Функции: initial, impulse, step, lsim

6.3.1. Funkcija initial

Оваа функција дава одзив на LTI систем на почетни услови. Системот е

опишан во просторот на состојба:

Cxyxx(0),Axx 0

Опции:

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 е опишано со следниве равенки во

матрична форма:

)(10

)(

)(

1

10

)(

)(

2

1

2

1tu

Ltx

tx

L

R

L

Ctx

tx

(1)

)(

)(01)(

2

1

tx

txty ,

каде варијаблите на состојба се: )()(1 tUtx C - напон на кондензаторот и

)()(2 titx - струјаја во колото, а како излез е земен напонот на кондензаторот:

)()()( 1 txtuty c )

Компактната матрична форма на записот на равенките (1) е:

Page 183: Matlab Upatstvo Za Vezbi

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

)()()()()()(tuttytutt

DCxBAxx

(2)

каде матриците на системот A , B , C и D се одредени со:

]0[],01[,10

010

,1010

10000

1

10

DCBA

LL

R

L

C . (3)

Потребно е да се одреди одзивот, напонот на кондензаторот, )(tUc , на

почетен услов VUc 5)0( , односно T]05[)0( 0 xx .

DC

R L

C)(ti

)(tU c)(tU

Сл.6.3.1. Електрично коло- сериски RLC спој

параметри: FCHLR 1000,10.0,4

Решението на задачата е дадено во 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

Page 184: Matlab Upatstvo Za Vezbi

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

Пример 6.3.2:

За системот опишан со преносна функција

12

1)(

2

sssG (1)

да се одреди одзивот на почетен услов: Tx ]31[)0( .

Решението во Матлаб е дадено подолу.

% 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 креиран од корисникот.

Page 185: Matlab Upatstvo Za Vezbi

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

Page 186: Matlab Upatstvo Za Vezbi

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):

mqq

6.2

027.0

387.052.2

0.1334.0

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

брзина на извишување qx 2 . Моделот има еден влез – отклонот на кормилото

Page 187: Matlab Upatstvo Za Vezbi

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

за висина mu . Да се определи одзивот на авионот на импулсна команда.

Како излез да се земе комплетниот вектор на состојба.

Долниот 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 б).

Page 188: Matlab Upatstvo Za Vezbi

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

6.3.3. Funkcija STEP

Функцијата step дава одзив на системот на степ функција.

форма: step(G)

аргументи: G e LTI модел на системот (генериран со функцијата tf или ss).

Пример 6.3.7

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

1

1)(

2

ss

ssG .

Функцијата 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 степ

побуда

Page 189: Matlab Upatstvo Za Vezbi

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

Ако функцијата step се повика во следнава форма:

[y,t] = step(G);

векторите t и y содржат автоматски одбрани временски моменти и вредности на

одзивот на степ побуда во тие моменти, респективно; графикот на одзивот на степ

не се исцртува.

Ако функцијата step се повика во следнава форма:

y=step(g,t);

при што однапред е дефиниран векторот на временските моменти t во кои се

пресметува одзивот на степ, вредностите на одзивот во тие моменти се содржани

во векторот y.

Пример 6.3.9

Нека е зададена преносната функција 1

1)(

2

ss

ssG . Следниов фајл е

пример за користње на опцијата 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 .

Page 190: Matlab Upatstvo Za Vezbi

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

Пример 6.3.10.

Нека е системот опишан со преносната функција

1

1

)(

)()(

2

ss

s

sU

sYsG (1)

и нека на влезот делува сигнал како на Сл.6.3.11.

Потребно е да се одреди одзивот на системот на оваа побуда. На графот да

се нацртаат и побудниот сигнал u(t) и одзивот y(t).

U(t)

t0 20 40 60 80 100

1

-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); plot(t,u,'b'),grid; hold on;

plot(t,y,'r'); hold off;

Сл.6.3.12. Одзив на побуда како на Сл.6.3.11

На Сл.6.3.12 со плава боја е прикажан влезот на системот со преносна

функција (1) , а со црвената неговиот излез.

Page 191: Matlab Upatstvo Za Vezbi

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);

plot(t,u,'b-o'); hold on;

plot(t,y,'r-o'); hold off;

grid;

Сл.6.3.13 Одзиви на дискретен систем

На Сл 6.3.13. со плава боја е прикажан влезот на системот со преносна

функција:

2.02.0

1)(

2

zzzG ,

а со црвената боја неговиот излез.

Опција на функцијата 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 опции.

Page 192: Matlab Upatstvo Za Vezbi

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

Пример 6.3.12

Да се одреди одзивот на авион чија динамика е опишана во просторот на

состојба со равенките:

mqq

6.2

027.0

387.052.2

0.1334.0

mqy

y

0

0

10

01

2

1

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

брзина на извишување qx 2 . Моделот има еден влез – отклонот на кормилото

за висина mu . Отклонот на кормилото се менува како во претходниот

пример, Пример 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

Page 193: Matlab Upatstvo Za Vezbi

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.

Page 194: Matlab Upatstvo Za Vezbi

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

6.4 ФРЕКВЕНЦИСКИ КАРАКТЕРИСТИКИ НА LTI СИСТЕМИ

6.4.1. Функција bode

Форма: bode(G)

Аргументи: G е LTI модел на системот генериран со функцијата tf или

со функцијата ss

Пример 6.4.1

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

)100)(1.0(

)1(1000)(

ss

ssG (1)

Функцијата 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)

Page 195: Matlab Upatstvo Za Vezbi

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);

Page 196: Matlab Upatstvo Za Vezbi

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

Page 197: Matlab Upatstvo Za Vezbi

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) ][dBGm се дефинира како она

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

)(

1

cgjGGm

каде )( cgjG е засилување на фреквенцијата cg на која фазната карактеристика

го сече правецот deg180 . Амплитудното осигурување се дава во децибели:

Gm_dB = 20*log10(Gm)

Page 198: Matlab Upatstvo Za Vezbi

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

Фазното осигугурување е онај износ на фазното доцнење на пресечната

фреквенција cp кое е потребно системот да дојде на граница на стабилноста.

Фазното осигурување изнесува

)(180 cpPm

За стабилни системи амплитудното и фазното осигурување се позитивни

величини ( 0,0 PmGm ) , а за нестабилни системи се негативни.

Функцијата [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

Page 199: Matlab Upatstvo Za Vezbi

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 глдаме крива која е

симетрична во однос на х-оската.

Page 200: Matlab Upatstvo Za Vezbi

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 Најквистов дијаграм

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

просторот на состојба.

Page 201: Matlab Upatstvo Za Vezbi

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

6.5 ГЕОМЕТРИСКО МЕСТО НА КОРЕНИТЕ - ГМК

(ROOT LOCUS)

Цртањето на геометриското место на корените - ГМК (root locus) е многу

лесно и брзо со примена на МАТЛАБ. Ова е многу поочигледно за покомплексни

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

За да се најде ГМК се користи командата rlocus(num,den) каде num и den

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

Системот на автоматско упрвување е прикажан на Сл.6.5.1.

)(sR )(sY)(sE

den

numsG )(K

Сл.6.5.1 Затворен систем на автоматско управување

Во примерите се користи преносна функција

sssden

numsG

55

1)(

23 (1)

Пример 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 даден подолу.

Page 202: Matlab Upatstvo Za Vezbi

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];

rlocus(num,den,K);

Сл.6.5.3 ГМК за системот на Сл.6.5.1 при

промена на К по сегменти со различен чекор

Page 203: Matlab Upatstvo Za Vezbi

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

dlqr Linear-quadratic requlator design for discrete-time systems, see also

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

Page 204: Matlab Upatstvo Za Vezbi

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 Impulse response of continuous-time linear systems, see also step,

lsim, dlsim

input Prompt for user input

inv Find the inverse of a matrix

jgrid Generate grid lines of constant damping ratio (zeta) and settling

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

lqr Linear quadratic regulator design for continuous systems, see also

dlqr

lsim Simulate a linear system, see also step, impulse, dlsim.

margin Returns the gain margin, phase margin, and crossover frequencies, see

also bode

norm Norm of a vector

nyquist1

Draw the Nyquist plot, see also lnyquist1. Note this command was

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

Page 205: Matlab Upatstvo Za Vezbi

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 Set(gca,'Xtick',xticks,'Ytick',yticks) to control the number and spacing of

tick marks on the axes

series Series interconnection of Linear time-independent systems

sgrid Generate grid lines of constant damping ratio (zeta) and natural

frequency (Wn), see also jgrid, sigrid, zgrid

sigrid Generate grid lines of constant settling time (sigma), see also jgrid, sgrid,

zgrid

size Gives the dimension of a vector or matrix, see also length

sqrt Square root

ss Create state-space models or convert LTI model to state space, see

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

tf Creation of transfer functions or conversion to transfer function, see

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

wbw Returns the bandwidth frequency given the damping ratio and the rise or

settling time.

xlabel/ylabel Add a label to the horizontal/vertical axis of the current plot, see also

title, text, gtext

zeros Returns a vector or matrix of zeros

zgrid Generates grid lines of constant damping ratio (zeta) and natural

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

Page 206: Matlab Upatstvo Za Vezbi

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.

Page 207: Matlab Upatstvo Za Vezbi

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.

Page 208: Matlab Upatstvo Za Vezbi

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.

Page 209: Matlab Upatstvo Za Vezbi

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.

Page 210: Matlab Upatstvo Za Vezbi

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.

Page 211: Matlab Upatstvo Za Vezbi

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

Погоре се дадени неколку примери како може да се користи help наредбата. Им

се препорачува на студентите исцрпно дa го користат help за да се запознаат со

сите вградени функции како и со нивните можности. Во рамките на еден ваков

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

аспекти и можности на MatLab-от.