You are on page 1of 222

J t V <'

it 09
Доц. д-р инж. Йордан Тончев Йорданов

M ATLAB
Преобразувания
Изчисления
Визуализация

Издателство „Техника“
София, 2007
; :? t \s , ;A I
u V) Q
•^л/С o „ i, ^
3
( v £ i

Книгата представлява практическо ръководство за работа с MATLAB -


най-популярната програмна система за аналитични преобразувания, числе­
ни пресмятания и графично представяне на резултатите.
Предназначена е за инженери и за специалисти в различни области на
науката и техниката, където се използва MATLAB, за студенти и докторан­
ти, изучаващи инженерните приложения на системата, а също и за техните
преподаватели.

Първо издание,първа допечатка

ISBN 978-954-03-0659-9 (ч.1)

© Йордан Тончев Йорданов, 2005


© Издателство „Техника", графично оформление, 2005
Всички права запазени
Съдържание
Предговор................................................................................ 7
1. Основни сведения за M A T L A B ...................... 9
1.1. Графичен интерфейс на MATLAB 6 ...................................... 10
1.1.1. Команден прозорец - Command W indow.................................. 10
1.1.2. Стартов бележник - Launch Pad ............................................... 13
1.1.3. Работно пространство - Workspace ......................................... 13
1.1.4. История на командите - Command History............................... 14
1.1.5. Текуща директория - Current Directory ..................................... 15
1.2. Системни команди. Help. Demo............................................ 17
1.2.1. Системни команди..................................................................... 17
1.2.2. Получаване на помощна информация (Help).......................... 28
1.2.3. Демонстрационни задачи (Demos).......................................... 29
1.3. Изрази - числа, променливи, математически оператори
и функции ................................................................................. 31
1.3.1. Числа .......................................................................................... 31
1.3.2. Променливи ............................................................................... 32
1.3.3. Математически оператори........................................................ 32
1.3.4. Математически функции ........................................................... 33
1.3.5. Комплексни числа и функции ................................................... 35
1.4. Операции с вектори, матрици и полиноми........................ 38
1.4.1. Въвеждане на вектори и матрици ............................................ 38
1.4.2. Генериране на вектори и матрици ........................................... 39
1.4.3. Определяне на размера на вектори и матрици ...................... 40
1.4.4. Преобразуване на вектори и матрици ..................................... 40
1.4.5. Извличане, вмъкване и премахване на части от матрица ..... 41
1.4.6. Логическо индексиране ............................................................ 43
1.4.7. Действия с вектори и матрици................................................. 44
1.4.8. Матрични функции..................................................................... 46
1.4.9. Обработка на експериментални данни................................... 47
1.4.10. Операции с полиноми ............................................................... 49
1.5. Структури от данни в MATLAB............................................. 50
1.5.1. Основни класове обекти в MATLAB ......................................... 50
1.5.2. Многомерни масиви................................................................... 51

3
MATLAB. Част 1

1.5.3. Клас низове (char)...................................................................... 51


1.5.4. Масив от записи (Array of Structures) ...................................... 53
1.5.5. Масив от клетки (Array of Cells) ................................................ 54
1.5.6. Установяване на класа на обекта............................................. 57
1.6. Файлове - скриптови файлове, файл-функции,
файлове с данни...................................................................... 57
1.6.1. Скриптови файлове (Scripts) .................................................... 57
1.6.2. Файл-функции (File Functions) .................................................. 60
1.6.3. Глобални и локални променливи ............................................. 62
1.6.4. Файлове с данни ........................................................................ 63
1.6.5. Заключителни бележки ............................................................. 65
1.7. Управляващи оператори. Програмиране ............................ 66
1.7.1. Управляващи оператори........................................................... 66
1.7.2. Въвеждане и извеждане на информация ................................ 76
1.7.3. Организиране на менюта. Функция m e n u ............................... 77
1.7.4. Работа с форматирани файлове.............................................. 78
1.7.5. Сглобяване на команди в MATLAB от отделни
низове - функция eval ............................................................ 79
1.7.6. Файл-функции с променлив брой аргументи........................... 80
1.7.7. Функции от функции. Функция f e v a l .................................... 85
1.7.8. Подфункции и Private (лични) функции ................................... 88
1.7.9. Локализиране и отстраняване на грешки. Оптимизация........ 90
1.8. Графика и анимация ............................................................... 91
1.8.1. Двумерна графика ..................................................................... 91
1.8.2. Тримерна графика .................................................................... 103
1.8.3. Редактиране, печат, съхраняване и вмъкване на графика в
документ.................................................................................... 105
1.8.4. Дескрипторната графика на MATLAB ..................................... 107
1.8.5. Анимация.................................................................................... 109
1.8.6. Някои проблеми с кирилицата и тяхното отстраняване....... 111
2. Интегриране на MATLAB с MS Word - Notebook ............... 113
2.1. Конфигуриране на Notebook................................................. 114
2.2. Работа в средата на Notebook.............................................. 115
2.2.1. Създаване на нова М-книга.........................................................116

- 4 -
Съдържание

2.2.2. Отваряне на съществуваща М-книга....................................... 116


2.2.3. Преобразуване на обикновен документ на Word в М-книга.... 117
2.3. Дефиниране на команди на MATLAB като входни клетки 117
2.3.1. Дефиниране на единична входна клетка................................ 117
2.3.2. Дефиниране на група входни клетки....................................... 118
2.3.3. Дефиниране на автостартова клетка Autolnit.......................... 120
2.3.4. Дефиниране на секции или зони на пресмятане (Calc Zones) 120
2.3.5. Преобразуване на входни клетки в текст................................ 120
2.4. Изпълнение на команди на MATLAB................................... 121
2.4.1. Въвеждане и изпълнение на команда на MATLAB ................ 121
2.4.2. Пресмятане на група клетки..................................................... 121
2.4.3. Пресмятане на непрекъсната последователност
от входни клетки ....................................................................... 122
2.4.4. Пресмятане на секция.............................................................. 122
2.4.5. Пресмятане на цялата М-книга ............................................... 122
2.4.6. Циклично пресмятане на последователност от клетки.......... 123
2.4.7. Преобразуване на изходни клетки в обикновен текст............ 123
2.4.8. Изтриване на изходни клетки................................................... 124
2.5. Форматиране и отпечатване на М-книга ............................ 124
2.6. Характерни особености на Notebook и препоръки
за ефективна работа.............................................................. 126
3. Символни преобразувания - Symbolic Math Toolbox. 130
3.1. Дефиниране на символни променливи и изрази ............. 131
3.2. Аритметика с променлива точност - V P A .......................... 134
3.3. Опростяване и преобразуване на символни изрази ....... 137
3.3.1. Операции над полиноми .......................................................... 137
3.3.2. Опростяване на символни изрази ........................................... 138
3.3.3. Субституции .............................................................................. 139
3.4. Решаване на задачи от линейната алгебра ....................... 142
3.5. Решаване на задачи от математическия анализ............... 145
3.6. Решаване на алгебрични и трансцендентни уравнения .. 153
3.6.1. Решаване на едно уравнение.................................................. 153
3.6.2. Решаване на система от уравнения ....................................... 154

- 5 -
MATLAB. Част 1

3.7. Аналитично решаване на диференциални уравнения .... 156


3.8. Интегрални преобразувания ........ 159
3.8.1. Право и обратно преобразувание на Фурие .......................... 159
3.8.2. Право и обратно преобразувание на Лаплас......................... 160
3.8.3. Z-преобразувание и обратно Z-преобразувание ................... 165
3.9. MapleV - специални математически функции................... 167
3.10. Изпълнение на функции на Maple от средата на MATLAB 169
3.11. Допълнителните възможности на Extended Symbolic
Math Toolbox ............................................................................ 172
3.11.1. Пакети библиотечни функции на Maple................................... 172
3.11.2. Зареждане и изпълнение на потребителска процедура ........... 173
3.11.3. Компилиране на процедури на Maple.......................................... 174
4. Използване на числени методи в MATLAB.................... 176
4.1. Решаване на системи линейни алгебрични уравнения .... 176
4.2. Собствени стойности и собствени вектори ...................... 177
4.2.1. Обикновена задача за собствените стойности..........................177
4.2.2. Обобщена задача за собствените стойности............................. 178
4.3. Корени на алгебрични и трансцендентни уравнения ...... 179
4.4. Минимум на функция на една и на няколко променливи 181
4.4.1. Минимум на функция на една променлива ............................ 181
4.4.2. Минимум на функция на няколко променливи....................... 183
4.5. Числено пресмятане на определени интеграли ............... 186
4.5.1. Числено пресмятане на обикновени интеграли..................... 186
4.5.2. Числено пресмятане на двойни интеграли ............................ 190
4.5.3. Числено пресмятане на тройни интеграли............................. 193
4.6. Апроксимация и интерполация ........................................... 194
4.6.1. Апроксимация ........................................................................... 194
4.6.2. Интерполация ........................................................................... 195
Приложение 1. Основни функции, оператори и команди в MATLAB 197
Приложение 2. Кратък справочник за работа с Notebook................ 203
Приложение 3. Списък на функциите на Symbolic Math Toolbox .... 208
Приложение 4. Кратък справочник за системата MapleV................ 211
Литература......................................................................................... 218

6
Предговор
MATLAB е широко разпространена програмна система, изключи­
телно популярна сред инженери, изследователи, научни работници и
специалисти във всички области на науката и техниката. Тя предлага
огромни възможности за извършване на изчисления, аналитични пре­
образувания и висококачествено графично представяне на получените
резултати. Гъвкава и адаптивна, благодарение на вградения програмен
език от високо ниво системата може да бъде приспособена към изиск­
ванията на всеки потребител чрез разработени от самия него приложни
програмни инструменти.
Книгата е предназначена да запознае читателите с възможностите
на MATLAB за решаване на различни научни и инженерни задачи. С по­
мощта на много примери, които могат да изпълнят сами, бъдещите по­
требители на системата ще могат да се докоснат до огромната й мощ и
постепенно да навлязат в специфичните приложения. Не са необходими
предварителни познания за такъв тип програмни системи. Предполага
се само, че читателят има определени навици в работата с приложения
в средата на Windows и е изучавал някакъв програмен език.
Материалът е разделен в две части. В първата част са разгледани
базовите функции на ядрото на MATLAB, инструментът за създаване на
електронни документи Notebook и пакетът за аналитични преобразува­
ния Symbolic Math Toolbox. Освен простите примери, които илюстрират
действието на отделните функции и команди, са включени и някои про­
грами на MATLAB, подготвящи читателя за втората част на книгата.
Във втората част са разгледани методите за решаване на обикно­
вени диференциални уравнения със средствата на MATLAB. Дадено е
кратко описание на пакета PDE Toolbox (Partial Differential Equations) за
решаване на частни диференциални уравнения по метода на крайните
елементи. Включените в тази част програми са главно от областта на
динамиката и трептенията на механични системи, но всеки специалист
може да ги ползва като примери за решаване на определен тип задачи.
Първата част съдържа четири глави и четири приложения.
В глава 1 са включени основни сведения за ядрото на MATLAB -
графичен интерфейс на MATLAB 6.5; системни команди и функции; ра­
бота с вектори, матрици, низове, масиви от записи, масиви от клетки;
програмиране; двумерна и тримерна графика и анимация.
В глава 2 е описана работата с Notebook - инструмент, който ин­
тегрира възможностите на MATLAB с тези на най-популярната и мощна
текстообработваща програма MS Word. С помощта на Notebook се обе­
диняват в един документ обикновен, форматиран в Word текст, команди
на MATLAB и резултатите от тяхното изпълнение - числени данни, фор­
мули и графики.

7
MATLAB. Част 1

В глава 3 е дадено подробно описание на възможностите на пакета


Symbolic Math Toolbox: аритметика с променлива точност, преобразу­
ване и опростяване на изрази, аналитични операции в областта на ли­
нейната алгебра и математическия анализ, аналитично решаване на
алгебрични и обикновени диференциални уравнения, интегрални пре­
образувания, специални функции, достъп до ядрото на MapleV от ра­
ботната среда на MATLAB.
В глава 4 са описани функциите от ядрото на MATLAB, предназна­
чени за числени пресмятания: решаване на системи линейни алгебрич­
ни уравнения, пресмятане на собствени стойности и собствени вектори
на матрици, определяне на корените на трансцендентни уравнения,
минимум на функции с една и няколко променливи, пресмятане на оп­
ределени интеграли (обикновени, двойни и тройни), апроксимация и
интерполация.
За улеснение при практическата работа в края на пособието са
включени четири приложения, които позволяват бърза справка за най-
често използваните функции, команди и оператори на MATLAB, инстру­
мента Notebook, пакета Symbolic Math Toolbox и MapleV.
Материалът в първата част осигурява на потребителя на MATLAB
солидна база за извършване на научно-технически пресмятания в която
и да е област на науката и за създаване на собствени пакети от про­
грами.
По време на подготовката на книгата, базираща се на MATLAB 6.5,
се появи поредната нова версия MATLAB 7. В сравнение с предишната
версия са налице незначителни промени в графичния интерфейс.
Прозорецът Launch Pad е премахнат. Менюто View е заменено с меню
Desktop, а менюто Web е скрито като подменю в менюто Help. На трета
позиция е добавено ново меню Debug. Въпреки тези разлики книгата
може пълноценно да бъде използвана и от потребителите на MATLAB 7.
Всички примери и програми преминаха успешно тестовете с новата
версия. За отбелязване е, че инструментът Symbolic Math Toolbox
ползва вече версия Maple 8, с което може да се обясни разликата в
окончателния вид на някои резултати.
Авторът изказва благодарност на доц. Венко Витлиемов и на рецен­
зента доц. Стоян Ц. Стоянов от Русенския университет „Ангел Кънчев”,
които съдействаха много за появяването на тази книга. Особена благо­
дарност дължа на редакторката от издателство „Техника”, инж. Любов
Алексиева, която в изключително кратък срок успя да подготви книгата за
печат.
Всякакви критични бележки и предложения към съдържанието или
оформлението на книгата ще бъдат приети с благодарност на адрес
tonchev_y@mbox.contact.bg
Авторът

- 8 -
Глава 1
Основни сведения за MATLAB
Въведение
MATLAB е диалогова програмна система за научно-технически
пресмятания и визуализиране на резултатите от тях. Тя интегрира в
себе си възможности за аналитични преобразувания, числени пресмя­
тания и графично представяне на получените резултати. Ориентирана е
към работа с масиви от данни - вектори, матрици, многомерни масиви,
масиви от клетки и масиви от записи. Оттук идва и наименованието
MATLAB - MATrix LABoratory. Системата позволява с един-единствен
оператор да се извършват едновременно действия над всички елементи
на масива, без да е необходимо да се организират цикли, както е при
обикновените "скаларни" езици от типа на С и FORTRAN.
В системата MATLAB са вградени функции за решаване на основ­
ни задачи от линейната алгебра и числения анализ, за обработка на
експериментални данни, за двумерна и тримерна графика, за анимация
и др. Ядрото на системата непрекъснато се допълва с пакети приложни
програми, наречени инструменти (toolboxes), решаващи проблеми в
определени области на науката и техниката. В момента в MATLAB 6.5 те
наброяват около 55, а в MATLAB 7 техният брой е достигнал до 72. Тук
са изброени наименованията и предназначението на някои от най-често
използваните сред тях:
• Simulink - блочно моделиране на динамични системи;
• Symbolic - символни преобразувания;
• Optimization - оптимизация;
• Spline - сплайн-апроксимация;
• Statistics - статистически изчисления;
• Fuzzi Logic - размити множества;
• Partial Differential Equations - частни диференциални уравнения;
• Control System - автоматично управление;
• Nonlinear Control Design - нелинейни системи за управление;
• Robust Control - робастно управление;
• System Identification - идентификация на системи;
• Signal Processing - обработка на сигнали.
MATLAB има вграден програмен език от високо ниво, което позво­
лява работа на системата не само в режим на калкулатор, но и в про­
грамен режим. Това дава възможност на всеки потребител да създава
свои собствени програми и функции, решаващи определени задачи от
областта на научните му интереси. Веднъж написани, тези програми се
изпълняват по същия начин, както и останалите функции на системата.

- 9 -
MATLAB. Част 1

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


грамни инструменти.
MATLAB не изостава и в съвременната тенденция за интегриране
на едни програмни системи с други, широко приложими и мощни про­
грамни средства в дадена област. От работната среда на MATLAB вие
можете да изпълнявате функции и оператори от ядрото на MAPLE,
водеща сред системите за компютърна алгебра. Програмният инстру­
мент Notebook, чрез който се осъществява интеграцията на MATLAB с
MS Word, ви дава възможност, работейки с Word, да създавате докумен­
ти, които съдържат едновременно обикновен текст, команди на MATLAB
и резултатите от тяхното изпълнение - изрази, формули и графични
изображения.
Благодарение на практически неограничените възможности на
системата, нейната гъвкавост и удобната за работа операционна среда
MATLAB е мощно средство за изчисления, анализи и оптимизация в
различни области.

1 .1. Граф ичен интерф ейс на M ATLAB 6


Графичният интерфейс на MATLAB 6 се състои от 5 прозореца
(фиг. 1.1). Тъй като се предполага, че потребителят е работил с някои
приложения под Windows, не е дадено подробно описание на всички
менюта и подменюта, а са описани само специфичните за MATLAB
команди в съответните прозорци.
1 . 1 . 1 . Команден прозорец - Command Window
Това е основният прозорец, в който въвеждаме командите вдясно
от промпта ,* » " и получаваме числените резултати, след като натиснем
клавиша Г Enter |. Графичните резултати се извеждат в отделен про­
зорец.
При въвеждане на командите са в сила следните правила:
1. Ако командата завършва със символа резултатите от нейното
изпълнение не се извеждат. Това се използва, за да се потисне извеж­
дането на междинните резултати и на много дълги масиви от данни.
2. Ако командата не завършва със символа резултатите се
извеждат.
3. Наличието или липсата на символа в края на графични коман­
ди не оказва никакво влияние върху резултатите от изпълнението им.
4. Прекалено дългите команди могат да се пренасят на нов ред с
помощта на три точки разположени в мястото на пренасяне.
5. Ако се пресмята даден израз, без резултатът да се присвоява на
някаква променлива, той автоматично се присвоява на системната
променлива "ans" (от answer - отговор).

10
Глава 1. Основни сведения за MATLAB

Launch Pad Workspace Command Window


— — A — ——
HI*
Г \ C K?
b it

RSSClbniBMcffiCiC
А ММХАВ
View W*b Window

! <* В '7
Hblp

| - . _. . •» X “ 2 .5 3 •
z
4 T o o lb o x* ! | ■»»• 0i l « Bytea C X «
3x3 72 A /
2 .53 0 0
• A O p t lc l i a t i o u , 1*111 ilx l N » y ** 0 . 9 7 ; ' ss^i и с к а н е на
• А P a r t ia l D if f e r j §jjb :3x l 24 d » x + y - л ; ;т i? , р о з у лт а тг -. на lipoM.'M.nraa an.~
’ A S ig n a l Proa*aa| Я * 1*7 56 d a n* ■
* A Spun* i a* 3x 1 24 d 3.50 0 0
• A S ym bolic Math j f t У 8d » * ■ * in (x )* * x p (y );
.p H . i p a* 8d » Z • Д.*.С11Л C- Hn t-i c r OHHOC-Mdi на ПГ-* гО£КЛа?д Z
•j D*aoa z =
ф Prod u ct Paaoj 1 .5146
• « . V i r t u a l A e a lit j j » v * [ 1 2 3 4 5 6 7 1 •- з-хзекдс.и* -г-д.
• lid ln b a iic i j iv ■
1 2 3 4 5 6
» • ?c>iuir.:.HC к « ли н е я м а с и т « м д 77,an»i-.-
ll'n 03 17 41 r:j C:\HATLAB 6p * Q £• 3 M » A ■ t 2 3 6; 4 3 1; 7 5 3 J втя*-;.

i A ll ГИ **
• 2 .5 3 h a x c u a fta a i!
D in B la * F o il
- 0 .9 7 ; » a o n o u a !
• y i о р яавоааая* J
в Р Щ !
;3 A * 2 ..
- a i n ( x ) * * x p (y ) b « [ 1 2 3 ] ’ ; в".в й*д д .< '1 на i
i X . o o r a . a a . . .| * " » » » X = А\Ь - ;;е и е н я е п л сглс.гъM ata
- C1 2 3 4 5 6 7 I
Г«гатао u г..,та,!и |3 °’П‘»1 И
- 0 .0 7 6 9
- i 23 e. 4 з l . -{ витхпг.м
0 .8 4 6 2
• I 1 2 3 Г М ■»»' j 4 d t « * o l l . o » t
-0 .2 3 0 8
- А \Ь * р о п т а я * я « | JDTXYDl.M M-f: ! ,
»

Фиг. 1.1. Графичен интерфейс на MATLAB 6

6. Въведените в дадена работна сесия команди се запомнят от си­


стемата. Те могат да бъдат извикани на командния ред с помощта на
клавиша [j[] и да бъдат коригирани и изпълнявани с натискане на |Ehter | .
Така се пестят време и усилия при последователно въвеждане на слож­
ни изрази, които се различават незначително един от друг.
7. Няколко команди могат да се въведат на един ред. При това за
разделител се използва или запетая (не се потиска извеждането на
резултатите), или точка и запетая - символ, който потиска извеж­
дането на резултата от предишната команда.
8. Символът процент "%" се използва за начало на коментар.
На фиг. 1.2 е представен един примерен сеанс на работа с
MATLAB в диалогов режим, записан във файл с командата d ia r y .

-11 -
MATLAB. Част 1

>> A 2 5 3
7 4 8
4 2 7
A
2 5 3
7 4 8
4 2 7
» b = [ 1 3 5 ];
>> x = A\b
??? Error using ==> \
Matrix dimensions must agree.

>> x = A\b' % транспониране на вектора b!


x =
-0.9701
-0.2090
1.3284
>> A*x % проверка на резултата
ans =
1.0000
3.0000
5.0000
>> clear % изчистване на работното пространство
» А
??? Undefined function or variable 'A'.

>> x = -pi:pi/100:pi; % задаване на вектор


» x(l)
ans
-3.1416
» x (100),x (201)
ans =
-0.0314
ans =
3.1416
» x (202)
??? Index exceeds matrix dimensions.

Фиг. 1. 2. Работа c MATLAB в диалогов режим


Обърнете внимание на съобщенията за грешки, които често ще
срещате в началото, когато все още се учите да работите с MATLAB:
• Съобщението
??? Error .. .
Matrix dimensions must agree.

12
Глава 1. Основни сведения за MATLAB

ще получавате често, когато оперирате с вектори и матрици и


нарушавате изискванията към размерностите на отделните
операнди. В случая командата х = А \Ь, с помощта на която ре­
шаваме системата линейни алгебрични уравнения Ах = Ь, е
грешна, защото векторът на десните части Ь трябва да е вектор-
стълб, а ние сме го задали като вектор-ред. Грешката лесно се
отстранява, като извикаме с клавиша Q ] старата команда и тран­
спонираме вектора Ь с добавянето на единичен апостроф.
• Съобщението
??? Undefined function or variable 'A'.
се извежда, когато използвате променлива, която не е била
дефинирана. Най-често до тази ситуация се стига, когато сгрешите
името на дадена, дефинирана преди това променлива, която
системата естествено приема за нова, и следователно недефи-
нирана. Помнете, че системата е case sensitive, т. е. чувствителна
към изписването на имената на променливите с малки или с главни
букви.
• Съобщението
??? Index exceeds matrix dimensions.
се получава, когато при обръщение към елемент от масив някой от
индексите надхвърли съответния размер на масива.

1. 1. 2. Стартов бележник - Launch Pad


Този прозорец ви дава бърз достъп до някои важни инструменти,
помощна информация (Help) и демонстрационни примери за MATLAB и
за всички инсталирани на компютъра ви допълнителни програмни ин­
струменти (toolboxes). Освен това, ако сте свързани към Интернет, мо­
жете да щракнете върху хипервръзката Product Page (Web), за да полу­
чите последната информация за съответния продукт от Web-сайта на
фирмата The MathWorks, създател на MATLAB.

1. 1. 3. Работно пространство - Workspace


Всички променливи, които сте дефинирали през текущата сесия, се
съхраняват в т. нар. работно пространство (Workspace). В прозореца
Workspace се извежда пълна информация за тези променливи: име,
размерност, големина и клас. Обърнете внимание, че дори и скаларните
величини в MATLAB се разглеждат като матрици с размерност 1x1. Вие
можете да изтриете някои от променливите или да коригирате стой­
ностите на отделни елементи от масивите, като извикате Array Editor
(редактор на масиви) с двойно щракване върху името на масива.
Цялото работно пространство може да бъде записано във файл с
разширение .mat, като се избере командата Save Workspace As...от

- 13-
MATLAB. Част 1

менюто File. Така съхранените данни могат да се използват в следваща


сесия, като се зареди .mat файла с командата File—>lmport Data .
Получаването на информация за работното пространство, както и
коригирането и съхраняването на данните във файл може да става и от
командния прозорец. Затова най-добре ще направите, ако държите
прозореца Workspace затворен, за да освободите повече място за
Command Window.

1. 1. 4. История на командите - Command History


Системата MATLAB запомня всички въведени команди не само от
текущата сесия, но и от предишни сесии. Тези команди се извеждат в
прозореца Command History. Върху тях можем да извършим следните
операции:
• При двойно щракване върху дадена команда тя веднага се копи­
ра и изпълнява в командния прозорец.
• С помощта на мишката можем да направим копие на дадена
команда или няколко маркирани команди в командния прозорец,
като ги "завлечем" до промпта. За изпълнението им трябва
допълнително да натиснем l Enter |.
• Ако щракнем с десен бутон върху маркирана последователност
от команди, появява се контекстно меню (фиг.1.3), от което
можем да изберем едно от следните действия:
С°ру- копира в Clipboard.
Evaluate Selection - копира избраните команди в команд­
ния прозорец и ги изпълнява.
Create M-file - отваря с редактора medit на MATLAB нов т -
файл, в който автоматично се вграждат избраните команди.
Това е много рационален начин за създаване на програми след
успешно направени пресмятания в диалогов режим. Достатъчно
е да се направят някои корекции, да
се вмъкнат оператори за въвеждане
Evaluate Seiecton на данни и отпечатване на резулта­
Create M-Fie тите и програмата е готова. Остава
да се съхрани на твърдия диск с
Delete Selection командата File->Save As.
Delete to Selection Delete Selection - изтрива
Delete Entire History маркираните команди.
Delete to Selection - изтрива
Фиг. 1.3 всички команди преди първата
маркирана команда.

14
Глава 1. Основни сведения за MATLAB

D e le te E n t i r e H is t o r y - изтрива всички команди, включи­


телно и немаркираните.
1 .1. 5. Текуща директория - Current Directory
В този прозорец се извежда списък на всички файлове от текущата
директория, до която системата има директен достъп, дори и ако не е
обявена за достъпна с командата p a th . Обикновено в текущата дирек­
тория се записват и създаваните от вас файлове. При стартиране на
MATLAB текуща директория по подразбиране е директорията work,
създадена автоматично от системата при нейното инсталиране.
По всяко време на работната сесия можете да смените текущата
директория, като използвате бутони 2 или 3 (фиг. 1.4). Обърнете
внимание, че тази операция може да бъде извършена и от командния
прозорец.
В горния ред на прозореца се намират:
1 - поле за задаване на текущата директория;
1 2 -бутон за извеждане на падащ списък на
All Files File Typ« последните посетени директории;
_jDinBlag Folder 3 - бутон за достъп до произволна директория;
ОАМ1.Ж M-file 4 - бутон за преминаване към родителската
OAH2.« M-file директория (едно ниво нагоре);
If DMAH.M M-file 5 - бутон за създаване на нова директория,
QDMAH2.M M-file
QDTXD1.M M-file разположена под текущата;
QDTXD2.M M-file 6 - бутон за търсене на файлове по ключова
QdtxSoll.tut MAT-file ' дума от съдържанието им.
< > При щракване върху даден файл с дес­
ния бутон на мишката се появява контекстно
Фиг. 1.4 меню. По-важните команди в него са:
Open - отваряне на файла с редактора medit
на MATLAB;
Run - изпълнение на скриптов файл (файл, съдържащ команди на
MATLAB);
V ie w H e lp - извеждане на помощна информация, разположена до
първия празен ред или до първата команда в .гл-файла;
Rename - преименуване на файла;
D e le te - изтриване на файла;
Add t o P a th - добавяне на текущата директория към списъка на
достъпните за системата директории.
От беглото описание на допълнителните четири прозореца става
ясно, че рядко ще имаме нужда от всичките едновременно. Вие сами
може да конфигурирате работното си място, като изберете от менюто
View кои прозорци да се извеждат (фиг.1.5).

- 15-
MATLAB. Част 1

g Default
За препоръчване е да дър­
Undock Command Window Command Window Only жите отворени прозорците:
s/ Command Window
Command Window,
>/ Command History
Short History Command History и
Tall History
Current Directory Current Directory.
Five Panel
Workspace
TC Другите два прозореца
Launch Pad
отваряйте само при необ­
Profiler
Help
TO
» ходимост.
тем ната променлив

Фиг. 1.5. Меню View


Системата позволява създаването на нови директории в произвол­
но място на твърдия диск, в които да разполагате своите програмни
файлове. За да можете да ги изпълнявате по всяко време, независимо
от това, коя е текущата ви директория, трябва да ги добавите към спи­
съка на достъпните. За целта изберете от
основното меню командата File->Set
J>C\MATLAB6p5\dtnp_2003
Path... . Появява се панелът Set Path
36pS\dinp_2
(фиг. 1.6). В него с помощта на бутоните
може да се извърши следното:
| Add Foider...| - добавяне на дадена
директория към MATLAB search path -
СAMATLAB6p54oolboxVneUeb4ang пътя за достъп на MATLAB;
Cr\MATLAB6p5VootooxVnall«btolmat
CAMATLAB6p54oolb<Mrtmelleb\*lflin | Add with Subfolders^] - добавяне на да­
C:\MATLAB6p5\loofcoxVnaUab\sptcrun
C:\MATLAB6pS4oolborimailabVMlftjn дена директория с всичките й поддирек­
. C:\MATLAB6p54ooiboxVnallab\d* afun
тории;
Една маркирана директория може да
преместите, както следва:
_ l C.AMATD | Move to Top [ - в началото на списъка;
C:VAMXAB6p!
C:\MATLAB6p5\loc
C:\MATLAB6pS40C
| Move Up] - една стъпка нагоре;
C:WATLAB6pS\toofcoWnatlai>bl
C:\MATLAB6p5Mootoox\mellebVoltinN | Move Down 1 - една стъпка надолу;
C:\MATLAB6p54oofeoxVnatiab\iimaftjn
C:\MATLAB6p54oolbotfmatlabVMalypts
C.VAATLA86p54ooboiVnatlabWarrtr1
| Move to Bottom | - в края на списъка;
C:\MATLAB6pS4oofeoxVnaUabV«Mijn
| Remove | - премахване на директорията
от списъка.
След като извършите корекциите,
Фиг. 1.6. Панелът Set Path натиснете бутона | Save | , ако искате те
да останат в сила и за следващите сесии. Ако затворите панела, без да
натиснете [ Save |, настройките остават в сила само за текущата сесия!
Забележка. Неподходяща последователност на директориите в
списъка Path може да породи неочаквана ситуация, когато една изпита­

16
Глава 1. Основни сведения за MATLAB

на ваша програма или функция на някой Toolbox изведнъж престава да


работи нормално. Причината за това може да е следната:
Вашите програми, както и функциите на програмните инструменти,
се съхраняват в така наречените m-файлове. При подаване на дадена
команда, която съдържа името на m-файл, системата го търси най-на­
пред в текущата директория, а след това претърсва достъпните дирек­
тории в последователност, съответстваща на реда им в Path-списъка.
Поради големия брой m-файлове съществува реална възможност за
дублиране на имена и системата може да открие най-напред файла,
който не сте имали предвид. При такава ситуация се опитайте да на­
правите подходящо разместване в списъка на достъпните директории
или да промените името на вашия файл и на функцията, която се съ­
хранява в него.

1. 2. Системни команди. Help. Demo


Почти всички операции, извършвани с помощта на менютата и бу­
тоните на прозорците в графичния интерфейс, могат да бъдат извърш­
вани и чрез подаване на команди в командния прозорец. Повечето от
тези команди съществуваха и в старите версии, където при сравнително
примитивния тогавашен интерфейс бяха единствената възможност за
извършване на съответните действия. Това обаче не означава, че те са
някакъв архаизъм, който би трябвало да отпадне в близко бъдеще. Тези
команди могат да бъдат използвани не само за работа в диалогов ре­
жим, но и да бъдат вграждани в програми. Ето защо те се оказват
незаменими при програмно решаване на сложни задачи. Читателите,
които все още нямат намерение да пишат такива програми, могат на
първо време да пропуснат този раздел.

1. 2.1. Системни команди


Синтаксис на командите
Въвеждането на команди в MATLAB може да става в два различни
формата:
Функционален Формат (FUNCTION format)
В този формат командата се състои от името на функцията, след­
вано от един или повече входни аргументи, заградени в кръгли скоби и
разделени помежду си със запетаи:
function_name (argl, arg2 , ..., argN)
Резултатът от изпълнението на функцията може да се присвои на
няколко променливи, наречени изходни аргументи, които се заграждат
в квадратни скоби и са разделени помежду си със запетаи:
[outl, out2, ...] = function_name (argl, arg2, ...)

2 17
MATLAB. Част 1

Команден Формат ( COMMAND format)


В този формат командата се състои от името на функцията,
следвано от един или повече входни аргументи, разделени помежду си с
интервали:
function_name argl arg2 ... argN
За разлика от функционалния формат тук резултатът от изпълнението
на функцията не може да се присвоява на името на някаква променлива.
С други думи, в командния формат няма изходни аргументи.
Забележки:
1) Двата формата се различават и по начина на подаване на вхо
ните аргументи. Във функционалния формат се подават техните стой­
ности (passing by value), докато в командния формат входните аргументи
се третират като низове (последователности от символи).
Ще поясним тази забележка със следния пример:
А = pi;
disp(A) % Function format
3.1416
disp A % Command format
A
2)Във функционалния формат подаването на низ като входен
аргумент може да стане по два начина:
а) Директно подаване на низа, заграден в единични апострофи.
б) Предварително присвояване на низа, заграден в апострофи,
на името на някаква променлива. След това тази променлива се подава
на функцията като входен аргумент, но без да се загражда в апострофи!
Пример:
Създаване на поддиректория "dinamika" в текущата директория:
а) mkdir ('dinamika1)
б) dirname = *dinamika';
mkdir(dirname)
3) Повечето функции в MATLAB могат да работят с различен бро
входни и изходни аргументи. Една част от тях са задължителни, а оста­
налите - не (optional arguments) . В зависимост от броя и типа на пода­
дените аргументи една и съща функция може да извършва различни
действия.
Разбира се, в рамките на тази книга не е възможно да се опишат
изчерпателно всички възможности на разглежданите функции. При не­
обходимост допълнителна информация можете да получите с помощта
на командите help или helpwin (вж. края на този раздел).

18
Глава 1. Основни сведения за MATLAB

Системните команди, които са разгледани тук, можем да разделим


условно на следните групи:
• команди за управление на работното пространство;
• команди за работа с файлове;
• команди за настройване пътя за достъп;
• команди за управление на командния прозорец;
• команди на операционната система.
Команди за управление на работното пространство
workspace |- отваря браузъра на Workspace, с помощта на който
могат да се разглеждат, редактират, запазват или
изтриват променливите от работното пространство.
who | - дава информация за променливите от работното простран­
ство:
who - списък на променливите от работното пространство;
whos - като горното, но с допълнителна информация за всяка
променлива;
who -file f ile n a m e - списък на променливите във файла с
данни filename.mat;
s = who -зарежда в масива от клетки s имената на всички
променливи от работното пространство.
| clear “\ - премахване на променливи от работното пространство:
clear - премахва всички променливи от работното пространство;
clear global - премахва всички глобални променливи;
clear varl var2 ... - премахва само указаните променливи.
pack | - дефрагментиране на работното пространство:
Командата pack записва всички променливи от работното пространство
в текущата директория, изчиства паметта и след това ги презарежда.
Препоръчва се това да се прави в специална за целта директория в
следната последователност на командите:
cwd = pwd % запис на текущата директория;
cd ( tempdir) % преминаване в директорията tempdir (името е
% произволно), в която ще се записват временно
% променливите от работното пространство;
pack % извършване на самото дефрагментиране;
cd (cwd) % връщане в предишната директория.
save | - запис на променливите от работното пространство в двоичен
файл с разширение .mat:

19
MATLAB. Част 1

save - запис на всички променливи от работното пространство във


файл matlab.mat;
save file n a m e - запис на всички променливи във файл filename.mat;
save file n a m e x y z - запис само на променливите х, у, z;
save ... -ASCII - записва данните в ASCII (текстов) формат;
save ... -ASCII -double - запис в ASCII формат с 15 цифри;
save ... -append - добавяне на данните към съществуващ mat-файл.
| lo a d | - зареждане на променливи в работното пространство от
файл:
load - зарежда всичките променливи от файла matlab.mat;
lo a d file n a m e - зарежда всички променливи от файла filename.mat;
lo a d file n a m e x y z - зарежда само променливите х, у, z.
q u i t | - приключване на текущата сесия (излизане от MATLAB).

Команди за работа с файлове

what I - извежда списък само на тези файлове от дадена директория,


които имат специфични за MATLAB разширения (вж. послед­
ния вариант на командата). Файловете с други разширения
не се извеждат. Използвайте командата dir за извеждане на
всичките файлове.
what - списък на специфичните за MATLAB файлове от текущата
директория;
what d irn a m e - като последната команда, но за явно указаната
директория dirname; не е необходимо да се указва пълния
път, а само името на директорията;
w = what ( ' d irn a m e ') - записва резултата от командата what в
масива от записи w със следните полета:
path - пътя до директорията (пълния адрес);
m - масив от клетки с имената на т-файловете;
mat - масив от клетки с имената на mat-файловете;
те х - масив от клетки с имената на тех-файловете;
mdl - масив от клетки с имената на mdl-файловете;
р - масив от клетки с имената на р-файловете;
classes - масив от клетки с имената на класовете.
which ] - извежда пълния адрес (path) на даден файл:
which f ile n a m e - извежда пълния адрес на файла filename.m;
which f ile n a m e . e x t - извежда пълния адрес на файла, чието име
е filename.ext;

20
Глава 1. Основни сведения за MATLAB

Забележка: Ако файлът е с разширение, различно от .m, то


трябва непременно да се укаже.
s = which ( ' f ile n a m e 1) - адресът се записва като стринг в про­
менливата s, вместо да се извежда на екрана.
lookfor | - претърсване на всички m-файлове по ключова дума:
lookfor keyword - търси ключовата дума keyword в първия ред с
коментари на всички m-файлове, до които системата има достъп.
Извежда първия ред на всички файлове, в които е открита
ключовата дума;
lookfor keyword -all - търсенето на ключовата дума е в целия
първи блок от коментари (до първата MATLAB команда или до
първия празен ред) на т-файловете.
Поради сходството на последните три описани оператора, ще
дадем в резюме тяхното действие:
what - списък на m-файловете в определена директория;
which - търси директория, съдържаща даден файл;
lookfor - намира файлове по дадена ключова дума.
exist ] - проверява дали е дефинирана (exist - съществува) дадена
променлива, функция, файл или директория:
exist ('А') връща:
0 - ако А не съществува ( 0 в MATLAB представлява логическата
константа "false");
1 - ако А е променлива от работното пространство;
2 - ако А е m-файл от MATLAB Search Path;
3 - ако А е mex-файл от MATLAB Search Path;
4 - ако А е mdl-файл от MATLAB Search Path;
5 - ако А е вградена MATLAB функция;
6 - ако А е р-файл от MATLAB Search Path;
7 - ако А е директория.
exist ( ' A ' , ' var ') - проверява само за променливи;
exist ('A' , 'file') - проверява само за файлове или директории;
exist ( ' А ' , ' dir *) - проверява само за директории.
edit | - редактиране на т-файл:
edit - стартира редактора в нов прозорец;
edit file n a m e - отваря файла filename.m;
edit f ile n a m e .ext - отваря текстов файл с разширение .ext.
Забележка. По подразбиране се използва вграденият редактор
medit на MATLAB. При желание можете да използвате любимия си
текстов (ASCII) редактор, например РЕЗ или Notepad, като изберете
File->Preferences...—>Editor/Debugger, изберете с щракване в

21
MATLAB. Част 1

празното кръгче опцията Text Editor и въведете в съответното поле пъл­


ния адрес на желания редактор. Можете, вместо да въвеждате адреса,
да използвате браузера, като щракнете бутона вдясно от полето.
type | - извежда съдържанието на даден файл в командния
прозорец:
type file n a m e - извежда файла filename.m;
type f ile n a m e . e x t - извежда указания ASCII файл (ext - произ­
волно разширение).
dbtype~| - номерира редовете на извеждания файл:
dbtype file n a m e - извежда целия файл;
dbtype file n a m e т : п - извежда само редове с номера от m до п.

open | - отваря масив или файл в съответствие с разширението му:


open o b je c tn a m e .
В зависимост от типа на обекта с име objectname се извършват
следните действия:
Тип на обекта Действие
масив отваря го в редактора Array Editor;
.mat файл отваря файла и зарежда променливите в работно­
то пространство като масив от записи; полетата
на този масив съответстват на имената на про­
менливите!;
.fig файл отваря фигурата;
.т файл отваря файла в редактора на MATLAB;
.html файл отваря файла в Help Browser.
Забележка. Ако обектът е файл с разширение, различно от .т,
то трябва непременно да се укаже явно!

pcode | -създава псевдокод (p-code) на даден т-файл:


pcode f ile n a m e - създава р-код на файла filename.т , разположен
в текущата директория или в някоя от достъпните дирек­
тории. Новият файл има разширение .р и се разполага в
текущата директория;
pcode fn a m e l fnam e2 . . . . - създава р-кодове на указаните т -
файлове;
pcode *.т- създава р-кодове на всички т-файлове от текущата
директория;
pcode d ir n a m e /* .т - създава р-кодове на всички m-файлове от
указаната директория dirname;
pcode ... -inplace - създава р-кодовете в същите директории, в
които са и съответните т-файлове!

22
Глава 1. Основни сведения за MATLAB

Забележки:
1) р-кодовете се изпълняват сравнително по-бързо от съответните
т-файлове;
2) Ако в една директория са разположени m-файлове и техните р-
кодове, при включване на името на един от файловете (без разши­
рението) в дадена команда системата изпълнява съответния р-код!
3) Ако m-файлът и съответният р-код са в различни директории,
системата изпълнява този от тях, който е в текущата директория или в
директорията, която предхожда другата в списъка на достъпните
директории.
4) Използвайте р-код и когато желаете да скриете оригиналния
(source) код на вашите програми от чужди лица.

Команди за настройване на пътя за достъп

path |- извеждане и настройка на списъка на достъпните дирек­


тории - MATLAB Search Path:
path - извежда списъка на достъпните директории;
path (path, ' n e w d i r ') - добавя нова директория в края на
текущия списък;
path ( ' n e w d ir ' , path) - добавя нова директория в началото на
текущия списък.
Пример:
path ( ' С : \MATLAB6p5\Dinp_2003 ' , path) - добавя в началото
на текущия списък директорията Dinp_2003.
addpath | - добавя нови директории към текущия Search Path:
addpath d i r l d i r 2 ... - добавя указаните директории в началото
на текущия списък;
addpath d i r l d i r 2 ... -end -добавя указаните директории в
края на текущия списък.
Пример:
addpath С: \MATLAB6p5 \ Study -добавя директорията Study в
началото на списъка.
| rmpath~| - премахва директории от текущия Search Path.
rmpath d i r l d i r 2 ... - премахва от списъка указаните директории.
Пример:
rmpath С : \MATLAB6p5\Anketa - премахва директория Anketa.
Забележки:
1) В горните команди трябва да се указват пълните адреси на
директориите.

23
MATLAB. Част 1

2) Ако адресът съдържа интервал, в последните две команди този


адрес трябва да се загражда в единични апострофи! В противен случай
интервалът се възприема от системата като разделител между два
различни адреса.
pathtool | - активира MATLAB Set Path Tool - инструмент за визуа­
лизация и редактиране на списъка на достъпните директории.

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


| c lc | - изчиства командния прозорец, като изтрива всички команди.

| home | - изчиства видимата част на командния прозорец чрез пре­


въртането му (scrolling); ако командният прозорец не е бил
запълнен, не настъпват никакви промени;
echo | - управлява echo-печата на командите в изпълнявани файлове;
echo on - извеждат се всички команди в изпълняваните
скриптови файлове (вж. т. 1.7);
echo off - изключва се echo-извеждането на командите;
echo func_name on - включва echo-печата за указания файл-
функция;
echo func__name off - изключва echo-печата за указания файл-
функция;
echo on all - включва echo-печата за всички файл-функции, които
в момента са в паметта.
Забележка. Функцията inmem връща списък на файл-функции­
те в паметта.
more ]| - управлява изходния печат в командния прозорец. Обикно­
вено трябва да предхожда използването на командата type:
more off - изключва печата по страници; не се препоръчва за печат
на големи файлове или извеждане на резултати, надхвър­
лящи размера на командния прозорец;
more on - извеждането става на порции - по страници;
more (п) —извежданите порции се състоят от п реда.
В режим на извеждане по страници, след разглеждане на текущата
порция са възможни следните действия:
• придвижване към следващия ред с натискане на клавиша ENTER;
• придвижване към следващата страница с натискане на клавиша
за интервал;
• прекъсване на извеждането на текущия обект с натискане
на клавиша Q.

24
Глава 1. Основни сведения за MATLAB

diary ] - запис на MATLAB-сесия в текстов файл:


diary filename - записва всички следващи MATLAB команди и
резултатите от изпълнението им (без графиката) във файл с
указаното име; ако не се укаже явно име на файла, системата
използва името diary - дневник;
diary off - прекратява записа във файла;
diary on - възстановява процеса на записване.
Забележка. Подаването на командата diary с друго име на файла
превключва записа в новия файл.
format~| - настройване на формата на изходните данни (числа):
Всички пресмятания в MATLAB се извършват с двойна точност (double
precision), т. е. с 15 значещи цифри. Резултатите обаче могат да се из­
веждат в различен формат, задаван с командата format:
format short - фиксирана точка (десетична точка) с 5 цифри;
format long - фиксирана точка с 15 цифри;
format short е - плаваща точка с 5 цифри - експоненциална
форма;
format long е - плаваща точка с 15 цифри;
format short g - по-компактното от двете представяния (с фикси­
рана и плаваща точка) с 5 цифри;
format long g - по-компактното от двете представяния с 15 цифри;
format + - печатат се и символите "+" за положителни ч и с л а , з а
отрицателни и интервал за нули;
format rat - апроксимация с рационални числа - отношения на
цели числа.
С командата format можем да задаваме и разстоянието между
отделните редове:
format compact - потиска извеждането на празни редове;
format loose - възстановява извеждането на празни редове.
beep | - подава звуков сигнал.

Команди на операционната система


Тук са включени познатите от DOS команди за операции над файло­
ве и директории.
Ш - изпълнение на DOS команди от работната среда на MATLAB, без
да се връща никакъв резултат (Command Form):
! dos__command - изпълнение на указаната DOS команда.

25
MATLAB. Част 1

dos | - изпълнява DOS команда, DOS или Windows приложение (.ехе


файл), като връща резултата (Functional Form):
[status, result] = dos ( 1command ') - изпълнява указаната
команда и записва резултатите в променливата result; при
успешно изпълнение променливата status получава стойност
0;
[st, res] = dos ( ' command’, ' -echo ') - незадължителният
параметър '-echo' се използва при DOS-приложения за на­
сочване на резултатите от изпълнението към командния про­
зорец на MATLAB;
[st, res] = dos ('command & ') - при стартиране на Windows-
приложение символът заставя приложението да работи
във фонов режим, докато MATLAB продължава работата си.
Пример:
[st, res] = dos ('d i r - e c h o ') ; - извежда съдържанието
на текущата директория в командния прозорец и го записва в
променливата res.
| dir | - извежда съдържанието на определена директория:
dir - извежда съдържанието на текущата директория;
dir * . m - списък на всички m-файлове в текущата директория;
dir dirname - извежда съдържанието на указаната директория;
d = dir ( ' d irn a m e ') - връща резултатите в масива от записи d
със следните полета:
name - име на файл или поддиректория;
date - дата на модифициране (коригиране);
bytes - обем в байтове;
isdir - равно на 1, ако името е на директория, и 0 - ако не е.
| cd |- смяна на текущата директория:
cd dirpath - прави директорията, чийто адрес е dirpath, текуща;
cd .. - придвижване в директорията, разположена над текущата;
cd - извежда пълния адрес на текущата директория;
wd = cd - записва адреса на текущата директория в променливата wd;
cd ( ' dirpath ') - функционална форма на командата.
| pwd |- връща адреса на текущата директория:
pwd- извежда адреса на текущата директория;
s = pwd - записва адреса на текущата директория в променливата s.
Забележка: Командата pwd е еквивалентна на командата cd без
аргумент!

- 26-
Глава 1. Основни сведения за MATLAB

m k d ir | - създаване на директория:
m k d ir ( ' d irn a m e ') - създава поддиректория d irn a m e в теку­
щата директория:
m k d ir ( 'p a r e n d ir ' , ’ n e w d ir') - създава поддиректория 'n e w d ir '
в съществуващата директория ’p a r e n d ir ' (родителска ди­
ректория);
s t a t u s = m k d ir ( ... ) - присвоява на променливата status една от
следните стойности:
1 - при успешно създаване:
2 - ако директорията вече е съществувала;
0 - при неуспешен опит;
[ s t a t u s , msg] = m k d ir ( ... ) - при неуспех връща допъл­
нително съобщение за грешка в променливата msg.
r m d ir | - премахва директория.
[ s t , msg] = r m d ir ( ' d i r e c t o r y ') - премахва указаната дирек­
тория само ако е празна;
[ s t , msg] = r m d i r ( ' d i r e c t o r y ' , ’ s ' ) - премахва указаната
директория заедно с всичките й поддиректории и файлове!
Изходният параметър s t приема стойности: 1 - при успешно
изпълнение; 0 - при неуспешен опит.
Съобщенията за грешки при неуспех се записват в променливата msg.
Забележка. Директорията, подлежаща на изтриване, може да се
укаже по два начина:
а) с абсолютния си адрес (започва от С:\);
б) с относителния си адрес, започващ от текущата директория, без
да я включва! За подробности вижте h e lp p a r t i a l p a t h .
c o p y f i l e | - копиране на файл или директория:
c o p y f ile ( s o u r c e , d e s t) - копира файла или директорията
s o u rc e в нов файл или директория d e s t. И двата аргумента
могат да включват абсолютния път (от С:\) или относителния
път (от текущата директория);
s t a t u s = c o p y f i l e ( . . . ) - извършва копирането и записва в
променливата s t a t u s числото: 1 - при успешен опит; 0 - при
неуспех.
[ s t , msg] = c o p y f i l e ( ... ) - при неуспех връща допълнително
съобщение за грешка в променливата msg.
m o v e f ile \ - премества файл или директория. Действа аналогично
на copyfile с тази разлика, че изтрива source файла или дирек­
торията!

- 27-
MATLAB. Част 1

delete^] - изтрива файл или графичен обект:


delete filename - изтрива указания файл; името може да включ­
ва и пълния или относителния адрес;
delete * .р - изтрива всички р-файлове от текущата директория;
delete (Н) - изтрива графичен обект с дескриптор Н.
1. 2. 2. Получаване на помощна информация (Help)
Системата MATLAB предлага три различни източника на инфор­
мация:
• m-файлове - при въвеждане на командата help filename се
извеждат всички коментари, разположени до първия празен
ред на файла или до първия ред с MATLAB-команда;
• фирмената документация в HTML или в PDF формат;
• WEB-сайта на фирмата The MathWorks.
Достъпът до информацията може да се осъществи по четири
начина:
• От главното меню Help, показано тук:
Full Product Family Help
MATLAB Help

Using the Desktop


Using the Command Window
IK
Demos

About MATLAB

• чрез бутона m - същото като от меню Help;


• от прозореца Launch Pad;
• от командния прозорец с помощта на командите:
help - информацията от един m-файл се извежда в команд­
ния прозорец;
helpwin - информацията от един m-файл се извежда в Help
Browser;
doc - информация от документацията се извежда в Help
Browser.
С командата help можем да получаваме информация на три нива:
» help - извежда се списък на основните теми (topics);
» help to p ic n a m e - извежда се списък на всички функции
от указаната тема; като име на темата в тази команда се указва
само тази част, която е след последната наклонена черта в
списъка на темите;

28
Глава 1. Основни сведения за MATLAB

» help fu n c tio n n a m e - получаваме информация за конкрет­


ната функция - предназначение, синтаксис, използване, при­
мери.
Ако въведем една от командите helpwin или doc без аргумент,
стартира се съответният Help Browser. С помощта на тези команди
можем да получим и директна информация за конкретна функция:
» helpwin fu n c tio n n a m e
» doc fu n c tio n n a m e

Пример:
» help - избираме темата, например symbolic, от извеждания
списък с темите;
» help s y m b o lic - избираме конкретната функция, например
int, от появилия се списък с функциите;
» help i n t , или
» helpwin int, или
» doc i n t - получаваме пълна информация за функцията int.
Забележки:
1) С командата doc се получава най-пълна и добре структурирана
информация. Ако знаете името на интересуващата ви функция, най-
добре е да използвате doc .
2) С командата doc можете да получавате информация само за
системни команди и функции, и тези на програмните инструменти
(toolboxes). Информация за потребителски функции и програми можете
да получите с помощта на командата help или helpwin.
3) С командата whatsnew получавате директен достъп до т. нар.
Release Notes - информация за новостите и характерните особе­
ности на инсталираната на вашия компютър версия на MATLAB. Ако
вече сте работили с предишната версия на MATLAB, това е най-
рационалния и бърз начин да преминете към новата.

1. 2. 3. Демонстрационни задачи (Demos)


Системата MATLAB предлага изобилие от демонстрационни зада­
чи, илюстриращи огромните възможности както на ядрото на MATLAB,
така и на инсталираните програмни инструменти. Достъпът до тях се
осъществява по следните три начина:
• От главното меню избираме Help-»Demos.
• В прозореца Launch Pad избираме Demos.
• На командния ред въвеждаме командата » demo.

29
MATLAB. Част 1

В левия панел на появилия се прозорец избираме желаната тема


от MATLAB или съответния инструмент (toolbox), след това задачата и
накрая щракваме с мишката в десния панел върху Run this demo.
На фиг. 1. 7 е показан прозорецът Help, в който от Toolboxes/Optimization
сме избрали демонстрационната задача Minimization of the "banana
function".

EHe Edit View go Web Window Help


HelpNavigator (x)
3 Findn peg» fop]

Optimization Demo: bandem v


CcrtertJ trxte* Г«vortex

!> Getting Started with Demos V iew co d e f o r b a n d e m R u n llils d em o


: Ф MATLAB
• j Desktop Environment
Minimization of the "banana function"
• _ j Matrices Banana function minimization demonsteat ion.
? LJ Numerics
This demonstration shows the minimization
• _ j Graphics
of Rosenbcock's "banana function":
У Language
>: _ii Automation Client Interface (CO M )
• _ j Gallery f (x> = 100*<x<2)-xfl)A2> '2+ (l-x(l)> ' 2
». More Demos
> ф MATLAB Report Generator It is called the banana function because of
- 4 Toolboxes the way the curvature bends around the
• ф Curve Fitting origin. It is notorious in optimization examples
- 4 Optimization because of the slow convergence which
Q Large-scalo unconstrained nonlinear mir most methods exhibit when trying to solve
ф Large-scale quadratic programming this problem.
ф- Large-scale constrained linear leasl-squ
ФМ Д Ш М Д — This function has a unique minimum at the
■Ф Command Line Demos
point [1, 1] where f(x)=0. We show here
}- ф Partial Differential Equation
• ф Signal Processing
a number of techniques for its minimization
> ф Spline starting at the point x=[-1.9, 2].
<: ф Symbolic Math
• a* Virtual Reality File name: bandem.ra
6 Simulink
R u n th is d e m o „

Фиг. 1.7. Прозорецът Help c demo-задачите


Всяка от демонстрационните задачи се съхранява в m-файл, който
можем да отворим с редактора, да го разгледаме и да заимстваме някои
похвати при съставяне на собствени програми. Ако знаем името на този
файл, можем да стартираме директно задачата, като въведем след
командния промит името (без разширението .т ) и натиснем I Enter I.
Бихте могли да пробвате това, като въведете имената на файловете на
следните интересни демонстрационни задачи:
vibes - напречни трептения на пластина - логото на MATLAB;
truss - форми на трептене на прътова конструкция (мост);
xpsound - визуализация на звуци.

- 30-
Глава 1. Основни сведения за MATLAB

1.3. Изрази - числа, променливи, математически оператори


и функции
Градивните елементи на един израз във всеки програмен език са:
• числа;
• променливи;
• оператори;
• функции.
1. 3.1. Числа
В MATLAB числата се въвеждат по същия начин, както и в
повечето програмни езици:
1, 3, -53 - цели числа;
3.141, -0.256 - десетични числа;
1.е-10, 0.345е+6, -0.25е6 - експоненциална форма.
Въведените числа и резултатите от всички пресмятания се съхра­
няват в работната памет с двойна точност (double precision), т. е. с 15
значещи десетични цифри. Абсолютните стойности на реалните числа
са в диапазона от Ю"308 до 10+3°8. Числата се извеждат по подразбиране
в т. нар. къс формат (short format - 5 цифри). При необходимост
можем да ги извеждаме с 15 цифри, след като подадем командата
format long.
Системни константи
pi - числото тт;
i или j - имагинерната единица;
eps - относителната точност на системата;
realmin - минималното реално число;
realmax - максималното реално число;
Inf - безкрайност оо;
NaN - чете се "Not-a-Number" - системата връща NaN, когато при
пресмятане на един израз се стигне до неопределеност от
вида 0/0, оо-оо, О00.
Имената на системните константи не са резервирани, т. е. те могат
да се предефинират:
» eps
ans =
2.2204е-016
» eps = 1.е-6
eps =
1. ООООе-ООб
Възстановяване на първоначалната стойност
» clear eps

31
MATLAB. Част 1

>> eps
ans =
2 .2204&-016
1. 3. 2. Променливи
За имената на променливите в MATLAB са в сила следните
правила:
• Започват с буква, следвана от произволен брой букви, цифри
и символи (долна черта).
• Няма ограничения за дължината им, но системата различава
само първите 31 символа.
• Системата е case sensitive, т. е. чувствителна към малките и
главните букви в имената. Например Delta2 и delta2 се приемат
. от системата като имена на две различни променливи. Затова
една от честите грешки при работа с MATLAB е неволната замя­
на на малка с главна буква (или обратно) в името на променлива
или функция.
• Имената на променливите не трябва да дублират имена на си­
стемни команди и функции.
Важно! В MATLAB не се изисква предварително деклариране на
типа (с изключение на символните променливи) и размерността на една
променлива! Те се определят автоматично в процеса на присвояване на
стойности.
1. 3. 3. Математически оператори
В изразите се използват следните аритметични оператори:
+ - събиране;
- - изваждане;
• - умножение;
/ - деление отдясно;
\ - деление отляво;
Л - степенуване;
' - пресмятане на комплексно спрегната матрица.
Когато операндите в един израз са вектори или матрици с еднакви
размери (вж. т. 1.4), могат да се използват и т. нар. поелементни
оператори:
.* - поелементно умножение;
./ - поелементно деление отдясно;
Л - поелементно деление отляво;
.А - поелементно степенуване;
- транспониране на вектор или матрица.
Последователността на извършване на действията в един израз е
в съответствие с общоприетия в такива системи и програмни езици
приоритет. Тази последователност може да бъде променена с помощ­
та на кръгли скоби "(" и ")".

32
Глава 1. Основни сведения за MATLAB

1. 3. 4. Математически функции
Елементарни математически функции
Пълен списък на елементарните математически функции можете
да получите, като въведете командата h e lp e l fu n .
Ето най-важните от тях:

Тригонометрични Хиперболични
sin - синус sinh - синус хиперболичен
cos - косинус cosh - косинус хиперболичен
tan - тангенс tanh - тангенс хиперболичен
cot - котангенс coth - котангенс хиперболичен
asin - аркус синус asinh - аркус синус хиперболичен
acos - аркус косинус acosh - аркус косинус хиперболичен
atan - аркус тангенс atanh - аркус тангенс хиперболичен
acot - аркус котангенс acoth - аркус котангенс хиперболичен

Експоненциални функции Комплексни функции


ехр - експонента abs - модул на комплексно число
log - натурален логаритъм angle - аргумент на комплексно число
log2 - логаритъм при основа 2 complex- генериране на комплексно число
ю д Ю - десетичен логаритъм conj - комплексно спрегнато
sqrt - корен квадратен real - реалната частна комплексночисло
realsqrt- корен квадратен от ре­ imag - имагинерната част на комплекс­
ално неотрицателно но число
число
Специални функции
За да получите пълен списък на специалните функции, въведете
командата help specfun.
Тук са изброени само някои от тях:
besselj - функция на Бесел от първи род_________________________
bessely - функция на Бесел от втори род_________________________
besselh - функция на Бесел от трети род (функция на Ханкел)___________
besseli - модифицирана функция на Бесел от първи род_______________
besselk - модифицирана функция на Бесел от втори род_______________
beta - Бета функция_____________________________________
ellipj - елиптични функции на Якоби___________________________
ellipke - пълен елиптичен интеграл____________________________
expint - експоненциална интегрална функция_____________________
erf____- функция на грешката________________________________
gamma - Гама функция_____________________________________
cross - векторно произведение на триелементни вектори_____________
dot - скаларно произведение на вектори_______________________

3
■Р Щ .
ш
MATLAB. Част 1

Пример 1:
Функцията на Бесел от първи род b e s s e l j ни дава решението на ди­
ференциалното уравнение на Бесел
, d y
z~ — — + z — + (z:- v 2)v = 0,
dz- dz

където z е комплексна променлива;


v - реално число (порядък, параметър или индекс).

Стойността на функцията у, удовлетворяваща горното уравнение, за


конкретни стойности на аргумента z и параметъра v се пресмята по
формулата
у - besselj(v,z).

Нека построим таблица от стойностите на функцията на Бесел за


стойности на аргумента z в интервала от 3,7 до 4,5 със стъпка 0,1.
Таблицата ще има 5 колони съответно за стойности на параметъра V,
равни на 1, 2, 3, 4 и 5.
» besselj(1:5, (3.7:0.1:4.5)’)
ans =
0.0538 0.4283 0.4092 0.2353 0.0995
0.0128 0.4093 0.4180 0.2507 0.1098
-0.0272 0.3879 0.4250 0.2661 0.1207
-0.0660 0.3641 0.4302 0.2811 0.1321
-0.1033 0.3383 0.4333 0.2958 0.1439
-0.1386 0.3105 0.4344 0.3100 0.1561
-0.1719 0.2811 0.4333 0.3236 0.1687
-0.2028 0.2501 0.4301 0.3365 0.1816
-0.2311 0.2178 0.4247 0.3484 0.1947
Обърнете внимание, че при обръщение към функцията b e s s e lj
на мястото на първия аргумент подаваме вектор-ред със стойности на
параметъра V, равни на 1, 2, 3, 4 и 5, което се записва накратко 1 :5 . На
мястото на втория аргумент подаваме вектора-стълб от стойностите на
аргумента z, получен чрез транспониране на вектора ред 3 . 5 : 0 . 1 : 4 . 5
с помощта на единичния апостроф ( ') .
Получената таблица със стойности ни говори много малко за
свойствата на функцията на Бесел. Нагледна представа за тази функция
можем да получим от нейната графика (фиг. 1.8).

34
Глава 1. Основни сведения за MATLAB

Пример 2:
Да се построи графиката на функцията на Бесел от първи род в
интервала z = 0:0.1:20 за стойности на параметъра V, равни на 1, 2, 3.
» z = 0:0.1:20;
» у = besselj(l: 3 , z');
» plot(z, у), grid on
» set(gca,'FontName','Arial Cyr', 'FontSize', 14)
» title(' Функция на Бесел от първи р о д ')

Функция на Бесел от първи род


!
/ ',
V
_..f....... 1.........

/ : \ \

! / , \ . \
’ •' ' \ /
1 __j..J.....i ......
l '1
\ \ '/ , \ \ /
\ { ! >
..................
i {
а. ■■

.0.41
-------- 1 1-------- i1_-___________
-------- i____________ -------
0 5 10 15 20

Фиг. 1.8

1.3.5. Комплексни числа и функции


Повечето от елементарните математически функции могат да се
прилагат както към реални, така и към комплексни числа. При
въвеждането на комплексни числа се използва имагинерната единица,
която в MATLAB се представя със символа i или j . Възможни са след­
ните няколко начина на въвеждане:
1) » z= 2 + 3 i - вместо символа i може да се използва j ;
2) » z= 2 + 3 * i -и л и » z = 2 + i* 3 ;
3) » z= a + b * i - или » z = a + i* b .
Тъй катосимволните константи i и j могат да се предефинират
(например да се използват като индекси в цикли fo r ) , а имената на про­
менливи започват с буква (а не с цифра), при въвеждане на комплексни
числа трябва да се имат предвид следните особености:

35
MATLAB. Част 1

Първият начин (без символ за умножение) се използва само тога­


ва, когато имагинерната част се въвежда директно като число. В този
случай дори е допустимо символът i да е предефиниран! Ако липсва
символ за умножение (*), имагинерната единица не трябва да предхож­
да числото, нито пък тя да бъде предхождана от име на променлива,
тъй като и в двата случая системата ще възприеме тази комбинация
като име на една-единствена променлива!
Вторият начин (със символа за умножение) може да се използва
само тогава, когато имагинерната единица i или j не е била предефи­
нирана, т. е. когато не й е била присвоена преди това някаква стойност.
Ако на i е била присвоена предварително например числена стойност,
системата просто ще извърши умножението!
Използвайте винаги символа (*), когато имагинерната част е пред­
ставена с име на променлива, а не с число.
Невъзможно е да се зададе комплексно число, ако имагинерната
единица е предефинирана и в същото време имагинерната част пред
нея е име на дефинирана променлива!
Добре е да се знае, че всички тези ограничения отпадат, когато за
задаване на комплексни числа се използва специалната функция
complex. Тя има два входни аргумента, които могат да бъдат реални
числа или имена на реални променливи, дефинирани предварително:
» z = complex (а, Ь) .
Тук а е реалната, a b - комплексната част на генерираното ком­
плексно число z.
Примери:
» а = 2 ; b = -4 ; z = complex(a, b)
z =
2.0000 - 4 .OOOOi
» а = [1 2 3 ] ; Ь = [4 5 6] ;
» for i = 1:3
» z(i) = complex(a(i), b(i));
» d±sp(z(±))
» end
1.0000 + 4.OOOOi
2.0000 + 5.OOOOi
3.0000 + 6.OOOOi
Обърнете внимание, че функцията complex работи нормално,
въпреки че символът j се използва като индекс на цикъла for, т. е.
имагинерната единица е предефинирана!
Действията с комплексните числа се осъществяват с обикновените
аритметични оператори +, -, *, /, \, Л.

36
Глава 1. Основни сведения за MATLAB

Примери:
» х = 1 + 2i, у = -3 + 4i
х =
1.0000 + 2 .OOOOi
У =
-3.0000 + 4.0000i
» disp(x + у)

-2.0000 + 6.OOOOi
» х - у
ans =
4.0000 - 2.OOOOi
» disp(x*y)
- 11.0000 - 2.00001
» disp(x/y)
0.2000 - 0.4000i
» disp(x\y)
1.0000 + 2.OOOOi
» disp(xAy)
0.0011 - O.OOOli
Обърнете внимание, че при използване на командата d is p резул­
татите се извеждат без имената на променливите и без системната
променлива ans.
Почти всички елементарни математически функции могат да се
пресмятат както при действителни, така и при комплексни стойности на
аргументите. Във втория случай резултатите са също комплексни числа.
Благодарение на това в MATLAB функцията s q r t например, за разлика
от другите езици за програмиране, пресмята и корен квадратен от отри­
цателно число, а функцията abs при комплексна стойност на аргумента
пресмята модула на комплексното число:
» sqrt(-4 )
ans =
0 + 2.0000i
» abs( 3-4i)
ans =
5
B MATLAB има и няколко функции, предназначени специално за
работа с комплексни числа. Това са функциите a n g le , com plex, c o n j,
imag, r e a l, описани в една от предишните таблици.
Примери:
» z = complex(exp(1), pi)
z =
2.7183 + 3.1416i
» arg = angle(z) , zc = conj(z) , a = real(z) , b = imag(z)

37
MATLAB. Част 1

arg =
0.8575
zc =
2.7183 - 3.1416i
a =
2.7183
b =
3.1416
1. 4. Операции c вектори, матрици и полиноми
Матриците са основният обект на системата MATLAB. Векторите
се разглеждат като матрици с размери 1хп за вектор-ред и пх1 за
вектор-стълб. Един скалар се разглежда като матрица 1x1. Пълен
списък на функциите, отнасящи се до действия с матрици, ще получите
с помощта на командата h e lp e lm a t. Тук са разгледани следните
операции, свързани с матриците:
• въвеждане на вектори и матрици;
• генериране на вектори и матрици;
• преобразуване на вектори и матрици;
• извличане, вмъкване и премахване на части от матрица;
• действия над вектори и матрици;
• матрични функции;
• обработка на експериментални данни;
• операции с полиноми.
1. 4 .1 . Въвеждане на вектори и матрици
При поелементно въвеждане на вектори и матрици са в сила след­
ните правила:
• Въвеждането на елементите започва с отваряща квадратна
скоба " [" и завършва със затваряща " ]".
• Отделните елементи в един ред на матрица или на вектор-ред
се разделят помежду си с интервал или със запетая.
• Отделните редове на една матрица или елементите на вектор-
стълб се разделят помежду си с помощта на символа
• Вместо разделителя можем да разполагаме всеки ред на
матрицата или всеки елемент на вектора-стълб на нов ред. Това
е най-нагледният начин, защото отговаря на естественото
записване на тези обекти.
Примери:
» А = [ 1 2 3; 4 5 6; 7 8 9 ] % разделители между елементите - интервали
А=
1 2 3
4 5 6
7 8 9
» А = [ 1,2,3; 4,5,6; 7,8,9 ] % разделители между елементите - запетаи

38
Глава 1. Основни сведения за MATLAB

А=
1 2 3
4 5 6
7 8 9
» А = [123 % разполагане на всеки ред на матрицата на нов ред
456
789]
А=
1 2 3
4 5 6
7 8 9
» V = [1 234 5 6 7 ] % задаване на вектор-ред
V=
1 2 3 4 5 6 7
» V = [1; 2; 3] % задаване на вектор-стълб
V=
1
2
3
» V = [1 2 3]' % задаване на вектор-стълб чрез
V= % транспониране на вектора-ред
1
2
3
1. 4. 2. Генериране на вектори и матрици
MATLAB предлага специални функции за формиране на вектори и
матрици от определен вид. Най-често използваните от тях са следните:
zeros(m, n) - матрица c размери mxn, запълнена c нули;
ones(m, n) - матрица c размери mxn, запълнена c единици;
eye(m, n) - матрица c размери mxn c единици на главния
диагонал и нули за всички останали елементи;
rand(m, n) - матрица с размери mxn, запълнена със случайни
числа, равномерно разпределени в интервала от
0 до 1;
randn(m, n) - матрица с размери mxn, запълнена със случайни
числа, разпределени по нормален закон.
Забележка. Ако в изброените функции подадете само един аргу­
мент п, ще получите квадратна матрица пхп.
Примери:
» Z zeros(3,5)
Z =
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0

39
MATLAB. Част 1

= o n e s (3,5)

1 1 1 1 1
1 1 1 1 1
1 1 1 1 1
» I = e y e (5 )
I =
1 0 0 0 0
0 1 0 0 0
0 0 1 0 0
0 0 0 1 0
0 0 0 0 1
=randi(2 ,5 )

0.4447 0.,7919 0..7382 0.4057 0.9169


0.6154 0.,9218 0..1763 0.9355 0.4103
Формирането на една матрица може да стане и чрез обединяване
(конкатенация) на няколко матрици:
» А = [ А1, А2, АЗ, ...] - хоризонтална конкатенация;
» А = [ А1; А2; АЗ; ...] - вертикална конкатенация;
» А = [ А1, А2, АЗ; В1; В2] - хоризонтална и вертикална.
Очевидно размерностите на обединяваните матрици трябва да са
такива, че да не се получават празни блокове.
1. 4. 3. Определяне на размера на вектори и матрици
Понякога е необходимо да определим размерите на даден вектор
или матрица. Това най-често се налага, когато съставяме потребителска
функция, която трябва да обработва вектори или матрици с произволни
размери. За целта MATLAB предлага следните две функции:
length (v) - определя дължината на вектора v;
size (A) - определя размера на матрицата А.
Примери:
» v = [ 3 7 5 ];
» А = [ 3 2 4; 6 7 5; 2 5 9 ];
» length(v)
ans =
3
» size (A)
ans =
3 3
1. 4. 4. Преобразуване на вектори и матрици
MATLAB предлага богата гама от функции за преобразуване на
вектори и матрици:

40
Глава 1. Основни сведения за MATLAB

f l i p l r (A) - огледален образ спрямо вертикална ос (flipir - Left Right);


f lip u d ( A ) - огледален образ спрямо хоризонтална ос
(flipud - Up Down);
r o t 9 0 (A) - завъртане на 90° обратно на часовата стрелка;
resh a p e (А, т , п) - преобразува матрицата А в матрица с размери
mxn, като избира и подрежда елементите по стълбове; броят
на елементите на матрицата А трябва да е равен на m*n;
t r i l (A) - връща долната триъгълна част на матрицата А;
t r i u (А) - връща горната триъгълна част на матрицата А;
d ia g (v) - образува диагонална матрица от елементите на вектора v,
разположени върху главния диагонал;
d ia g ( v , п) - елементите на вектора v се разполагат върху п-тия
диагонал над главния;
d ia g ( v , -п ) - елементите на вектора v се разполагат върху п-тия
диагонал под главния;
d ia g (А) - създава вектор-стълб от главния диагонал на матрицата А;
d ia g (А, п) - създава вектор-стълб от п-тия диагонал над главния;
d ia g (А, -п ) - създава вектор-стълб от п-тия диагонал под главния.
Примери:
» А = [1 2 3;4 5 6;7 8 9];
» fliplr(A)
ans =
3 2 1
6 5 4
9 8 7
» triu(A)
ans =
1 2 3
0 5 6
0 0 9
1. 4. 5. Извличане, вмъкване и премахване на части от матрица
MATLAB позволява обръщение към отделен елемент, ред, стълб
или блок от една матрица:
A(i, j) - извличане на елемента аи;
A(i, j) = pi - присвояване на стойност (к) на елемента аи;
v1 =A(:,j) - вектор-стълб, състоящ се от елементите на j-тия
стълб на матрицата А;
v2 = A(i, :) - вектор-ред, състоящ се от елементите на i-тия ред на
матрицата А;

41
MATLAB. Част 1

В = A(i1:i2, j1:j2) - извличане на подматрица В, съставена от


елементите на матрицата А, разположени на местата на пресичане на
редове с номера от И до i2 със стълбове от j1 до j2;
А(2:4, 3:5) = В - копиране на матрицата В3х3 в съответното място на
матрицата А ( старите елементи на А се заменят с новите).
Забележка. Вместо максималната стойност на единия или двата от
индексите може да се използва думата end:
A(3:end, 5:end) = В
Последните операции са много удобни за формиране на разредени
матрици, състоящи се предимно от нули:
» А = zeros(5, 7);
» В = ones(3, 3);
» А(2:4, 3:5) = в
А=
0 0 0 0 0 0 0
0 0 1 1 1 0 0
0 0 1 1 1 0 0
0 0 1 1 1 0 0
0 0 0 0 0 0 0
Обърнете внимание, че когато вместо индекс се постави символът
това означава целия диапазон от възможни стойности на индекса,
т. е . е еквивалентно на "1:end".
Премахването на части от вектор или матрица става, като се
присвои на съответната част символът за празен масив
v(1:3) = Q- премахва първите три елемента на вектора v;
A(i, :) = [ ] - премахва i-тия ред на матрицата А;
А(:, j) = [] - премахва j-тия стълб на матрицата А;
А(:, 3:7) = Q- премахва от З'ти до 7"и стълб;
А(:, [1 5 9]) = □ - премахва Г ви, 5’и и 9‘и стълб.
При това "изрязване" размерът на вектора или матрицата се
намалява автоматично.
Тъй като в паметта на компютъра матриците се съхраняват като
вектор, в който елементите се разполагат последователно по стълбове,
при обръщение към дадена част от матрицата може да се използва
само един индекс:
А(п) - извличане на n-тия елемент от вектора, представляващ
матрицата А;
А(3:9) - извличане на елементите от 3'™ до 9'и;
А(:) - извличане на цялата матрица като вектор-стълб.

42
Глава 1. Основни сведения за MATLAB

Примери:
» А = [1 4 7; 2 5 8; 3 6 9]
А=
1 4 7
2 5 8
3 6 9
» А(:,3) = [] % премахваме третия стълб
А=
1 4
2 5
3 6
» А(:)' % транспонираме вектора-стълб А(:)
ans =
1 2 3 4 5 6
1. 4. 6. Логическо индексиране
Определен интерес представлява т. нар. логическо индексиране,
което ни дава възможност да извличаме елементи на вектори и матри­
ци, удовлетворяващи определени условия. Това се постига, като вместо
индекси, определящи извличаните части по тяхното разположение в
масива (вектор или матрица), използваме логическа функция или логи­
ческо отношение, в които влиза името на същия масив:
В = A(logical_expression(A))
Примери:
» v = [1 3 6 4 7 inf 0 2 9 NaN];
» v(finite(v)) % извеждаме само тези елементи на v,
ans = % които имат крайни стойности
1 3 6 4 7 0 2 9
» v(~finite(v)) = [] % премахваме елементите infи NaN
v=
1 3 6 4 7 0 2 9
» v(v > 4) % извеждаме елементите, по-големи от 4
ans =
6 7 9
» v(v > 4 |v < 1) = []; % премахваме елементите, по-големи от 4
» V % или по-малки от 1
v=
1 3 4 2
Забележка. Командата v = v (finite ( v ) ) е еквивалентна на
v (^finite ( v ) ) = [ ] . Тук символът означава логическо отри­
цание.

43
MATLAB. Част 1

1. 4. 7. Действия с вектори и матрици


Лействия от линейната алгебра
Основните действия с вектори и матрици, познати в линейната
алгебра, се извършват в MATLAB с помощта на обикновените аритме­
тични оператори +, *, Л, •:
А + В - събиране;
А - В - изваждане;
А*В - умножение;
Алп - степенуване (п - цяло число, АЛ2 е еквивалентно на А*А);
А' - пресмятане на комплексно спрегната матрица;
dot(v1, v2) - скаларно произведение на тримерни вектори; .
cross(v1, v2) - векторно произведение на тримерни вектори.
При прилагането на тези действия е важно да се помнят
условията, при които те са възможни:
• При събиране или изваждане векторите или матриците трябва
да са с еднакъв размер.
• При умножение броят на стълбовете на първия множител трябва
да е равен на броя на редовете на втория.
• На степен могат да се повдигат само квадратни матрици.
Забележки:
1) Ако v1 е вектор-ред, a v2 - вектор-стълб, при което и дв
вектора са с еднаква дължина п, то v1*v2 е число, равно на скаларното
произведение на векторите, a v2*v1 е квадратна матрица пхп!
2) При събиране, изваждане и умножение единият от операндите
може да бъде скалар. За отбелязване е, че операциите събиране и
изваждане на матрица и скалар са характерни само за MATLAB и не са
дефинирани в линейната алгебра! Ако прибавим един скалар към
дадена матрица, той се прибавя към всеки елемент на матрицата.
Пример:
» А ==[12 3; 4
» В ==А + 10
В=
11 12 13
14 15 16
17 18 19
Освен описаните вече действия в MATLAB са дефинирани
действията деление на матрици отляво и отдясно:
- А/В - деление отдясно;
- А\В - деление отляво;
Операндът в числителя може да бъде и вектор-стълб (вж. гл. 3).

44
Глава 1. Основни сведения за MATLAB

Поелементни операции
В MATLAB съществуват операции, непознати в линейната алгебра,
които се изпълняват над всеки елемент на матрицата, преобразувайки я
в друга матрица със същия размер. Това са т. нар. поелементни опе­
рации.
Такива операции извършват всички елементарни функции. Ако
например v = [v1t v2, ..., vn], то sin(v) ще представлява векторът [sin(v1),
sin(v2), .... sin(Vn)].
Освен това, добавяйки по една точка пред обикновените
математически оператори *, /, \, А и получаваме следните поелементни
оператори:
. - поелементно умножение;
./ - поелементно деление отдясно;
Л - поелементно деление отляво;
.Л - поелементно степенуване;
- транспониране на вектор или матрица.
Забележки:
1) Обикновените оператори "+" и също имат поведение на
поелементни, без да е необходимо да добавяме точка пред тях.
2) При поелементното умножение, деление и степенуване един от
операндите може да бъде и скалар.
3) Ако и двата операнда са вектори или матрици, те трябва да са с
еднакъв размер.
4) Ако елементите на вектора или матрицата са реални числа, то А'
е еквивалентно на А.'.
Примери:
С = А + Ь - прибавяне на скалара b към всеки елемент на матрицата А.
А + b е еквивалентно на А + Ь*Е, където Е = ones(size(A)) е
матрица с размера на матрицата А и запълнена с единици.
С = А.*В - Cjj = a ij * b i j ;
С = А./В поелементно деление на две матрици - Cjj = a ij / b ij;
С = А.\В поелементно деление на две матрици - Cjj = b i j / 3 i j !
С = А.ЛВ поелементно степенуване - Ci] = a ij Л K-.
Dij,
С = А.ЛЬ поелементно степенуване (Ь е скалар) - Cjj = a ij л b ;
С = Ь.ЛА поелементно степенуване - Cjj = b л a i j .
Поелементните операции на системата MATLAB определят ней­
ната изключителна мощ. Те позволяват много лесно и бързо да се
пресмятат стойностите на сложни изрази (функции) за множество от
стойности на параметрите (аргументите), без да е необходимо да се
организират цикли.

45
MATLAB. Част 1

Ако в един по-сложен израз (ехрг) са използвани обикновените


математични оператори, вие можете при необходимост да въведете с
един замах поелементните оператори с помощта на функцията
v e c to r iz e (ехрг):
» expr=' exp(х)* s i n (х )/ s q r t ( х ) '
ехрг =
e x p ( х ) * s i n ( х ) / s q r t (х)
» v e c t o r i z e (е х р г)
ans =
ехр(х).*s in (x )./s q rt(x )
1. 4. 8. Матрични функции
MATLAB предлага следните три вградени матрични функции:
е х р т (А) - матрична експонента еА ;
lo g m (А) - натурален логаритъм 1пА ;
s q rtm (А) - корен квадратен от матрицата А.
Важно! Обърнете внимание на последната буква m в имената на
трите функции! Наличието й означава, че тези функции са матричните
функции от линейната алгебра, които оперират върху матриците като
цяло, а не върху отделните им елементи. По това ще ги различавате от
обикновените математични функции exp, lo g и s q r t , които извършват
поелементни операции.
В MATLAB има още три функции, пресмятащи матричната
експонента по различни алгоритми:
expm l - разложение на Паде;
ехр т2 - разложение на Тейлор;
ехршЗ - спектрално разложение.
Тези три функции не са вградени, а се съхраняват в т-файлове.
При необходимост можем да пресметнем и други математични
функции като матрични (а не като поелементни) с помощта на функция­
та funm:
fu n m (A , ’ f u n ' ) - пресмята матричната версия на функцията
' f u n ' от квадратната матрица А. В скобите fu n се замества с името на
конкретната функция, например s in , cos, s in h .......Името на функция­
та се загражда в единични апострофи или се предхожда от символа
Примери:
» А = [ 1 2 3; 4 5 6; 7 8 9 ] ;
» sin(А) % поелементни операции
ans =
0.8415 0.9093 0.1411
-0.7568 -0.9589 -0.2794
0.6570 0.9894 0.4121

46-
Глава 1. Основни сведения за MATLAB

» funm(A, @sin) % матричен вариант на функцията sin


ans =
-0.6928 -0.2306 0.2316
-0.1724 -0.1434 -0.1143
0.3479 -0.0561 -0.4602
» sin(A).A2 + cos (A) .A2 % поелементни операции
ans =
1.0000 1.0000 1.0000
1.0000 1.0000 1.0000
1.0000 1.0000 1.0000
» funm (A, @sin) A2 + funm (A, @cos) A2 % матрични операции
ans =
1.0000 - 0.0000 -0.0000
-0.0000 1.0000 -0.0000
-0.0000 - 0.0000 1.0000
1. 4. 9. Обработка на експериментални данни
MATLAB предлага множество от функции за обработка на експери­
ментални данни, представени във вид на вектори и матрици. Пълен
списък на тези функции можем да получим с командата » h e l p
d a ta fu n .
Най-напред ще разгледаме действието на тези функции върху век­
тори. Елементите на един вектор може да представляват стойностите на
една-единствена величина, измерена в различни моменти от времето
или в различни точки на дадена права. Нека векторът v съдържа такива
експериментални данни. Върху него можем да приложим следните
функции:
m in (v ) - връща минималния елемент на вектора v;
max (v ) - връща максималния елемент на вектора v;
mean (v) - пресмята средноаритметичната стойност;
s t d (v) - пресмята средноквадратичното отклонение;
s o r t (v) - сортира елементите във възходящ ред;
sum (v) - пресмята сумата от всички елементи;
p ro d (v) - пресмята произведението на всички елементи;
cumsum(v) - пресмята кумулативната сума от елементите, т. е.
връща вектор със следните елементи [vi,vi+v2,vi+v2+v3,..., vi+v2+...+vn];
cum prod (v ) - пресмята кумулативното произведение на елемен­
тите, т.е. връща вектор с елементи [v b vi*v2, V|*v2*v3, V ! * v 2*...*vn];
d i f £ (v) - връща вектор c елементи, равни на разликите между
всеки два последователни елемента на v , т. е. [v2-Vb v3-v2, ..., vn-vn_i].
Очевидно дължината на този вектор е с единица по-малка от тази на v.
Тази функция може да се използва за числено пресмятане на първата
производна на дадена функция, зададена в табличен вид.

47
MATLAB. Част 1

Функциите min и max могат да се използват и с два изходни аргу­


мента - първият, М, ще бъде съответно минималният или максимал­
ният елемент, а вторият - неговият индекс п:
[М, п] = min(v)
[М, n] = max(v)
С помощта на функцията trapz можем да пресметнем по метода
на трапеците интеграла от таблично зададена функция:
F = trapz(х, у).
Тук х е векторът с абсцисите, а у - векторът с ординатите. Ако не се
укаже векторът х, приема се, че стъпката на интегриране е постоянна и
равна на единица.
Пример:
» х = 0:0.001:pi;
» У = sin(х);
» trapz(х, у)
ans =
2.0000
Всички описани дотук функции могат да се прилагат и към матри­
ци. Приема се, че във всеки стълб на матрицата са записани стойно­
стите на дадена величина, измерени в различни моменти от времето
или при различни условия. Ето защо е напълно логично всяка от функ­
циите да обработва всеки стълб на матрицата така, както обработва
един вектор. Например функцията min (А) ще върне вектор с мини­
малните елементи от всеки стълб на матрицата А.
Примери:
» А = magic (5) % генериране на магическа матрица
А =
17 24 1 8 15
23 5 7 14 16
4 6 13 20 22
10 12 19 21 3
11 18 25 2 9
» min (А)
ans =
4 5 1 2 3
» max (А)
ans =
23 24 25 21 22
» sum (A)
ans =
65 65 65 65 65
» sum (А, 2) % сумиране по редове

48
Глава 1. Основни сведения за MATLAB

ans =
65
65
65
65
65
sum (diag (A)) % сумата от елементите на главния диагонал
ans =
65
sum (diag (rot90 (A))) % сумата от елементите на втория диагонал
ans =
65
» х = 0:0.001:pi;
» trapz(х,[sin(х)', cos(х)', sinh(x)', cosh(x)'])
ans =
2.0000 0.0006 10.5851 11.5419
Пояснение:
Магическа матрица е квадратна матрица, за която сумата от
елементите на всеки ред, стълб или диагонал е една и съща. Генерира
се в MATLAB с помощта на функцията m agic. Ако желаем действията
на дадена функция да бъдат не по стълбове (по подразбиране), а по
редове, въвеждаме като втори входен аргумент числото 2. В последния
пример вторият аргумент е матрица, в четирите колони на която са
записани стойностите на функциите sin(x), cos(x), sinh(x) и cosh(x). По
този начин с един-единствен оператор пресмятаме едновременно
интегралите от тези четири функции в интервала от 0 до л.
1. 4.10. Операции с полиноми
Полиномът
Р(х) = апх" + ап_ухп~' +... + а,х + а0
се задава в MATLAB във вид на вектор с елементи, равни на
коефициентите на полинома
Р —[я„5 Яр #0]
Пълен списък на функциите за работа с полиноми ще получите с
помощта на командата h e lp p o ly fu n . Ето по-важните действия над
полиноми:
р = co n v ( p i , р2) - умножение на полиноми; р е вектор от коефи­
циентите на полинома, получен от умножението на полиномите p i и р2;
[Q, R] = d e c o n v ( p l, р2) - деление на полиномите p i и р2. Q е
основната част от резултата, a R е остатъкът от делението;
r = r o o t s (р) - пресмята корените г на полинома р;

4 49
MATLAB. Част 1

p = poly (r) - намира полинома p по зададени негови корени r;


p = poly (A) - намира характеристичния полином p на матрицата A:
р (A) = det(A-A.I);
r = roots (poly (A)) - пресмята корените на характеристичния по­
лином на матрицата А, т. е. собствените стойности на А; командата
roots (poly (A)) е еквивалентна на eig (А);
у = polyval (р, х) - пресмята стойността на полинома р за даде­
на стойност на аргумента х;
В = polyval (р, А) - пресмята стойностите на полинома р за все­
ки елемент на матрицата А.
Пример:
г = [1 2 3 4 5 6 7] ; % задаваме вектора с корените г
р = poly (г) ; % генерираме полином, който има за корени г
х = 0.9:0.01:7.1; % вектор с абсциси
plot (х,polyval (р,х) ,[0 8] ,[0 0]), grid on % графика

Фиг. 1.9. Графика на полином от 7-ма степен


1. 5. Структури от данни в MATLAB
Под клас в MATLAB се разбира определена форма на представяне
на обектите в паметта на компютъра заедно с правилата за тяхното
преобразуване. Класът определя типа на променливата, а правилата -
операциите и функциите, които могат да бъдат приложени към този тип.
1. 5.1. Основни класове обекти в MATLAB
В MATLAB са вградени 6 класа обекти:
double - масиви от действителни или комплексни числа с пла­
ваща точка и двойна точност (double precision);
sparse - двумерни разредени матрици;

- 50-
Глава 1. Основни сведения за MATLAB

char - масиви от символи, или низове (strings);


struct - масиви от записи (structures);
cell - масиви от клетки (cells);
unit8 - масиви от 8-разредни числа без знаци.
1. 5. 2. Многомерни масиви
Освен разгледаните досега едномерни и двумерни масиви (век­
тори и матрици), в MATLAB можете да ползвате и многомерни масиви.
Един тримерен масив, например, можем да си представим като пакет
(сандвич) от обикновени матрици. Третият индекс на елементите на този
масив ще отговаря на поредния номер на матрицата в пакета. Множест­
во от такива пакети ще ни даде четиримерен масив и т. н. Операциите
върху многомерните масиви са аналогични на тези при матриците. При
извеждане на многомерен масив системата извежда съставящите го
матрици. Няма никакви ограничения върху размерността на даден
масив.1
Пример:
А = rand(3); В = rand(3) ; % генериране на две случайни матрици
С (: , 1) = А; С (: , 2) = В ; % дефиниране на матрицата С
С % с размерност 3x3x2
С (:jг:,1) =
0.9501 0.4860 0.4565
0.2311 0.8913 0.0185
0.6068 0.7621 0.8214
С (:;г:,2) =
0.4447 0.9218 0.4057
0.6154 0.7382 0.9355
0.7919 0.1763 0.9169
1. 5. 3. Клас низове (char)
Низът (често наричан стринг) представлява последователност от
символи. При въвеждане този низ се загражда в единични апострофи:
strl=' Това';
str2=' е низ';
str3=' от символи!';
strl
strl =
Това
Няколко низа може да се обединят в един чрез операцията
конкатенация:
Хоризонтална конкатенация
Може да се извърши с помощта на квадратни скоби или с вграде­
ната функция strcat:
str =[strl str2 str3] % хоризонтална конкатенация на стрингове

-51 -
MATLAB. Част 1

str -
Това е низ от символи!
strcat(strl,str2,str3)
ans =
Това е низ от символи!
Вертикална конкатенация
Извършва се с помощта на вградената функция strvcat. Квад­
ратните скоби може да се използват за вертикална конкатенация само
при еднаква дължина на обединяваните низове, при което за
разделители между тях се използва символът" ;
strv = strvcat(strl, str2, str3)
strv =
, Това
е низ
от символи!
[strl; str2; str3]
??? Error using ==> vertcat
All rows in the bracketed expression must have the
same number of columns.
Тъй като низовете strl, str2 и str3 са c различна дължина,
получихме съобщение за грешка при опита да използваме квадратните
скоби за вертикална конкатенация!
Низът се съхранява в паметта като вектор ред, елементите на
който са отделните символи на низа. Ето защо към отделните символи
на низа можем да се обръщаме с помощта на техните индекси:
str(3)
ans =
о
str(2:7)
ans =
Това е
Съвкупността от вертикално обединени низове образува двумерен
масив (матрица) от символи.
С помощта на функцията strrep можем да заменим подниз от
символи в даден низ с друг низ:
strrep(string, str_old, str_new)
При решаване на практически задачи много често се налага да
извеждаме предварително зададен текст, в който да вграждаме теку­
щите числени стойности на дадена променлива. За целта трябва най-
напред да преобразуваме числената стойност на променливата в низ с
помощта на функцията num2str (number to string), след което чрез
конкатенация да я вмъкнем в текста.

52
Глава 1. Основни сведения за MATLAB

Пример:
X = p i;
disp([' Стойността на х е равна на ', num2str(х)])
Стойността на х е равна на 3.1416
Обратният преход от стринг към число се извършва с помощта на
функцията str2 n u m .
1. 5. 4. Масив от записи (Array of Structures)
Масивът от записи позволява съхраняването на разнородни данни
- низове, скалари, вектори, матрици и др. Характерна особеност на
такива масиви е наличието на именувани полета. Името на всяко поле
се отделя от името на масива с точка. За обръщение към конкретен
запис от масива се използва индексиране както при обикновени вектори
и матрици.
Масивите от записи са удобни за създаване на бази от данни.
Бихме могли например да направим опис на личната си библиотека:
» b o o k s (1,1). a u to r = ' Р . Беллман' ;
» books(1,1).title = 'Введение в теорию матриц';
» books(1,1).izdat = 'Наука, Москва';
» books(1,1).year = '1969';
Вместо да задаваме поотделно стойността на всяко поле, можем с
помощта на функцията s t r u c t да задаваме едновременно стойностите
на всички полета от даден запис:
» books(1,2) = struct('autor','О . Зенкевич',...
' t i t l e ' , 'Метод конечньхх злементов в те х н и ке ' , . . .
' i z d a t ' , 'Мир, М о с к в а ' , . . .
'year','1975');
» books % извежда списък на всички полета
books =
1x2 struct array with fields:
autor
title
izdat
year
» books (1,2) % извежда и съдържанието на полетата
ans =
autor: '0. Зенкевич'
title: [1x34 char]
izdat: 'Мир, Москва'
year: '1975'
» books (1,2) .title % извлича стойността на дадено поле
ans =
Метод конечньгх злементов в технике

- 53-
MATLAB. Част 1

В последния пример използвахме двумерен масив от записи с име


books. Първият индекс може да е свързан с раздела "Математика"
например, а вторият - с конкретна книга от този раздел. Често масив от
записи се използва за описване на личния състав на дадено учебно
заведение или предприятие. В такъв случай като полета обикновено се
използват английските еквиваленти за име, бащино, фамилия, година на
раждане, семейно положение, образование и т. н.
Информация за полетата на даден масив от записи може да се
получи и с помощта на функцията fie ld n a m e s :
fie ld n a m e s (b o o k s )
ans =
'autor'
'title'
'izdat'
'year'
Ако на даден запис от масив се присвои стойност на ново поле,
това поле се появява автоматично във всички останали записи, макар и
празно.
Едно поле може от своя страна да представлява масив от данни -
вектор, матрица, многомерен масив или друг масив от записи. В такъв
случай се използват допълнителни индекси за обръщение към отделни­
те му елементи, например g ro u p (3) .m a rks (7). Тук g ro u p е името
на основния масив от записи, a m arks е името на полето, което в
случая е едномерен масив (вектор) от данни.
Едно поле може да бъде премахнато с помощта на командата
S = r m f ie ld ( S , ' fie ld _ n a m e ' ) ,
където S е името на масива от записи.
Въпреки че класът от записи почти не се използва при числени
пресмятания, той съществено разширява възможностите за приложение
на MATLAB в други области.
1. 5. 5. Масив от клетки (Array of Cells)
Масивът от клетки е много удобен за съхраняване на нееднородна
информация. В различните клетки на един и същи масив може да се
съхраняват всички възможни типове данни: скалари, вектори, матрици,
стрингове с различна дължина, масиви от записи и дори масиви от
клетки! Масивите от клетки могат да бъдат едномерни и многомерни.
Присвояването на стойности на отделните клетки на масива може
да стане по два начина:
1) МК{ 1 , 2 } = [ 1 , 2 , 3 ] - индексите на елемента на маси
заграждат във фигурни скоби, а присвояваният обект отдясно се въвеж­
да по общоприетия начин.

54
Глава 1. Основни сведения за MATLAB

2 ) М К ( 1 , 2 ) = { [ 1 , 2 , 3 ] } - индексите на елемента на масива


се заграждат в кръгли скоби, а присвояваният обект отдясно - във фи­
гурни скоби.
Фигурните скоби представляват конструктор на масив от клетки
така, както квадратните скоби служат като конструктор на числени век­
тори или матрици. Това означава, че освен поелементно можем да
зададем едновременно стойности на всички клетки от масива.
Пример. Задаване на стойност на масив с размер 2 x 2
МК = { ' В . Витлиемов' , [ 1 2 3 ; 4 5 6; 7 8 9]
3 - 4 i, - p i:p i/2 :p i }
МК =
'В. Витлиемов' [3x3 double]
[3.0000- 4.OOOOi] [1x5 double]
Функцията cell позволява да създадем предварително шаблон на
масив от празни клетки:
А = c e l l (2, 3)
А =
[] [] []
[] [] []
След това можем да запълваме отделните клетки чрез оператори
за присвояване:
А{2, 2} = 1 : 2 : 13
А =
[] []
[] [1x7 double]
А{2, 2}
ans =
1 3 5 7
Важно! Ако името на създавания масив от клетки е било използ­
вано в текущата сесия като име на обикновен масив, той трябва да се
изчисти от работното пространство с командата clear аггау_пате,
преди да започнем поелементното му запълване. В противен случай
MATLAB ще извежда съобщение за грешка!
Извеждане на съдържанието на всички клетки на дефиниран вече
масив може да стане с помощта на функцията celldisp
celldisp(МК)
МК{1,1} =
В . Витлиемов
МК{2,1} =
3.0000 - 4.0000i
МК{1,2} =
1 2 3
4 5 6
7 8 9

55
MATLAB. Част 1

МК{2,2 } =
-3.1416 -1.5708 0 1.5708 3.1416
Извличането на данни от масив с клетки може да стане по два
начина:
1) Съдържанието на отделна клетка се извлича, като се ук
нейните индекси, заградени във фигурни скоби:
в = мк{1,2}
в =
1 2 3
4 5 6
7 8 9
Ако в дадена клетка се съхранява масив от данни, достъпът до
отделни елементи от този масив се осъществява с помощта на индек­
сите, заградени в кръгли скоби:
х = МК {1,2} (2,3) %елемент от 2-ри ред и 3-ти стълб на матрицата
х =
6
у = МК{1,1}(4:10)
У =
Витлием
2) Извличането на подмасив от клетки става, като се загр
индексите им в кръгли скоби:
D = МК (1,1:2) % извличане на първия ред клетки от масива МК
D =
'В. Витлиемов' [3x3 double]
celldisp(D)
D {1} =
В . Витлиемов
D{ 2 } =
1 2 3
4 5 6
7 8 9
Масивите от клетки са по-удобни от масивите от записи по следни­
те причини:
1) Осигуряват по-удобен достъп до съхраняваната информация -
чрез индекси, а не чрез имена на полета.
2) Позволяват достъп едновременно до няколко клетки, докато при
масивите от записи не е възможен достъп едновременно до няколко
полета.
3) Размерът на масива от клетки не е ограничен - автоматич
увеличава при присвояване на нови стойности. Броят на полетата на
един масив от записи обаче е фиксиран.

56
Глава 1. Основни сведения за MATLAB

1. 5. 6. Установяване на класа на обекта


Принадлежността на един обект към даден клас може да се уста­
нови с помощта на функцията class:
class(х)
ans =
double
class (МК)
ans =
cell
Ha базата на основните класове обекти, дефинирани в MATLAB,
потребителят може да създава собствени класове. Това обаче излиза
извън обсега на тази книга. По-запалените програмисти могат да
намерят полезен материал по тази тема в книгата на Ю. Лазарев [24],
стр. 169 - 201.

1. 6. Ф айлове - скриптови ф айлове, ф айл-ф ункции,


ф айлове с данни
Тук ще се запознаем накратко с най-често използваните в научно-
техническите пресмятания файлове:
• скриптови файлове (Script Files);
• файл-функции (File Functions);
• файлове с данни (Data Files).
1. 6.1. Скриптови файлове (Scripts)
Скриптовите файлове са обикновени ASCII-файлове, съдържащи
команди на MATLAB. Скриптовият файл се създава в работната среда
на MATLAB в следната последователност:
• Избираме от менюто File->New->M-file или натискаме първия
бутон, изобразяващ празен бял лист. При това се стартира
редакторът на MATLAB medit.
• Въвеждаме с помощта на клавиатурата командите, като
спазваме познатите вече правила за въвеждане на команди в
диалогов режим (вж. т 1. 1, Command Window).
• От основното меню избираме командата File—»Save As... .
• В появилия се прозорец Save file as избираме директорията,
въвеждаме името на файла в полето File name и натискаме
бутона | Save |. С това файлът е записан на твърдия диск с
разширение .т.
За изпълнението на файла е достатъчно да въведем името му (без
разширението .т !) в командния прозорец:
» file пате

- 57-
MATLAB. Част 1

и да натиснем клавиша E n te r. В отговор на това системата ще


претърси най-напред текущата директория за файл с това име и
разширение .т (вж. информацията за командата pco d e в т. 1.2). Ако не
го открие в текущата директория, продължава търсенето във всички
останали директории в последователност, съответстваща на реда им в
списъка на достъпните директории. (Списъка можете да видите с
помощта на командата p a th .) След като открие търсения файл,
системата изпълнява всички команди, записани в него.
Ако във файла има синтактични грешки, системата спира
изпълнението при първата грешка и извежда съобщение за грешка.
Текстът на съобщението е с червен цвят и започва с три въпросителни
(???). Прочетете внимателно това съобщение! Обикновено в него се
указват редът и позицията, където е открита грешката, и типът на тази
грещка. Отворете файла с командата File-Ю реп... или с двойно
щракване върху името му в прозореца Current Directory. Направете
необходимите корекции и го запишете с командата File->Save или с
щракване върху бутона, изобразяващ дискета. Отново въведете името
на файла на командния ред и ако пак получите съобщение за грешка,
коригирайте и нея в описаната последователност. Това се повтаря,
докато изчистите всички грешки от програмата. Не забравяйте след
всяка корекция да записвате файла. Докато трае тази процедура, не
затваряйте редактора, а само превключвайте от прозореца на редактора
към командния прозорец и обратно.
Така обаче ще отстраните само синтактичните грешки, но не и
логическите. Логическите грешки можете да откриете, след като
тествате програмата си върху някои тривиални задачи, за които знаете
как трябва да изглежда вярното решение.
Характерни особености на скриптовите файлове:
1) Скриптовите файлове представляват самостоятелно изпълня­
вани блокове от оператори и команди.
2) В скриптовия файл няма служебна дума за начало на файла.
3) Всички променливи на изпълняваните в текущата сесия скрип-
тови файлове се съхраняват в едно и също работно пространство (Work
Space). Това означава, че имената на променливите в тези файлове
трябва да са съгласувани, ако решават съвместно дадена задача. Ако
даден скриптов файл не ползва резултатите от друг, изпълняван преди
него скриптов файл, най-добре е да започва с командата c le a r за
изчистване на работното пространство. Така се избягва опасността от
дублиране на имена, водещо до непредвидими резултати.
Ако една тествана и правилно работеща програма изведнъж започ­
не да дава грешни резултати или съобщения за грешки, изчистете ра­
ботното пространство с командата c le a r и пробвайте отново. Това
много често решава проблема.

- 58-
Глава 1. Основни сведения за MATLAB

4) При обръщение към скриптов файл не се подават никакви


аргументи. Входните данни се въвеждат с помощта на команди,
записани в самия файл. Най-често се използват следните два начина:
• Въвеждане в диалогов режим с помощта на командата input:
var = inputf Въведете променливата v a r :');
Аргументът на функцията input е произволен низ, който се извежда на
екрана. След като се въведе стойността на променливата var и се
натисне Enter, системата продължава изпълнението на програмата.
• Зареждане от файл с данни с помощта на командата load:
load file_name.
Пример:
% ******* Програма distance *******
% Пресмята разстоянието между
% точките A(x1,y1,z1) и B(x2,y2,z2)
% Въвеждане на данните
А = inputf Координати на точка А - [х1,у1,z1] = ');
В = inputf Координати на точка В - [x2.y2.z2] = ');
% Пресмятане на разстоянието d
d = sqrt ((A(1)- В(1))Л2 + (A(2) - В(2))л2 + (A(3)— В(3))л2 );
% Извеждане на резултата
disp ([' Разстоянието между точките А и В е равно на ',. ..
num2str (d) ]); % конкатенация на два низа
% ******* End of Program distance ******
След като запишем програмата на твърдия диск с помощта на
командата File->Save As..., можем да получим информация за нея с
командата help distance или да я стартираме с помощта на коман­
дата distance:
» help distance
******* Програма distance *******
Пресмята разстоянието между
точките А(х1,у1,z1)и B(x2,y2,z2)
» distance
Координати на точка А - [х1,у1,z1] = [2 5 8]
Координати на точка В - [x2.y2.z2] = [37 5]
Разстоянието между точките А и В е равно на 3.7417
Обърнете внимание, че при подаване на командата help с името
на един m-файл се извеждат всички редове с коментари, разположени
от началото на файла до първия празен ред или до първия изпълним
оператор.

- 59-
MATLAB. Част 1

Очевидно скриптовият файл не е много удобен за описване на


една функция, защото не можем да използваме директно името му в
дясната част на оператор за присвояване. В задачи, аналогични на
предишния пример, е по-удобно да използваме така наречената файл-
функция.
1. 6. 2. Файл-функции (File Functions)
Файл-функциите се различават от скриптовите файлове по това, че
в тях обменът на данни се извършва с помощта на списъци от входни и
изходни аргументи. Освен това всяка файл-функция започва с ключо­
вата дума function.
Файл-функцията, описваща функция на една променлива у = f(x),
има следния вид:
function у = fname (х) % заглавен ред на функцията
у = f (х) ; % пресмятане на функцията
където function е ключовата дума;
у - изходният аргумент (формален);
fname - името на функцията;
х - входният аргумент (формален).
При пресмятане на стойността на функцията може да се използват
произволен брой команди (оператори).
Възможно е една файл-функция да има няколко входни и изходни
аргумента:
function [ у 1 , у 2,...,Ут] = fname (хх,х2,...,хп)
yi = fз.(xi t х21 ...f xn) ;
y2 = f2 (xi,x2,...,xn) ;

Ут (Xi t X2 f ... r Xn) ,


Обърнете внимание, че когато изходните аргументи са повече от
един, те задължително се заграждат с квадратни скоби! Не бъркайте
тази конструкция с вектор, защото при вектора като разделители могат
да служат и интервали, докато в списъка на аргументите те са недопус­
тими. Допустимо е една файл-функция да няма нито един входен или
изходен аргумент.
Забележка. В горните две схеми десните части са представени
символично. При конкретни задачи това ще бъдат конкретни изрази.
Важно! Файл-функцията непременно трябва да се записва във
файл, носещ нейното име! В противен случай системата няма да може
да открие и изпълни тази функция.

- 60-
Глава 1. Основни сведения за MATLAB

Пример 1:
Нека оформим скриптовия файл от програмата distance като файл-
функция:
function d = dist(A,B)
% Предназначение:
% Пресмята разстоянието между две точки,
% зададени чрез декартовите си координати.
% Входни аргументи:
% А - вектор с координати х1,у1 и z1 на т.А;
% В - вектор с координати х2, у2 и z2 на т.В;
% Изходни аргументи:
% d - разстоянието между двете точки.
d = sqrt ((A(1) -В (1)) А2 + (А(2) -В(2))А2 + (А(3) - В(3))А2);
След като запишем файл-функцията на твърдия диск с командата
File->Save As... под името dist.m, можем да изпълняваме тази функ­
ция по същия начин, както и всяка вградена математическа функция:
А = [2 5 8]; В = [375];
dl = dist(A,B)
dl =
3.7417
Тук А и В са действителните аргументи, които могат да имат
произволни имена. Възможно е да задаваме тези аргументи директно
при извикване на самата функция:
dist([3 16], [259])
ans =
5.0990
При тази структура на входните аргументи с едно обръщение към
функцията е възможно да пресмятаме разстоянието само между една
двойка точки. Ако желаем да обработваме едновременно множество
такива двойки, програмата функция трябва да се оформи по следния
начин:
Пример 2:
function d = dist2(xl,yl,zl,х2,у2,z2)
% Предназначение:
% Пресмята разстоянието между една или няколко
% двойки точки Ai(x1,y1,z1) и Bi(x2,y2,z2),
% зададени чрез декартовите си координати.
% Входни аргументи:
% х1,у1,z1- вектори с координатите на точките Ai;
% x2.y2.z2- вектори с координатите на точките Bi.
% Изходни аргументи:
% d - вектор с разстоянията между отделните двойки точки,
d = sqrt((xl - х2).А2 + (yl - у2).А2 + (zl - z2).A2);
Обърнете внимание на поелементната операция . А2, която позво­
лява при извикване на тази функция да подаваме като действителни

-61 -
MATLAB. Част 1

аргументи както скалари (при една двойка точки), така и вектори - за


обработка на множество от двойки точки.
Примерно използване на функцията d is t 2 :
d i s t 2 (1,2,3,4,5,6)
ans =
5.1962
x l = [1 2 3] ; y l = [4 5 6] ; z l = [7 8 9] ;
х2 = [9 8 7] ; у2 = [6 5 4] ; z2 = [3 2 1] ;
d = d i s t 2 ( x l , y l , z l , x 2 , y 2 , z2)
d =
9.1652 8.4853 9.1652
Ако желаем да оформим показаната файл-функция така, че да мо­
же да обработва множество от двойки точки, но да има само два входни
аргумента А и В, трябва да използваме масиви от клетки. Напомняме, че
масивите от клетки могат да имат за елементи други масиви от данни. В
случая А и В ще бъдат едномерни масиви от клетки, съдържащи по три
елемента - векторите х1, у1, z1 за масива А и векторите х2, у2, z2 за
масива В.
Пример 3:
fu n c t io n d = d i s t 3 ( A , B )
% Предназначение:
% Пресмята разстоянието между една или няколко
% двойки точки Ai(x1,y1,z1) и Bi(x2,y2tz2),
% зададени чрез декартовите си координати.
% Входни аргументи:
% А - масив от 3 клетки, в които се съхраняват
% вектори с координатите х1,у1,z1 на точките Ai;
% В - масив от 3 клетки, в които се съхраняват
% вектори с координатите x2,y2,z2 на точките Bi;
% Изходни аргументи:
% d - вектор с разстоянията между отделните двойки точки,
d = s q r t ( (А{ 1} - В{ 1}) . А2 + (А{2) -В{2}) .А2 + (А{3> -В{3}) . А2) ;
Примерно използване на функцията d is t 3 :
А = { [1. 3, 2.5, 3 . 7 ] , [ 2 . 4 , 4.5, 6 . 2 ] , [ s i n ( p i / 5 ) , p i , 9 ] } ;
В = {[ 4. 7, 3.8, 7 . 9 ] , [ 4 . 3 , 5.6, 6 . 8 ] , [ехр(1), 2.2, 3 . 9 ] } ;
d = d is t3 (А,В)
d =
4.4395 1.9459 6.6340
1. 6. 3. Глобални и локални променливи
Скриптовите файлове и файл-функциите се различават същест­
вено помежду си по достъпа до различните променливи.
Всички променливи, с които се работи в скриптовите файлове, се
съхраняват в общата памет, наречена Workspace. По този начин про­
менливите, определени в един скриптов файл, могат да се използват в
други такива файлове. Това дава възможност една сложна програма да
- 62-
Глава 1. Основни сведения за MATLAB

бъде разделена на няколко по-прости файла, които да се викат после­


дователно от една главна програма.
До променливите, пресметнати в тялото на една файл-функция и
невключени в списъка на изходните аргументи, има достъп само тази
функция. Те се наричат локални променливи. След излизане от функ­
цията локалните променливи не се запазват.
Понякога възниква необходимост част от параметрите да се
предават в една функция директно, а не чрез списъка на входните й
аргументи. Това става, като в тялото на функцията и в извикващите я
програми тези параметри се обявяват за глобални с помощта на
оператора g lo b a l:
global pi р2 рЗ % имената на параметрите са произволни!
Обърнете внимание, че като разделители между отделните пара­
метри трябва да се използват интервали, а не запетаи!
Пример:
Нека създадем файл-функция, пресмятаща стойностите на функ-
цията y ( t ) = k l + k 2 * t + k3 * sin(/:4 * t + k5)
Параметрите к1, к2, кЗ, к4 и к5 ще предаваме като глобални,
function у = fglob(t)
% Пресмята функцията
% у = k1 + k2*t + k3*sin(k4*t+k5)
global kl k2 k3 k4 k5 % обявяване на глобалните променливи
у = kl + k2*t + k3*sin(k4*t + k5);
Ползване на функцията fglob:
global kl k2 k3 k4 k5
kl = 1; k2 = 2.7; k3 = 4.5; k4 = pi/7; k5 = 2;
t = [12345];
y = fglob(t)
У =
6.5741 7.4871 8.1848 9.0638 10.4847
1. 6. 4. Файлове c данни
Тук ще разгледаме три типа файлове с данни.
Файлове с разширение .mat
Създават се от средата на MATLAB с помощта на командата save:
save file_name - записва стойностите на всички променливи
от работното пространство във файла file_name .mat;
save file_name varl var2 . . . - записва стойностите на
указаните променливи varl, var2,.. . от работното пространство във
файла f i l e n a m e .mat.

63
MATLAB. Част 1

Това са двоични файлове, които не могат да бъдат четени и кори­


гирани с обикновен текстов редактор. При следваща сесия можем да
заредим един такъв .mat файл с командата
load file_name
Така стойностите на всички променливи от файла се записват в
работното пространство и можем да ги използваме в по-нататъшните си
пресмятания.
Файлове с разширение .d a t
Това са обикновени ASCII файлове с масиви от числа. С помощта
на един .dat файл може да се въведе стойността само на една-единст-
вена матрица или вектор. При това във файла се записват само колони­
те със стойностите на съответните елементи без ограничителните
квадратни скоби и без присвояване на този масив от числа на името на
матрицата. Допуска се въвеждането и на коментари. Така въведените
данни се записват във файл с име, еднакво с името на матрицата, на­
пример A.dat.
Зареждането на данните става с командата load A.dat. Обърне­
те внимание, че непременно трябва да се указва разширението на фай­
ла .dat, защото по подразбиране командата load търси файлове с
разширение .mat! При зареждане на файла системата автоматично
присвоява числения масив от данни на името на променливата А.
Пример:
Въвеждаме с редактора на MATLAB елементите на матрицата А:
1 23
456
789
и записваме данните във файл A. dat.
Следващите команди са въведени в Command Window:
» A % матрицата А е все още недефинирана
??? Undefined function orvariable'A'.
» load A .dat % зареждаме файла c матрицата A
» A % извеждане на A
A =
1 2 3
4 5 6
7 8 9
» save mata A % записваме матрицата А във файла mata.mat
» clear A % изтриване на А от работното пространство
» A % неуспешен опит за извеждане
??? Undefined function orvariable 'A'.
» load mata % зареждане на матрицата А от файла mata.mat
» A % извеждане на A

64
Глава 1. Основни сведения за MATLAB

А =
1 2 3
4 5 6
7 8 9
Файлове с разширение .т
Файловете с разширение .dat имат следните недостатъци:
• Невъзможност в един файл да присвоим стойности на повече от
една матрица;
• Обвързване на името на матрицата с името на файла - кратките
имена не носят достатъчно информация.
Затова за предпочитане е да използваме обикновени .т файлове
(тип script), в които можем да присвоим стойности на неограничен брой
променливи: скалари, вектори, матрици, масиви от низове, масиви от
записи и масиви от клетки.
Например в един-единствен файл можем да присвоим стойности
на три матрици А, В, С и на вектора h:
% Файл с данни PRTR_ABCh.ш
% Линейни принудени трептения в съпротивителна среда
А = % обобщени инерционни константи
В = % обобщени съпротивителни константи
С = % обобщени еластични константи
h = % амплитуди на смущаващите сили
Тези данни можем да запишем във файл с произволно име, напри­
мер PRTR_ABCh.m. При въвеждане на командата PRTR__ABCh или при
изпълнение на скриптов файл, в който е въведена тази команда, в ра­
ботното пространство на MATLAB ще се заредят трите матрици А, В, С и
векторът h, които можем да използваме в по-нататъшните пресмятания.
1. 6. 5. Заключителни бележки
В т. 1.6 дотук разгледахме само най-важната информация за фай­
ловете, необходима за успешен старт в работата с MATLAB. Ако ви е
нужна повече информация, с командата help iofun (съкращение от
Input Output FUNctions) можете да получите пълен списък на операто­
рите и функциите за работа с файлове. След това можете да получите
информация и за конкретните функции, имащи отношение към вашия
проблем. Препоръчваме ви да разучите функциите fopen, fclose,
fprintf и sprintf, които ще използваме по-късно за програмно
генериране на файл-функции. (Съставянето на файл-функции за ре­
шаване на определени задачи при инженерно-технически пресмятания
се разглежда в част 2 на книгата, която е посветена на приложението на
MATLAB в научни и инженерни изследвания.)

- 65-
MATLAB. Част 1

1. 7. Управляващ и оператори. Програмиране


Всички разгледани досега оператори и функции могат да бъдат
съставна част на една програма. При стартиране на такава програма
системата би изпълнила последователно всички команди от началото до
края на файла. Една истинска програма обаче е немислима без нали­
чието на така наречените управляващи оператори. Тези оператори ни
дават възможност да организираме циклични пресмятания, да изпъл­
няваме различни разклонения на програмата и при определени условия
да прекратим пресмятанията.
В MATLAB, както и в повечето съвременни езици, са вградени
следните управляващи оператори:
if - оператор за условен преход;
. switch - превключващ оператор;
for - аритметичен оператор за цикъл;
while - условен (логически) оператор за цикъл;
try - оператор за обработка на аварийни ситуации.
Към тях трябва да добавим и операторите за:
• Прекъсване, прескачане на цикъл, пауза, предаване управле­
нието на клавиатурата, връщане в извикваща програма - break,
continue, pause, keyboard, return.
• Въвеждане и извеждане на информация - input, disp,
warning, error.
• Организиране на менюта -menu.
• Работа с форматирани файлове - fopen, fclose, fprintf,
fscanf, sprintf, sscanf.
Изключително полезни са и операторите eval и feval.
Списък на всички оператори и функции, използвани в програми­
рането в MATLAB, можете да получите с командата help lang.
1. 7 .1 . Управляващи оператори
Всички управляващи оператори в MATLAB имат вид на сложен
оператор, който започва със служебната дума if, switch, for, while
или try и завършват с думата end.
Оператор за условен преход if
Възможни са три варианта:
1-ви вариант:
i f logexpr
statements;
end
Допустимо е разположението на тези оператори на един ред:
i f logexpr, statl; stat2; stat3; ....; end

- 66-
Глава 1. Основни сведения за MATLAB

Ако логическият израз logexpr има стойност True (истина), изпълня­


ват се операторите statements. Ако стойността е False (неистина), управ­
лението се предава на оператора след end.
2- ри вариант:
i f logexpr
statements 1;
e ls e
statements2;
end
Ако logexpr има стойност True, изпълняват се операторите
statementsl, след което управлението се предава на оператора след
end. Ако стойността е False, изпълняват се операторите statements2.
3- ти вариант
i f logexprl
statementsl;
e l s e i f logexpr2
statements2;
e l s e i f юдехргЗ
statements3;

e ls e
statements;
end
Ако logexprl e True, изпълняват се оператори statementsl, след
което управлението се предава на оператора след end. Ако е False,
проверява се за истинност изразът 1одехрг2. Ако той има стойност True,
тогава се изпълняват оператори statements2, след което управлението
се предава на оператора след end. Ако стойността на logexpr2 е False,
проверява се юдехргЗ и т. н. Ако нито един от логическите изрази няма
стойност True, тогава се изпълняват оператори statements. Една такава
конструкция с условния оператор i f може да има произволен брой
оператори e l s e i f . Операторът e ls e не е задължителен!
Важно! В MATLAB логическата константа True се изразява чрез
числото 1 (единица), а логическата константа False - чрез 0 (нула).
В логическите изрази logexpr се използват операторите за
сравнение - релации:
< - по-малко;
<= - по-малко или равно;
> - по-голямо;
>= - по-голямо или равно;
== - равно;
-= - не е равно;

67
MATLAB. Част 1

и логическите оператори:
& - логическо И (AND);
| - логическо ИЛИ (OR);
— логическо HE (NOT).
Употребяват се също и функционалните варианти на логическите
оператори:
and (ге11 ,ге12) - еквивалентно на ге11 & ге!2;
or (ге11,ге12) - еквивалентно на ге11 |rel2;
not (rel) - еквивалентно на ~rel.
Само във функционална форма се използва и Изключващо ИЛИ
(Exclusive OR):
xor (rel1,rel2).
Този израз има стойност True, когато само една от двете релации е
истинна!
Обърнете внимание, че логическото равенство се представя с два
последователни символа за равенство Единичното равенство се
използва само в операторите за присвояване!
Забележка. Във функционалните форми на логическите оператори
аргументите не може да надхвърлят два! Това ограничение може да се
преодолее като вграждаме функциите една в друга:
and(and(rell ,rel2) ,ге13) е еквивалентно на
rell & rel2 & rel3.
Пример:
х = 3; у = -pi;
х < 5 & х > 0 & abs(у) > 3
ans =
1 % истина
and(and(x <5, х > 0), abs(у) > 3)
ans =
1 % също истина
В MATLAB съществуват много логически функции, които могат да
участват в логически изрази. Такива са например функциите any, all,
exist, isempty и др. Едни от най-използваните са any и all:
any (v) - истина, ако сред елементите на вектора v има поне един
различен от нула;
all (v) - истина, ако всички елементи са различни от нула;
any (logexpr(v)) - истина, ако поне един елемент на вектора v
удовлетворява логическото условие logexpr(v);
all (logexpr(v)) - истина, ако всички елементи на v удовлетво­
ряват условието logexpr(v).
Забележка. Ако аргумент на горните функции е матрица, тя се
обработва по стълбове, като резултатът е вектор от единици и нули.

68
Глава 1. Основни сведения за MATLAB

Примери:
v = [-pi, exp(2), 0, sin(pi/3), 9];
any (v)
ans =
1
all (v)
ans =
0
any(v >10)
ans =
0
all(v > - 4)
ans -
1
За да илюстрираме възможностите на оператора i f , нека съставим
файл-функция signum, която да пресмята знака на дадено число:
signum(x) = 1, когато х > 0;
signum(x) = -1, когато х < 0;
signum(x) = 0, когато х = 0.
function у = signum(x)
% Пресмята знака на х
if х < 0
У = -1;
elseif х > 0
У = +1;
else
У = 0;
end % if
Тестване на създадената функция:
х = pi; у = -ехр(З) ; z = 0;
signum (х)
ans =
1
signum (у)
ans =
-1
signum (z)
ans =
0
Превключващ оператор s w it c h
Прилага се, когато в зависимост от стойността на даден израз ехрг
трябва да изпълняваме различни клонове от програмата. Ето как
изглежда една конструкция от типа s w it c h в най-общия случай:

69
MATLAB. Част 1

switch expr
case vail % В случай че expr == vail,изпълни statements'!,
statements'!; *
case val2 % В случай че expr == val2, изпълни statements2.
statements2;
case {val3, val4}
statements34;
otherwise
statements;
end
Тук switch, case, otherwise и end са ключови думи. Конструк­
цията работи по следния начин. Ако изразът expr има стойност vaM,
изпълняват се оператори statementsl, след което управлението се
предава на оператора след end. Ако пък има стойност val2, тогава се
изпълняват оператори statements2 и т. н. Обърнете внимание, че някол­
ко възможни стойности на израза expr могат да се обединяват с помощ­
та на фигурни скоби! Ако ехрг има една от двете стойности val3 или val4
(логическо ИЛИ), системата ще изпълни оператори statements34. Ако
изразът ехрг не приеме нито една от указаните стойности, тогава се
изпълняват операторите statements, разположени между ключовите
думи otherwise и end. Няма никакви ограничения за броя на ключо­
вите думи case. Ключовата дума otherwise (аналог на else в една
if-конструкция) не е задължителна.
Обърнете внимание, че изразът ехрг трябва да приема само цели
числени стойности или да е име на низ! Очевидно това условие се
удовлетворява и от логически функции, които могат да имат само
стойности 1 или 0. В тази конструкция не могат да се използват изрази,
чиито стойности са числа с плаваща точка, защото между такива числа е
невъзможно да се прилага релацията логическо равенство "==".
Горния фрагмент можем да прекодираме, като използваме по-
универсалния оператор i f :
у = ехрг;
if у == val1
statementsl;
elseif у = val2
statements2;
elseif (y == val3 | y == val4)
statements34;

else
statements;
end

70
Глава 1. Основни сведения за MATLAB

Пример:
Възможностите на оператора switch ще илюстрираме, като
съставим програмата calc, която да прилага един от аритметичните
оператори +, *, /, Л върху две въведени в диалогов режим числа а и Ь:
function calc()
% ***** Програма калкулатор calc *****
% Прочита стойностите на двата операнда а и b
% и извършва въведеното от потребителя действие.
а = input (' Първи операнд а = '); % въвеждане на числото а
% Въвеждане на желания аритметичен оператор като низ -ключ 's’
op = input ('Аритметичен оператор (+, *,/,Л ):’s') ;
b = input (' Втори операнд b = '); % въвеждане на числото b
% Пресмятане на резултата
switch op
case ’+ ’
res = a + b;
case ’-'
res = a -b;
case '*'
res = a *b;
case '/'
res = a /b;
case ,Л'
res = а л b
otherwise
error (' Неизвестна аритметична операция !!!')
end
% Преобразуване на числата в низове
stra = num2str(a);
strb = num2str(b);
strres = num2str (res) ;
% Конкатенация на низовете
str= strcat(stra/ op, strb, '= ', strres);
% Извеждане на резултата в командния прозорец
disp (str)
% ******* End of Program calc *******
Тестване на програмата:
» calc
Първи операнд a = 5
Аритметичен оператор (+, - ,*,/, А ) : *
Втори операнд Ь = pi
5 * 3.1416 = 15.708
» calc
Първи операнд а = 9
Аритметичен оператор (+, -, *, /, А ): &

-71 -
______________________________ MATLAB. Част 1______________________________

Втори операнд b = 2
??? Error using ==> calc
Неизвестна аритметична операция !!!
Макар тази програма да нямЛ никаква практическа стойност, тя е
доста поучителна от гледна точка на програмирането в MATLAB.

Аритметичен оператор за цикъл f o r


Използва се за циклично изпълнение на определена част от
програмата. Броят на циклите е фиксиран. Конструкцията f o r има
следния вид:
for index = inival:step:endval
statements;
end
където in d e x е управляващата променлива на цикъла;
i n i v a l - началната стойност на променливата in d e x ;
s te p - стъпката, с която се изменя променливата in d e x ;
e n d v a l - крайната стойност на променливата in d e x .
За разлика от повечето езици за програмиране в MATLAB не е
задължително управляващата променлива index да приема цели числе­
ни стойности. Освен това е възможно началната й стойност да е по-
голяма от крайната, т. е. inival > endval. Очевидно в този случай стъпката
step трябва да е отрицателна!
Пример:
for i = 3:-1:1
disp (i)
end
3
2
1
Параметърът s te p не е задължителен. Ако този параметър
липсва, по подразбиране се приема s te p = 1.
MATLAB предлага и следната разновидност на цикъла f o r :
fo r i = v
s ta te m e n ts ;
end
Тук v може да бъде вектор или матрица. Ако v е вектор, променли­
вата i приема последователно за стойности елементите на v. Ако пък е
матрица, тогава i е вектор-стълб, който последователно приема стой­
ностите на отделните стълбове на матрицата.
Примери:
v = [4.5 pi exp(1)]

72
Глава 1. Основни сведения за MATLAB

v =
4.5000 3.1416 2.7183
for i = v
disp(i)
end
4.5000
3.1416
2.7183
A = [1 2 3;4 5 6;7 8 9]
A =
1 2 3
4 5 6
7 8 9
for i = A
disp (i ') % транспонираме вектора стълб i
end
1 4 7
2 5 8
3 6 9
Пример:
C помощта на цикъл for да се начертаят графиките на семейство
криви, описвано от функцията
у = е х р ( - я * х) * sin(.x)
при различни стойности на параметъра а.
% Семейство криви
х = 0 :pi/100:2*pi;
for a = -0.1:0.02:0.1
у = exp(-a*x).*sin(x); % поелементно умножение "на два вектора!
plot (х,у) , hold on % hold on -> всички графики в един прозорец!
grid on % начертаване на мрежа
end

Фиг.1.10. Семейство криви

- 73-
MATLAB. Част 1

Условен (логически) оператор за цикъл while


Използва се за организиране на цикли, които се изпълняват, дока-
то е в сила дадено условие. За разлика от оператора for тук броят на
циклите не е строго определен. Конструкцията while има следния вид:
while logexpr
statements;
end
При достатъчно място е възможно разполагане и на един ред:
while logexpr, statements, end
Операторите statements се изпълняват циклично дотогава, докато
логическият израз logexpr има стойност True.
Пример:
Построяване на таблица на функциите s in (х),s q rt (х) и ехр (х)
х = 0.1; % начална стойност на аргумента х
dx = pi/5; % стъпка, с която нараства х
while х <= pi
disp ([х,sin (х) ,sqrt (х) ,exp (х) ]) % извеждане в 4 колони
х = х + dx; % поредно нарастване на аргумента х
end
0.1000 0.0998 0.3162 1.1052
0.7283 0.6656 0.8534 2.0716
1.3566 0.9772 1.1647 3.8831
1.9850 0.9155 1.4089 7.2787
2.6133 0.5041 1.6166 13.6436
Оператор за обработка на аварийни ситуации
Операторите try и catch се употребяват в ситуации, при които
има опасност от възникване на грешка, водеща при обикновени условия
до аварийно спиране на програмата. Такъв е например случаят, когато
искаме да прочетем данни от файл, за който съществува вероятност да
не бъде открит от системата.
Конструкцията try ... catch се използва, като се прилага следна­
та схема:
try % опитай
Тук разполагаме оператори,
изпълнението на които
може да доведе до грешка,
catch % хвани
Тук разполагаме оператори,
които се изпълняват при
възникване на грешка в блока
оператори между try и catch.
end

74
Глава 1. Основни сведения за MATLAB

Възможни са два варианта на изпълнение на горния фрагмент:


1) След успешно изпълнение на блока оператори, разположени
между t r y и c a tc h , управлението се предава на първия
оператор след end.
2) Възниква грешка в блока оператори между t r y и c a tc h . Тога­
ва се изпълняват операторите, разположени между c a tc h и
end. Най-често се извежда написано от потребителя съобще­
ние за грешката. След това продължава изпълнението на про­
грамата с операторите, разположени след end.
Пример:
% Обработка на грешка при четене на данни от файл
try
А = lo a d ( ' my.dat')
p l o t (А)
c a tc h
d i s p ( ' Не мога да намеря файла my.dat! ')
end

Оператори b re a k , c o n tin u e , pause, k e y b o a rd , r e t u r n


Тези оператори играят важна роля при управление на изпълнение­
то на една програма.
Операторите b re a k и c o n tin u e най-често се използват съвмест­
но с оператора i f в тялото на цикъл f o r или w h ile .
Операторът b re a k прекратява изпълнението на цикъла и предава
управлението на операторите, разположени след оператора end. При
това, ако цикълът е вграден в друг цикъл, продължава изпълнението на
външния цикъл.
Операторът c o n tin u e заставя системата да прескочи операто­
рите, разположени между него и оператора end. С това изпълнението
на цикъла продължава.
Операторът pause прекратява временно изпълнението на програ­
мата. Ако е въведен без аргумент, паузата продължава, докато бъде
натиснат произволен клавиш от клавиатурата. Обикновено се използва
за разглеждане на резултатите от пресмятанията. При въвеждане на
оператора с аргумент - pause ( п ) , паузата трае п секунди, след което
системата сама продължава изпълнението на програмата. Числото п
може да съдържа до две цифри след десетичната точка, т. е. можем да
задаваме времето за пауза до стотни от секундата.
Когато използвате оператора pause без аргумент, полезно е пред
него да разположите следния оператор:
d is p (' Pause. Press any key to continue !')

75
MATLAB. Част 1

Операторът keyboard предава временно управлението на


клавиатурата, при което се появява промптът К». В този режим могат
да се извършат произволни действия - проверка и промяна на данни,
стартиране на функции и процедури на MATLAB и др. Връщането към
програмата става, като подадем командата К » return. Изпълнението
на програмата продължава с оператора, намиращ се непосредствено
след оператора keyboard.
Операторът return се използва и за преждевременно завръщане
в извикващата програма.
За илюстрация на някои от управляващите оператори ви предлага­
ме един полезен шаблон за организиране на циклични пресмятания с
различни стойности на входните параметри:
while 1 % Организиране на безкраен цикъл (1 е еквивалентно на True!)
% Въвеждане на нови стойности на параметрите р1, р2, ...
р1 = input (' Параметър р1 = ') ;
р2 = input (' Параметър р2 = ') ;

% Поредни пресмятания с новите параметри

z = f(x,у, р1.р2,...);
disp ([' z = ', num2str(z)]) % извеждане на резултата
disp (’ Pause! Press any key tocontinue !*)
pause
plot (... ) % построяване на поредната графика
disp (' Pause! Press any key tocontinue !')
pause
ans = input (' Continue? (Y/N): ', 's ') ;
if (ans == 'N' | ans == 'n*), break, end % прекъсване
end

1. 7. 2. Въвеждане и извеждане на информация


Въвеждането на данни в диалогов режим се извършва с помощта
на командата input:
var = input ('String') - въвеждане на числени данни;
var = input ('String','s') - въвеждане на низ,
където var е името на променливата: скалар, вектор, матрица, низ,...;
String - произволен текст, който се извежда на екрана; това е т. нар.
промпт - подканващ надпис, например ' Въведете var:'
s - ключ за въвеждане на низ; той ни освобождава от не­
обходимостта да заграждаме въвеждания низ в единични апострофи!
Когато системата срещне такъв оператор, тя спира изпълнението
на програмата в очакване да бъдат въведени съответните данни. След
въвеждането натиснете клавиша Enter. Системата присвоява въведе­

- 76-
Глава 1. Основни сведения за MATLAB

ната стойност на променливата var и продължава изпълнението на


програмата.
Командата d is p служи за извеждане на данни (числени и символ­
ни) и текст. Характерно за тази функция е, че тя приема само един аргу­
мент. Ако трябва да се извеждат на един ред няколко числа заедно с
пояснителен текст, те трябва да се обединят в един обект с помощта на
конкатенация. При това числата трябва да се преобразуват в низове с
помощта на функцията n u m 2 s tr. Ако липсва текст, числата трябва да
се представят просто като елементи на един вектор.
Примери:
х = 3.14; у = ехр(З) ; z = sqrt(5);
disp (х,у,z)
??? Error using ==> disp
Too many input arguments.
Причината за грешката е, че сме подали повече от един аргумент!
Решението на проблема е да се обединят х, у и z в един вектор с
помощта на конструктора на вектори и матрици - квадратните скоби:
d is p ( [х у z ])
3.1400 20.0855 2.2361
А сега да изведем и имената на променливите:
disp([ ' х = ' ,num2str( х ) ,' у = ',num2str(у),...
’ z = ',num2str(z)])
; х = 3.14 у = 20.0855 z = 2.2361
Аналогично на d is p работят и функциите w a r n in g и e r r o r :
w a rn in g ('String') - извежда предупредително съобщение и
продължава изпълнението на програмата;
e r r o r ('String') - извежда съобщение за грешка и прекратява
изпълнението на програмата.
1. 7. 3. Организиране на менюта. Функция ш е п и
Когато една програма трябва да предостави на потребителя
възможност да избере в диалогов режим една от няколко възможности,
добре е това да се оформи като меню. За целта можем да използваме
операторите d is p и s w itc h . Предлагаме следния шаблон за меню:
d is p ( ' Заглавие на менюто ')
^ I **************************** |^
disp (' 1. Вариант 1')
disp (' 2. Вариант 21)
disp (' 3. Вариант 3')

n = input (' Въведете номера на желания вариант: ') ;

- 77-
MATLAB. Част 1

switch n
case 1 % Вариант1
statements'!;
case 2 % Вариант2
statements2;
case 3 % Вариант3
statements3;
end
Ако желаете менюто ви да е в съзвучие със съвременния интер­
фейс на Windows, можете да използвате функцията menu на MATLAB.
Тя заменя само първата част на шаблона - до оператора switch:
n = menu('Заглавие', 'Вариант 1','Вариант 2 ; % п <= 32.
При, изпълнение на такъв оператор се извежда
панел със заглавието и бутон за всеки от вариантите.
Натискате бутона с желания вариант и операторът Заглавие
switch реализира вашия избор.
Вариант 1
1. 7. 4. Работа с форматирани файлове
Системата MATLAB предлага следните операто­ Вариант 2
ри за работа с форматирани файлове: fopen, fclose,
fprintf,fgetl, fscant, sprintf и sscanf. Подроб­ Вариант 3
на информация за тях можете да получите от фирме­
ната документация, от системата Help на MATLAB или от "Урок 19.
Работа с файлами" на Дьяконов, В. [13], стр.475. Тук ще разгледаме
съвсем накратко само първите три оператора.
Работата с форматирани файлове се състои от три етапа:
• Отваряне на файла с командата fopen.
• Запис или четене на данни с командите fprintf или fgetl.
• Затваряне на файла с командата fclose.
Нека разгледаме само методиката за запис на данни във форма­
тиран файл:
1) Създаваме (ако не е съществувал) и отваряме файла с коман­
дата
fid = fopen (’pathtfile^am eVa'),
където fid е идентификатор на файла; при изпълнение на командата
системата автоматично му присвоява целочислена стойност;
path\file_name е пълният адрес на файла; ако файлът се намира
или се създава в текущата директория, адресът е излишен;
'а' - ключ, използван при създаване и отваряне на нов файл или
при отваряне на съществуващ файл за запис чрез добавяне (append) в
края на файла.
2) Записваме данни във файла с командата
fprintf (fid,'format',var1,var2, ...),

- 78-
Глава 1. Основни сведения за MATLAB

където fid е идентификатор на файла. Едновременно могат да бъдат


отворени няколко файла и да извършваме запис последователно във
всеки от тях. Командата fprintf различава файловете само по тех­
ните идентификатори.
Важно! Ако аргументът fid липсва или ако fid = 1, данните се насоч­
ват към екрана.
Останалите аргументи на командата са:
format - низ, състоящ се от текст и форматиращи символи:
\ п - преминаване на нов ред;
\f - преминаване на нова страница;
%d - поле за десетично число;
%i - поле за цяло число;
%е - поле за число в експоненциална форма;
%f - поле за число с плаваща точка;
%д - по-компактен вариант на %е и %f;
%s -п о л е за низ.
Между символа "%" и буквата може да се вмъкне и число, задава­
що броя на позициите и броя на цифрите след десетичната точка.
Форматиращият низ 'format' позволява включването на произволен
текст между отделните форматиращи символи. При това този текст не
се огражда в апострофи.
var1,var2,... - имена на променливите, чиито текущи стойности се
записват във файла или се извеждат на екрана.
3) Затваряме файла с командата fc lo s e (fid ).
Важно! Един файл не може да се използва, преди да бъде затворен.
За читателите, запознати с езика С, ще бъде полезно да знаят, че
fprintf е функция, аналогична на тази от ANSI С, с някои изключения
и разширения.
Примери:
а = exp(pi); b = sqrt(7); d = 0.12; tau = 235;
fprintf ('%7.3f %10.6f \n',a,b)
23.141 2.645751
fprintf (1Диаметър d = %g Напрежение tau = %g \n ',d,tau)
Диаметър d = 0.12 Напрежение tau = 235

1. 7. 5. Сглобяване на команди в MATLAB от отделни низове -


функция e v a l
Функцията e v a l позволява да се изпълни команда от MATLAB,
зададена като низ:
eval('х = sqrt(pi)*ехр(1.234)')
х =
6.0883

79
MATLAB. Част 1

Прилагайки операцията конкатенация на низове, можем да


сглобим една команда в MATLAB от няколко низа и след това да я
изпълним с функцията e v a l:
strl='x = '; str2='sqrt(pi)';
str3='*';str4='exp(1.234)';
str = [strl str2 str3 str4];
eval(str)
x =
6.0883
За да не останете c впечатлението, че това е една интересна, но
безполезна игра, ще представим едно изящно решение на задачата с
калкулатора от т. 1. 7. 1:
************ Програма са1с2 *************
% Подобрена версия на програмата "Калкулатор"
% от т. 1.7. 1,с използване на оператора eval.
% Прилага избрания оператор "ор" върху променли­
во вите а и Ь, въведени в диалогов режим,
а = input (' а = ') ; % първи операнд
b = input (' b = ') ; % втори операнд
% Въвеждане на оператора
op = input (' Оператор ? (+, *,/,Л):'s ') ;
% Превръщане на числата в низове
stra = num2str(a);
strb = num2str(b);
% Пресмятане и извеждане на резултата
rez = e v a l ([stra op strb]);
disp([stra, op, strb,,= ', num2str (rez) ])
Тестване на програмата calc2
» calc2
a = 3.456
b = 7.654
Оператор ? (+, *,/,Л):*
3.456*7.654 = 26.4522
1. 7. 6. Файл-функции c променлив брой аргументи
Почти всички функции в MATLAB работят с променлив брой
действителни входни и изходни аргументи. Това ги прави много по-
универсални и гъвкави. При съставянето на такива функции са
възможни два варианта.
1-ви вариант
Файл-функциите се дефинират с фиксиран брой формални входни
и изходни аргументи. При извикването им обаче броят на действител­
ните аргументи може да бъде равен на или по-малък от съответния
брой на формалните аргументи. Това се постига с помощта на систем­

80
Глава 1. Основни сведения за MATLAB

ните променливи nargin и nargout, на които системата присвоява


автоматично броя на действителните входни (nargin) и изходни
(nargout) аргументи при конкретното извикване на функцията.
В зависимост от стойностите на nargin и nargout се изпълняват
различни клонове от програмата. Възможните варианти се предвиждат и
програмират при съставянето на самата функция.
Недостатъкът на този подход е, че броят на действителните аргу­
менти на съставената вече функция е ограничен отгоре.
Казаното ще илюстрираме с файл-функцията inout32, която има
три входни и два изходни формални аргумента, а може да бъде викана с
от един до три входни и от един до два изходни действителни аргу­
мента:
function [у1, у2] = inout32(x1, х2, хЗ)
% Примерно оформяне на процедура с про-
% менлив брой действителни аргументи,
if nargout == 1 % един изходен аргумент
switch nargin
case 1 % един входен аргумент
disp (’1 in+ 1 out')
у1 = sqrt(x1);
case 2 % два входни аргумента
disp ('2in+ 1 out')
у1 = sin(x1) + exp(x2);
case 3 % три входни аргумента
disp('3in+ 1 out')
y1 = sqrt(x1.A2 + x2.A2 + x3 A2);
end % ofswitch
else % два изходни аргумента
switch nargin
case 1 % един входен аргумент
disp ('1 in+ 2 out')
y1 = x1.*sin(x1);
y2 = log(x1);
case 2 % два входни аргумента
disp ('2in+ 2 out')
y1 = x1 A2 + x2.A3;
y2 = sin(x1).*cos(x2);
case 3 % три входни аргумента
disp ('3in+ 2 out')
y1 = x1.*x2.*exp(x3);
y2 = sqrt(x1.A2 + x2 A2 + x3.A2);
end % ofswitch
end % ofif
% End of Function Inout32

6 81
MATLAB. Част 1

Тестване на файл-функцията:
» у1 = inout32(0.55)
1 in + 1 out
yi =
0.7416
» у1 = inout32(0.55, pi)
2 in + 1 out
yl =
23.6634
» y1 = inout32(2.3, pi/5, 1.23)
3 in + 1 out
yl =
2.6829
» [y1,y2]= inout32(3.1415927)
1 in + 2 out
yl =
-1.4580e-007
y2 =
1.1447
» [y1,y2] = inout32(2.33, 1.32)
2 in + 2 out
yl =
7.7289
y2 =
0.1800
» [y1,y2] = inout32(5, 4, 3)
3 in + 2 out
yl =
401.7107
y2 =
7.0711
Забележка. Операторите за извеждане d is p са включени само за
да се убедим, че програмата работи вярно. След тестовете те могат да
бъдат премахнати.
2-ри вариант
Файл-функциите се съставят така, че да могат да работят с
неограничен брой аргументи от различен тип. Това става възможно,
ако се използват като формални аргументи системните променливи
v a r a r g in и v a r a r g o u t, които представляват масиви от клетки. Като
такива те могат да включват в себе си произволен брой разнородни
елементи.

82
Глава 1. Основни сведения за MATLAB

Една такава файл-функция може да се оформи по следния начин:


function varargout = fname(varargin)
% Определяме броя на действителните входни и изходни
% аргументи:
nin = length (varargin) ;
nout = nargout ;
% В зависимост от броя на действителните входни и изходни
% аргументи се извършват съответните действия над входни­
тете аргументи varargin{1}, varargin{2}, , varargin{nin},
% а резултатите се присвояват на изходните аргументи
% varargout{1} ,varargout {2}, ...,varargout {nout},
% При пресмятанията се използват операторите за цикли
% for. .. end и while. .. end
% а така също операторите за разклоняване
% if... elseif... else... end
% switch... case... otherwise. .. end
Много е важно да се разбере, че varargin и varargout са
системни имена на масиви от клетки и тези имена не могат да бъдат
заменени с други! Всичките действителни входни аргументи, които се
подават директно като списък от константи и променливи, се опаковат
автоматично от системата в масива от клетки varargin. В процеса на
пресмятанията програмистът има грижата сам да запише резултатите в
масива от клетки varargout.
Извикването на една такава файл-функция става както обикно­
вено:
[ у1, у2, уЗ, ...] = fname( х1, х2, хЗ, ...)
Това означава, че масивите varargin и varargout остават
скрити за потребителя. Те се ползват само от програмиста при
съставянето на програмата.
Задължителните аргументи на една функция, чийто брой е
фиксиран, могат да се представят извън масивите от клетки:
function [у1, у2, varargout] = fname(x1, х2, хЗ, varargin)
При това масивите от клетки трябва да са на последно място в
списъците на формалните аргументи.
Очевидно написването на файл-функции с променлив брой
аргументи не е трудно, но изисква познания за работа с масиви от
клетки ( вж. т. 1.5.5).
Пример:
Да се състави програма функция, която да определя дали дадена
точка с координати хр и ур лежи във вътрешността на поне една от
окръжностите, зададени с координатите на центровете и радиусите си:
Х1 , У1, Ri; Х2 , У2 , R2 ; ••• хп, уп, Rn. Функцията трябва да работи с
произволен брой окръжности. Окръжностите да се начертаят.

83
MATLAB. Част 1

function [where, varargout] = point(xp, yp,varargin)


% Определя дали точката c координати xp, yp лежи
% във вътрешността поне на една от окръжностите,
% зададени с координатите на центровете и радиуси-
% те си [xi.yi.Ri]. Начертава всички окръжности и
% изобразява самата точка.
% Входни аргументи:
% хр, ур - декартови координати на точката;
% varargin - масив от клетки, в които под формата на
% вектори с три елемента се съхраняват данните
% за отделните окръжности [xi.yi.Ri]
% Изходни аргументи:
% where - аргумент, приемащ стойност 1,ако точката
% лежи във вътрешността на поне една окръжност.
% и 0, ако горното условие не е изпълнено;
% varargout - масив от клетки, в които се записват
% броят на окръжностите, ограждащи точката, и
% техните номера.
пс = length (varargin) ; % общ брой окръжности
net = 0; % Начална стойност на брояча на
% окръжностите, ограждащи точката
where = 0; % Начална стойност на аргумента where
t= 0:pi/50:2*pi; % Вектор-параметър, служещ за
% начертаване на окръжностите,
figure% Отваряне на нов графичен прозорец
for i= 1:nc
хс= varargin{i}(1) ; % Координати на центъра
ус= varargin{i}(2) ; % на поредната окръжност
r = varargin{i}( 3 ) ; % Радиус на окръжността
dist = sqrt((xc-xp)A2 + (ус-ур)Л2); % Разстоянието
% от точката до центъра на окръжността
if dist < r % Точката лежи в окръжността!
where = 1;
net = net + 1; % Броячът нараства с 1
nums(nct) = i; % Записване на поредния номер на
% окръжността във вектора nums
end
% Начертаване на поредната окръжност
х = хс + r*cos(t); % Координати на точките
у = ус + r*sin(t); % от окръжността
plot (х,у) , grid on % Изчертаване
axis equal % Еднакъв мащаб по двете оси
hold on % Запазва прозореца за следващата графика
end % of for
plot (xp.yp.'or') % Изобразява точката с червено кръгче

- 84-
Глава 1. Основни сведения за MATLAB

% Изходни резултати
switch nargout
case 2
varargout{l> = net; % Брой окръжности,
case 3 % ограждащи точката
varargout {1} = net;
varargout{2} = nums; % Номерата на окръжностите
end % ofswitch
***************** ]7|}(]of Program Point ******************
Тестване на програмата
>> [where, number, nums] = point(10,9, [94 3],[14 8 5],[6 11 6])
where =
1
number =
2
nums =1

Фиг. 1.11. Графика, изчертана от програмата point


1. 7. 7. Функции от функции. Функция f e v a l
MATLAB ни предоставя възможност да създаваме файл-функции,
входни аргументи на които са имена на други файл-функции. Такива са
например вградените функции от числения анализ fzero, quad,
fminsearch, ode45 и др.
Основна роля при съставянето на функции от функции играе
функцията feval - съкращение от Function EVALuation. Тя служи за
пресмятане на една функция, името на която се задава като низ:

- 85-
MATLAB. Част 1

[yi. У2, Уз. У т ] = feval (Типс_пате\ xi, Х2..... . хп)

Горният оператор е еквивалентен на следния:


[yi, Уг. Y3 t — . Ут] = func_name( xi, х2...... хп)
В новите версии на MATLAB вместо заграждане на името на
функцията в апострофи все по-често се използва символът "@" пред
името на функцията - @func_name.
Примери:
% Името на функцията се предава като низова константа
у = feval('sin', pi/3)
У =
0.8660
ИЛИ
у = feval(©sin, pi/3)
У =
0.8660
% Името на функцията се предава като низова променлива
fun = 'sin'; % или fun = @sin
у = feval(fun, pi/3)
У =
0.8660
Пояснения:
1) Имената на функции, зададени като низови константи, се
заграждат в единични апострофи fmyfunc') или се предхождат от така
нареченото "маймунско a" (@myfunc). Някои от новите функции на
MATLAB работят само със символа @. Затова е разумно да се
придържаме към него!
2) Имената на функции, зададени чрез низова променлива, не се
нуждаят от апострофи или от символа @, когато ги подаваме като
аргументи на функцията feval! Тези символи се използват само когато
присвояваме конкретна стойност на тази променлива:
func = 'myfun' или func = @myfun
Важно! Запомнете принципната разлика между функциите eval и
feval. Функцията eval пресмята команда на MATLAB, зададена като
низ:
у = eval ('Matlab_statement');
Функцията feval пресмята функция, чието име се задава като
низ:
[у1, у2, ...] = feval ('func_name\ х1, х2, ...);

86
Глава 1. Основни сведения за MATLAB

В най-общия случай една функция от функция може да има след­


ния вид:
function [ у 1, у2, ...] = fnameffun, х1, х2, ...)
% fun - формален аргумент - име на функция

у = feval (fun, х ) ; % пресмятане на у = fun(x)

yi =
у2 =

Извикването на функцията става с командата


[yl,y2,...] = fname ('myfun',0 .5,pi/2 , ...) ;
Тук myfun може да бъде име на вградена или потребителска
функция. При необходимост в списъка на входните аргументи на една
функция може да се включат като аргументи няколко имена на функции.
Пример:
Да се състави функция, пресмятаща корена на уравнението f(x) = 0
чрез метода на дихотомията - последователно делене наполовина на
интервала, съдържащ търсения корен.
function [root,fvalue] = koren(fname, a, b,eps)
% Функцията koren намира корена на уравнението f(x)= 0
% чрез метода на дихотомията - делене на интервала наполовина.
% Използване:
% root= koren(fname, a, b, eps)
% fname - име на файл-функцията, пресмятаща f(x)
% a, b - лява и дясна граница на интервала,
% в който се намира търсеният корен.
% Важно: f(a)*f(b)< 0 !
% eps - желана точност. Ако не е зададена,
% се приема по подразбиране 1.0е-06
% [root, Fun] = koren(fname, a, b,eps)
% Fun = f(root)- стойността на функцията
% за пресметнатия корен.

% Ако броят на входните аргументи е четири, четвъртият


% аргумент ще съдържа желаната точност eps. Ако е три,
% работи се с подразбиращата се стойност 1.е-06.

% Установяване на подразбиращата се стойност на eps


if nargin < 4
eps = 1.0e-06;
end

87
MATLAB. Част 1

% Проверка на знаците на функцията на границите на интервала


if feval (fname, a) *feval (fname, b) >0
error (' Еднакви знаци на границите на интервала !')
end
% Делене на интервала наполовина
while (b-а) > eps
с = (b + а)/2; % пресмятане на средата на интервала
if feval (fname, с) == 0
break % намерен е точният корен!
end
% Избор на тази половина от интервала, на границите
% на която f(x)има различни знаци
if feval (fname, a) *feval (fname, c) < 0
b = c;
else
a = c;
end
end % ofwhile
root= c;% стойността на корена
if nargout == 2
fvalue = feval (fname, root) ;
end
<y0 ************** End ofProgram Koren ***************

Тестване на функцията k o re n :
[r, f] = koren('sin', 3, 3.5)
r =
3.1416
f =
-3.2 584e-007
[r, f] = koren('s i n 3, 3.5, l.e-15)
r =
3.1416
f =
-7.657le-016
1. 7. 8. Подфункции и Private (лични) функции
Оформянето на даден алгоритъм в една-единствена файл-
функция не винаги е удобно. Някои стандартни, често повтарящи се
действия, е рационално да бъдат оформени във вид на отделни
функции, свързани с основния алгоритъм.
MATLAB ни предоставя два начина за решаване на този проблем:
88
Глава 1. Основни сведения за MATLAB

1) Подфункции
Записват се след основната функция в един файл, който трябва да
носи нейното име. Обменът на информация между основната функция и
нейните подфункции може да става по два начина:
• с помощта на списъка на аргументите;
• чрез обявяване на някои от променливите за глобални с
оператора g lo b a l.
За предпочитане е първият начин, защото стойността на глобални­
те променливи може случайно да бъде изменена в работната среда или
при извикване на друга програма, която използва глобални променливи
със същите имена.
Важно! Една файл-функция може да има няколко подфункции. До
тези подфункции има достъп само основната функция. Те не могат да
бъдат викани от други програми или файл-функции!
Подфункциите обменят информация само с основната функция, но
не и помежду си. Техните имена са локални в рамките на основната
функция. Затова те могат да дублират имена на други вградени или
потребителски функции.
2) Private функции
От MATLAB 5.0 насам съществува възможност към която и да е
директория да създадем поддиректория с име p r iv a t e . До
съхраняваните в нея m-файлове имат достъп само функциите и
процедурите от родителската директория! Очевидно в една p r i v a t e
директория е удобно да съхраняваме функции, които обслужват само
родителската.
Съществува една важна особеност на p r i v a t e директориите. Ако
процедура или функция, разположена в родителската директория, при
стартирането си се обръща към друг файл, системата най-напред пре­
търсва p r i v a t e директорията и ако не намери в нея файл с такова
име, едва тогава претърсва родителската и другите достъпни директо­
рии. Това ни дава възможност да видоизменяме и тестваме файловете,
разположени в p r i v a t e -директорията, запазвайки оригиналите им в
родителската директория неизменни.
Сравнение между двете възможности
Подфункциите обслужват само основната функция, докато функ­
циите и процедурите, разположени в една private директория, могат да
обслужват всички функции и процедури от родителската директория!
Това означава, че подфункциите решават само някаква частна задача,
докато p r i v a t e функциите могат да решават клас от задачи.

89
MATLAB. Част 1

1. 7. 9. Локализиране и отстраняване на грешки. Оптимизация


Системата MATLAB има вградена програма (debugger) за локали­
зиране на грешки в потребителски програми. Пълен списък на функции­
те й можете да получите с командата h e lp debug. Възможно е тези
функции никога да не ви потрябват, защото системата предлага много
просто средство за проверка на стойностите на всички променливи в
една току-що изпълнена програма. Достатъчно е след изпълнението на
програмата да отворите с редактора нейния m-файл и да задържите
курсора на мишката върху интересуващата ви променлива. Системата
веднага извежда нейната текуща стойност независимо от това, дали
променливата е име на скалар, вектор или матрица.
Ако при решаване на дадена задача една програма или функция се
изпълнява многократно, от съществено значение е нейното бързодейст­
вие. Виб бихте могли да откриете участъка, за който се изразходва най-
много време, и да се опитате да го оптимизирате. За целта можете да
засичате времето за изпълнение на този участък при различни варианти
на реализацията му и да подберете оптималния по бързодействие
вариант.
Ето три начина за засичане на времето за изпълнение на един
участък от дадена програма в секунди:
Вариант 1
tic
statements; % критичния участък от програмата
to e
Вариант 2
Ю = сри tim e ;
statements;
t = e p u tim e - Ю; % t - време на изпълнение на участъка
Вариант 3
Ю = c lo c k ;
statements;
t = e tim e ( c lo c k , tO);
Примери:
» t i c , d e t(m a g ic (1 0 0 0 )); to e
elapsed_time =
3.1090
>> tO = e p u tim e ; d e t ( r a n d (1 0 0 0 )); t = eputim e - tO
t =
0.6250
>> tO = c lo c k ; d e t ( r a n d (1 0 0 0 )); t = e tim e (c lo c k ,tO )
t =
0.6400

- 90-
Глава 1. Основни сведения за MATLAB

И накрая един съвет. Помнете, че системата MATLAB е създадена


за работа с матрици. Ако ви се наложи да извършвате някакви операции
с матрици, най-напред вижте дали няма вградена функция за тази цел.
В повечето случаи ще откриете такава. Избягвайте да организирате
цикли, защото те изразходват многократно повече време отколкото вгра­
дените функции, които ще ви свършат същата работа!

1. 8. Графика и анимация
Едно от предимствата на системата MATLAB е изобилието от про­
фесионални, удобни за използване средства за визуализация на данни.
MATLAB предлага отлични възможности за работа с двумерна и три­
мерна графика и анимация. Разбира се, не е възможно в ограничения
обем на тази книга да бъде представено цялото богатство от графични
функции на MATLAB. Тук са разгледани най-често използваните. При
това за някои от примерите са дадени само командите, без да са показа­
ни графичните прозорци с резултатите. Предполагаме, че читателят ще
работи с ръководството с компютър пред себе си и ще може да изпълни
примерите и да види резултатите на екрана.
Пълен списък на всички графични команди и функции се извежда с
командата h e lp :
» h e lp g ra p h 2 d - двумерна графика;
» h e l p g ra p h 3 d - тримерна графика;
» h e lp s p e c g ra p h - специална графика.
Подробна информация за графичните функции на MATLAB, както и
за останалите функции и възможности естествено можете да получите
от фирмената документация.

1. 8.1. Двумерна графика


Обикновени графики
Функциите и командите можем да разделим на три групи:
• Функции, чертаещи самите графики - p l o t , lo g lo g ,
s e m ilo g x , sem i lo g y , p o la r .
• Команди за управление на осите - a x is , g r id , h o ld ,
s u b p lo t.
• Функции за нанасяне на надписи върху графиките - x la b e l,
y la b e l, t i t l e , le g e n d , t e x t , g t e x t , t e x la b e l.
Функции за начертаване на графики
Несъмнено най-често използваната функция за начертаване на
графики в MATLAB е функцията p l o t . Затова тук тя е разгледана най-
подробно. Функцията p l o t както повечето функции в MATLAB може да
се използва с различен брой аргументи:

91
MATLAB. Част 1

p l o t (у) - начертава графиката на функция, чиито стойности са


записани във вектора у. Като абсциси се използват индексите на
отделните елементи на вектора.
p l o t ( Y ) - начертава едновременно графиките на няколко
функции, представени чрез отделните стълбове на матрицата Y. За
абсциси се използват първите индекси на елементите.
p l o t (х, у) - начертава графиката на функцията у = f(x). Тук х е
вектор с абсцисите, а у - вектор с ординатите.
p lo t ( x , Y) - начертава едновременно графиките на няколко
функции на един и същи аргумент: у1 = f1(x), у2 = f2(x), .... Стойностите
на функциите са записани в отделните стълбове на матрицата Y.
p l o t ( x , у1, х, у2, х, уЗ, ...) - аналогична на p lo t ( x , Y ) , но
функциите са представени с двойки вектори: х - на абсцисите, у1, у2, уЗ,
...-н а ординатите.
p l o t ( x , f1(x), х, f2(x), ...) - аналогична на предишната, но
стойностите на отделните функции за всички абсциси от вектора х се
пресмятат директно в командата p l o t .
p l o t ( x , у1, 'str1\ х, у2, 'str2\ ...) - тук аргументите са по тройки.
Третият аргумент от всяка тройка е низ, състоящ се от един до три
управляващи символа. С помощта на тези символи можем да
променяме подразбиращите се стойности за цвят и стил на линията и
вида на маркера. Всички възможни стойности на управляващите
символи можете да видите, след като подадете командата h e lp p l o t .
Ето техните стойности:
Цвят на линия
r - red - червен m - magenta - малинов
g - green - зелен с - cyan - синьо-зелен
b - blue - син k - black - черен
у - yellow-жълт w - white - бял
Стил на линия
- непрекъсната линия - . прекъсвана с точки линия
: точкова линия -- прекъсвана линия (тирета)
Вид на маркера
о - кръгче d - ромбче
х - кръстче v - триъгълниче с върха надолу
+ - символ"+" А - триъгълниче с върха нагоре
* - звездичка > - триъгълниче с върха надясно
s - квадратче < - триъгълниче с върха наляво

92
Глава 1. Основни сведения за MATLAB

p l o t ( x , у1, 'strT, 'param', value_of_par,...) - двойките или тройките


аргументи могат да бъдат следвани от двойки опции (parameter/values
pairs), задаващи допълнителни свойства на линиите и маркерите:
'L in e W id th ', п - дебелина на линията в pt; п - цяло число;
'M a rk e rE d g e C o lo r', ’symbol' - цвят на маркера (ако е отворен)
или цвят на рамката на маркера (ако е затворена фигура); низът 'symbol'
е един от описаните символи за задаване на цвят;
'M a rk e rF a c e C o lo r', 'symbol' - цвят за запълване на маркера (ако
е затворена фигура);
’M a rk e rS iz e ’, п - размер на маркера в pt; п - цяло число.
Забележки:
1) Ако се чертаят едновременно няколко графики, без да е указан
явно цветът на линиите, системата автоматично избира различен цвят
за всяка графика.
2) В аргумента 'str' управляващите символи от трите категории
могат да се указват в произволен ред.
3) Низът 'str' може да съдържа 1, 2 или 3 управляващи символа, но
не повече от един от дадена категория.
4) Ако в аргумента 'str' няма символ за стил на линия, тя въобще не
се чертае! Означават се само точките с помощта на указания маркер.
5) Командата p l o t може да обработва и масиви от комплексни
числа. Ако z = х + y*i, където х и у са вектори от действителни числа, a i
е имагинерната единица, то:
p l o t (z) начертава графиката на функцията у = f(x);
p l o t ( t , z) начертава графиката на функцията х = x(t), като ком­
плексните части на z се игнорират (тук t и х са вектори с еднаква дъл­
жина).
Останалите три функции lo g lo g , s e m ilo g x и s e m ilo g y работят
аналогично на функцията p l o t . Те могат да имат същите аргументи,
като единствената разлика се състои в следното:
lo g lo g - използва логаритмичен мащаб по двете оси х и у;
s e m ilo g x - използва логаритмичен мащаб по оста х;
s e m ilo g y - използва логаритмичен мащаб по оста у.
Функцията p o la r , както показва името й , начертава графиката на
функцията г = г(ср) в полярни координати.
Пълният синтаксис на функцията е p o la r (phi, r, 'str'), където phi е
вектор със стойностите на полярния ъгъл в радиани; г - вектор със
стойностите на радиуса, a 'str'- низ, който задава стила на линията (вж.
p lo t ) .

- 93-
MATLAB. Част 1

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


| axis | - управлява мащабирането и изгледа на координатните оси
на текущата графика:
axis ([xmin xmax ymin ymax]) - задава интервалите на изменение
на променливите по координатните оси;
axis auto - връщане към стойности, избрани автоматично от
системата;
axis equal - задава еднакъв мащаб по двете оси, така че
графиката да не е деформирана;
axis square - задава еднакъв диапазон на изменение на
променливите по двете оси;
axis normal - премахва всякакви ограничения по мащабира­
нето.
Командата grid on добавя мрежа към текущата графика, а
командата grid off я премахва.
Командата hold on се използва, когато е необходимо няколко
графики, създавани от последователно изпълнени команди за начерта-
ване, да се изобразят в един и същи прозорец при запазване на всички
свойства на осите. От този режим се излиза с командата hold off.
Командата subplot се използва, когато желаем един прозорец да
бъде разделен на по-малки прозорци, в които да се изобразят различни
графики. Самата команда subplot не чертае графиките, а подготвя
прозореца, в който ще попадне графиката, начертана от функцията,
следваща непосредствено след командата subplot.
Командата subplot (m, n, k) разделя основния прозорец на по-
малки прозорци (панели), които можем да си представим като матрица с
размери m х п. Третият аргумент k указва номера на прозореца, в който
ще бъде изобразена графиката, начертана от
1 2 3 функцията plot или която да е друга функция за
начертаване, следваща непосредствено след
4 5 6 командата subplot (m, n, k ) . Номерацията на
прозорчетата е по редове отляво надясно и отгоре
7 8 9 надолу. Тук е показано разделянето на основния
прозорец, след подадена команда subplot (3, 3, k ) ,
където k може да има стойност от 1 до 9.
Важно! Няколко от панелите могат да се обединят в един, като за
трети аргумент на функцията subplot се подаде вектор с номерата на
обединяваните панели, например subplot (3,3,[3 6 9]).
Някои от панелите могат да се използват само за въвеждане на
пояснителен текст, след като изчистим от тях осите с командата
axis(‘off').

- 94-
Глава 1. Основни сведения за MATLAB

Функции за нанасяне на надписи върху графиките


xlabel ('string') - нанасяне на надпис по оста х.
ylabel ('string') - нанасяне на надпис по оста у.
title ('string') - нанасяне на заглавие в горната част на графиката,
legend('str1\'str2\ ...) - изобразява легенда в горната дясна част
на графичен прозорец. Използва се, когато прозорецът съдържа няколко
графики. За всяка графика в легендата е начертана права линия с цвета
и стила на линията на графиката, а след нея следва съответният пояс­
нителен текст, взет от поредния аргумент на функцията legend. После­
дователността на аргументите низове трябва да отговаря на последова­
телността на построяване на съответните графики. Очевидно броят на
низовете трябва да е равен на броя на графиките. Допуска се и допъл­
нителен аргумент, позволяващ да се задават различни местоположения
на легендата в графичния прозорец. За да научите повече подробности,
използвайте командата help legend.
За читателите, запознати със системата за набор на математичес­
ки текстове ТеХ или LaTeX, ще бъде полезно да узнаят, че в низовете
могат да бъдат включвани и ТеХ конструкции за изобразяване на симво­
ли от гръцката азбука, текст и цели формули (вж. [2], стр. 114 - 116).
Тези конструкции се заграждат във фигурни скоби "{ ... }". Ето няколко
примера с произволен текст text:
{ \ i t text} - текстът се изобразява в стил italic (наклонени символи);
{\ b f text} - текст в стил bold (удебелен);
{\bf \it text} - текст в стил bold italic;
{\fontname{arial}\fontsize{14} text} - текст c избрания шрифт и размер;
{\it х}Л{2 .5 }- изобразява х25(горен индекс);
b_{i j}- изобразява bj j (долни индекси).
В текста можем да включваме гръцки букви с командите, показани
в таблицата.
Команда Буква Команда Буква Команда Буква
\alpha а \lambda Л \chi X
\beta р \mu U \psi Ф
\gamma Y \nu V \omega CO
\delta 5 \xi c \Gamma Г
\epsilon £ \rho P \Delta Д
\eta п \sigma a \Theta 0
\theta 0 \tau T \Lambda A
\kappa к \phi Ф \Phi Ф

MATLAB предлага и функцията texlabel, която автоматично


конвертира израза, зададен като аргумент, във формат ТеХ, готов за
включване в разгледаните функции за нанасяне на надписи. Макар че не

- 95-
MATLAB. Част 1

реализира всички възможности на ТеХ, texlabel е добра алтернати­


ва. Възможни са следните два начина за обръщение към тази функция:
texlabel fexpr') - конвертира израза 'ехрг' в ТеХ формат.
Обработва и транслитерираните на английски гръцки букви (командите в
таблицата на стр. 95, но без наклонената черта), за да ги отпечата на­
истина като гръцки букви.
texlabel ('expr\ 'literal') - като предишната, но запазва
транслитерацията на гръцките букви. Тук literal е служебна дума.
Програмно нанасяне на текст на произволно зададено от нас място
в текущия графичен (или текстов) прозорец може да се извърши с
помощта на командите gtext и text:
gtext ('string') - след като бъде въведена тази команда,
позиционирайте курсора на мишката върху графичната област. Той ще
се превърне в две пресичащи се линии - хоризонтална и вертикална.
Изберете с този "кръст" желаното място и щракнете с левия бутон. На
мястото веднага се появява текстът, зададен с аргумента 'string'.
gtext (Cell_array_of strings) - като току-що описаната, но вмъква
няколко реда, всеки от които е записан като низ в отделна клетка на
въведения масив от клетки.
gtext (...,'PropertyName', PropertyValue,...) - позволява да се
задават стойности на някои свойства, като тип и размер на шрифта и др.
Примери:
gtext ({'This is the first line', 'This is the second line’})
gtext ({’First line','Second line'},'FontName','Times',’Fontsize',12)
Командата gtext е много удобна, защото ни дава възможност
визуално да изберем най-подходящото място за начало на надписа.
Не така удобна е командата text, защото при нея трябва да
задаваме предварително (в самата команда) координатите на мястото,
където да се въведе текстът. Тя обаче е по-универсална и е за предпо­
читане, когато трябва да въвеждаме по-голям по обем текст в отделен
подпрозорец, зададен с командата subplot. Общата форма на
командата има следния вид:
text(x, у, 'string', 'FontName', '<Име на шрифта>',.. .
'FontSize', <Размер на шрифта в pt>)
където х, у са декартовите координати на началната позиция, от която
ще се нанесе текстът string с указания стил и размер на шрифта. Тези
координати могат да бъдат два типа:
• абсолютни - единици за измерване: inches, centimeters,
points, pixels; отчитат се от долния ляв ъгъл на координат­
ните оси;
• нормализирани - отчитат се от горния ляв ъгъл на графичното
поле и приемат стойности в диапазона от 0 до 1; това означава,

96
Глава 1. Основни сведения за MATLAB

че левият горен ъгъл на графичното поле има координати (0,0), а


десният долен - (1,1).
По подразбиране се използват абсолютни координати в мащаба на
начертаваната графика. Чудесна илюстрация за приложението на
функцията t e x t в реална задача може да се види в [24], стр.107 - 110.
Пример 1. Графики на функциите sin(x) и cos(x)
х = 0:pi/100:2 *pi; % вектор с абсцисите
plot(х f sin(х),'-Ь',х ,cos(х),'— g','LineWidth',3)
grid on, xlabel ('x ') , ylabel ('y ') % надписи по осите
set(gca,'FontName','Arial Cyr','FontSize',14) % шрифт
title (*Синусоида & Косинусоида') % заглавие
legend('sin(x)','cos(x)')
В този пример сме показали на-
чертаването на две графики с
използването на две тройки аргу­
менти - абсциси, ординати и ни­
зове за задаване на стила и цвета
на линиите. Последната двойка
аргументи задава дебелина на
линиите 3 pt. Обърнете внимание
на оператора s e t за задаване на
шрифта.
Фиг. 1.12
Пример 2. Графики на функциите у1 = 200*sin(x)/x и у2 = хЛ2.
Ординатите на двете функции се задават като стълбове на една
матрица Y:
У, - 200 югЧ*У»; у , - x2

х = -2 0 :0 .0 6 :2 0 ; 400r --------------

Y (:,D 350>\

(2 0 0 * s in (x ).Л х )' ; 300 \

Y(:,2) = (х.А2)'; 250: —

plot(x,Y), grid on; <gL20iO- - \ . . . ^ . . . /

xlabel('x ');
•0
/ '
>•150- -
7' \ ' 7 --------------

ylabel ('yl & y2') ; 100 \ ................. / ................ / ■

fl='yl = 200*sin(x)/x'; 50
\ ^
f2 = '; y2 = xA2'; , ^ \ ■/— "V /
ttl = [fl f2]; • \j ■ vy
-15 •10 -5 0 5 10 15 20
title (texlabel (ttl)) »

Фиг. 1.13

7 97
MATLAB. Част 1

Пример 3. Начертаване на графиката на параметрично зададена функ­


ция: х = 4 е ° 051sin t, у = 0.2 е'°11sin 2t
t = 0 :0 .0 1 :5 0 ;
х = 4 *е х р ( - 0 . 0 5 * t ) . * s i n ( t ) ;
y = 0 .2 *e xp ( - 0 . l * t ) . * s in ( 2 * t ) ;
p l o t ( x , y ) , g r id on
set(gca,'FontName',' Arial Cyr',' FontSize', 1 4 )
title(' Параметрически зададена крива')

Пример 4. Да се начертае графиката на функцията


sin JC—1, X < - п
У = \ х/я, - я < х < я
—COS X, X > п ,

след като се състави подходяща файл-функция за нейното пресмятане.


Вариант 1 - с цикъл f o r и условния оператор i f
% Файл-функция pwfunl
function у = pwfunl (х)
length (х ) ;
lx = % Определяне на дължината на х
у = zeros(size( х ) ) ; % Предварителното дефиниране
for i = 1:lx % на размера на у повишава
if x(i) < -pi % бързодействието!
y(i) = sin(x(i))-1;
elseif x(i) < pi
y(i) = x(i)/pi;
else
y(i) = -cos(x(i));
end % of if
end % of for

98
Глава 1. Основни сведения за MATLAB

Построяване на графиката от Command Window


х = -3*pi:pi/100:3*pi;
plot(x,pwfuni(х)), grid on
set(gca,'FontName','Arial Cyr','FontSize',14)
title(' Графика на частично непрекъсната функция')

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


изящно решение:
Вариант 2 - използване на логическо индексиране
% Файл-функция pwfun2
fu n c tio n у = pwfun2(x)
% С помощта на логическото индексиране
% от входния вектор с абсцисите х генери-
% раме три вектора х1, х2, хЗ с елементи,
% разположени в трите дефиниционни интервала.
х1 = х(х < -pi);
х2 = х(х >= -pi & х < pi);
хЗ = х(х >= pi);
у1 = sin(x1) -1;
у2 = x2/pi;
уЗ = -cos(x3);
у = [у1 у2 уЗ]; % конкатенация
% End of Function pwfun2
Построяване на графиката:
х = -3*pi:pi/100:3*pi;
plot(x,pwfun2(x)), grid on
Предоставяме на читателя да изпълни последните две команди, за
да се убеди, че се получава същата графика, както и при вариант 1.

- 99-
MATLAB. Част 1

Пример 5. Задаване на квадратни маркери и тяхното оцветяване


х = -pi:pi/10:pi;
у = tan(sin(x)) - sin(tan(x));
plot(x,y, '--rs','LineWidth',2,...
'MarkerEdgeColor','k',... % черен
'MarkerFaceColor','g ',... % зелен
'MarkerSize',10) ,
grid on;

Специални графики
При обяснение на синтаксиса на графичните функции тук са изпол­
звани следните означения:
х - вектор с абсцисите;
у - вектор със стойностите на функцията;
f(x) - конкретният израз на функцията у = f(x);
f(x,y) - изразът на неявно зададена функция f(x,y) = 0.
Там, където не е зададен векторът с абсцисите, функцията по под­
разбиране използва за абсциси индексите на вектора у.
Към специалните функции за двумерна графика принадлежат:
comet | - начертава графиката на функцията у = f(x) с помощта на
движеща се опашата комета, създавайки усещането за движение при
визуализация на динамични процеси.
Синтаксис: comet ( у ) ; comet (х,у)
Пример:
t =0:0.01:50;
х = 4*ехр(-0.05*t).*sin(t);
у = 0.2*ехр(-0.l*t).*sin(2*t);
comet (x,y) ; % моля, изпълнете го на вашия компютър.
- 1 00 -
Глава 1. Основни сведения за MATLAB

[ bar | - чертае лентова графика.


Синтаксис: bar ( у ) ; bar (х, у)
П рим ер:
у = [2, pi, 5.6, 4.3, 8];
bar(у), grid on
stem | - изобразява графика само с кръг­
чета, свързани с абсцисната ос. Използва се
за визуализация на дискретни функции.
Синтаксис: stem ( у ) ; stem (х, у ) ;
stem(x, у, 'filled'); Тук ключовата дума
'filled' се използва за запълване на кръг­
четата.
П рим ер:
х = 0:pi/10:2*pi;
stem(sin(х),'filled'), grid on
pie | - служи за построяване на кръгови диаграми.
Синтаксис: pie ( у ) ; pie (у, explode);
Вторият аргумент explode е вектор с дъл­
жината на у, състоящ се от единици и нули. Сек­
торите, съответстващи на елементите на explode
със стойности, равни на 1, се изобразяват
изместени от центъра навън. Номерацията на
секторите започва от най-горния вляво в посока,
обратна на часовниковата стрелка.
П рим ер:
у = [ 1 3 2 4 5];
pie(у,[ 0 1 0 1 0 ] )
hist | - построява хистограми, даващи
нагледна представа за разпределението на
случайна величина в отделните интервали
от стойности.
Синтаксис: hist (у); hist (у, п). Тук п е
брой на интервалите; по подразбиране се
приема п=10.
П рим ер:
у = round(100*randn(1,10000));
hist(у,20), grid on
Специална група образуват функциите за облекчено начертаване
на графиките на функции, зададени с аналитичните си изрази. Имената
на всички функции от групата с изключение на fplot започват с

-101 -
MATLAB. Част 1

буквите ez (модифицирано съкращение от английската дума easy -


лесно). При двумерната графика броят на тези функции е само три, но
при тримерната е по-гол ям.
| fplot | - начертава графиката на функцията у = f(x).
Синтаксис:
fplot ('f(x)\[xmin xmax]) - задава
се интервалът на аргумента х;
fplot (,f(x),,[xmin xmax ymin ymax])
- задава се и интервалът на изменение
на функцията у (за изобразяването й на
графиката). Полезно е за функции, които
нарастват рязко в някои участъци на
зададения интервал [xmin xmax].
Пример:
fplot('tan(х)',[-3*pi/2 3*pi/2 -5 5 ])
grid on
ezplot | - начертава графиката на явно, неявно и параметрично
зададена функция;
Синтаксис:
ezplot ('f(x)') - по подразбиране -2тг < х < 2тт;
ezplot ('f(x)', [xmin xmax]);
ezplot ('f(x, у)') - по подразбиране -2тт < x < 2тг и -2тг < у < 2тг;
ezplot ('f(x, у)\[ xmin xmax ymin ymax ]);
ezplot ('f1(t)\ 'f2(t)') - по подразбиране 0 < t < 2tt;
ezplot ('f1(t)\ 'f2(t)\[ tmin tmax ]);
Примери:
ezplot('cos');
ezplot('cos(x) ') ;
ezplot(’xA3 + yA3 - 5*x*y + 1/5',[—3,3]);
ezplot('t*cos (t) t*sin(t)',[0 4*pi]); grid on
Резултатът от изпълнението на последната команда е даден на
фиг. 1.17.

Фиг. 1.17

102
Глава 1. Основни сведения за MATLAB

ezpolar | - чертае графиката на функция, зададена в полярни


координати г = г(<р).
Синтаксис:
ezpolar ('f(cp)') - по подразбиране 0 < ср < 2тг;
ezpolar ('f(<p)', [cpmin cpmax ]).
Пример:
e z p o la r ( ' s i n ( t a n ( p h i ) ) ' ) ;
1. 8. 2. Тримерна графика
Обикновени графики
Почти всички функции за управление на осите и за нанасяне на
надписи, използвани в двумерната графика, се прилагат по същия начин
и в тримерната.
Тук ще разгледаме функциите за изобразяване на повърхнини,
описвани от функцията z = F(x,y), зададена в аналитичен или табличен
вид. Това са функциите:
mesh - изобразяване с помощта на мрежа;
surf - изобразяване чрез непрекъсната повърхнина;
surfl - използва се допълнително осветяване (1 от lig h t -
светлина).
Построяването се извършва в следната последователност:
1) Пресмятаме матриците X и Y на координатите х и у на възлите
на мрежата с помощта на функцията meshgrid:
[X,Y] = meshgrid (х ,у ).
Тук х и у са вектори с абсцисите и ординатите.
2) Пресмятаме матрицата Z със стойностите на функцията във
всички възли:
Z = F(X,Y).
В дясната част на това равенство трябва да е въведена конкретната
функция с използване на поелементните оператори.*, ./, .А !
3) Извикваме една от трите функции mesh, surf или surfl за
построяване на графиката:
mesh (X.Y.Z); surf (X,Y,Z); surfl (X,Y,Z) .
4) Извикваме някои от допълнителните функции:
colorbar - извежда се цветова лента.
colormap('colmap') - цветова карта, определяща оцветяването на
изображението. Опцията 'colmap' може да има стойности 'gray',
'copper', 'pink', 'spring', 'summer', и др. Пълния списък на цветовите
карти можете да видите с командата » help graph3d.
shading interp - плавен преход на сенките (командата се
въвежда без аргументи).

- 103-
MATLAB. Част 1

Пример. Изобразяване на функцията z = х*ехр(-хл2 -у л2)


[X ,Y] = m e s h g rid ( - 2 :0 .0 5 :2 , - 2 : 0 . 0 5 : 2 ) ;
Z = Х.*ехр(-Х.л2 - Y .л2 ) ;
surfl(X,Y,Z), shading interp,
colormap('gray'), colorbar

Фиг. 1.18. Графика на функцията z = х*ехр(-хА2 - у л2)


Функцията plot3 е аналог на plot и служи за начертаване на
пространствена крива. Извиква се cplot3 (x,y,z).
Специални графики
Тук има няколко функции, напълно аналогични по действие на съ­
ответните от равнинната графика. Това са:
comet3 - анимационно начертаване на пространствена крива;
ЬагЗ - като bar, но вместо ленти се използват стълбчета;
stem3 - изобразява дискретна функция z = f(x,y).
Синтаксис: stem3 ( Z ) ; stem3 (X.Y.Z). Тук матриците X, Y и Z са анало­
гични на тези, използвани от функцията mesh.
р±еЗ - като pie, но "тортата" е пространствена.
Пример:
% Пространствена крива
t = 0 :pi/100:20*pi;
х = sin(t); у = cos(t);
comet3(x,y,t);
plot3(x,y,t);
grid on;
Функцията surfc е същата ка­
то surf, но допълнително изо­
бразява линиите на ниво под
основната графика.

104
Глава 1. Основни сведения за MATLAB

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


ezmesh, ezsurf и ezgraph3. Тук ще разгледаме само последната,
тъй като, както ще разберем след малко, тя включва в себе си и първите
две.
ezgraph3 - облекчено начертаване на повърхнина, зададена с
функцията z = f(x,y). Използва една от трите функции - mesh, surf или
surf 1, указана от потребителя в първия аргумент 'plotfun'.
Синтаксис:
ezgraph3 ('plotfun', 'f(x.y)');
ezgraph3 ('plotfun', 'f(x.y)', [ a b ]) - в областта a < x < b , a < y < b ;
ezgraph3 ('plotfun', 'f(x.y)', [ xmin xmax ymin ymax ]);
ezgraph3 ('plotfun', 'f(x,y)'t [ a b ], 'domstile') - последният аргумент
задава вида на областта (domain): 'rect' - правоъгълна; 'circ' -
кръгова.
Пример:
ezsurf('sin(sqrt(xA2 + уА2))/sqrt(хА2 + уА2)',[-6*pi 6*pi])1

sm(sqrt(*2♦ ♦y2)

Фиг. 1.19. Графика на функцията sin(sqrt(xA2 + yA2))/sqrt(xA2 + уЛ2)

1. 8. 3. Редактиране, печат, съхраняване и вмъкване на графика


в документ
Всяка една от създадените графики може да бъде редактирана,
отпечатвана, съхранявана във файл с едно или друго разширение и
вмъквана в някакъв документ.

105
MATLAB. Част 1

• Редактиране

В горната част на всеки графичен прозорец е разположено основно


меню, а под него - бутони с инструменти. Ако желаете да нанесете до­
пълнително пояснителни надписи в областта на графиката, трябва най-
напред да преминете в режим на редактиране, като натиснете бутон
№ 1. След това щраквате върху бутон № 2, позиционирате курсора на
желаното място и щраквате с левия бутон на мишката. Въвеждате съот­
ветния текст в появилото се поле. След това можете да свържете текста
с определено място от графиката с помощта на стрелка или права ли­
ния. За целта щраквате върху бутон № 3 или 4, позиционирате курсора
(който променя формата си на кръстче) в началната точка, натискате
левия бутон на мишката, без да го отпускате, придвижвате курсора до
крайната точка и отпускате бутона. Стрелката или линията е готова.
• Отпечатване
Отпечатването на графика става, като от основното меню изберем
File—>Print... или натиснем съответния бутон.
• Вмъкване в Word документ
С помощта на командата Edit-»Copy Figure прехвърляме графиката
в Clipboard. Отваряме с Word съответния документ, позиционираме
курсора на желаното място и избираме Edit->Paste. Фигурата вече е
пред нас.
• Запис в MATLAB файл .fig
Избираме Save As .... задаваме име на файла fname.fig и натис­
каме бутона save
• Отваряне на графичен файл
Избираме File—Юреп..., намираме файла, маркираме го и натис­
каме бутона open \ .
• Запис на графика в друг формат
Избираме File—^Export .... задаваме име на файла с желаното
разширение, например myfig.jpg, и натискаме бутона | save |.
• Вмъкване на графика от файл в Word документ
Избираме lnsert->Picture->From File..., намираме файла и щрак­
ваме върху него.

- 106-
Глава 1. Основни сведения за MATLAB

1. 8. 4. Дескрипторната графика на MATLAB


За програмно оформяне на външния вид на една графика, а също
така за създаване на потребителски графичен интерфейс (GUI) MATLAB
предоставя на програмиста т. нар. дескрипторна графика (Handle Gra­
phics). MATLAB е обектно ориентирана система и всички графични
елементи (графични прозорци, оси, линии, повърхнини, текстови полета
и т. н.) се разглеждат като обекти. Всеки обект си има свойства, опре­
делящи външния му вид.
Дескрипторната графика позволява да се получи достъп до свойст­
вата на всички графични обекти с помощта на съответните функции.
Свойства на обекта линия например са:
'C o lo r' - цвят на линията;
'LineWidth' - дебелина на линията;
'LineStyle' - стил на линията; и т. н.
Функцията get позволява да получим достъп до свойствата на
даден обект, а функцията set - да му зададем определени свойства.
Има три системни функции, задаващи обекта, които може да се изпол­
зват като първи аргумент на функциите get и set:
gcf - текущ графичен прозорец (Graphic Current Figure);
gca - текущи графични оси (Graphic Current Axes);
geo - текущ графичен обект (Graphic Current Object).
Функцията get може да се използва с не повече от два аргумента.
Например командата
fn = get (gca, 'FontName')
ни връща името на шрифта, с който са нанесени надписите в графиката
от текущия прозорец.
Функцията set може да има повече аргументи:
set (ob jjd entif, 'Property1\ V a lu e l, ’Property2', Value2, ....)
Аргументите след първия, който задава обекта, са по двойки
"свойство, стойност" (Property,Value).
Пример:
set (gca, 'FontName', 'Arial Cyr', 'FontSize', 14)
Въвеждайте винаги тази команда, преди да нанасяте надписи на
кирилица в текущия графичен прозорец!
Напомняме, че функцията дсо насочва действието на функциите
set или get към текущия обект, избран чрез щракване с мишката
върху него - графичен прозорец, оси, линия, надпис и т. н. Програмното
обръщение към произволен създаден вече обект се извършва с
помощта на неговия дескриптор или указател (handle - дръжка).
При създаване на всеки обект системата автоматично генерира
число, което е уникален негов идентификатор. Това число се нарича
дескриптор или указател на обекта. Указателя можем да си пред­

107
MATLAB. Част 1

ставим като адрес на обекта, по който системата го открива безпогреш­


но. Не трябва да забравяме да запишем стойността на указателя в
някаква променлива в момента на създаване на самия обект.
Функциите g c f, gca и geo връщат именно указателите на
текущия прозорец, текущите оси и текущия обект. И така, всеки обект си
има уникален указател, с помощта на който можем еднозначно да се
обръщаме към обекта при необходимост.
Подробна информация по въпроса заедно с опис на графичните
обекти и техните свойства можете да намерите в [2], стр. 313 - 342. Не е
беда, ако не успеете да намерите тази книга. Списък на всички
възможни стойности на конкретно свойство на даден обект можете да
получите с командата s e t:
set(obj_handl, 'Property'),
където obj_handl е указателят на обекта;
Property - наименованието на конкретното свойство.
Командата s e t (obj_handl) извежда таблица с имената на
свойствата на обекта и всичките им допустими стойности.
Полезно е да се запознаем с още няколко команди, които се
използват доста често при работа с графика:
h = f i g u r e - създава нов графичен прозорец и връща неговия
указател h (handle).
f i g u r e (h) - прави активен графичния прозорец с указател h. Ако
такъв прозорец не съществува и h е цяло число, системата създава нов
прозорец с указател h.
Пример:
h i = f ig u r e % създаване на нов прозорец с указател hi
hi =
3
h2 = f ig u r e % създаване на нов прозорец с указател h2
h2 =
4
fig u r e (h i) ,plot (x,sin (x)) , g r id on % чертае в прозорец c указател hi
fig u r e (h2) ,plot (x,cos (x)) , g r id on % чертае в прозорец c указател h2
g e t( h ) - извежда списък със свойствата на прозореца с указател
h и техните текущи стойности.
s e t( h ) - извежда списък със свойствата на прозореца с указател
h и всички възможни техни стойности.
e l f - изчиства текущия графичен прозорец (CLear Figure),
c la - изчиства текущите оси, като премахва само графиката.
При това осите с надписите по тях, както и мрежата, се запазват
(CLear Axis);

108
Глава 1. Основни сведения за MATLAB

reset ( h ) - пренастройва всички свойства на обекта с указател h,


като ги заменя с техните подразбиращи се (default).
close - затваря текущия графичен прозорец.
close (h) - затваря графичния прозорец с указател h.
close all - затваря всички графични прозорци.
1. 8. 5. Анимация
MATLAB предоставя две различни възможности за програмно
реализиране на анимация, които ще илюстрираме чрез анимация на
една въртяща се около неподвижна ос стрелка с единична дължина.
1) Посредством операторите moviein,
getfram e и movie
Най-напред се записват отделните кадри
(frames) в специална матрица, след което се
проиграват зададен брой пъти.
% Програма Anil.m
% Първи метод за анимация
nfr = 60; % брой фреймове (кадри)
fi = 1inspace (0, 2*pi, nfr) ; % ъгьл на завъртане
хА = cos(fi); уА = sin(fi); % координати на т. А
М = moviein (nfr) ; % дефиниране на фрейм-матрицата
for i = 1:nfr
plot([0, xA(i)], [0,yA(i)], Y )
axis ( [ - 1 1 - 1 1 ] ) ; % [xmin xmax ymin ymax]
axis ( ' off ' ) % премахване на координатните оси
M(:,i) = getframe;
end
movie (M , 3 ) ; % проиграва се 3 пъти
close, clear
Значението на отделните оператори се вижда от коментарите. Не­
обходимо е само да поясним, че в цикъла for командата plot генери­
ра поредния кадър, който се записва в i-тия стълб на фрейм-матрицата
М. В случая стрелката се изобразява с права линия, свързваща двете
точки с абсциси [0, xA(i)] и ординати [0, yA(i)]. Самото проиграване на
анимацията се осъществява от оператора movie (М, 3 ). Операторът
close затваря текущия прозорец, a clear изчиства паметта.
Този метод има някои недостатъци :
• Губи се време за създаване на фрейм-матрицата М.
• Броят на фреймовете е ограничен, което води до скокообразно
изменение на изображението.
• Фрейм-матрицата М заема твърде много памет - до няколко
мегабайта.

109
MATLAB. Част 1

• Изисква минимум 256-цветен видеодрайвер.


Първият метод е за предпочитане, когато обектът е сравнително
сложен (тримерен обект) и построяването на всеки кадър изисква
повече време.
2) Посредством операторите line, set и drawnow
Поредният кадър се начертава в реално време, като предишният
се изтрива (' EraseMode').
% * * * * * Програма Ani2 *****
% Втори метод за анимация
1 п = 360; % брой позиции
2 fi= linspace (0, 2*pi, n) ; % ъгьл на въртене
3 хА = cos(fi);уА = sin(fi); % координати
4 axis('equal'); axis('off');
5 axis ( [-11-11]); % [xmin xmax ymin ymax]
6 point= line ('Color', 'black', 'EraseMode', 'xor1, ...
7 'LineStyle', '-' , 'XData',[], 'YData',Q);
8 hold on
9 for j = 1:3 % три оборота на стрелката
10 for k = 1 :n
11 set(point, 'XData',[0,xA(k)], 'YData',[0,yA(k)])
12 pause (0.01)
13 drawnow
14 end
15 end
16 close; clear
Ha редове 6 - 7 се задава указателят point на нашия обект (стрел­
ката), дефиниран с оператора line. Обект, дефиниран с оператора
line, може да бъде всяка непрекъсната права, крива или начупена
линия, т. е. произволна линия, която можем да начертаем, без да по­
вдигаме молива. Масивите с данни на този графичен обект ('Xdata' -
вектор с абсциси, ‘Ydata’- вектор с ординати) се попълват в цикъла
for посредством оператора set, а поредният кадър се начертава с
оператора drawnow. Операторът pause (0.01) осигурява необходима­
та пауза от 0,01 sec, за да можем да видим стрелката и на бързите съ­
временни компютри.
При втория метод се заема по-малко памет и е възможно
начертаването на по-голям брой положения (кадри). Това води до много
по-плавно изобразяване на движението на механизма. Препоръчва се за
равнинни обекти, които не изискват много време за начертаване.
Предлагаме на читателя да проиграе двата варианта.

- 110-
Глава 1. Основни сведения за MATLAB

Пример:
Анимация на бягаща вълна, получена чрез суперпозиция на две
вълни: у = cos(k*x - w*t) + cos(x - 1),
където k, w са параметри;
t е време;
х - координата.
(у ****************************************************************

% Програма W A V E - анимация на бягаща вълна


(у ****************************************************************

t= 0:0.1:100; % стойности на времето t


х = 0:0.2:60; % стойности на координатата х
k = 1.1; w = 1.3; n = length (t) ;
у = cos(k*x -w*t(1)) + cos(x -1(1));
figure % отваряне на нов графичен прозорец
h = line (х, у); % Задаване дескриптор h
grid on % на обекта line
% Задаване свойства на обекта line
set(h, 'color', 'bf, 'LineWidth',2) ;
axis([0 60 -3 3]) ;
set(h, 'EraseMode','xor’);
for i = 2:n
pause (0.01)
y = cos(k*x-w*t(i)) + cos(x-t(i));
set(h, 'XData',x, 'YData',y) ;
end
% * * * * * End of program Wave * * * * *
Ha фиг. 1.20 е дадено последното
изображение на вълната.

1. 8. 6. Някои проблеми с кирилицата и тяхното отстраняване


Всеки, който е работил с MATLAB и се е опитвал да ползва
кирилица, рано или късно се е сблъсквал със следните проблеми:
1) Преди появата на операционната система Windows ХР беше
невъзможно да се нанасят надписи на кирилица в графичните обекти.
Този проблем може да бъде решен с малка корекция в регистрите на
Windows. За целта стартирайте редактора на регистрите с командата
run regedit и се придвижете по дървото на регистрите до codepage
(фиг. 1.21):
HKEY_LOCAL_MACHINE\System\CurrentControISet\Control\Nls\Codepage
С двойно щракване изберете параметъра 1252 и променете стойността
му от c_1252.nls на CP_1251.nls. Натиснете бутона ОК и затворете ре­
дактора. Това е всичко! Отсега нататък би трябвало свободно да нана-

-111 -
MATLAB. Част 1

сяте надписи на кирилица във всички графични обекти в MATLAB. При


работа под управление на Windows ХР тази корекция се оказва
излишна.
2) Във версии 6.0 и 6.1 на MATLAB използването на кирилица в
програмите, дори и в коментарите, води до съобщения за грешки и
преустановяване на изпълнението. Опитът показва, че буквата, която
разстройва работата на MATLAB, е буквата "я". Бихме ви посъветвали
да я заменяте c комбинацията
"ia" или нещо друго по ваш
вкус. За съжаление няма
гаранция, че това решава
напълно проблема. Добрата
новина е, че в MATLAB 6.5 и
следващите версии този проб­
лем не съществува!
3) Преди нанасяне на
надписи на кирилица върху
текущата графика задължи­
телно трябва да зададете
подходящ шрифт с командата
set(gca,'FontName',.. .
'Arial Cyr', 'FontSize', 14).
Помнете, че действието на
тази команда се ограничава
само до текущата графика!
При преминаване към след­
ващата графика командата
трябва да бъде подадена от­
ново, дори и ако няма промени
в името и размера на шрифта.
Важно! Не всички шрифтове,
които работят нормално на
кирилица в MS Word, се въз­
приемат от MATLAB! Ето ня­
Ф иг. 1.21. Корекции в Codepage колко шрифта, които имат
добро поведение и в MATLAB:
Arial Cyr, Courier, MS Sans Serif, MS Serif, Small Fonts, Times New
Roman Cyr, Journal, NewtonC.

112
Глава 2
Интегриране на MATLAB с MS Word - Notebook
Въведение
Създаването на висококачествено оформени документи, интегри­
ращи в себе си текст, формули и графика, е от особено значение за все­
ки инженер и научен работник. За съжаление системите за компютърна
математика имат доста ограничени възможности за обработка на текст,
които далеч не могат да се сравняват с възможностите на съвременни­
те текстообработващи програми от рода на MS Word. Оттук възниква
естествената необходимост от интегрирането на двата вида системи.
Приложението Notebook, което в последните версии на MATLAB се
превърна от отделен инструмент (toolbox) в неразделна част от ядрото
на системата, обединява огромните възможности на MATLAB в областта
на аналитичните преобразувания, числените пресмятания и визуализа­
цията на получените резултати с възможностите на най-популярната и
мощна текстообработваща програма MS Word.
Документ, създаден в средата на Notebook, се нарича М-книга. Той
включва в себе си текст, команди на MATLAB и резултатите от тяхното
изпълнение. Текстът се обработва от Word по познатия начин, при което
могат да се използват всички предоставяни от текстообработващата
програма средства. Можем да си представим една М-книга или като
запис на диалогов сеанс на работа с MATLAB, придружен с пояснителен
текст, или като документ на Word, в който са включени въведените
команди на MATLAB и резултатите от изпълнението им.
При работа върху една М-книга командите на MATLAB се помест­
ват в т. нар. входни клетки (Input Cells), а резултатите - в изходни
клетки (Output Cells). Няколко последователни клетки могат да се
обединят в група входни клетки (Group of Cells). Една или няколко
входни клетки могат да се дефинират като автостартови (Autolnit
Cells), които се изпълняват автоматично при всяко зареждане на
документа.
Част от М-книгата, включваща текст, входни и изходни клетки и
решаваща определена самостоятелна задача, може да се обедини в
секция или зона на пресмятания (Calc Zone). Командите за работа с
клетките и задаване на вида на изходните резултати се намират в меню
Notebook на програмата Word и са систематизирани в приложение 2.

8 - 1 13 -
MATLAB. Част 1

При създаване или редактиране на една М-книга Word използва


специален шаблон m-book. dot .Този шаблон позволява достъп до
системата MATLAB от документа на Word и управлява неговото форма­
тиране.
Едно от най-привлекателните свойства на една М-книга е нейната
"живост". Ние можем да променим някои от входните данни или опциите
за форматиране, да подадем команда за изпълнение на цялата М-книга
или отделна нейна секция и веднага получаваме новите резултати. В
този смисъл една М-книга може да изпълнява функциите на обучаваща
програма.
Очевидно приложението Notebook е чудесно средство за докумен­
тиране на един или няколко работни сеанса, за създаване на научно-
технически отчети, доклади, публикации, учебни пособия и др. Част от
тази книга за MATLAB също е създадена с помощта на Notebook.

2.1. Конфигуриране на Notebook


Преди първоначалното използване на Notebook той трябва да се
конфигурира. Тази операция е еднократна и може да се изпълни по
следния начин:
От средата на MATLAB подаваме командата
» notebook -setup
Системата ни подканва да укажем версията на MS Word, инстали­
рана на нашия компютър. Въвеждаме поредния номер на версията от
списъка на екрана и натискаме клавиша Enter. В повечето случаи това
се оказва достатъчно. На фиг. 2. 1 е представен файлът diary, доку­
ментиращ такова конфигуриране.

» notebook -setup
Welcome to the utility for setting up the MATLAB
Notebook
for interfacing MATLAB to Microsoft Word
Choose your version of Microsoft Word:
[1] Microsoft Word 97
[2] Microsoft Word 2000
[3] Microsoft Word 2002 (XP)
[4] Exit, making no changes
Microsoft Word Version: 3
Notebook setup is complete.

Фиг. 2.1. Конфигуриране на Notebook

114
Глава 2. Интегриране на MATLAB с MS Word - Notebook

Ако Notebook не може да намери всички необходими файлове,


системата ще поиска от вас да укажете местоположението им. Това
може да бъде стартовият файл на MS Word winword.exe и файлът с
шаблони normal.dot.
След успешното конфигуриране към файловете с шаблони на
MS Word се добавя файлът m-book.dot, необходим за нормална
работа на Notebook.
Забележка. Ако вашата версия на MS Word е 2000 или по-нова,
преди конфигурирането трябва да укажете, че Word може да използва
макросите на Notebook. За целта е необходимо да зададете средно ниво
на сигурност при използване на макроси, като в средата на Word
изберете Tools—>Macro—^Security. . . и в появилия се диалогов
прозорец изберете Medium. След първото стартиране на Notebook
можете отново да върнете защитата от макроси на най-високото ниво
High.

2. 2. Работа в средата на Notebook

3 m-book.dot (Read-Only) Microsoft Word


Q ° ii
£lle fidit View Insert Fermat loots Table Notebook Window Help X

d c# н «a a a ? •, © ver % fj Define Input Cell j


'h Normal -r Arbi - 14 Define Autolnit Cell k - д ,- ”
L a ' ' ' 1 ‘ 1' 2 ' ' ' 3 ■ ' ' 4 ■1• 5 • ' ■6 • • 7 ■ е

L lt l
Define Calc Zone
Undeflne Cells
l £urge Selected Output Cells
Group Cells
Ungroup Cells
Hide Cell Markers
Toggle Graph Output for Cell
Evaluate Cell
Evaluate Calc Zone
j Evaluate M-bbok , ; к 1
Evaluate Loop ^
Bring MATLAB to Front
Notebook Options...
_! o
9
■j • ■ 3 jl LJ jJ
Diaw- Is AutoShapes- ' A□ O i 41 ■*. Ж LS = cs *'
Page I s« 1 1/1 At2,2an Ln l Coll 7fv, .. . Engtsh(U.S. Ш

Фиг. 2.2. Менюто Notebook


От Notebook можем да извършим следните основни операции с
една М-книга като цяло:

115
MATLAB. Част 1

2. 2.1. Създаване на нова М-книга


Това може да стане по три начина:
1) От средата на MATLAB подаваме командата
» notebook
Приложението Notebook стартира MS Word, ако не е била старти­
рана, и е готово за въвеждане на съдържанието на новата М-книга.
2) От средата на MS Word избираме от основното меню
File->New...,
след което избираме шаблона ш -book.dot. Системата стартира про­
грамата MATLAB, ако не е била стартирана, и е готова за въвеждане на
съдържанието на новата М-книга.
И в двата случая се извършват следните забележими промени:
• В основното меню на Word се добавя менюто Notebook (фиг.
2.2), съдържащо основните команди за работа с една М-книга,
групирани по функционално предназначение.
• В менюто File се появява допълнителна опция New M-book,
която по-нататък може да се използва за създаване на друга нова М-
книга.
• В контекстното меню, появяващо се при щракване с десен бутон
върху работната площ на прозореца, се появя­
Evaluate Cells
ват следните нови команди, специфични за
работа с Notebook (фиг. 2.3):
Evaluate Calc Zone
Evaluate Cells
Evaluate Calc Zone Evaluate M-Book

Evaluate M-book | Purge Output Colls

Purge Output Cells A f o n t .. j


• Списъкът на стиловете се попълва с но­ ft Paragraph...
вите стилове, които са определени в шаблона := Bullets and Numbering...

m-book.dot: Autolnit, Calc, Error, Input, <4 Hyperlink...

NoGroup, Output. Synonyms J



Translate

Фиг. 2.3. Контекстно меню


3) От средата на Notebook избираме от основното меню
File—>New M-file
2. 2. 2. Отваряне на съществуваща М-книга
Възможни са три начина за отваряне на една съществуваща М-
книга с цел коригиране и изпълнение:
1) От средата на MATLAB подаваме командата
» notebook file n a m e
Системата стартира Word и зарежда файла.
- 1 16 -
Глава 2. Интегриране на MATLAB с MS Word - Notebook

2) От средата на MS Word избираме от основното меню


File—Ю р е п ...
и посочваме файла. Системата стартира MATLAB, ако не е била старти­
рана, и зарежда файла.
3) От средата на Win Explorer:
С двойно щракване върху файла, съдържащ М-книгата, се старти­
рат Word и MATLAB, ако не са били стартирани, и се зарежда файлът.
И в трите случая, щом избраният файл съдържа М-книга, програ­
мата Word се привежда в режим на Notebook, т. е. в основното меню се
появява подменюто Notebook, а в менюто File се появява опцията
New M-book.
2. 2. 3. Преобразуване на обикновен документ на Word в М-книга
Един обикновен документ на Word може да се преобразува в
М-книга със следните стъпки:
• Създаваме нова М-книга по един от описаните по-горе начини,
например от средата на Notebook избираме
File—>New M-book
• Вмъкваме файла, създаден с Word:
Insert—>File...
Избираме желания файл.

2.3. Дефиниране на команди на MATLAB като входни клетки


В една М-книга командите на MATLAB се въвеждат по същия на­
чин, както се въвежда текст в един обикновен документ на Word. При
това командите могат да бъдат разположени както в самостоятелни ре­
дове, отделно от обикновения обяснителен текст, така и в самия текст.
Възможно е няколко команди да бъдат разположени на един и същи
ред. За да могат да бъдат изпълнени въведените команди, те трябва да
се дефинират като входни клетки.
2. 3.1. Дефиниране на единична входна клет ка
Въвеждаме командата на MATLAB на отделен ред или в обикновен
текст. Ако командата е разположена в ред без текст, достатъчно е да
позиционираме курсора в този ред. Ако пък се намира някъде в текста,
тя трябва да се маркира.
След това от менюто избираме Notebook-»Define Input Cell
или натискаме клавишите Alt + D. Новосъздадената входна клетка се
загражда в специални квадратни скоби и се изобразява в стил Input:
удебелен шрифт Courier New с тъмнозелен цвят и големина 10 pt.
Ако няколко команди на MATLAB са разположени на един и същи
ред, те се дефинират като една входна клетка.
117
MATLAB. Част 1

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


помощта на командата Notebook—>Hide/Show Cell Markers. Това
не оказва влияние върху вида на отпечатвания документ, тъй като тези
скоби не се отпечатват.
2. 3. 2. Дефиниране на група входни клетки
Няколко входни клетки или команди на MATLAB, разположени в
отделни редове извън текста, може да се обединят в една
самостоятелна клетка, наречена група клетки. Това може да стане по
два начина:
1) Маркираме последователността от входни клетки и избираме ко­
мандата Notebook->Group Cells или натискаме клавишите Alt + G.
2) .Маркираме последователността от команди на MATLAB, които
все още не са дефинирани като входни клетки, и избираме командата
Notebook->Def ine Input Cell или натискаме клавишите Alt + D.
Една група от входни клетки се изобразява по същия начин както
една-единствена входна клетка и се третира от системата като такава.
Ако маркираният фрагмент включва обикновен текст, той се
разполага след групата клетки. Ако обаче текстът се намира пред
първата входна клетка, той остава на мястото си.
Ако фрагментът включва изходни клетки, те се отстраняват, но в
групата се включват съответните им входни клетки, дори ако не са били
маркирани.
Ако първата клетка е била от тип Autolnit, тогава цялата група
приема този тип.
Пресмятането на една група клетки става с командата
Notebook->Evaluate Cell. При това резултатите от пресмятанията
се поместват в една-единствена изходна клетка, разположена
непосредствено след групата.
Ако група клетки включва команди, които генерират текст, числени
данни и графика, текстът и числените резултати винаги се извеждат най-
напред независимо от действителната последователност на командите
в групата.
Обединяването на няколко входни клетки в една е абсолютно
необходимо, когато няколко команди трябва да генерират една или
няколко графики, разположени в един прозорец. Ако тези команди не са
обединени в група, а са дефинирани като отделни клетки, тогава при
изпълнението им всяка команда, независимо дали чертае графика или
изпълнява помощна функция, ще вгражда отделен графичен прозорец в
документа!

118
Глава 2. Интегриране на MATLAB с MS Word - Notebook

Пример:
В този пример са показани отделните стъпки: въвеждането на
командите, дефинирането им като група и тяхното изпълнение.
3 Document 1 - Microsoft Word
£ile Edit View Insert Format loots Table Notebook Window Help
ij u* н a a vv * i& m, v- «a ® n гв ss ^
4s Normal + (Latin) Aria » Ariel - 14 - [■ ] / U щщ [yfj i f ; * Щ m l=-. Д. -

Въвеждане- на командитес
t=-0:pi/30:2*pi;1T
[X.-YI-Z] = cylinder(4*cos(t)-+-1);1j
mesh(X.Y.-Z)U
r

Маркнране на въведешгте командис


t=0:pi/30:2*pi;H
[X,Y,-Z]-= cylind e ^ 4 * c o s (t^ M )^
m e s h (X ,Y ,Z )H l

Прилаганена-командата- D e fin e • I n p u t • C e l l ?
t •= • 0 : p i / 3 0 : 2 * p i
[ X, • Y, • Z ] • = • c y l i n d e r ( 4 * c o s ( t ) • + • 1 ) ; 4
m esh (X, • Y, • Z) -J-f

TIpecMirraHeHarpjTiaTaiaieTKiicnoMomTaHaKOMa^aTaEvaluate-Cellf

.J
Q ■■ f >. v
Page 1 Sec 1 1/1 At 6.4 cm Ln 7 Col 1 Englsh (U.S. Ш

Фиг. 2.4. Дефиниране и изпълнение на група клетки


Забележка. За да се подчертаят трите етапа - въвеждане, марки­
ране и преобразуване в група, на фиг. 2. 4 освен въведените команди са
изобразени две техни копия, върху които са извършени съответните
действия. В действителност всичките действия се извършват на едно
място, докато на мястото на въведените команди получим съответната
група.

119
MATLAB. Част 1

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


ност от единични клетки, като се позиционира курсорът върху нея и се
избере командата
N o te b o o k —HJngroup C e l l s .
2. 3. 3. Дефиниране на автостартова клетка Autolnit
Ако желаем дадена команда на MATLAB или последователност от
команди да се изпълнява автоматично при всяко отваряне на М-книгата,
тя трябва да се дефинира като автостартова клетка, т. е. клетка от
типа A u t o l n i t .
За целта позиционираме курсора върху абзаца, в който се намира
командата или входната клетка. Ако трябва да преобразуваме
множество от последователно разположени команди или входни клетки,
трябва Дек ги маркираме. След това избираме от менюто командата
N o te b o o k -» D e fin e A u t o l n i t C e ll.
Една автостартова клетка се загражда в квадратни скоби и се
изобразява в стил A u t o l n i t : удебелен шрифт C o u r ie r New с
тъмносин цвят и големина 10 pt. Броят на автостартовите клетки в един
документ е неограничен.
2 .3.4 . Дефиниране на секции или зони на пресмятане (Calc Zones)
Понякога е удобно една сравнително голяма М-книга да се разбие
на автономни секции или зони на пресмятане C a lc Zones. Една
секция обединява последователно разположени текст, входни и изходни
клетки, които решават съвместно определена задача.
Дефинирането на секция се извършва, като се маркира съответ­
ният участък от документа и се избере командата N o te b o o k—>Def in e
C a lc Zone. Отделните секции се разграничават помежду си със спе­
циални маркери.
Използването на секции е удобно например при съставяне на
електронни ръководства за решаване на задачи. В този случай всяка
задача се обособява като отделна секция.
Забележка. Променливите в отделните секции са глобални за
целия документ. Това означава, че променлива, определена в една
секция, може да се използва под същото име във всички останали
секции.
2. 3. 5. Преобразуване на входни клетки в текст
При необходимост, след като са извършени съответните пресмята­
л и , можем да преобразуваме дадена входна клетка или група клетки в
обикновен текст тип N orm al. За целта позиционираме курсора на про­
изволно място в клетката и избираме командата N o te b o o k—>Undef in e

120
Глава 2. Интегриране на MATLAB с MS Word - Notebook

C e lls или натискаме клавишите Alt + U. При това квадратните скоби,


заграждащи клетките, се премахват.
При преобразуване на входни клетки се преобразуват автоматично
и съответните им изходни клетки, дори и ако не са маркирани.
Обратното не е вярно.

2. 4. Изпълнение на команди на MATLAB


2. 4.1. Въвеждане и изпълнение на команда на MATLAB
То се извършва в следните стъпки:
1) Въвеждаме командата в М-книгата като текст:
Това е примерна М-книга
А = magic(3)
2) Позиционираме курсора на произволно място в командата. Ако
тя е разположена на един ред с обикновен текст, задължително
трябва да я маркираме. След това избираме Notebook—>Define
Input Cell или натискаме Alt + D. Резултатът от нашия при­
мер е следният:
Това е примерна М-книга
А = magic(3)
3) Позиционираме курсора върху произволно място в клетката или
я маркираме. След това избираме Notebook->Evaluate
Cell или натискаме Ctrl + Enter.
Notebook пресмята входната клетка и извежда резултата в изходна
клетка, разположена непосредствено след входната. Ако вече е съще­
ствувала съответната изходна клетка, резултатът от пресмятанията се
помества в нея независимо от нейното разположение в М-книгата.
Резултатът от примера е следния:
Това е примерна М-книга
А = magic(3)
А =
8 1 6
3 5 7
4 9 2
Текстът в изходната клетка е син и е обграден в специални сиви
квадратни скоби. Съобщенията за грешки се печатат с червен цвят.
2. 4. 2. Пресмятане на група клетки
То се извършва както при единична клетка. При това резултатите
от пресмятанията се поместват в една-единствена изходна клетка.

-121 -
MATLAB. Част 1

Пример:

х = 3
у = 4
R = sqrt(хА2 + уА2)

х =

2. 4. 3. Пресмятане на непрекъсната последователност от


входни клетки
Непрекъсната последователност от входни клетки или команди на
MATLAB, които все още не са дефинирани като входни клетки, се пре­
смятат, като ги маркираме и изберем командата Notebook—^Evaluate
Cell или натиснем Ctrl + Enter.
Notebook пресмята всяка от командите и помества резултатите в
съответните изходни клетки.

2. 4. 4. Пресмятане на секция
За целта трябва да позиционираме курсора на произволно място в
секцията и да изберем командата Notebook->Evaluate Calc Zone
или да натиснем Alt + Enter. Резултатите от пресмятането на всяка
входна клетка се поместват в съответната изходна клетка. Ако не съ­
ществува изходна клетка, тя се създава непосредствено след входната.
Ако пък съществува съответна изходна клетка, резултатите се помест­
ват в нея независимо от мястото й в документа.

2. 4. 5. Пресмятане на цялата М-книга


То се извършва, като изберем командата Notebook->Evaluate
M-book или натиснем Alt + R. Независимо от текущото положение на
курсора пресмятането започва от началото на книгата. Разположението
на изхйрните клетки е аналогично на това при пресмятане на единична
клетка, група клетки или секция. Препоръчва се тази команда да се
изпълнява винаги след извършване на корекции в документа, преди
неговото записване на твърдия диск.

122
Глава 2. Интегриране на MATLAB с MS Word - Notebook

2. 4. 6. Циклично пресмятане на последователност от клетки


При необходимост можем да изпълним циклично командите в една
последователност от клетки, като я маркираме и изберем командата
N o te b o o k—> E v a lu a te Loop или натиснем Alt + L. Появява се пане-

Брояч на циклите
Максимален брой цикли
Скорост на пресмятане
Стартиране или спиране

Фиг. 2.5

лът E v a lu a te Loop (фиг. 2.5), с помощта на който можем:


• да зададем броя на циклите в полето S to p A f t e r ;
• да стартираме пресмятанията с бутона S t a r t , който при това се
преобразува в бутон S to p ;
• да спираме временно пресмятанията с помощта на бутона
Pause, който се преобразува в бутон C o n tin u e , служещ за
продължаване на изпълнението;
• да променяме скоростта на изпълнение с помощта на бутоните
F a s te r (по-бързо) и S lo w e r (по-бавно);
• да преустановяваме преждевременно пресмятанията с помощта
на бутона S top.
Забележка. Резултатите от пресмятането на всеки цикъл се
извеждат в една и съща клетка, като новите резултати препокриват
старите. Това би могло да се използва за анимация на фигури.

2. 4. 7. Преобразуване на изходни клетки в обикновен текст


Една изходна клетка може да се преобразува в обикновен текст,
като позиционираме курсора в нея или я маркираме и изберем
командата N o te b o o k —» U n d e fin e C e lls или натиснем Alt + U.
Ако клетката съдържа текст или числени данни, ограничаващите я
скоби се премахват, а съдържанието се превръща в текст в стил
Norm al.

- 123-
MATLAB. Част 1

Ако в клетката е поместена графика, тя се запазва, но се прекъсва


връзката й със създалата я входна клетка. Това означава, че при
повторно пресмятане на входната клетка новата графика няма да
изтрие старата.
Забележка. Преобразуването на изходните клетки в текст не
оказва никакво влияние върху съответните входни клетки.

2. 4. 8. Изтриване на изходни клетки


Маркираме клетките и избираме командата Notebook—>Purge
Selected Output Cells или натискаме Alt + P.
Ако маркираме последователност от входни и изходни клетки,
Notebook изтрива само изходните, запазвайки съответните входни
клетки непроменени!

2. 5. Форматиране и отпечатване на М-книга


По подразбиране Notebook изобразява обикновения текст в стил
Normal, а различните видове клетки в стилове, определени от шаблона
m-book.dot. В таблицата са показани тези стилове и техните пара­
метри.
Стил на обекта Шрифт Размер Стил Цвят
Normal Times New Roman 10 pt Черен
Autolnit Courier New 10 pt Bold Тъмносин
Error Courier New 10 pt Bold Червен
Input Courier New 10 pt Bold Тъмнозелен
Output Courier New 10 pt Син
При необходимост можем да променим който и да е от стиловете
от шаблона m-book.dot в следната последователност:
• От менюто избираме Format->Styles and Formatting....
• Щракваме с десен бутон върху стила, който искаме да променим
(Normal, Input, Output, Autolnit, ...), и от появилото се
контекстно меню избираме опцията Modify....
• Избираме желаните опции - шрифт, големина, стил, цвят,... .
• Поставяме отметка на опцията
□ Add to template
• Щракваме бутона | ОК |.
Направените промени се отразяват върху целия документ.
Notebook ви предоставя възможност да контролирате допълни­
телно формата на числените резултати, разстоянието между входните и
- 124-
Глава 2. Интегриране на MATLAB с MS Word - Notebook

изходните клетки, а също така размерите и цветовата палитра на създа­


ваните графики. За целта изберете Notebook->Notebook Options.
Появява се панелът, изобразен на фиг. 2.6.

Избор на числения формат от падащия


списък

Избор на разстоянието между входните и


изходните клетки

Вграждане на графиките вдокумента или


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

Избор на цветова палитра. По подразби­


ране се използват 256 цвята

Задаване на размерите на фигурата в


избраните от списъка единици

Определяне на реакцията на системата


при възникване на грешка, когато се
пресмята цялата М-книга

Фиг. 2.6. Панел Notebook Options


Тук можем да зададем:
• Формата, в който да се извеждат числените резултати: Short,
Long, Short е, Long е, Rational, ... . По подразбиране се
използва формат Short.
• Разстоянието между входните и изходни клетки:
Loose - голямо, Compact - малко.
• Опцията Embed Figures in M-book, определяща дали
генерираните графики да се вграждат в документа (при включена
опция), или не. При изключена опция графиките се извеждат в
отделни прозорци, без да се вграждат в М-книгата.
• Цветовата палитра на графиките. По подразбиране се използват
256 цвята.
• Широчината (Width) и височината (Height) на вгражданите в
документа фигури (графики) в избраните от нас единици Units.

125
MATLAB. Част 1

• Опцията S to p E v a lu a t in g on e r r o r , определяща
реакцията на системата при възникване на грешки, когато се
пресмята цялата М-книга. При включена опция Notebook
прекратява пресмятанията при първата възникнала грешка. При
изключена опция пресмятанията продължават до края на М-
книгата независимо от появилите се грешки.
Избраните опции се потвърждават с бутона ОК
Важно е да се знае, че избраните опции не влизат автоматично в
сила за резултатите, получени преди настройката! Те се прилагат само
при пресмятане на нови клетки или при преизчисляване на старите. Ако
желаем да се приложат върху целия документ, трябва да подадем
командата N o te b o o k —^ E v a lu a te M -book.
Освен опцията Embed F ig u r e s i n M -book влияние върху гра­
фичните резултати оказва и командата T o g g le Graph O u tp u t f o r
C e ll, намираща се в менюто Notebook. Тя обаче не се прилага върху
целия документ, а само върху конкретна клетка. Тази команда има
превключваща функция: забранява или разрешава извеждането на
графиката, генерирана от текущата входна клетка. При забрана в края
на клетката се появява надписът (no g r a p h ) . При следващо изпълне­
ние на командата надписът изчезва.
В режима (no g ra p h ) се отменя опцията Embed F ig u r e s i n
M -book, зададена в диалоговия панел N o te b o o k O p tio n s , но само
за съответната клетка.
М-книгата се съхранява и отпечатва по същия начин както
обикновен файл на Word. За отбелязване е, че както файловете,
създадени в Word, така и файловете, съдържащи М-книги, имат едно и
също разширение .doc.

2. 6. Характерни особености на Notebook и препоръки за


ефективна работа
Тук са разгледани някои особености на Notebook, познаването на
които е необходимо условие за безпроблемна и ефективна работа с
това приложение.
• Ако при първоначалния старт на Notebook системата извежда
диалогов прозорец, в който предупреждава за опасност от
макроси, изберете Always trust macros from this
source (Винаги се доверявай на макросите от това
пррложение). Това ще ви позволи да ползвате свободно
Notebook, запазвайки висока степен на сигурност за други
макроси в Word.

126
Глава 2. Интегриране на MATLAB с MS Word - Notebook

• При групиране на входни клетки текстът, разположен между тях,


се премества след последната клетка, а изходните клетки се
отстраняват.
• При създаване на група клетки може да се прескочи операцията
по дефиниране на единичните входни клетки. Достатъчно е да
маркираме последователността от команди на MATLAB и да
изберем командата Notebook->Define Input Cell или да
натиснем Alt + D. За дефинирането на автостартова група клетки
пък се избира командата Notebook—>Define Autolnit
Cell.
Ако вместо да изберем посочените команди, натиснем Ctrl +
Enter, командите на MATLAB ще бъдат едновременно обединени
в група и изпълнени.
• Винаги обединявайте в една група командите, отнасящи се до
построяването и редактирането на една графика. В противен
случай всяка команда ще извежда отделен графичен прозорец в
документа!
• При създаване на секции или зони за пресмятане маркирането
на дадена входна клетка не включва автоматично и съответната
изходна клетка. Затова е необходимо да бъдат маркирани всички
двойки входни и изходни клетки, които трябва да влязат в
дефинираната секция.
• Една входна клетка или група клетки е текуща, ако маркерът се
намира върху нея, върху съответната изходна клетка или пък ако
е маркирана.
• Ако пресмятането на една клетка надхвърли определено време,
възниква time-out. В този случай системата извежда следния
прозорец:

M icrosoft Word

This task is taking longer than expected. Do you want to continue waiting?

J S .... 1 No

Вие можете да натиснете бутона []£§§), за да продължат


пресмятанията в тази клетка, или Ш1, за да ги прекъснете.
Интервалът от време, при който настъпва това събитие, се
определя от Word и не подлежи на промяна.

127
MATLAB. Част 1

• При пресмятане на една група входни клетки, независимо от


последователността на командите в групата, най-напред се
извеждат текстът и числените резултати, а графиката остава
накрая.
• Опцията Embed Figure in M-book се отнася за цялата М-
книга, а командата Toggle Graph Output for Cell -
само за отделна клетка или група клетки.
• Когато преобразуваме една входна клетка в текст, преобразува
се и съответната изходна клетка. Обратното не е вярно.
• За да отстраните всички изходни клетки, маркирайте целия до­
кумент, като натиснете Ctrl + А и изберете командата Purge
Selected Output Cells от менюто Notebook. При това
входните клетки остават непокътнати.
• От средата на Notebook не могат да се изпълняват директно
скриптови файлове! При необходимост можем да изведем
прозореца на MATLAB на преден план с помощта на командата
Notebook—>Bring MATLAB to Front, да извършим съот­
ветните пресмятания и да прехвърлим резултатите през
Clipboard в М-книгата.
• Една фигура, генерирана в Notebook, може да се редактира както
всяка друга фигура, вмъкната в документ на Word.
• Изходните клетки може да се маркират и преместват с мишката
на произволно място в документа. При това повторното
изпълнение на командите от съответните входни клетки не
променя новото разположение на изходните клетки, а само
тяхното съдържание.
• Всички секции в една М-книга ползват общи променливи.
• Променливите в една М-книга или в няколко отворени по време
на един работен сеанс М-книги са глобални, т. е. използват едно
и също работно пространство в MATLAB. За да не си пречат
взаимно, препоръчва се в началото на всяка М-книга да се
включи по една автостартова клетка, съдържаща командата
clear, за изчистване на работното пространство.
• След редактиране на една М-книга винаги прилагайте командата
Evaluate M-book или натиснете Alt + R, за да се установи
съответствие между коригираните входни клетки и съответните
изходни клетки.
»
• Промените в настройките, извършени с командата Notebook
Options, след затваряне на панела не влизат автоматично в
128
Глава 2. Интегриране на MATLAB с MS Word - Notebook

сила за старите резултати. Те се прилагат при пресмятането на


нови клетки или при преизчисляването на стари. Ако желаете да
се приложат върху целия документ, трябва да подадете
командата E v a lu a te M -book или да натиснете Alt + R.
• Не забравяйте да ползвате и контекстното меню, появяващо се
при щракване с десен бутон на мишката върху определен обект
от документа.
• Ако ползвате често Notebook, можете значително да ускорите
своята работа, като ползвате "горещите" клавиши, дадени в
приложение 2.

9 129
Глава 3
Символни преобразувания - Symbolic Math Toolbox
Въведение
Пакетът Symbolic Math Toolbox е предназначен за извършване
на аналитични (symbolic) преобразувания в средата на MATLAB. За
MATLAB 6.x той се базира на MapleV, ver. 5 - най-популярната система
за компютърна математика.
Пакетът за символни преобразувания на MATLAB предлага след­
ните възможности:
• аритметика с променлива точност (VPA - Variable Precision
ДпЛшеЬс);
• преобразуване и опростяване на изрази;
• линейна алгебра - пресмятане на обратни матрици, детерми­
нанти, собствени стойности, декомпозиции и др.;
• математически анализ - диференциране, интегриране, граници,
суми,редове на Тейлор;
• аналитично и числено решаване на алгебрични уравнения;
• аналитично решаване на диференциални уравнения;
• интегрални преобразувания на Лаплас, Фурие, Z - преобразу-
вание и обратните им;
• специални математически функции;
• достъп до ядрото на MapleV от средата на MATLAB.
Съществуват два варианта на пакета:
1) Symbolic Math Toolbox
• предлага над 100 функции на MATLAB, осигуряващи достъп до
ядрото на Maple;
• осигурява достъп до пакета Linear Algebra на Maple.
2) Extended Symbolic Math Toolbox
Разширеният пакет има и следните допълнителни възможности:
• достъп до всички неграфични пакети на Maple;
• възможност за използване на програмния език на Maple;
• достъп до потребителски функции и процедури на Maple.
Нито един от двата пакета не осигурява достъп до графичните
функции на Maple. Това обаче не може да се смята за недостатък, тъй
като MATLAB значително превъзхожда Maple по качество и богатство
на графичните функции. Силата на Maple е в символните преобразу­
вания и MATLAB ни предоставя чудесната възможност да се въз­
ползваме от нея. При това не е необходимо да инсталираме Maple на
компютъра си.

130
Глава 3. Символни преобразувания - Symbolic Math Toolbox

Важно! При ползване на командата help трябва да имате предвид,


че вследствие на обектно ориентираната насоченост на MATLAB е въз­
можно да съществуват няколко различни функции с едно и също име
(overloading), но разположени в различни директории. При повикване
системата определя коя от функциите да използва според броя и типа
на аргументите. Обикновено едната функция е за числени пресмятания,
а другата за символни. Ако искате информация за символния вариант,
трябва да въведете sym/ пред името на функцията!
Пример:
» help d iff % информация за числения вариант на функцията d iff
» help sym/diff % информация за символния вариант на d iff
Списък на всички команди от Symbolic Math Toolbox можете да
получите с командата help symbolic .
3.1. Дефиниране на символни променливи и изрази
Символните променливи и функции представляват обекти от класа
sym object за разлика от числените променливи, които са от класа
double array.
Една променлива или израз може да бъдат дефинирани като
символни с помощта на функцията sym:
х = sym(’x’);
a = sym(’alpha’);
rho = sym(’(l + sqrt(5)) / 2');
eq = sym(’a*xA2 + b*x + c’);
Важно! Обърнете внимание, че в последния случай не се създават
символни променливи, съответстващи на променливите а, Ь, с и х в
дефинирания символен израз eq! Ако възнамеряваме да извършваме
над eq символните операции интегриране, диференциране, субституции
и др., трябва предварително да обявим а, Ь, с и х като символни про­
менливи:
а = sym(’a’); b = sym(’b’); с = sym(’c’); х = sym(’x’);
Функцията syms ни дава възможност да направим това декларира­
не много по-компактно
syms a b с х % разделители - интервали, а не запетаи !
По подразбиране това са реални променливи - тип real. Комплексните
променливи трябва да се обявяват явно:
syms zl z2 z3 unreal
или zl = sym(’z r , ’unreal’); z2 = (fz2f,’unreal’); ...
C помощта на командата sym можем да трансформираме една
числена матрица в символна:
А = hi lb (3)

131
MATLAB. Част 1

A =
1. . 0 0 0 0 0., 5 0 0 0 0.3333
0 . 5000 0 ., 3 3 3 3 0.2500
0. . 3 3 3 3 0., 2 5 0 0 0.2000
В = sym (А)
в =
[ 1,, 1/2, 1/3]1
[ 1/2,. 1/3, 1/4]1
[ 1/3,. 1/4, 1/5]1

Обърнете внимание, че в символната матрица В всички числа се


представят като рационални дроби (отношения на цели числа), а всеки
ред се загражда с квадратни скоби! Извеждането е плътно вляво.
Въпреки че функцията sym изглежда доста тромаво при дефини­
ране на единични символни променливи, тя е по-универсална от syms,
защото може да се използва за дефиниране на цели символни изрази,
матрици и др.
Абстрактна функция. Едно интересно приложение на функцията
sym е създаването на т. нар. абстрактна функция:
f = sym ('f (х) ') % дефиниране на абстрактната функция f(x)
f =
f (х)
След дефинирането f има поведение на някаква неопределена
функция, която може да бъде обработвана от командите на пакета. Мо­
жем например да дефинираме оператор df, който да пресмята отноше­
нието на нарастването на функцията към нарастването h на аргумента:
syms х h
df = (subs(f,x,x+h)-f )/h
df =
(f(x+h)-f(x))/h
Това приложение на sym се оказва полезно при пресмятане на
преобразуванията на Лаплас и на Фурие и при Z-трансформации.
Примери:
syms х a b % деклариране на символни променливи
% Създаване на символен израз
f = (sin(x)+а)А2*(cos(х)+b)A2/sqrt(abs(a+b))
f =
(sin(х)+а)А2 * (cos(х)+b)A2/abs(a+b)А (1/2)
pretty (f) % извеждане на израза в по-четлив вид
2 2
(sin (х) + a) (cos (х) + b)

1/2
I а + b I

132
Глава 3. Символни преобразувания - Symbolic Math Toolbox

Обикновените аритметични оператори позволяват да се създават нови


символни изрази:
syms у
g = (exp(-у)+1)/exp(у)
я =
(exp(-у)+1)/e x p (у)
h = f*g
h =
(sin (x)+a)Л2* (cos(x)+b)A2/abs(a+b)Л (1/2)*(exp(-y)+1)
/exp(y)
pretty(h)
2 2
(sin(x) + a) (cos(x) + b) (exp(-y) + 1)

1/2
I a + b | exp(y)
Важно! Примерите показват, че не всички символни променливи
се нуждаят от предварително деклариране. Когато присвояваме на да­
дена променлива като стойност определен символен израз, системата
автоматично приема тази променлива за символна. Такива променливи
стоят в лявата част на оператор за присвояване - в разгледаните при­
мери това са променливите f, g, h.
П рим ер:
Създаване на символна матрица
syms а Ь с
А = [a b с; b с a; c a b ]
А =
[ а, Ь, с]
[ Ь, с, а]
[ с, а, Ь]
sum(A(l,г:)) == sum(А(:,2)) % логически тест за равенство
ans =
1 % истина
Подразбираща се символна променлива. Понятието подразби­
раща се символна променлива (Default Symbolic Variable) е от особена
важност за функциите, свързани с решаване на задачи от математичес­
кия анализ, опростяване на изрази, решаване на уравнения и интеграл­
ни преобразувания. Тези функции, например функцията за намиране на
производна diff, трябва да знаят по коя променлива на подадения като
аргумент израз следва да се извърши съответното действие. MATLAB
предлага на потребителя два варианта:

- 133-
MATLAB. Част 1

1) Променливата се указва явно - чрез допълнителен аргумент.


Това решение е за предпочитане, защото изключва вероятността от
грешки при неопитни потребители, а програмата става по- четлива.
2) Променливата не се указва явно, а се оставя системата да я
определи сама на основата на следното правило:
Подразбиращата се символна променлива в един символен израз
е тази, която е най-близко до буквата х в английската азбука. Ако в
израза има две букви, еднакво отдалечени от х, за подразбираща се
променлива се приема тази, чието буквено означение е по-назад в
азбуката.
MATLAB предлага специална функция flndsym, която определя
подразбиращата се променлива в даден израз:
firidsym(expr, п) - определя п на брой символни променливи в ехрг;
findsym(expr) - връща списък на всички символни променливи в
израза ехрг.
Пример:
syms a b t
g = sin(a*t+b);
findsym(g,1)
ans =
t
findsym(g,2)
ans =
t,b
flndsym(g)
ans =
a, b, t

3. 2. Аритметика c променлива точност - VPA


B Symbolic Math Toolbox има три типа аритметични операции:
• Numeric - аритметика с плаваща точка;
• Rational - точната аритметика на Maple; числата се представят
като рационални дроби;
• VPA - аритметиката с променлива точност (Variable Precision
Arithmetic) на Maple.
Примери:
% Numeric
format long % или short
1/2 + 1/3
ans =
0.83333333333333

- 1 34 -
Глава 3. Символни преобразувания - Symbolic Math Toolbox

% Symbolic (Rational)
sym(l/2) + 1/3 % Второто събираемо автоматично се
ans = % преобразува в символна величина
5/6
% VPA - Variable Precision Arithmetic
vpa (1/2+1/3) % по подразбиране с 32 цифри
ans =
.83333333333333333333333333333333
vpa(1/2+1/3,20) % с20 цифри
ans =
.83333333333333333333
Броят на подразбиращите се цифри може да бъде променен с
помощта на командата digits(n):
d i g i t s (5 0 );
vpa(1/2+1/3)
ans =
.83333333333333333333333333333333333333333333333333
Характеристика на трите метода
Приложимостта на трите типа операции в различни случаи зависи
от техните характерни особености, които могат да бъдат обобщени така:
• Пресмятанията с числа с плаваща точка (Floating Point) се из­
вършват най-бързо, заемат най-малко памет, но резултатите са
неточни.
• Пресмятанията с числа в символна форма (Rational или Symbolic)
водят до намаляване на бързодействието, изискват повече памет,
но в замяна на това осигуряват абсолютна точност.
• VPA заема междинно място между двата метода. Точността на
пресмятанията (а следователно и бързодействието, и обемът на
използваната памет) се контролира чрез глобалния параметър
digits - брой значещи цифри. По подразбиране този параметър
има стойност 32.
Рационалната аритметика се активира чрез създаване на сим­
волни променливи с помощта на функцията sym. Например матрицата А
с елементи от тип double precision се превръща в символна матрица S с
помощта на командата
S = sym(A);
За използване на аритметиката с променлива точност (УРА) се
създават променливи с помощта на функцията vpa:
V = vpa(S) ; % броят на цифрите се определя от стойността на digits
V = vpa(A, n); % броят на цифрите се задава явно с цялото число п
Важцр! Трябва да се помни, че изходният аргумент на функцията
vpa е символна величина! За превръщането на едно рационално число

- 135-
MATLAB. Част 1

или vpa число в обикновено число с плаваща точка (floating point или
double precision) се използва функцията double:
double(sym(A));
double(vpa(A));
Примери:
% Грешките от закръгленията при действия с обикновени
% числа се избягват при използване на рационални числа
format long
1.0е+10 + 1.0е-10 % грешка от закръгленията
ans =
1 .OOOOOOOOOOOOOOOe+OlO
sym ('1.0е+10 ')+sym ('1.0е-10 ') % абсолютна точност
ans =
lOOOOOOdOOO.00000000010
% Генериране на vpa-матрица и символна матрица и трансформирането им в
% обикновена
F = [exp(l) sqrt(2);log(3) rand]
F =
2.71828182845905 1.41421356237310
1.09861228866811 0.23113851357429
V = vpa(F,25)
V =
[ 2.718281828459045534884808, 1.4142135623730 9504 8801689]
[ 1.098612288668109560063613, .2311385135742878293996228]
S = sym(F)
S =
[ 6121026514868074*2A (-51), sqrt(2)]
[ 4947709893870346*2A (-52), 8327642588833064*2A (-55)]
double (V) == double (S) % логическа проверка за равенство
ans =
1 1
1 1
double (S)
ans =
2.71828182845905 1.41421356237310
1.09861228866811 0.23113851357429
Забележка. При символно представяне на числени стойности с по­
мощта на командата sym могат да се задават някои опции:
rho = (1+sqrt(5))/2
rho =
1.6180
sym (rho, 'r ') % рационална форма - подразбираща се!

136
Глава 3. Символни преобразувания - Symbolic Math Toolbox

ans =
"'2 8 697 72 6880 682 4 *2 A (-52)
sym (rho, ’d ’) % десетично представяне c 32 цифри
ans =
1.6180339887498949025257388711907
digits (9) % промяна на подразбиращия се брой на цифрите
sym (rho, ’d')
ans =
1.61803399
3. 3. О простяване и преобразуване на символни изрази
MATLAB предлага три групи функции за елементарни операции
над символни изрази:
• операции над полиноми - collect, horner, expand, factor;
• опростявания на изрази - simplify, simple;
• субституции - subexpr, subs.
3. 3 .1 . Операции над полиноми
collect | - групиране на събираемите по степените на дадена символна
променлива:
collect(symexpr) - групиране по подразбиращата се променлива;
collect(symexpr, var) - групиране по степените на променливата var.
Пример:
р = sym('(х+а)А4+(х-1)А3-(х-а)А2-а*х+х-3’);
pc = collect (р) % групиране по подразбиращата се променлива х
рс =
хЛ4+(1+4*а)*хЛ3+(-4+6*аЛ2 )*хЛ2+(4+а+4*аЛ3)*х+аЛ4-4-аЛ2
pea = collect (р,'а ') % групиране по явно зададената променлива а
рса =
ал4+ 4*х*аЛ3+ (-1 + 6*хА2) *аА2+ (4*хЛ3+х) *а+хА4+ (х-1) Л3-хЛ2-3+х
horner | - представяне на даден полином във формата на Хорнер.
Пример:
syms х
horner(хА3-6*хА2+11*х-6)
ans =
-6+(11+(-6+х)*х)*х
expand | - развиване на даден израз чрез разкриване на скобите - дей­
ствие, обратно на factor и collect;
Примери:
syms х у
expand((х-1)* (х-2)* (х-3))

137
MATLAB. Част 1

ans =
xA3-6*xA2+ll*x-6
expand(sin(x+y))
ans =
sin(x)*cos(y)+cos(x)*sin(y)
Функцията expand оперира и над изрази, съдържащи тригонометрични,
експоненциални и логаритмични функции:
fe = expand(sin(acos(3*x))+exp(2*log(x)))
fe =
(l-9*xA2)A (1/2)+xA2
| factor | - разлагане на израза във вид на множители - действие, обрат­
но на expand.
Пример:
syms х
pf = factor (4*хА5+52*хА4+215*хА3+275*хА2-54*х-72)
pf =
( 2 * х + 1 ) * ( 2 * х - 1 ) * ( х + б ) * (х + 4 ) * (х+3)
3. 3. 2. Опростяване на символни изрази
1 simplify ] - опростява символни изрази, включващи суми, степени, ко­
рени, тригонометрични, експоненциални и логаритмични
функции, функции на Бесел, хипергеометрични функции и
gamma-функция.
Пример:
syms х у
simplify(exp(х)*ехр(у)+cos(х)A2-sin(х)А2)
ans =
exp(x+y)+2*cos(x)A2-l
simple \ - пробва всички възможни преобразувания, като връща най-
компактния резултат, т. е. израза с най-малък брой символи:
simple(expr) - извежда всички междинни резултати;
f = simple(expr) - връща само крайния резултат;
[f, how] = simple(expr) - освен най-компактния израз f връща и метода
how, с който е бил получен.
Пример:
[f,kak] = simple(exp(х)*ехр(у)+cos(х)A2-sin(х)А2)
f =
exp(x+y)+cos(2*х)
kak =
combine

138
Глава 3. Символни преобразувания - Symbolic Math Toolbox

В някои случаи е възможно след второ прилагане на функцията


simple да се получи още по-компактен от предишния резултат:
syms а
f = (1/аА3+6/аА2+12/а+8)А (1/3);
£ = simple(f)
f =
(2*а+1)/а
f = simple(f)
f =
2 + 1/a
Функцията simple е особено ефективна при опростяване на изрази
с тригонометрични функции:
syms х
£ =simple(cos(3*acos(x)))
f =
4 *xA3-3*x
3. 3. 3. Субституции
I subexpr | - операции над повтарящи се изрази (subexpressions) в анали­
тичните решения на алгебрични уравнения.
Пример:
syms а х
koreni = solve(хА3+а*х+1)
koreni =
% Първи корен
[1/6* (-108 + 12*(12*аА3+ 81)А (1/2))А (1/3)-2*а/
(-108 + 12* (12*аА3+ 81) А (1/2))А (1/3)]
% Втори корен
[-1/12* (-108 + 12*(12*аА3+81)А (1/2))А (1/3)+а/
(-108 + 12* (12*аА3+81)А (1/2))А (1/3)+l/2*i*3A (1/2)*(1/6*
(-108 + 12* (12*аА3+ 81)А (1/2))А (1/3)+2*а/
(-108 + 12* (12*аА3+ 81)А (1/2))А (1/3))]
% Трети корен
[ -1/12* (-108 + 12*(12*аА3+ 81)А (1/2))А (1/3)+а/
(-108 + 12* (12*аЛ3+ 81)л (1/2))А (1/3)-1/2*i*3A (1/2) *(1/6*
(-108 + 12* (12*аА3+ 81)л (1/2))А (1/3)+2*а/
(-108 + 12* (12*аА3+ 81)А (1/2))А (1/3))]
Използваме командата pretty за по-нагледно извеждане на резултатите:
pretty(koreni)
[ 1/3 a ]
[ 1/6 %1 - 2 -------- ]
[ 1/3 ]
[ %1 ]
[ ]

139
MATLAB. Част 1

1/3 а 1/2 / 1/3 а \]


- 1/12 %1 + + 1/2 i 3 11/6 %1 + 2 1
И1
1/3 1 1/3| ]
%1 \ %1 /1
J
1/3 а 1/2 / 1/3 а \]
- 1/12 %1 + - 1/2 i 3 11/6 %1 +2 11
1j
1/3 1 1/31 ]
%1 \ %1 /]
3 1/2
%1 := -108 + 12 (12 a + 81)
Както виждате, повтарящият се в трите корена израз
3 1/2
-108 + 12 (12 а + 81)
е заменен със символа "%1", а най-отдолу се извежда неговата
стойност. В някои задачи може да има няколко повтарящи се израза %1,
%2, ... . Върху тях можем да оперираме с функцията subexpr. Тя ни дава
възможност:
1) Да запишем повтарящите се изрази във вектора стълб с подраз­
биращо се име sigma.
2) Да заменим подизразите в корените със sigma или неговите
елементи.
Продължение на примера:
koreni = subexpr(koreni)
sigma =
-108 + 12* (12*aA3+ 81)A (1/2)
koreni =
[l/6*sigmaA (1/3)-2*a/sigmaA (1/3)]
[-1/12*sigmaA (1/3)+a/sigmaA (l/3)+l/2*i*3A (l/2)*
(l/6*sigmaA (1/3)+2*a/sigmaA (1/3))]
[ -l/12*sigmaA (1/3)+a/sigmaA (1/3)-
l/2*i*3A (1/2)*(1/6*sigmaA (1/3)+2*a/sigmaA (1/3))]
Забележка. Вместо подразбиращото се име sigma можем да
зададем явно друго име, например S, с командата
koreni = subexpr(koreni,'S ');
S =
-108 + 12* (12*aA3+ 81)A (1/2)
| subs | - заместване на променливи и подизрази в даден символен израз:
R = subs(S) - замества всички променливи в символния израз S със
стойностите им, получени от извикващата програма-функция или
от работното пространство на MATLAB, и присвоява резултата на
променливата R;

140
,£5*бразувания - Symbolic Math Toolbox
Глава 3. Символни пр$!
D . /с ,, v в израза S низа old с низа new. За съв-
R = subs(S, old, new) - замест^___ к и д х . дп .
местимост със старите ^ рсии на MATLAB 4 х' ако след изпълне‘
ние на командата израза r S не се лР°мени- операцията се повтаря
със смяна на п о с л е д о ^ лността на аргументите old и new. В
oriwlI - мп плотпп^ние е нежелателно, добавяме четвърти
случаи че това повтори г
аргумент:
R = subs(S* O ld' new’ 0)'
Ако аргументите old и представляват масиви от клетки съ­
държащи символни изрази (ЦИ30ве)- тогава все™ низ от масива oId се
замества със съответния низ масива new.
Командата subs е една най-важните команди в Symbolic Math
Toolbox. За съжаление тя винаги работи' както тРябва' В тахива
ов ппПпплп,1Т
случаи за оил «
предпочитане е д^ използвате аналогичната команда subs в
Maple. Тя никога няма да ви г1 ^ ^ веде-
Примери:
Понякога функцията subs о б Г ^ 888 въвеждането на обемисти изрази,
съдържащи повтарящи се п о £ * ^ р83" ' f
f = sym(4aA2+bA2)/(aA2^p , '7 ' * . .# • , w , 4Ч,,4
f-subl(£ Л 1a ■,•Ъ ■}, Г <•** (х) +вХр ("х)» ' (sin <х) +cos (х>> >>
f, (ехо(х) +ехо(-х) )-2+(si^ <Х) +COS (х) ] '~2) 1 ( (ехр(х) +ехр(-х) )л2
, , , Р , ..л_. ^ <х)+ехр(-х))л4 / (sin(х)+cos (х))л4
-(sm(x)+cos(x))A2) + (exr
п/ л л нейната числена стойност води до
% Замяната на една променлива ^ а) _ ф на тази променлива:
% пресмятането на израза (форг^Т
f = sym( 'exp(xA3+2*xA2+#*+
q = subs(f,'х ',1.1)
q =
1 .8977e+004
n/ .. ^говото символно представяне, след
% Числото може да се замени с И ^.а на израза с произвоЛно висока
% което да се пресметне стоинос/1
% точност с помощта на функций^1 ^
q = subs(f,'х','1.1')
q = 1) +5)
e x p ((1.1)A3+2*(1.1)л2+ ( Ъ
vpa(q,50)

1 8 97 ;.

32263918380228952^844472139578548863931041740
. {\& се комбинира с функцията double за
Командата subs може £ eH израз:
числено пресмятане на един
syms t
М = (l-tA2)*ехр(-l/2*tA^ ^ ;
Р = (l-tA2)*sech(t);
-141 -
MATLAB. Част 1

% Построяваме графиките на двете функции


Т = -6: 0.05 :6; % Вектор с абсцисите
МТ = double (subs (М, t,T)) ; % Пресмятане на ординатите
РТ = double (subs (Р,t,Т)) ; % на двете функции
plot(T,MT,'b*,Т,РТ,'г-. ')
legend(’М ' Р '), grid on, xlabel('t')

Използването на функцията subs с низове значително облекчава


решаването на задачи, включващи преобразувания на Лаплас и на Фу-
рие и Z-трансформации.
3. 4. Решаване на задачи от линейната алгебра
Symbolic Math Toolbox може да изпълнява операции над символ­
ни вектори и матрици, т. е. над масиви, чиито елементи са символни
променливи или цели изрази. Всички функции, изпълняващи числени
операции над вектори и матрици, имат съответните еквивалентни функ­
ции за извършване на символни операции, при това под същите имена.
Тъй като MATLAB е обектно ориентирана система, в зависимост от типа
на подадените аргументи - double или symbolic, системата се обръща
към съответната числена или символна функция. Макар че имената на
функциите по двойки са еднакви, това са напълно различни програми
(m-файлове), които се съхраняват в различни директории.
Резултатът от извършените операции автоматично приема съот­
ветния тип (double или symbolic), без да е необходимо предварителното
му обявяване. Такава е философията на обектно ориентираното програ­
миране.

142
Глава 3. Символни преобразувания - Symbolic Math Toolbox

Тук няма да описваме детайлно всяка функция, а ще разгледаме


някои примери:
Примери:
% Пресмятане на детерминанта
А = sym('[a b c;d е f ;g h i] ')
A =
[ a, b, c]
[ d, e, f]
[ g, h, i]
D = det(A)
D =
i *a*e-a*f*h-i*d*b+d*c*h+g*b*f-g*c*e
% Пресмятане на обратната матрица
AI = inv(A) ;
pretty(AI)
[ - i e + f h i b - c h b f - c e ]
[ ----------------- ---------------- ------------------- ]
[ %1 %1 %1 ]
[ ]
[ - i d + f g i a - c g a f - c d ]
[ --------------------- ------------------- ---------------- ]
[ %1 %1 %1 ]
[ ]
[ -d h + e g a h - b g a e - b d ]
[ ----------------- ---------------- ------------------- ]
[ %1 %1 %1 ]

%1 : = - i a e + a f h + i d b - d c h - g b f + g c e
% Пресмятане на характеристичния полином
рА = poly (A) ; % по подразбиране променливата на полинома е х
pretty (рА)
3 2 2 2
х - ix - ех + i x e - x f h - a x + i a x + a e x
- i a e + a f h - d b x + i d b - d c h - g b f - g c x +
ge e
Ако се опитаме с помощта на командата collect да извършим групиране
в полинома по степените на х, желаното действие няма да бъде изпъл­
нено! За да получим очаквания резултат е необходимо преди дефини­
рането на матрицата А да обявим всичките й елементи като символни:
symsa b c d e f g h i x
A = [a b c;d e f;g h i];
pA = collect(poly(A));
pretty (pA)
- 1 43 -
MATLAB. Част 1

3 2
x + (-a - i - е) x + (-c g + i a + i e - b d + a e -
fh) x - g b f + a f h + g c e + i d b - i a e - d c h
Името на променливата на характеристичния полином може да се
зададе и явно, например lambda, с командата
рА = poly(A,’lambda1);
% Аналитично решаване на линейна система уравнения
syms Ь1 Ь2 ЪЗ
Ь = [Ь1;Ь2;ЬЗ];
х = А\Ь
х =
[ - (bl*f*h-i*bl*e-b*b3*f+i*b*b2-c*h*b2+c*b3*e)/
(-a* f*h+g*b*f-g*c*e+d*c*h+i*a*e-i*d*b)]
[ (-a*b3*f+i*b2*a+bl*g*f-i*d*bl-b2*g*c+c*d*b3)/
(-a*f*h+g*b*f-g*c*e+d*c*h+i*a*e-i*d*b)]
[ (b*g*b2+h*d*bl-a*h*b2+b3*a*e-b3*b*d-g*bl*e)/
(-a* f*h+g*b*f-g*c*e+d*c*h+i*a*e-i*d*b)]
% Пресмятане на собствени вектори и собствени стойности
syms a b с
А = [a b c;b с а;с а Ь];
[v,E] = eig(A)
v = % собствени вектори
[ - (а+(bA2-b*a-c*b-c*a+aA2+cA2)А (1/2)-Ь)/ (а-с) ,
- (а-(bA2-b*a-c*b-c*a+aA2+cA2)А (1/2)-Ь)/ (а-с), 1]
[ - (Ь-(ЬА2-Ь*а-с*Ь-с*а+аЛ2+сЛ2 )л (1/2)-с)/ (а-с),
- (b+ (ЬА2-Ь*а-с*Ь-с*а+ал2+сА2)А (1/2)-с)/ (а-с), 1]
[ 1 1 1 ]
Е = % собствени стойности
[ (Ьл2-Ь*а-с*Ь-с*а+аА2 +сА2)А (1/2) , 0 , 0 ]
[ 0 , - (bA2-b*a-c*b-c*a+aA2+cA2)л (1/2), 0 ]
[ 0 , 0 , b+а+с ]
% Замяна на твърде дългия израз
% (bA2-b*a-c*b-c*a+aA2+cA2 )А (1/2)
% със символа ’S’навсякъде във v и Е
v = subexpr (v, 'S ')
S =

(bA2-b*a-c*b-c*a+aA2+cA2)A (1/2)
v =
[ - (a+S-b)/ ( a - c ) , - ( a - S - b ) / ( a - c ) , 1]
[ - ( b - S - c ) / ( a - c ) , - ( b+S- c) / ( a - c ) , 1]
[ 1 , 1 , 1 ]
E = subexpr(E,'S')
S =

(bA2-b*a-c*b-c*a+aA2+cA2)A (1/2)

144
Глава 3. Символни преобразувания - Symbolic Math Toolbox

S, о, 0
0, -S, 0
0, 0, Ь+а + с
Ако желаем да извършим пресмятания с числени матрици с абсо­
лютна точност, можем с функцията sym да ги превърнем в символни и
след това да приложим нужните функции от линейната алгебра:
Н = hilb (3) ; % матрица на Хилберт
Н = sym(H) ; % превръщането й в символна
hi = inv(H) % точната обратна матрица
hi =
[ 9, -36, 30]
[ -36, 192, -180]
[ 30, -180, 180]
dh = det(H) % точната детерминанта
dh =
1/2160
b = [111]';
x = H\b % решение на системата Н х = b
х =
[ 3]
[ -24]
[ 30]
Аналогични пресмятания можем да извършим и като ползваме
аритметиката с променлива точност VPA:
digits(20)
V = vpa(hilb(3));
det (V)
ans =
.4629629629629629625e-3
x = V\b
x =
[ 3.0000000000000000041]
[ -24.000000000000000021]
[ 30.000000000000000019]
3
. 5
.Ре
ш а
ван
еназадачиотматематическияанализ
В Symbolic Math Toolbox съществуват следните функции, решава­
щи основните задачи от анализа:
• lim it - пресмятане на граници;
• d iff - пресмятане на производни;
• jacobian - матрица на Якоби;
• int - пресмятане на интеграли;

10 145
MATLAB. Част 1

• symsum - пресмятане на суми на редове;


• taylor - разлагане в ред на Тейлор;
• ezplot - построяване на графики на функции.
Променливата, по която се извършва съответното действие, може
да се задава явно. Ако не се зададе явно, системата използва
подразбиращата се символна променлива - тази, която е най-близко до
х (вж. края на т. 3. 1).
I lim it | - пресмята граница на функция на една променлива:
lim it( f ) - границата на израза f, когато подразбиращата се променлива
клони към нула;
lim it(f, а) - границата на израза f, когато подразбиращата се променли­
ва клони към а;
lim it(f, х, а) - границата на израза f, когато явно зададената променлива
х клони към а;
lim it(f, х, a, fleftf) - границата на f, когато х клони към а отляво;
lim it(f, х, a, ’right1) - границата на f, когато х клони към а отдясно.
Примери:
syms h n х
dc = limit ((cos (x+h) -cos (x))/h,h, 0) % производната на cos(x)
dc =
-sin(x)
limit((1+x/n)An /П,inf)
ans =
exp(x)
| d iff | - пресмята първата производна на дадена функция спрямо
определена променлива:
d if f ( f ) -първа производна на f спрямо подразбиращата се промен­
лива;
diff(f, х) - първа производна на f спрямо явно зададената променлива х;
diff(f, п) - n-та производна на f спрямо подразбиращата се променлива;
тук п е цяло число;
diff(f, х, п) - n-та производна на f спрямо явно зададената променлива х.
Забележка. Очевидно чрез явно задаване на променливите можем
да пресмятаме частните производни на функция на няколко променливи.
Примери:
syms t a k alpha
f = exp(-a*t)*sin(k*t+alpha);
dif f (f) % подразбиращата се променлива e t
ans =
- a*exp ( - a * t ) * s i n ( k * t + a l p h a ) + e x p ( - a * t ) * c o s ( k * t + a l p h a ) * k

146
Глава 3. Символни преобразувания - Symbolic Math Toolbox

diff(f,a) % диференциране по явно зададената променлива a


ans =
-t*exp(-a*t)*sin(k*t+alpha)
diff (exp(-k*xA2) ,x,3) % трета производна спрямо x
ans =
12*к/'2*х*ехр(-к*хЛ2) - 8*кл3*хл3*ехр (-к*хл2)
Функцията d iff оперира и с функциите на Бесел:
syms nu z
bj = besselj( п и , z );
dbj = diff(bj)
dbj =
-besselj(nu+1,z)+nu/z*besselj(nu, z)
jacobian | - пресмята матрицата Якобиан на дадена трансформация.
Под Якобиан на трансформацията
* = f\( u , v , w )

y = f 2(u>v’ w )
z = f)(u ,v ,w ) ,
се разбира матрицата с частните производни

ди dv dw
J =
ди dv dw
dj± d j\ d j\
ди dv dw
Пресмятането на матрицата Якобиан става с помощта на командата
J = jacobian([x; у; z|,[u, v, w])
Обърнете внимание, че променливите х, у, z се подават като вектор-
стълб, a u, v, w - като вектор-ред!
Пример:
Преходът от сферични към декартови координати се извършва с
помощта на формулите: х _ >-cos Acos#?
у = rc o s A s in ^
z = rsin A
Да се пресметне матрицата Якобиан на тази трансформация,
syms х у z r 1 f
х = r*cos(1)*cos(f);

147
MATLAB. Част 1

у = r*cos(1)*sin(f);
z = r*sin(1);
J = jacobian([x;y;z],[r,l,f])
J =

[ c o s (1)*cos(f), -r*sin(1)*cos(f), -r*cos(1)*sin(f)]


[ cos (1)*sin(f), -r*sin(1)*sin(f), r*cos(1)*cos(f)]
[ sin (1), r*cos (1), 0]
Iin t \ - пресмятане на неопределен или определен интеграл от функция
по дадена променлива:
int( f ) - неопределен интеграл от f по подразбиращата се променлива;
int(f, х) - неопределен интеграл от f по явно зададената променлива х;
int(f, а, Ь) - определен интеграл от f по подразбиращата се променлива
в границите от а до Ь;
int(f, х, а, Ь) - определен интеграл от f по явно зададената променлива х
в границите от а до Ь.
Примери:
syros х
f = sym('хА3*ехр (х) ') ;
I = int (f) ; % интегриране по подразбиращата се променлива х
pretty(I)
3 2
х ехр(х) - 3 х ехр(х) + 6 х ехр(х) - 6 ехр(х)
dif f (I ,х) % проверка
ans =
хА3*ехр (х)
f = sym('exp(sin(x)A2)*cos(x)');
I = int(f,x) ; % интегриране по явно зададена променлива x
pretty(I)
1/2 - 1/2 i pi erf(i sin (x))
Обърнете внимание на специалната функция erf в горния резултат !
syms х а Ь
I = int('(хА3+1)/ (х-1)',х,а,Ь);
pretty(I)
3 2 3 2
1/3 b + 1/2 b + b + 2 l og(b - 1) - 1/3 а - 1/2 а - а
- 2 log(a - 1)
Пресмятането на многократни интеграли става с последователно прила­
гане на функцията i n t .
Нека решим следния двоен интеграл:
d h
D = ^уъ\х\ xdxdy
syms a b c d x у

- 148 -
Глава 3. Символни преобразувания - Symbolic Math Toolbox

lx = i n t ( ' y * s i n ( x ) ' , x , a , b ) ;
D = in t(Ix ,y ,c ,d );
p r e tty ( D )
2 2
1/2 (-cos(b) + cos(a)) (d - c )
А сега да пресметнем интеграл от функцията на Бесел besselj
syms z
in t( b e s s e lj(1,z ))
ans =
-besselj(0,z)
За числено пресмятане на един определен интеграл се използва функ­
цията double
В01 = i n t ( b e s s e l j ( 1 , z ) , 0, 1)
B01 =
1/4*hypergeom([1],[2, 2],-1/4)
fo rm a t lo n g
B01 = double (B 01)
B01 =
0.23480231344203
Важно! В някои случаи интегрирането не може да бъде извърше­
но, ако предварително не се обяви типът (real, integer, ...) или знакът на
даден параметър - нещо характерно за ядрото на Maple.
Пример:
Да се пресметне интегралът

J = \ e~(kx)~dx
syms х k
f = exp (- (k*x) A2) ;
int(f,x,-inf,inf)
Definite integration: Can't determine if the integral is
convergent.Need to know the sign of — > kA2. Will now try
indefinite integration and then take limits.
Warning: Explicit integral could not be found.
> In C:\MATLAB6p5\toolbox\symbolic\0sym\int.m at line 58
ans =
int(exp(-kA2*xA2),x = -inf .. inf)
% Системата иска да знае знака на кЛ2, т.е.дали к е реално или не?
% Решение на проблема - обявяваме к за реално:
syms к real % следователно кЛ2 > 0!
int(f,х,-inf,inf)
ans =
signum(k)/k*piA (1/2)

- 149-
1

MATLAB. Част 1

Важно! Обърнете внимание, че сега к е един символен обект в


работното пространство на MATLAB и една реална променлива в ра­
ботното пространство на ядрото на Maple. Командата clear к ще изчисти
к само от работното пространство на MATLAB! За да премахнем фор­
малните свойства на к, т. е. за да я изчистим и от работното простран­
ство на Maple, трябва да подадем командата
» syms k unreal
| symsum | - извършва символно сумиране, т. е. пресмята сумата

± т
к=т
symsum(f(k), m, n) - сумирането се извършва по подразбиращата се
променлива к;
symsum(f(i), i, m, n) - сумирането се извършва по явно зададената про­
менлива i .
Пример:
syms к
S = symsum(1/кА2 ,1,inf)
S =
l/6*pi^2
Забележка. Ако в събираемите влиза факториел, той трябва да се
запише с помощта на функцията sym: sym('n!1) .
Пример:
syms k х
S = symsum((-1)Ak*xA (2*k+l)/sym('(2*k+l)!'),k,0,inf)
S =
sin(x)
| taylor 1- разлагане на функция f(x) в ред на Тейлор:
taylor( f) - разлагане на функцията f в ред на Тейлор в околността на
точката х = 0 (ред на Маклорен) с изключване на членовете от 6-а и
по-висока степен;
taylor(f, п) - като предната, но с изключване на членовете от n-та и
по-висока степен; аргументът п е цяло число;
taylor(f, п, а) - разлагане на функцията f в ред на Тейлор в околността
на точката х = а с изключване на членовете от n-та степен нагоре;
taylor(f, п, у, а) - като горното, но с явно указване на променливата у, по
която ще се извършва разлагането.
Забележка. Аргументът а, задаващ точката, около която се разлага
функцията, трябва да бъде число или променлива, на която е присвоена
предварително числена стойност.

150
Глава 3. Символни преобразувания - Symbolic Math Toolbox

рримери:
sy m s х; tf = taylor(1/(1+х))
tf =
]_х+хЛ2-хА3+хА4-хА5
x y; f = 1/(x+y); tf
sy m s = taylor(f,7,y)
tf =
1/х-1/хЛ2*у+1/хА3*уА2-1/хА4*уА3+1/хА5*уА4-
l/xA6*yA5+l/xA7*yA6
syms x; pretty(taylor(exp(x),4,x ,1/2))
2
exp (1/2) + exp (1/2) (x - 1/2) + 1/2 exp(l/2) (x - 1/2)
3
+ 1/6 exp (1/2) (x - 1/2)
ezplot | - облекчено начертаване на графиките на функции, задавани
като символни изрази (вж. т. 1.8. 1).
Пример:
Да се разложи функцията f = exp(x*sin(x)) в ред на Тейлор в окол­
ността на точката х = 2 с изключване на малките величини от 6-а степен
и нагоре (п = 6). За визуална оценка на точността да се построят графи­
ките на оригиналната функция и нейното разложение,
syms х
f = exp(x*sin(х)); tf = taylor(f,6,2);
xd = 1: 0.05 :3; % вектор c абсцисите на графиката
yd = double (subs (f ,x,xd)) ; % Заместваме в оригиналната функция f
% символната променлива х с вектора на абсцисите xd
ezplot (tf,[1 3]); hold on, grid on % Графика на разложението
plot (xd,yd, 'r- .') % Графика на оригиналната функция

151
MATLAB. Част 1

От графиките се вижда, че редът на Тейлор осигурява висока точност в


интервала 1,5 < х < 2,5, включващ точката х = 2, за която е извършено
разлагането.
Забележка. С функциите limit, d iff и int може да се извършват
поелементни операции над вектори и матрици, чиито елементи са сим­
волни изрази:
syms w х
А = [sin(w*x) cos(w*x);sinh(w*x) cosh(w*x)]
A =
[ sin(w*x) , cos(w*x) ]
[ sinh(w*x), cosh(w*x)]
limit(limit(A,x,pi),w,2)
ans =
[ 0, 1]
[ (l/2*exp(4*pi)-1/2)*exp(-2*pi),
(l/2*exp(4*pi)+1/2)*exp(-2*pi)]
double(ans)
ans =
0 1.0000
267.7449 267.7468
diff (A)
ans =
[ cos(w*x)*w, -sin(w*x)*w]
[ cosh(w*x)*w, sinh(w*x)*w]
int (A)
ans =
[ -l/w*cos(w*x), sin(w*x)/w]
[ l/w*cosh(w*x), sinh(w*x)/w]

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


интересни инструмента:
• funtool - предлага удобен графичен интерфейс за преобразува­
не и изследване на функции на една променлива, построяване
на графиките им, диференциране, интегриране и др.;
• taylortool - графичен интерфейс за разлагане на функция в ред
на Тейлор и автоматично начертаване графиките на оригинална­
та функция и нейното разложение.
Информация за тях можете да получите с командата help или doc.
Стартирането им става, като наберете имената им на командния ред:
» funtool
» taylortool

- 1 52 -
Глава 3. Символни преобразувания - Symbolic Math Toolbox

3. 6. Реш аване на алгебрични и трансцендентни уравнения


MATLAB ни предоставя функцията solve, която решава аналитич­
но или числено дадено трансцендентно уравнение или система трансен-
дентни уравнения. Численото решение се извършва от системата чрез
УРА аритметиката, когато не може да бъде намерено аналитичното.
Това обаче не означава, че функцията solve може да замени функцията
fzero, защото solve намира само едно от многото числени решения. При
това може да се окаже това решение, което не ни е нужно. Алгебрични
уравнения до четвърта степен включително се решават точно.
3. 6.1. Решаване на едно уравнение
solve( f ) - решава уравнението f = 0 спрямо подразбиращата се
символна променлива. Аргументът f е символен израз.
solve(f, х) - решава уравнението f = 0 спрямо явно зададената
символна променлива х.
Забележка. Обикновено уравнението f = 0 се представя само с
лявата си част f. Ако уравнението е от вида f(x) = g(x), то или се пре­
образува във вида f(x) - g(x) = 0, с което се свежда до първия случай,
или пък се загражда в апострофи:
solve(’f(x) = g(x)')
Примери:
syms a b с х
f = a*xA2+b*x+c;
koreni = solve (f) % решаване спрямо подразбиращата се променлива х
koreni =
[ 1/2/а*(-Ь+(ЬА2-4*а*с)А (1/2)) ]
[ 1/2/а*(-Ь-(ЬА2-4*а*с)А (1/2))]
b = solve (f,b) % решаване спрямо явно зададената променлива b
b =
- (а*хА2+с)/х
sol = solve('cos(2*х)+sin(х)=1')
sol =
[ 0]
( pi]
[ l/6*pi]
[ 5/6*pi]
% Решаване на алгебрично уравнение от трета степен
syms х
f = хА3-хА2-5*х+1;
r = solve(f,х);
pretty(r)

153
MATLAB. Част 1

1/3 %2 + 16/3 %1 + 1/3

1/2
- 1/6 %2 -- 8/3 %1 + 1/3 + 1/2 i 3 (1/3 %2 -- 16/3 % 1)

1/2
- 1/6 %2 -- 8/3 %1 + 1/3 - 1/2 i 3 (1/3 %2 -- 16/3 %1)

1
%1
1/2 1/3
(10 + 6 i 111 )

1/2 1/3
%2 := (10 + 6 i 111 )
% Проверка на резултатите
simplify(subs(f,x,r))
ans =
[ 0]
[ 0]
[ 0]
3. 6. 2. Решаване на система уравнения
Функцията solve може да решава и система от две и повече урав­
нения:
solve(fl, f2) - решава системата уравнения f l = 0, £2 = 0 спрямо
подразбиращите се символни променливи.
solve(fl, f2, х, у) - решава системата уравнения f l = 0, f2 = 0 спря­
мо явно указаните символни променливи х, у.
Има два начина за адресиране на резултатите от пресмятанията:
1) Вектор с имена на променливите
[х, у] = solve(fl, f2, х, у).
2) Изходният аргумент е запис S от полета, в които се съхраняват
съответните корени. Имената на полетата съвпадат с имената на неиз­
вестните:
S = solve(fl, f2, х, у).
В първото поле на записа S.x се съхранява вектор с корените за промен­
ливата х. Във второто поле на записа S.y се съхранява вектор с корени­
те за променливата у.
За предпочитане е вторият метод. При използването му трябва да
имаме предвид следното:
• Системата автоматично присвоява имена на полетата.
• Името на записа е произволно.

154
Глава 3. Символни преобразувания - Symbolic Math Toolbox

• При нелинейни системи уравнения е възможно да се получат


няколко решения. В този случай всяко поле представлява век­
тор, чиито елементи са корените за съответната променлива.
• За извеждане на корените трябва да въведем командите:
х = S.x, у = S.y
• За да извлечем едно от решенията, например второто, трябва да
въведем командата s2 = [S.x(2) S.y(2)]
• Матрицата на решенията може да получим с командата
М = [S.x, S.y]
Редовете на матрицата М ще представляват отделните решения.
Една линейна система алгебрични уравнения може да бъде реше-
на както с функцията solve, така и с помощта на матричното деление
S = А\Ь.
Пример:
Да се реши следната нелинейна система уравнения:
х (2 - у ) = co sxe '
2 + х - у = c os x + e v
syms х у
fl = х*(2 - у) - cos(х)*ехр(у);
f2 = 2 + x - y - cos (х) - exp (у) ;
Koreni = solve(fl, f2, x, y);
x = Koreni.x
x =
[ .7390851332151606]
[ .67179203946718009639325125311984-
1.3390702694949181314704735832283*1]
y = Koreni.y
У =
[ -lambertw(exp(2))+2]
[ log(.67179203946718009639325125311984-
1.3390702694 94 9181314 704735832283*1) ]
Пояснение. В първия корен за променливата у участва функцията
на Ламберт w = L(x), която дава зависимостта на корена w на
трансцендентното уравнение w ew = х от параметъра х.
За да получим числените стойности на решенията със зададена
точност, трябва да приложим функцията vpa върху полетата на записа
Koreni:
х= vpa(Koreni.х,10)
х =
[ .7390851332]
[ .6717920395-1.339070269*1]

155
MATLAB. Част 1

у = vpa(Koreni.у ,10)
У =
[ .442854401]
[ .4042221714-1.105801286* i ]
% Матрицата М с корените
М = vpa ( [Koreni. х , Koreni.у],10)
М =
[ .7390851332, .442854401]
[ .6717920395-1.339070269*1, .4042221714-1.105801286*1]
3. 7. Аналитично решаване на диференциални уравнения
Аналитичното решаване на обикновени диференциални уравнения
се извършва с помощта на функцията dsolve. При това е възможно да се
решават както отделни уравнения, така и системи уравнения.
Уравненията се представят като символни изрази, в които произ­
водните се означават с буквата D:

у' -> Dy, у" -> D2y, у " -> D 3 y , .......... у (п) Dny
Подразбиращата се независима променлива е t. Ако се използва
друга променлива, тя трябва да се укаже явно като последен аргумент
на dsolve. Ако тази променлива не е била явно обявена за символна с
функцията sym или syms, тогава задължително трябва да се загради с
апострофи.
Важно! Имената на символните променливи не трябва да съдър­
жат буквата D !
Началните условия се задават с допълнителни уравнения. Ако
такива липсват, функцията dsolve връща общото решение, съдържащо
интеграционните константи С 1, С2, ...... Възможно е вместо начални
условия да се използват гранични условия, т. е. да се решават и гра­
нични задачи.
Изходните резултати се адресират както при функцията solve:
1) [yl, у2, ....] - вектор от променливи, съответстващи на зависи­
мите променливи - решенията на системата.
2) Запис S с полета, имената на които съвпадат с имената на зави­
симите променливи. В тези полета се съхраняват получените решения.
Синтаксис:
у = dsolve(fdequation') - намира общото решение на диференциал­
ното уравнение dequation с подразбираща се независима променлива t.
у = dsolve(fdequation', fini_cond?) - намира частното решение на ди­
ференциалното уравнение dequation при зададените начални условия
ini cond с подразбираща се независима променлива t.

156
Глава 3. Символни преобразувания - Symbolic Math Toolbox

у = dsolve(’dequation\ 'in^cond', V ) - като предишната, но с явно


указване на независимата променлива х. Независимата променлива
задължително се огражда в апострофи само ако не е била обявена явно
за символна.
[у 1, у2, ...| = dsolve('deql\ 'deq2', 'inic 1 'inic2\ 'var') - намира
частното решение на системата диференциални уравнения deql, deq2, ....
при зададени начални условия inic 1, inic2....... . с явно указване на
независимата променлива var. Възможен е по-компактен вариант на
последната команда:
[у 1, у2, ...| = dso!ve('deql, deq2, ...', 'inic 1, inic2, ...', 'var')
Пример 1:
Да се реши аналитично и числено уравнението на Рикати и резултатите
да се сравнят графично.

у + у 2 = X 2, v (0 .5 ) = —1, в интервала 0.5 < х < 7

% ***Аналитично решение ***


у = dsolve(’Dy + уА2 = хА (-2) ’,’у (0.5) = -1',' х');
pretty(у)
1 / 2 (1 -
1/2 1/2 1/2 1/2
5 tan h(- 1/2 5 log(x) + 1/2 log(9 + 4 5 ) - 1/2 log(2) 5 ))/х
% ***Числено решение ***
% Подпрограма функция Riccaty - записва се в ш- файл със същото име!
function ур = riccaty(х,у)
ур = 1/хА2 - у (1)А2 ;
[x,Y] = ode45('r i c c a t y [0.5 7],-1);
ezplot(y, [0 7]); hold on % графика на аналитичното решение
plot (x,Y, 'о') , grid on % графика на численото решение
На фиг. 3.3 се вижда пъл­
ното съвпадение на ре­
зултатите от аналитично­
то решение (графиката с
непрекъсната линия) и чи­
сленото решение (изобра­
зено с кръгчета) в целия
диапазон от 0,5 до 7.
Забележка. Методи за чи­
слено решаване на обик­
новени диференциални
уравнения са разгледа­
ни в ч. 2.
Фиг. 3.3

- 1 57 -
MATLAB. Част 1

Пример 2:
Да се намери общото решение на системата диференциални уравнения
х = е ~ \ у = е~х
[х,у] = dsolve ('Dx = exp(-у)','Dy = ехр(-х)');
pretty(х)
e x p (t Cl + C2 Cl) Cl
-log (--------------------- )
e x p (t Cl + C2 Cl) - 1
pretty(y)
e x p (t Cl + C2 Cl) - 1
log (--------------------- )
Cl
% Проверка цг решението
syms t
simplify(diff(x, t)-exp(-y))
ans =
0
simplify(diff(y,t)-exp(-x))
ans =
0
Пример 3:
Да се реши системата диференциални уравнения
х = Ъх + 4 у, у = - 4 х + 3у
при следните начални условия: х(0) = 0, у(0) = 1.
Sols = dsolve('Dx=3*x+4*y, Dy=-4*x+3*y','x (0)=0,y(0)=1’)
Sols =
x : [lxl sym]
y: [lxl sym]
x = Sols.x
x =
e x p (3 *t )*sin(4 *t)
y = Sols.y
У =
exp(3*t)*cos(4 *t)
Пример 4:
Да се реши диференциалното уравнение
у " ' = у ,у (0) = 1 ,/( 0 ) = - 1 ,/'( 0 ) = л-
у = dsolve ('D3y=y' ,'у (0) =1 ,Dy (0) =-1 ,D2y (0) =pi 'х')
У =
l/3*pi*exp(х)-1/3*(1+pi)*3Л (1/2)*ехр(-1/2 *х)
*sin(1/2*3Л (1/2)*х)+ (l-l/3*pi)*ехр(-1/2*х)
*c o s (1/2 *3Л (1/2)* х )

- 1 58 -
Глава 3. Символни преобразувания - Symbolic Math Toolbox

X = [12345];
subs (у, 'x ',X) % пресмятане на стойността на у за х = [1 2 3 4 5]
ans =
1.7232 6.8723 20.7666 57.2837 155.6015
Пример 5:
Да се реши аналитично диференциалното уравнение
(1- х 2)у" - 2 х у ' + п(п + 1)>’ = 0
у = dsolve('(1-хА2)*D2y-2*x*Dy+n*(п+1)*у=0',' х')
У =
Cl *LegendreР (n,х)+C2*LegendreQ(п, х)
Решението на диференциалното уравнение е изразено чрез поли­
нома на Лежандър LegendreP и функцията на Лежандър от втори род
LegendreQ, които не са дефинирани в MATLAB. Те обаче са вградени в
Maple и може, както ще видим в т. 3. 9, да бъдат викани от средата на
MATLAB.
3. 8. Интегрални преобразувания
В Symbolic Math Toolbox можете да ползвате правите и обратни
преобразувания на Фурие и Лаплас и Z-преобразуванието.
3. 8 .1. Право и обратно преобразувание на Фурие
Право преобразувание на Фурие
Правото преобразувание на Фурие на функцията f(x) се определя
от формулата +*>
/Т Я (и О = l f ( x ) e - wxdx
- 00

Синтаксис:
F = fourier( f ) - преобразувание на Фурие на функцията f с под­
разбиращи се независима променлива х и параметър w: f(x) —►F(w). Ако
f = f(w), функцията fourier връща функция на t : f(w) —►F(t);
F = fourier(f, v) - вместо подразбиращия се параметър w се
използва явно указаният v : f(x) —►F(v);
F = fourier(f, u, v) - вместо подразбиращите се променливи х и w
се използват явно указаните и и v: f(u) —►F(v).
Пример 1:
syms х w
F = fourier(exp(-xA2))
F =
piA (1/2)*exp(-l/4*wA2)
Пример 2:
f = exp(-abs(w));
F = fourier(f)

159
MATLAB. Част 1

F =

2/ (1 +1A2)
Обратно преобразувание на Фурие
Определя се от формулата

^ ~ '[ / ] ( * ) = 727-Г )f ( w ) e " vxdw


Синтаксис:
f = ifourier(F) - по подразбиране извършва обратното преобразува­
ние f(x) F (w ). Ако F = F(x), функцията ifourier връща функция на t:
f(t) - F(x).
f = ifourier(F, u) - извършва трансформацията f(u) <— F(w).
f = ifourier(F, v, u) - извършва трансформацията f(u) <— F(v).
Пример 1:
syms a real
F = exp(-wA2/(4*aA2));
f = simple(ifourier(F))
f =
a*exp (-xA2*aA2)/piA (1/2)
Пример 2:
syms x
F = exp(-abs(x));
f = ifourier(F)
f =
1/ (1+tA2)/pi
3. 8. 2. Право и обратно преобразувание на Лаплас
Преобразуванието на Лаплас се прилага за решаване на линейни
обикновени диференциални, интегрални, интегро-диференциални и
частни диференциални уравнения. За разлика от преобразуванието на
Фурие, което не отчита началните условия, преобразуванието на Лаплас
ги отчита автоматично.
Право преобразувание на Лаплас
Определя се от формулата

Ц / ] ( * ) = ] / ( 0 е “"Л
0
Синтаксис:
L = laplace( f ) - трансформация на функцията f с подразбираща се
независима променлива t. Параметър е символът s: f(t) —> L(s).

160
Глава 3. Символни преобразувания - Symbolic Math Toolbox

Ако f = f(s). операторът laplace връща функция на аргумента t:


f(s) - L(t).
L = Iaplace(f, p) - тук се указва явно параметърът р: f(t) —*>Цр).
L = laplace(f, х, р) - явно се указват независимата променлива х и
параметърът р: f(x) —> Цр).
Пример 1:
syms t р
L = laplace(sin(t)A4,p);
pretty(L)
24

2 2
p (p + 4) (p + 16)
Пример 2:
syms t x p
Sit = int(sin(x)/x,0,t);
LSi = laplace(Sit,p);
pretty(LSi)
acot(p)

Пример 3:
syms x p
L = laplace(diff(exp(-2*x)*sin(x),x,2),p);
pretty(L)
3 p + 2
--------------------------- 4 -----------------------
2 2
(p + 2 ) + 1 (p + 2 ) + 1
Обратно преобразувание на Лаплас
Дефинира се от формулата
1 С+/оо

Г'[/](0 =гЧ
2 7
\f(s)es'ds
я с _,-00

където с е реално число, избрано така, че всички сингулярни точки на


f(s) да лежат вляво от линията s = с.
Синтаксис:
f = ilaplace(L) - по подразбиране f(t) L(s). Ако L = L(t),
операторът ilaplace връща функция на х: f(x) <— L(t).
f = ilaplace(L, x) - трансформация f ( x ) L ( s ) .
f = ilaplace(L, p, x) - трансформация f(x) L(p).

11 161
MATLAB. Част 1

Пример 1:
syms х р
f = ilaplace(acot(р),р,х)
f =
sin(x)/х
Пример 2:
syms p t a b
f = ilaplace(log((p-a)/ (p-b)),p,t)
f =
-l/t*exp(a*t)+l/t*exp(b*t)
f = factor(f)
f =
(-exp(a*t)+exp(b*t))/t
Задача:
Преходните процеси в една двуконтурна електрическа верига се
описват от следната система обикновени диференциални уравнения:

dt L dt L
dQ 1 R->
■Л Q { 0 ) = Q o
dt Rj + R з r2+ r3
където I е големината на тока във веригата;
Q - електрическият заряд;
E(t) - електродвижещата сила;
L - индуктивността;
С - капацитетът;
Ri, R2, R3 - съпротивленията на отделните участъци.
Да се реши системата с помощта на преобразуванието на Лаплас и да
се построят графиките на преходните процеси при начални условия 1(0 )
= 15, Q (0 ) = 2 и стойности на параметрите R1=4Q, R2 = 2 ft, R3 =
3 ft, С = 1/4 F, L = 1,6 H. Да се приеме Е = sin t.
Решение:
syms L С Rl R2 R3 t
% Дефинираме променливите I(t), Q (t), E(t) и съответните производни
I = sym('I (t) ') ; Q = sym( 'Q (t) ') ; E = sin (t) ;
dl = sym('diff(I(t),t) '); dQ = sym(’diff(Q(t),t) ’);
% Дефинираме самите диференциални уравнения
eql = dI+R2*dQ/L-(R2-Rl)*l/L;
eq2 = dQ-(E-Q/C)/ (R2+R3)-R2*I/(R2+R3);

162
Глава 3. Символни преобразувания - Symbolic Math Toolbox

% Намираме образите на диференциалните уравнения по Лаплас


syms s
LI = laplace(eql,t,s), L2 = laplace(eq2,t ,s),
Ll =
s*laplace(I(t) ,t, s) -I (0) +R2/L*(s*laplace(Q(t),t,s)-Q(0))-
(R2-R1)/L*laplace(I(t),t,s)
L2 =
s*laplace (Q (t) ,t, s) -Q (0) -1/ (R2+R3) /С* (С/ (б л 2+1)-
laplace (Q (t) ,t, s) )-R2/ (R2+R3) *laplace ( I (t) ,t, s)
% Заместваме в LI и L2 изразите laplace(I(t),t,s) и laplace(Q(t),t,s) c LI и LQ
syms LI LQ
Ll = subs(LI,{'l a p l a c e ( I ( t ) , t , s ) .
1laplace(Q(t),t,s)’),{LI,LQ})
Ll =
s * L I - I (0) +R2/ L*( s*LQ- Q( 0 ) ) - (R2- R1) /L* LI
L2 = subs(L2,{'laplace(I(t),t,s)1,...
1laplace(Q(t),t,s)'},{LI,LQ))
L2 =
s*LQ-Q( 0 ) - 1 / (R2+R3)/ С * ( С / ( в л2+1) -LQ)-R2/ (R2+R3)*LI
% Заместваме числените стойности на параметрите и началните условия
L1 = ...
subs(Ll, {R1,R2,R3,L,C, 11(0)1,'Q(O)1Ь (4,2,3,1.6,1/4,15,2))
Ll =
s*LI-35/2+5/4*s*LQ+5/4*LI
L2 = ...
subs(L2,(R1,R2,R3,L7C,'I(O)','Q(O)l}r{4,2,3,1.6,l/4f15,2})
L2 =
s*LQ-2-l/5/(зл2+1)+4/5*LQ-2/5*LI
% Решаваме уравненията Ll = 0 и L2 = 0 спрямо образите
% на неизвестните функции LI и LQ
[LI,LQ] = solve(Ll,L2,LI,LQ)
LI =
5* (59*s+60*sA3+56*sA2+56)/ (20*sA4+51*sA3+40*sA2+51*s +20)
LQ =
(44*s+40*sA3+190*sA2+195)/ (20*sA4+51*sA3+40*sA2+51*s+20)
% Намираме оригиналите на променливите I и Q с помощта на ilaplace
I = ilaplace(LI,s,t)
I =
-5/51*sin(t)+15*exp(-51/40*t)*cosh(1/40*1001A (1/2)*t)-
1465/7293*exp(-51/40*t)*1001A (1/2)
*sinh(1/40*1001A (1/2)*t)
Q = ilaplace(LQ,s,t)

163
MATLAB. Част 1

Q =
-5/51*cos(t)+4/51*sin(t)+107/51*exp(-51/40*t)
*cosh (1/40*1001Л (1/2)*t)+2039/7293*exp(-51/40*0
*1 0 0 1 л (1 /2 )*sinh (1/40*1001Л (1/2)*t)
% Начертаваме графиките на тока I(t)и на заряда Q(t)
% в интервалите 0 < t< 10 и 5 < t< 25
figure;
subplot (2,2,1) , ezplot (I,[0,10]) ; grid on
set(gca,'FontName','Arial Cyr','FontSize',14)
title(' Големина на тока I = I(t)'), xlabel('Време t ');
subplot(2,2,2), ezplot(Q,[0,10]); grid on
set(gca,'FontName','Arial Cyr','FontSize',14)
title(' Заряд Q = Q(t)'), xlabel('Време t');
subplot(2,2,3), ezplot(I,[5,25]); grid on
set(gca,'FontName','Arial Cyr','FontSize',14)
title(' Големина на тока I = I(t)'), xlabel('Време t');
subplot(2,2,4), ezplot(Q,[5,25]); grid on
set(gca,'FontName','Arial Cyr','FontSize',14)
title(' Заряд Q = Q(t)'), xlabel('Време t');
Голееюна на тока I = l(t) Заряд Q s Q(t)

2.... -Ц.......|.......|....... j....... i

. /:• -5 о ...... :...... :


... I ”**_**:........ 1.... -------
С) 4" б 8 10 ■ ‘ () 2 .4 6 8 10
•«Времеf:;. V- Bpeif»,t; /
ГолеминанатокаIs l(t) ЗарядQ?Q(t) ;
\...... !........ l. А4: .......... г...........f...........
i b : i ч ....... \ .......... ' 03 ......
.Wft2
v!:: 0.1 ..................
1 . - oil
\ / :\ '{
: -V.' ‘ U .- р
-0.1
1 \ ' *0-1_____ 11_____11__ ___.
* -10, '. .13 15 ,:.V;2Q 25 - •. Г-
.,-3 т 15: - 20L; ./25
1U - у . г TO-:
’ Време t ' ‘ Bpeiiet

Фиг. 3.4. Преходни процеси в електрическа верига


Обърнете внимание, че трептенията в стационарния режим
(долните две графики) нямаше да се виждат, ако не беше изрязан
интервалът 0 < t < 5, където и двете функции I(t) и Q(t) имат
сравнително големи стойности.

164
Глава 3. Символни преобразувания - Symbolic Math Toolbox

3. 8. 3. Z-преобразувание и обратно Z-преобразувание


Z-преобразуванието се прилага върху дискретни функции.
Право Z-преобразувание
Дефинира се от формулата:
CO

Z[ f ] { z) = I / ( » ) z - ”
Синтаксис:
F = ztrans( f ) - подразбира се f(n) —►F(z). Ако f = f(z), операторът
ztrans връща функция на w: f(z) —►F(w).
F = ztrans(f, w) - извършва се трансформацията f(n) —►F(w).
F = ztrans(f, k, w) - извършва се трансформацията f(k) —►F(w).
Примери:
syms n
ztrans(nA4)
ans =
z * ( z A3 + l l * z A2 + l l * z + l ) / ( z - 1 ) a5
syms a z
ztrans(aAz)
ans =
w/а/(w/a-1)
F = simple(ans)
F =
-w/(-w+a)
syms w
ztrans(sin(a*n),w)
ans =
w*sin (a)/ (wA2-2*w*cos (a)+1)
Обратно Z-преобразувание
Нека R е положително число, такова, че функцията g(z) е анали­
тична върху и извън окръжността |z| = R. Тогава обратното Z- преобразу-
вание на тази функция се определя от формулата

Синтаксис:

f = iztrans(F) - по подразбиране се извършва обратното Z-преобра-


зувание f(n) <— F(z). Ако F = F(n), тогава f(k) F(n).
f = iztrans(F, k) - оригиналът f е функция на k вместо на подразби­
ращото се n : f(k) F(z).

- 1 65 -
MATLAB. Част 1

f = iztrans(F, w, k) - преобразуванието се извършва по явно указа­


ните променливи w и k: f(k) <— F(w).
Примери:
syms n
iztrans(n*(n+1 )/ (nA2 +2 *n+l))
ans =
(-1)Лк
syms z
iztrans(2 *z/(z-2 )A2 )
ans =
2 An*n
syms a k
f = z/(z-a);
iztrans(f,k)
ans =
aAk
Z -преобразуванието често се използва за решаване на т. нар. ди-
ференчни или рекурентни уравнения.
Пример. "Задачата за зайците”
А ко р(п) е броят на зайците през n-тата година, то р удовлетворява
диференчното уравнение
р(п + 2) = р(п + 1) +р (п )
Да се намери функцията р(п) при следните начални условия: р(0) = 1,
р(1) = 2.
Решение:
% Декларираме функциите
pn = sym( 'p(n) ') ;
pnl = sym('р (n+1 ) ') ;
pn2 = sym('p(n+2 )');
syms n z
eq = pn2 -pnl-pn; % диференчното уравнение
zeq = ztrans(eq,n,z) % Z- трансформация на уравнението
zeq =
zA2 *ztrans(p(n),n,z)-p(0 )*zA2 -p(l)*z-
z*ztrans(p(n),n,z)+p(0 )*z-ztrans(p(n),n,z)
% Заместваме ztrans(p(n), n, z) c Pz, а така също и началните условия
syms Pz
zeq = ...
subs(zeq,{1 ztrans(p(n),n,z)','p(0 ) 1 ,'p(1 )’},{Pz,1 ,2 })
zeq =
zA2*Pz-zA2-z-z*Pz-Pz
zeq =collect (zeq, Pz) % групиране по степените на Pz

166
Глава 3. Символни преобразувания - Symbolic Math Toolbox

zeq =
(zA2-z-l)*Pz-zA2-z
% Решаваме уравнението zeq = 0 спрямо образа Pz
% на неизвестната функция р(п)
Pz = solve(zeq,Pz);
p = iztrans (Pz,z ,n) % обратна Z-трансформация
P =
1/10* (3*2An* (5A (1/2)+1)An*5A (1/2)+5*2An*(5A (1/2)+1)An-
3*(-2)An*(5A (1/2)-1)An*5A (1/2)+5*(-2)An*(5A (1/2)-
1) An) / ((5A (1/2) -1) An) / ((5A (1/2) +1) An)
% Моля, изпълнете командата pretty(p), ако желаете по-четливо изображение.
% Построяване на графиката р = р(п)
m = 1 :1 0 ; % годините от 1 до 10
у = double(subs(p,n,m));
figure
stem(m,у, 'filled') % начертаване на графиката
title(' Rabbit Population');
xlabel('Years 1);
ylabel(’p(n)'); grid on

Фиг. 3.5. Брой на зайците по години

3
.9.Ma
ple
V- специалниматематическифункции
Symbolic Math Toolbox осигурява достъп до над 50 специални
математически функции на системата MapleV.
Пълен списък на тези функции можете да получите с командата
» help mfunlist
Сред тях особен интерес представляват:
• функции на Бесел;

167
MATLAB. Част 1

• делта-функция на Дирак;
• единична функция на Хевисайд;
В Extended Symbolic Math Toolbox са достъпни и ортогоналните
полиноми:
• полиноми на Лежандър;
• полиноми на Якоби;
• полиноми на Чебишев и др.
Информация за конкретна функция се получава с командата
» mhelp func_name
Пресмятането на дадена функция за определени стойности на
аргументите се извършва с командата
rez = mfun('func_name', argl, arg2, argN)
Тези функции могат да извършват и поелементни операции,
когато вместо скалар подадем на входа вектор или матрица.
Пример 1:
Използване на функцията Chi, пресмятаща интегралния хиперболичен
косинус
z = [2+i, 0, pi/2] ; % задаване на входния аргумент
w = mfun ('Chi ',z) % поелементни операции
W
2.0303 + 1.7227i NaN 1.7127
Пример 2 :
Интензитетът на дифракционната вълна в класическата електродина-
мика се определя от формулата

където

/ 0 е началният интензитет;

Г - косинус-интеграл на Френел (Fresnel);

\dt - синус-интеграл на Френел.


о

168
Глава 3. Символни преобразувания - Symbolic Math Toolbox

Да се построи графиката на интензитета като функция на х. За простота


да се приеме

= 1, /о=1

% Построяване на графиката I= 1(х)


х = -30:0.05:30;
С = mfun('FresnelC',х);
S = mfun('FresnelS',х);
I = 0.5*((C+l/2).А2+(S+1/2).Л2);
plot(x,I); grid on
xlabel('x '), ylabel('I(x)')
title('Intensity of Difracted Wave');

Intensity of Dif racted W ave

1.2

0.8

0.6

0.4

0.2

-20 -10 0 10 20 30
X

Ф и г. 3.6. Интензитет на дифракционната вълна

3.10. Изпълнение на функции на Maple от средата на MATLAB


Разгледаните символни функции представляват команден интер­
фейс между MATLAB и част от функциите на Maple. Директен достъп
до всички функции на ядрото на Maple ни осигурява функцията maple.
Входни аргументи на maple могат да бъдат символни обекти,
низове и числа или променливи от клас double.
Изходните аргументи са символни обекти, низове или променли­
ви от клас double, съответстващи на входните аргументи.

- 169-
MATLAB. Част 1

Синтаксис:
maple(,rnaple_staternent') - изпълнява оператор на Maple;
тар1е('тар1е_Шпс', argl, arg2, argN) - изпълнява функцията
maple_func с аргументи argl, arg2, .... argN;
maple('map', ,maple_func’, argl, ag2, ...) - функцията map прилага
функцията maple_fiinc върху всеки елемент на масивите argl, arg2...... ;
функцията map се прилага върху масиви само съвместно с друга
функция ;
[result, status] = maple(....... ) - използване на два изходни аргу­
мента:
• при успешно изпълнение в аргумента result се връща резултатът
от изпълнението, a status приема стойност 0;
• при, неуспешно изпълнение в result се връща съобщение за
грешка, а в status - цяло положително число, кода на грешката.
maple trace on - въвежда се режим на трасиране на междинните
резултати при изпълнение на символни процедури;
maple trace off- изключва се режимът на трасиране;
maple clear - изчиства работното пространство на Maple и реини-
циализира ядрото на Maple.
Пример 1. Пресмятане на несобствен интеграл
maple('int(1 / (хА2 +2 *х+2 ),х = -infinity..i nfinity))
ans =
Pi
Пример 2. Числено пресмятане на определен интеграл
J = maple('evalf(int(exp(-хА3),x=0..1),10);')
J =
.8075111821
Пример 3. Операции над частично непрекъсната функция
% Функцията р(х) _j х < Q

р(х) = < 2х, 1<х


х 2, 0 < х <1
% може да бъде зададена в Maple посредством функцията piecewise
maple('p:=piecewise(х<=0 ,-1 ,х>=1 ,2 *х,хА2 );')
ans =
р : = P I E CE WI S E ( [ - 1 , х <= 0 ] , [ 2 * х , 1 <= х ] , [ х А2 ,
otherwise])
% Тази функция може да бъде третирана като обикновена:
% Интегриране на р(х)
maple ('int (р,х) ;') % неопределен интеграл

170
Глава 3. Символни преобразувания - Symbolic Math Toolbox

ans =
PIECEWISE([-x, x <= 0],[l/3*xA3, x <= 1],[хЛ2-2/3, 1 < x]))
maple ('int (p,x=-5 ..5) ;') % определен интеграл
ans =
58/3
% Решаване на диференциалното уравнение
У + Р ( х ) у = 0, у ( 0 ) = - 2
maple ('dsolve({diff (у(х) ,х)+р*у(х) ,у(0 )=-2 },у (х)) ;')
ans =
у (х ) = PIECEWISE([-2*ехр(х), х <= 0], [-2*ехр(-1/3*хЛ3),
х <= 1],[-2*ехр(-хЛ2+2/3), 1 < х])
Пример 4:
Да се състави файл-функция, която да изпълнява функцията sin на Maple
над всеки елемент на една символна матрица.
Вариант 1 - с многократно извикване на Maple в цикъл
function Y = sinl(X)
% Обработване на елементите на входната
% матрица X mxn като вектор сдължина m.n
for k = 1:prod(size(X))
y (k) = maple ('sin',X (k)) ; % Векторно представяне
end % на матрицата X !!!
% Преобразуване на вектора у в матрица Y
% с размерите на входната матрица X
Y = reshape(у,size(X));
Вариант 2 - с еднократно извикване на Maple
function Y = sin2(X)
if prod(size (X) ) = 1 % X е скалар
Y = maple('sin',X);
else % X е вектор или матрица
Y = maple('map1 ,'sin',X);
end
% Тестване
syms x y
A = [0 x; y pi/4];
sinl(A)
ans =
[ 0, sin (x)]
[ sin(y), 1/2*2*(1/2)]
sin2(A)
ans =
[ o, sin (x)]
[ sin(y), 1/2*2*(1/2) ]

- 171 -
MATLAB. Част 1

3 .1 1 . Допълнителните възможности на Extended Sym bolic


Math Toolbox
Extended Symbolic Math Toolbox (ESMT) осигурява допълнително:
• достъп до всички неграфични пакети на Maple;
• възможност да използвате програмните конструкции на Maple;
• възможност да зареждате и изпълнявате потребителски проце­
дури на Maple.
3 .1 1 .1 . Пакети библиотечни функции на Maple
Списък на всички пакети библиотечни функции на Maple можете да
получите с командата
» mhelp index|packages]
Сред внушителния списък определен интерес за потребители,
занимаващи се с научноизследователска дейност, представляват след­
ните пакети:
DEtools - решаване на диференциални уравнения;
inttrans - интегрални преобразувания;
linalg - линейна алгебра;
numapprox - числена апроксимация;
orthopoly - ортогонални полиноми;
powseries - степенни редове;
simplex - линейна оптимизация;
stats - статистика;
student - математически анализ;
sumtools - безкрайни и крайни суми;
tensor - тензорно смятане.
Информация за определен пакет се получава с командата
» mhelp package_name % името е в първата колонка на списъка
Зареждане. За да се използват функциите на даден пакет, той
трябва най-напред да се зареди в работното пространство на Maple с
командата
» mapleCwith^ackage^ame);1)
Пример:
maple( ' w i t h ( o r t h o p o l y ) ; ' )
ans =
[ G, H, L, P, T, U]
Горните функции вече са заредени и могат да се използват като обикно­
вени Maple-функции.
Информация за конкретна функция от даден пакет се получава с
командата
» mhelp package_name[func_name]
Такава команда е например » mhelp orthopoly[Т] .

172
Глава 3. Символни преобразувания - Symbolic Math Toolbox

3.11.2. Зареждане и изпълнение на потребителска процедура


Зареждането на една процедура на Maple, записана като файл
procname.src в текущата директория, става с командата
» procread('procname.srcf)
Изпълнението на тази процедура се активира с помощта на функ­
цията maple:
» maple(fprocnamef, argl, arg2,...)
Забележка. Наименованието на файла и неговото разширение са про­
изволни. Освен това, тъй като това е процедура на Maple, съвсем не е
задължително името на файла да съвпада с името на процедурата,
както е при файл-функциите на MATLAB!
Пример:
Процедура, пресмятаща числото тт с произволен брой значещи цифри с
помощта на аритметико-геометричен метод на Гаус
mypi := proc(n)
# * * * * Maple процедура mypi ****
# Пресмята числото pi по метода на Гаус
# с 'п'итерации. При всяка итерация
# броят на верните цифри приблизително
# се удвоява.
local a, b, с, d, k, t;
a = 1
b = sqrt(1 /2 ):
c = 1/4:
t = 1
for k from 1 to n do
d := (b-a)/2 :
b := sqrt(a*b):
a := a + d:
c := c-t*dA2 :
t :=2 *t:
od;
(a + b)A2/(4*c):
end;
Нека тази процедура е записана в текущата директория във файл с име
mypi.
% Зареждане на процедурата mypi
procread('mypi')
ans =
mypi := proc (n) local a, b, c, d, k, t; a := 1; b :=
sqrt(1/2); c := 1/4; t := 1; for k to n do d := l/2*b-
l/2*a; b := sqrt(a*b); a := a+d; c := c-t*dA2; t := 2*t
od; 1/4* (a+b)A2/c end

173
MATLAB. Част 1

% Изпълнение на процедурата mypi


р = maple ('mypi ', 5) ; % получава се обемист символен резултат
р = vpa (р,16) % пресмятане на числената стойност с VPA аритметиката
Р =
3.141592653589790
Тук представлява интерес следният въпрос: Как можем да накара­
ме самата процедура mypi директно да пресмята числената стойност на
тт? Ключът е във втория изпълним оператор на процедурата:
• Ако запишем b := sqrt(l/2), т. е. ако аргументът на функцията sqrt
е рационално число, всички пресмятания в процедурата ще се
извършват символно.
• Ако запишем b = sqrt(l./2.), т. е. представим аргумента на sqrt
като реално число, всички пресмятания в процедурата ще се
извършват с VPA аритметиката при текущата настройка на
digits.
Ако направим последната корекция в процедурата, тогава
фрагментът
digits(lOO);
procread('mypif);
р = maple(’m ypi\ 8)
ще ни даде числото тт със 100 верни цифри.
Важно! Обърнете внимание, че можем да дефинираме свой соб­
ствен m-файл в MATLAB, който да ни осигури достъп до дадена
процедура на Maple. За току-що разгледаната задача за пресмятане на
тт той може да има следния примерен вид:
function р = pi2 (п)
р = maple('mypi',n);
Не забравяйте, че това вече е файл-функция на MATLAB, която трябва
да се запише в ш-файл с име pi2.m. Това очевидно разкрива неограни­
чени възможности за интегриране на Maple с MATLAB !
3.11. 3. Компилиране на процедури на Maple
Когато Maple зарежда една процедура в ASCII формат (source) в
работната си памет, той я транслира в свой вътрешен формат. За да
ускорите следващите изпълнения на тази процедура, можете да я
запишете като файл в този формат:
» clear maplemex % изчистване на работната област на Maple
» procread(ffile_name.ext,) % зареждане на процедурата
» maple(’save’, f'file_name.m'f) % запис във вътрешен формат .ш
Пояснение. Тъй като функцията save записва в ш-файл цялото
работно пространство на Maple, преди зареждането и записа на
конкретна процедура то трябва да бъде изчистено от всички променливи
с командата

174
Глава 3. Символни преобразувания - Symbolic Math Toolbox

» clear maplemex
Тази команда е излишна само ако зареждането на файла процеду­
ра става в самото начало на текущата сесия и непосредствено след
това подадем командата save.
Зареждането на така компилираната процедура в следващата
сесия на MATLAB се извърша с командата
» maple(fread7'file_nameM);
При това името на файла трябва да се указва без разширението .т.
Изпълнението на заредената процедура става с командата
» maple(fproc_name', argl, arg2, ...);
Важно!
1) Правете разлика между името на файла, в който се съхранява
процедурата, file_name, и името на самата процедура proc_name! В Maple
не е задължително те да съвпадат, както е при MATLAB.
2) Обърнете внимание на обратните апострофи ('), с които се
загражда името на файла 'file name' в командите save и read.
3) Файловете с компилираните процедури имат разширение ,т .
Затова трябва да се внимава да не се сбъркат с файловете на
MATLAB, които имат същото разширение!
Пример:
Нека запишем варианта с VPA аритметиката на процедурата mypi във
файл с име mypi2. Името на самата процедура mypi се запазва. Ето по­
следователността от командите за компилиране, съхранение, зарежда­
не и изпълнение на тази процедура:
clear maplemex % изчистване на работното пространство на Maple
procread ( 1 mypi2 ’ ) % зареждане на процедурата
ans =
mypi := proc (n) local a, b, c, d, k, t; a := 1; b :=
sqrt(.50000000000000000000000000000000); c := 1/4; t :=
1; for k to n do d := l/2*b-l/2*a; b := sqrt(a*b); a :=
a+d; c := c-t*d^2; t := 2*t od; 1/4* (a+b)Л2/с end
maple ( 1 save ’ ,* 'mypi2 .m' ') ;% запис във вътрешен формат
maple ( ' clear') % изчистване на работното пространство
maple ( ' read' ,' 4mypi2 4 ') ; % зареждане на компилираната процедура
р = maple ('mypi',7) % изпълнение на процедурата
Р =
3.1415926535897932384626433832795
Макар разгледаният пример да не е с практическа насоченост,
надяваме се той да послужи като отправна точка за написването на
ваши собствени програми, решаващи конкретни научно-технически
задачи. Относно синтаксиса, управляващите оператори и някои основни
функции на Maple вж. приложение 4.

175
Глава 4
Използване на числени методи в MATLAB
В тази глава са разгледани функциите в MATLAB, с помощта на
които се решават числено някои основни задачи от алгебрата и анализа.
Тези функции може да се разделят на три групи:
• Функции от линейната алгебра - решаване на системи линейни
алгебрични уравнения и пресмятане на собствени стойности и
собствени вектори на матрици (може да се видят с командата
help matfun).
• Функции от математическия анализ - определяне на корени на
трансцендентни уравнения, минимуми на функции и пресмятане
на определени интеграли (help funfun). Тук се отнасят и функ­
циите за числено решаване на обикновени диференциални
уравнения, на които, поради тяхната изключителна важност в
научните изследвания, в част 2 на ръководството ще бъде
посветена отделна глава.
• Функции за апроксимация и интерполация (help polyfun).
4.1. Решаване на системи линейни алгебрични уравнения
Една от основните задачи на линейната алгебра е намирането на
решение на линейната система алгебрични уравнения А х = Ь.
Численото решение на тази система може да се окаже чувствител­
но към малки изменения на коефициентите на системата (елементите на
матрицата А) и грешките от закръгленията при пресмятането. Тази чув­
ствителност се характеризира с числото на обусловеност (condition
number) на матрицата А, което в MATLAB се пресмята с функцията
cond(A). Колкото това число е по-голямо, толкова системата е по-лошо
обусловена, т. е. по-чувствителна. Ако det(A) = 0, системата е изродена
и cond(A) = оо.
За решаване на системата А х = b в MATLAB се използва универ­
салният оператор Т (back slash - обратно наклонена черта):
х = А\Ь.
Този оператор е универсален, защото може да се използва не само
когато броят на уравненията е равен на броя на неизвестните, т. е. за
квадратни матрици А, но и когато уравненията са по-малко или повече
от неизвестните, т. е. и за правоъгълни матрици Amxn!
Ако уравненията са по-малко от неизвестните (m < n), MATLAB
задава на (п - т ) на брой корена нулеви стойности и пресмята остана­
лите m корена. Ако пък уравненията са повече от неизвестните (ш > п),
т. е. при преопределени системи, каквито често се появяват при много­

176
Глава 4. Използване на числени методи в MATLAB

кратни измервания (експерименти), MATLAB автоматично решава си­


стемата по метода на най-малките квадрати.
От казаното следва, че само за случая m = п командата х = А\Ь е
еквивалентна на командата х = inv(A)*b. Но и в този случай първият
метод е по-бърз и по-точен. Помощна информация за оператора „V
(back slash) можете да получите с командата help slash.
Примери:
А = [3 7 5; 2 6 9; 1 7 4] ;
b = [123]';
х = А\Ь
х =
-1.0571
0.5143
0.1143
% Лошо обусловена матрица
А = [1 2 3; 4 5 6; 7 8 9 ] ;
х = А\Ь
Warning: Matrix is close to singular or badly scaled.
Results may be inaccurate. RCOND = 1.541976e-
018.
x =
-0.3333
0.6667
0
4.2. Собствени стойности и собствени вектори
Понятията собствени стойности и собствени вектори възникват при
решаване на следните задачи.

4. 2 .1 . Обикновена задача за собствените стойности


Дадена е линейна хомогенна система алгебрични уравнения от
вида
А х = X х, или (А - X I) х = 0,
където А е квадратна матрица с размер п х п ;
X - параметър;
I - единична матрица.
Трябва да се определят стойностите на параметъра X, за които система­
та има ненулево решение.
От линейната алгебра е известно, че една хомогенна система
алгебрични уравнения има ненулево решение само тогава, когато
детерминантата от коефициентите пред неизвестните е равна на нула:
det(A - X I) = 0 , или

12 177
MATLAB. Част 1

a \ I ^ а , 2 а \п

° 2 \ Q 22 ~ ^ а 2п

. ° п \ а п2 а пп ~ Л

Развиването на тази детерминанта води до характеристичния полином


на матрицата А, който е полином от n-та степен спрямо параметъра X.
Този полином има п на брой корена Х\, Х2, ^з, ••••, ^п, които се наричат
собствени стойности на матрицата А. За всяка от тези стойности
системата ще има ненулево решение, т. е. системата ще има общо п
ненулеви решения. Тези решения се наричат собствени вектори на
матрицата А. Нека си припомним, че характеристичният полином на
квадратна матрица се получава с помощта на функцията poly, а нулите
на един полином се пресмятат с функцията roots (вж. т. 1.4. 10).

4. 2. 2. Обобщена задача за собствените стойности


Дадена е линейната хомогенна система алгебрични уравнения
А х = X В х, или (А - X В) х = 0,
където А и В са квадратни матрици с размер п хп ;
X е параметър.
Трябва да се определят стойностите на параметъра X, за които тази
система има ненулево решение.
От условието за съществуване на ненулево решение на една хомо­
генна система уравнения
det(A - X В) = 0
получаваме отново п стойности за параметъра X. Тези стойности Хи Х2,
..., Хп се наричат собствени стойности на матрицата А спрямо матрицата
В, а съответните решения - собствени вектори.
Функцията eig в MATLAB решава поставените две задачи:
lambda = eig(A) - връща вектор-стълб lambda със собствените стой­
ности на матрицата А.
[X, L) = eig(A) - връща собствените вектори на матрицата А, запи­
сани в матрицата X по стълбове, и диагоналната матрица L със соб­
ствените стойности. Първата собствена стойност е елементът L (l, 1),
втората - L(2, 2) и т.н. Първият собствен вектор е Х(:,1), вторият - Х(:,2)
и т. н.
lambda = eig(A, В) - връща вектор-стълб lambda със собствените
стойности на матрицата А спрямо матрицата В.
[X, L) = eig(A, В) - връща обобщените собствени вектори X и
собствени стойности L на матрицата А спрямо матрицата В.

178
Глава 4, Използване на числени методи в MATLAB

Важно! Обобщената задача за собствените стойности и собствени­


те вектори е тясно свързана с основната задача при линейните трепте­
ния - задачата за пресмятане на собствените честоти и собствените
форми на трептене, която ще бъде разгледана в част 2 на тази книга.
Пример:
А = [4 7 2; 8 3 5; 9 2 4];
В = [ 6 3 7; 5 2 7; 8 3 9];
[X,L] = eig(А,В);
L (1 ,1 ) % първа собствена стойност
ans =
8.7852
X (: ,1 ) % първи собствен вектор
ans =
0.3688
- 1.0000
0.0234
4. 3. Корени на алгебрични и трансцендентни уравнения
Численото пресмятане на корена на алгебрично и на трансцен-
дентно уравнение от вида f(x) = 0 се извършва с функцията fzero. Тя
може да се извиква с различен брой аргументи.
Синтаксис:
х = fzero('fun', хО) - пресмята корена х на функцията f(x) с име fun
при зададено начално приближение хО. Предполага се, че в мястото на
корена функцията сменя знака си! Това означава, че при функции, които
в някои точки променят стойностите си скокообразно (tg х например),
може да получим и грешни резултати.
х = fzeroCfun’,[x l, х2]) - намира корена в интервала [xl, х2]. На
границите на интервала функцията трябва да има противоположни
знаци. Задаването на интервала осигурява 100% сходимост на метода,
докато при задаване на началното приближение е възможно процесът
да се окаже разходящ.
х = fzero(’fun', ..., options) - третият аргумент options е незадължи­
телен. Той представлява запис, в полетата на който могат да се съхра­
няват стойностите на някои параметри за всички функции от групата
funfun. При липсата на този аргумент системата използва подразбиращи
се стойности. Опциите, които се отнасят за функцията fzero, са само
две:
Display - управлява извежданата информация по време на прес­
мятанията; подразбиращата се стойност е ’notify' - уведомяване при
особени ситуации;
То1Х - точност на пресмятанията; подразбиращата се стойност е
2.22е-016.

179
MATLAB. Част 1

Подробности за всички възможни полета на options и начина за


промяна на подразбиращите се стойности вижте в т. 4. 4 (или ползвайте
командата help optimset).
х = fzero('fun\ options, p i, p2, ...) - позволява подаване на пара­
метрите pi, р2, ... във файл-функцията, описваща функцията f(x):
fu n c tio n у = f u n ( x , p i , р 2 , . . . )
у = f (х, p i , р 2 , . . . ) ;
Важно! Ако не желаете да променяте подразбиращите се опции, но
е необходимо предаване на параметри във файл-функцията, на мястото
на аргумента options трябва да въведете символ за празен масив []:
х = fzero('fun', p i, р2, ...).
Съществува още една форма на обръщение към функцията fzero:
[х, у] = fzero(.....) - вторият изходен аргумент у е стойността на
функцията f(x) за пресметнатата стойност на корена х.
Примери:
х = f z e r o ( @ s i n , 3)
X =
3.1416
х = fz e ro ( 's in (3 * x )', 2)
x =
2.0944
Задача:
При пресмятане на критичната сила на устойчивост на запънат прът се
налага да бъде решено трансцендентното уравнение х - tg х = 0. Да се
намерят първите му три корена.
Най-лесният начин да определим началните приближения на
корените или интервалите, в които функцията сменя знака си, е да
построим графиката на тази функция.
Ако се опитаме обаче да построим графиката на функцията х - tg х,
трудно ще определим местата, в които тя пресича абцисната ос:
х = 0 : 0 . 0 1 : 1 2 ; p l o t ( х , х - t a n ( х ) ) , g r i d on;
Това е така, защото функцията tg х
има точки, в които клони към ± оо. Тъй
като системата се стреми да
изобрази всички стойности на f(x) на
екрана, по-голямата част от графи­
ката се слива с абсцисната ос .
Проблемът се решава лесно,
като преобразуваме уравнението в
следния вид: x*cos(x) - sin(x) = 0.

180
Глава 4. Използване на числени методи в MATLAB

plot(x, х.*cos(х)-sin(х)), grid on


Получава се качествено различна
графика, от която лесно опреде­
ляме интервалите, в които са
разположени първите три корена:
[4 5], [7 8] и [10 12]. Остава да се
обърнем към функцията fzero,
която ще пресметне корените с
точност 2,22е-16 :

xl = fzero('x*cos(х)-sin(х)',[4 5]);
х2 = fzero(’x*cos(x)-sin(х)',[7 8 ]);
хЗ = fzero('x*cos(x)-sin(x) [ 1 0 1 2 ]);
disp([' xl = ',num2 str(xl),' x2 = ’/num2 str(x2 ),...
’ x3 = ',num2str(x3)])
xl = 4.4934 x2 = 7.7253 x3 = 10.9041
Забележка. Функцията f(x) може да бъде задавана по три различни
начина:
• като низ Т(х)';
• с помощта на оператора тНпе(Т(х)’) - вж. help inline;
• като файл-функция: function у = fun(x)
У = f (х) ;
Последният начин е най-универсален, защото при дефинирането
на функцията може да се използват неограничен брой команди. Освен
това може да се предават и стойности на параметри р 1, р2, ..., което е
невъзможно при първия начин. Казаното остава в сила и за останалите
функции от групата funfun, които също имат като първи аргумент име на
функция, т. е. те са функции от функции. Оттук идва и името funfun.
4. 4. Минимум на ф ункция на една и на няколко променливи
Ядрото на MATLAB предоставя две функции за намиране на
минимума на функции:
fminbnd - минимум на функция на една променлива;
fminsearch - минимум на функция на няколко променливи.
Има и специален пакет програми Optimization Toolbox [43], който
няма да бъде разгледан тук.

4. 4 .1 . Минимум на функция на една променлива


Функцията fminbnd както повечето функции в MATLAB може да се
извиква с различен брой аргументи:

-181 -
MATLAB. Част 1

xmin = fminbnd('fun\ x l, x2) - намира стойността на аргумента


xmin, осигуряващ минимум на функцията fun(x) в интервала [х1 х2];
xmin = fminbnd('fun', x l, х2, options) - позволява да се променят
някои параметри на изчислителния процес с помощта на аргумента
options. За извеждане на списъка на опциите на функцията fminbnd и
техните подразбиращи се стойности подаваме командата
» optimset(’fminbnd'):
Display : 'notify'
MaxFunEvals : 500
Maxlter : 500
TolX : l.e-04
Забележка. Имената на опциите (първата колонка) може да бъдат
въвеждани съкратено, но така че да бъдат еднозначно различими. (Въз­
можно най-кратките имена в горния списък са подчертани от автора.)
Системата е нечувствителна към малки и главни букви в тези имена.
Пълният списък на опциите за всички функции от групата funfun се
извежда с помощта на командата optim set.
Стойности на опциите, различни от подразбиращите се, се задават
с командата
» options = optimset('Paramr, Value 1, 'Param2',Value2, ....),
където първият аргумент от всяка двойка е името на опцията (параме­
търът), а вторият - нейната стойност. Когато конкретната стойност е низ,
той трябва да се загради в апострофи.
Забележка. Options не е ключова дума, а име на запис, в който се
съхраняват определени стойности на опции! Очевидно едновременно
могат да съществуват няколко различни записа, които да се ползват при
различни повиквания на функцията fminbnd:
options 1 = optimset('tolx', l.e-12, 'maxf, 600, 'maxi', 600);
options2 = optimset('tolx', l.e-10, 'maxf, 700, 'maxi', 700);
Важно! В тези настройки се променят само указаните опции, дока-
то останалите запазват своите подразбиращи се стойности.
Всичко казано за аргумента options се отнася със същата сила за
всички функции от групата funfun.
Следващият вариант на обръщение към fminbnd
xmin = fminbnd('fun', x l, х2, options, p i, p2, ...)
позволява подаване на параметрите p i, р2, ... към файл-функцията,
описваща изследваната функция. В този случай, ако не възнамерявате
да променяте подразбиращите се опции, не забравяйте вместо аргу­
мента options да въведете символа за празен масив [].
Въвеждането на втори изходен аргумент ymin
[xmin, ymin] = fminbnd(...... )

182
Глава 4. Използване на числени методи в MATLAB

позволява да се пресметне и стойността на функцията в точката xmin.


Примери:
х = fminbnd(0 cos,3,4)
х =
3.1416
fun = inline( 1 sin(x) + 3 ’);
x = fminbnd(fun,2,5)
x =
4.7124
Задача:
Да се намерят първите три минимума на функцията у = е'х sin Зях.
За да определим границите на интервалите, в които са разположе­
ни минимумите, с командата fplot построяваме графиката на функцията:
fplot('exp(-х)*sin(3*pi*x)',[0 pi]), grid on
От тази графика определяме следните интервали: [0.3, 0.6], [1,1.3], [1.7, 2]
% Дефинираме функцията с оператора inline:
func = inline ('exp (-х) .*sin (3*pi*x) ')% поелементно умножение
func =
Inline function:
func(x) = exp(-x).*sin(3*pi*x))
% Пресмятаме минимумите
xl = fzninbnd (func,0 .3,0 .6 ) ;
x2 = fminbnd(func,1,1.3);
x3 = fminbnd(func,1.7,2);
disp(sprintf(' xl = %g x2 = %g x3 = %g',xl,x2,x3))
xl = 0.488785 x2 = 1.15543 x3 = 1.82212
4. 4. 2. Минимум на функция на няколко променливи
Функцията fminsearch реализира многомерна нелинейна миними­
зация без ограничения по метода на Nelder - Mead.
Синтаксис:
х = fminsearch(’fun', х0) - намира точката х, в която функцията f(x)
има локален минимум. Аргументът хО е вектор, който определя начално­
то приближение или стартовата точка. Аргументът fun е името на из­
следваната функция f(x), която може да бъде дефинирана като файл-
функция по два начина:
1) При пресмятане на функцията се използват поелементни опе­
рации върху вектора х, чиито елементи са независимите променливи на
тази функция:
function у = fun(x)
у = f (х) ; % поелементни операции върху вектора х
2) При пресмятане на функцията се използват явно отделните елементи
на вектора х, т. е. работи се с отделните аргументи на тази функция:

- 1 83 -
MATLAB. Част 1

function у = fun(x)
y = f (x(l) ,x (2 ) ,, x (n) ) ;
x = fminsearch('fun', xO, options) - незадължителният аргумент
options се използва, когато желаем да променим някои от параметрите
на изчислителния процес. Опциите на fminsearch са следните:
Display : 'notify'
TolX : l.e-04
TolFun : l.e-04
MaxFunEvals : 200*брой аргументи;
Maxlter: : 200*бройаргументи.
x = fminsearch('fun', xO, options, p i, p2, ...) - осигурява се подаване
на параметрите p i, р 2 ,... във файл-функцията
function у = fun(x,pl,p2 ,...)
у = f(x,pl,p2 ,...) ;
[х, fVal] = fminsearch(......) - пресмята и стойността fVal на функци­
ята в точката х, осигуряваща минимум.
Примери:
х = fminsearch(@sin, 3)
х =
4.7124
% Минимум на функцията norm(x) = sqrt(x(l)A2 + х(2)Л2 + х(3)л2)
х = fminsearch('norm(х) *,[ 1 2 3])
х =
1.0е-004 *
-0.4807 -0.1109 -0.1866
% Повишаване на точността
opt = optimset('tolx',1 .0 -1 6 );
х = fminsearch('norm(х)',[1 2 3], opt)
x =
1.0e-016 *
0.3299 0.5177 0.2000
% Вариант на задачата c файл-функция
function u = fun3min(x)
u = sqrt(sum(x.A2 ));
x = fminsearch(@fun3min, [ 1 2 3])
x =
1.0e-004 *
-0.4807 -0.1109 -0.1866
[x,fx] = fminsearch('fun3min',[1 2 3],opt)
x =
1.0e-016 *
0.3299 0.5177 0.2000

184
Глава 4. Използване на числени методи в MATLAB

fx =
6.4563е-01'7
% Вариант с оператора inline
u = inline ('sqrt (sum (x.A2 ))')
u =
Inline function:
u(x) = sqrt(sum(x.A2 ))
[x,fx] = fminsearch(u,[1 2 3],opt)
x =
1.0e-016 *
0.3299 0.5177 0.2000
fx =
6.4563e-017
Сравнете полученото решение c точното - x = [0 0 0], fx = 0.
Важно! Входен аргумент на функцията fun винаги е векторът х на
независимите променливи. Ако всички елементи на този вектор участват
по един и същи начин във функцията, тогава при пресмятането на тази
функция можем да използваме поелементните оператори . \ ./, .А върху
вектора х, както направихме това в последния пример. Ако обаче
функцията не е симетрична спрямо всичките си независими променли­
ви, при описването й трябва да работим явно с отделните променливи,
т. е. с елементите х(1), х(2), ...,х(п) на входния аргумент - вектора х. В
този случай не е необходимо да използваме поелементните оператори.
Този подход е универсален. За последния пример файл-функцията
може да се запише и така:
function u = fun3min(x)
u = sqrt(x(1)A2 + x (2)A2 + x(3)A2);
Пример 1:
Да се минимизира функ­
цията z = х*ехр(-хЛ2 - ул2). 051
Когато функцията зависи
от две променливи, началното
приближение можем да
намерим, като построим лини­
ите на ниво на функцията с
помощта на ezsurfc:
f= 'х*ехр(-хА2 -уА2 ) ';
ezsurfc(f, [ - 2 2 ])
Фиг. 4.1. Функция z = х*ехр(-хЛ2 -ул2 )
От графиката се вижда, че минимумът лежи близо до точката с
координати х = -0,5 и у = 0. Тази точка ще използваме за стартова:

185
MATLAB. Част 1

u = inline('x (1 )*exp(-x(1 ) A2 - x(2 )A2 )');


[x,fx] = fminsearch(u, [-0.5 0])
x =
-0.7071 -0.0005
fx =
-0.4289
Пример 2:
Да се намери минимумът на функцията
и = х 2 + 2.5 sin y - x 2y 2z 2
в околността на точката хО = -0,6, уО = -1,2, z0 = 0,135 .
% Файл-функция
function u = funxyz(v)
х = v (1) ; у = v(2) ; z = v (3) ;
u = x A2 + 2 .5*sin(y) - (x*y*z)A2 ;
%Пресмятане на минимума:
vO = [-0.6 -1.2 0.135];
[vmin, umin] = fminsearch(Qfunxyz, vO) ;
disp(sprintf(' x = %g y = %g z = %g Umin = %g ',...
vmin, umin) )
x = 2.09823e-005 y = -1.57082 z = 0.180303 Umin = -2.5

4. 5. Числено пресмятане на определени интеграли


MATLAB предлага следните четири функции за числено пресмята­
не на определени интеграли:
• quad - пресмята обикновен интеграл чрез адаптивната квадрату­
ра на Simpson;
• quadl - пресмята обикновен интеграл чрез адаптивната квадра­
тура на Lobatto;
• dblquad - пресмята двоен интеграл, позволявайки на потребите­
ля да избере една от горните две процедури или да ползва
собствена процедура;
• triplequad - пресмята троен интеграл, позволявайки на потреби­
теля да избере една от процедурите quad или quadl или да
ползва собствена процедура.
4. 5.1. Числено пресмятане на обикновени интеграли
Функцията quad служи за числено пресмятане на интеграла:

J = \ f ( x) dx
а

Синтаксис:
q = quad(@fun, a, b) - пресмята определен интеграл от функцията
f(x) в границите от а ло b с подразбираща се точност eps = 1.е-6.

186
Глава 4. Използване на числени методи в MATLAB

Подинтегралната функция у = fun(x) има за входен аргумент вектора х и


връща вектора у със стойностите на функцията.
Важно! При съставяне на файл-функцията трябва да се използват
поелементните оператори .л !
q = quad(@fun, a, b, eps) - задава се точност на пресмятанията,
различна от подразбиращата се.
|q, n] = quad(................. ) - освен стойността на интеграла q връща
и броя на пресмятанията п на подинтегралната функция.
q = quad(@fun, a, b, eps, trace, p i, p2, ...) - при trace Ф 0 се трасират
пресмятанията - извеждат се междинните резултати. Позволява подава­
не на числени стойности на параметрите p i, р2, ... във файл-функцията
у = fun(x, р 1 ,р 2 ,...).
Ако желаем да пропуснем някои от незадължителните аргументи
(eps или trace), а е необходимо да използваме параметри, тогава на
мястото на пропуснатите аргументи задължително трябва да вмъкнем
символа за празен масив []:
q = quad(@fun, a, b, [], [], p i, p2, ...);
Функцията quadl, реализираща метода на Lobatto, се използва със
същите аргументи и по същия начин както quad. Процедурата quadl е
по-ефективна от quad при интегриране на гладки функции - по-точна и
по-бърза.
Подинтегралната функция fun може да се дефинира по три раз­
лични начина:
1) Като низ с една-единствена променлива:
q = quad(' 1./(х.*3 - 2*х - 5)', 0, 2);
2) Като обект - с оператора inline:
F = inline('l./(x.A3 - 2*х - 5)');
q = quad(F, 0, 2);
3) Чрез файл-функция:
fu n c tio n у = m y fu n (х)
у = 1. / (х. А3 - 2 * х - 5 ) ; % поелементни операции за векторите !!!
% Пресмятане на интеграла
q = q u a d ( @myfun, 0 , 2 ) ;
Третият метод е най-универсален.
Пример 1:
q = q uad( ' s i n ( х ) . / х ' , 1 , 2 )
q =
0.6593

- 1 87 -
MATLAB. Част 1

Пример 2:
q = quadl('exp(-x.A2 ).*log(x)',1 ,9,1 .e-1 2 )
q s
0.0359
Пример 3:
Да се пресметне дължината на крива, зададена параметрично:
х = sin 2 t, у = cos t, z = t , за интервала [0 Зя].
Зл- .— ---------------------------- Зя ------------------------------------------------------

(= j-yjх 2+ у 2+ z 1dt = JV4cos22 f+ sin 2н - left


0 0
% Подинтегрална функция:
function f ,= hcurve(t)
f = sqrt(4*cos(2*t).A2 + sin(t).A2 + 1);
%Пресмятане на дължината C:
1 = quad(@hcurve, 0,3*pi)
1 =
17.2220
Пример 4:
Пресмятане на интеграл, зависещ от параметри:
. 'Г/ -V3 sin*. ,
+ p z—7=^)dx
0.5 V X

% Подпрограма-функция:
function z = fparam(x,pl,p2 )
z = pl*exp(-x.A2 ) + p2 *sin(x)./sqrt(x);
%Пресмятане на интеграла за конкретни стойности на параметрите:
q = quad(0fparam, 0.5,pi,1.e-10,[],0.5, 3.33)
q =
5.4011
Пример 5:
Да се състави файл-функция, която да построява графиката на функцията

F(x) = ) f ( t ) d t
и
Като входни аргументи да се използват името на подинтегралната функ­
ция fun, долната граница на интегриране а, горната граница хгпах на
интервала, в който да бъде построена графиката, и броят точки на тази
графика. Предлагаме ви следното примерно решение на задачата:

- 188-
Глава 4. Използване на числени методи в MATLAB

function hgraf = plotint(fun,a,xmax,пр)


0^ *************************************************
% Файл-функция plotint
% Предназначение:
% Построява графиката на функцията F(x), получена
% чрез интегриране на f(t)в границите от а до х.
% Входни аргументи:
% fun -име на файл-функция, описваща
% подинтегралната функция;
% а -долна граница на интегриране;
% xmax -горна граница на интервала на графиката;
% пр -брой точки на графиката.
% Изходни аргументи:
% hgraf -указател (дескриптор) на графиката,
t = 1 inspace (а,xmax,пр) ; % вектора с абцисите
У (1 ) = 0 ; % F (а) = 0 !
for i = 1: пр-1 % Интегриране
y(i+l) = quadl (fun, t (i) ,t(i+l)) ; % на поредния
end % участък
fint = cumsum(y) ; % кумулативна сума = F(t)
hgraf = figure; % отваряне на нов прозорец
plot(t,fint); grid on
% *********** End ofProgram plotint ************

Фиг. 4.2. Графика, построена c функцията plotint

Програмата е тествана върху следния интеграл:

F ( x ) = j e '77(sin/ + co st)d t
0
- 1 89 -
MATLAB. Част 1

Файл-функцията, описваща подинтегралната функция, е:


function у = fun5(t)
у = exp(-sqrt(t)).*(sin(t)+cos(t));
Извикваме функцията plotint:
h = plotint(0fun5,0,4*pi,500);
Резултатът е представен на фиг. 4. 2.
4
.5.2
.Чи
сле
ноп
рес
м я
тан
енадв
о й
нии
нте
гра
ли
Функцията dblquad служи за числено пресмятане на двойния
интеграл vг
Q= I \ f( x ,y ) d x d y
Синтаксис: }' х'
q = dblquad(@fun, x l, х2, y l, у2) - извикване с минималния брой
входни аргументи - името fun на файл-функцията, описваща подинтег­
ралната функция, и границите на интегриране x l, х2, у 1, у2.
Важно! Файл-функцията z = fun(x, у) има за входни аргументи
вектора х и скалара у и връща вектора z със стойностите на подинтег­
ралната функция. Това трябва да се има предвид при въвеждането на
израза на тази функция - при умножение, деление или степенуване на
вектори трябва да се използват операторите за поелементни операции
./, .А . Например за подинтегралната функция

f ( x , y ) = е~х sin jc + у х 2 + — -—
cosh*
файл-функцията трябва да изглежда така:
function z = fun(x,y)
z = exp(-х).*sin(х) + y*x . A2 + l./cosh(x);
Забележка. Не се смята за грешка, ако се използват поелемент­
ните оператори върху скалари, но системата приема за груба грешка
използването на обикновени оператори за умножение, деление и сте­
пенуване върху вектори! С други думи - по-добре повече поелементни
оператори отколкото по-малко. Например функцията vectorize не прави
разлика между вектори и скалари - всичките обикновени оператори *, / и
л в един израз тя заменя със съответните поелементни.
Извикване с допълнителни аргументи:
q = dblquad(@fun, ....., eps) - пресмятанията се извършват с точ­
ност eps вместо подразбиращата се 1.е-6;
q = dblquad(@fun, ....., eps, @quadl) - използва метод на Лобатто
(функцията quadl) вместо подразбиращия се метод на Симпсон (quad);

- 1 90 -
Глава 4. Използване на числени методи в MATLAB

q = dblquad(@fun, ....., eps, @myquadf) - използва потребителска


процедура myquadf вместо quad или quadl; задължително е
процедурата myquadf да се вика по същия начин както quad или quadl;
q = dblquad(@fun,.... , eps, @quadl, p i, p2, ...) - подава параметри­
те p 1, p2, ... към файл-функцията z = fun(x, у, p 1, p 2, ...);
q = dblquad(@fun,.... , [], [], p i, p2, ...) - вместо явно задаване на
точността и процедурата за интегриране се използват подразбиращите
се eps = 1.е-6 и quad.
Пример 1:
Да се пресметне интегралът
п 2л

Q - J J ( j 's i n x + .rc o s > 0 < & c /y


0п
като се използват трите възможни начина за задаване на подинтеграл-
ната функция съответно като низ, inline-обект, файл-функция.
% Задаване като низ:
q = dblquad('y*sin(х) + x*cos(у)1,pi,2*pi,0,pi)
q =
-9.8696
% Задаване като обект c оператора inline:
z = inline('y*sin(x) + x*cos(y)');
dblquad(z,pi,2 *pi,0 ,pi)
ans =
-9.8696
% Задаване c файл-функция:
function z = podintf(x,y)
z = y*sin(x) + x*cos(y);
% Пресмятане на интеграла:
q = dblquad(@podintf,pi,2 *pi,0 ,pi)
q =
-9.8696
Съвет. Ако един обект, зададен с inline, е твърде дълъг, за да се събере
на един ред, той може да бъде пренесен на няколко реда, като се
радели на поднизове, обединени в един с помощта на конкатенация:
f = inline([’Stringl',...
'String2 ',...

'StringN']);
Пример 2:
Да се пресметне интегралът
Iп
j \(е хsin2х + е~хcos2y ) d x d y
0-п

-191 -
MATLAB. Част 1

като се използват двете функции quad и quadl. Да се съпостави тяхното


бързодействие.
% Дефинираме подинтегралната функция:
f = inline(['exp(х).*sin(х).А2 +
*exp(-х).*cos(у).А2 '])
f =
Inline function:
f(x,y) = exp (x) .*sin(x).л2 + exp(-x) .*cos(у) .л2
% Пресмятаме интеграла c помощта на функцията quad:
tic, dblquad(f,-pi,pi,0,1,1.e-8,@quad), toe
ans =
26.0384
elapsed_time =
6.9850'
tic, dblquad(f,-pi,pi,0,1,1.e-8,@quadl), toe
ans =
26.0384
elapsed_time =
0.7500
Бързодействието на функцията quadl се оказа впечатляващо - тя
пресметна интеграла 9,3 пъти по-бързо в сравнение с quad! Не забра­
вяйте, че това предимство се проявява само при гладки функции.
Важно! Въпреки че функцията dblquad използва правоъгълна
област за интегриране, тя може да се използва и за произволна област
g(x,y) < 0. Достатъчно е да дефинираме подинтегралната функция така,
че извън границите на интеграционната област g(x,y) тя да приема
нулеви стойности. При това правоъгълната област трябва да включва в
себе си областта g(x,y), т. е. да представлява правоъгълник, описан
около затворената крива g(x,y) = 0!
Ще илюстрираме идеята със следния пример:
Пример 3:
Да се пресметне обемът на полусферата
х2+ у 2+ z2 = 1 ИЛИ z = у ]\ -х 2- у 2

% Първи начин - с помощта на функцията шах:


dblquad(inline('sqrt(max(1-х.А2-у.А2 ,0))'),-1,1,-1,1)
ans =
2.0944
Пояснение. Когато точката излезе извън интеграционната област хА2 +
ул2 <= 1, първият аргумент на функцията max става отрицателен и тя
връща стойността 0.

- 1 92 -
Глава 4. Използване на числени методи в MATLAB

% Втори начин - с помощта на логическо отношение:


dblquad(inline(’sqrt(1-х.А2-у.А2) .* (х.А2+у.А2 <= 1) ’), ...
-1,1,-1,1)
ans =
2.0944
Пояснение. При втория начин логическият израз х.Л2 + у.л2 <= 1 е
вектор с елементи, равни на:
1 - когато съответната точка се намира
в кръговата област хЛ2+уЛ2 <1;
0 - когато точката е извън кръговата
област.
Очевидно, освен като логически кон­
станти (true и false), 1 и 0 могат да се
използват и като обикновени числа в
аритметичните изрази.
Обобщение на втория метод:
Ако f(x,y) е подинтегралната функция,
a g(x,y) < 0 - интеграционната област,
тогава интегралът може да бъде решен с помощта на командата
q = dblquad(inline('f(x, y).*(g(x, у) <= 0)'), x l, х2, y l, у2);
4. 5. 3. Числено пресмятане на тройни интеграли
Функцията triplequad служи за числено пресмятане на тройния
интеграл
Q = J / \f{x ,y ,z )d x d y d z
*1.»'! *1
Синтаксисът е същият както при функцията dblquad, с единстве­
ната разлика, че вместо двумерната правоъгълна област на интегри­
ране се използва паралелепипедна област xl < х < х2, y l < у < у2, zl <
z < z2. И тук можем да използваме една от трите функции за ин­
тегриране: quad, quadl или потребителска функция. По подразбиране се
използва quad. Без опции например функцията triplequad се вика по
следния начин:
q = triplequad(@fun, x l, х2, y l, у2, z l, z2);
Подинтегралната функция f(x, у, z) може да се въведе като низ,
като обект с inline или да се оформи като файл-функция:
function u = fun(x,y,z)
u = f(x,y,z);
В последния случай трябва да се има предвид, че от входните аргумен­
ти х е вектор, а у и z са скалари. Изходният аргумент е векторът и със
стойностите на подинтегралната функция. Не трябва да се забравя, че

13 - 193-
MATLAB. Част 1

при пресмятането на тази функция върху векторите трябва да се из­


ползват поелементни оператори.
И тук бихме могли да извършим интегриране в произволна непра-
воъгълна област g(x,y,z) < 0, като оформим файл-функцията така, че за
точки извън тази област функцията да връща нулеви стойности:
function u = fun(x,y,z)
u = f(x,y,z).*(g(x,y,z) <= 0);
Пример 1:
q = triplequad(inline(*y*sin(x)+z*cos(x)'),0,pi,0,1,-1,1)
q =
2.0000
Пример 2:
Обемът на ещна затворена област се пресмята с помощта на интеграла
V = \\\d x d y d z
Да се пресметне обемът на сфера с единичен радиус хл2 + ул2 + zA2 < 1.
Тук последното неравенство представлява интеграционната област
g(x,y,z) = хЛ2 + ул2 + zA2 -1 < 0, а подинтегралната функция f(x,y,z) = 1.
V = triplequad('х .А2+у.A2+z.A2-l <= 0',-1,1,-1,1,-1,1)
V =
4.1888
4. 6. Апроксимация и интерполация
Пълен списък на функциите за апроксимация и интерполация
можете да получите с командата help polyfun.
4. 6 .1 . Апроксимация
При провеждане на физически експерименти често се налага по
табличните данни да се създаде функция, която с достатъчна за инже­
нерната практика точност да описва съответния процес. Създаването на
такава функция се нарича апроксимация.
Функциите на една променлива най-често се апроксимират с поли­
номи от различна степен. За тази цел MATLAB предлага функцията
polyflt:
р = polyfit(x, у, п) - апроксимира таблично зададена функция чрез
вектора на абсцисите х и на ординатите у с полином от n-та степен.
Връща вектора р с коефициентите на полинома.
Пример:
х = [12345678];
у = [-1.1,0.2,0.5,0.8,0.7,0.6,0.4,0.1];
pl = polyfit(х,у,1) ; % линейна функция
р2 = polyfit(х,у,2) ; % квадратна функция
рЗ = polyfit(х,у,3) ; % кубична функция

194
Глава 4. Използване на числени методи в MATLAB

р4 = polyfit (х,у,4) ; % полином от 4-та степен


stem (х,у) % изобразяване на табличните данни
hold on % задържане на прозореца
% Построяване на графиките
х1 = 0.5:0.05:8.5;
yl = polyval(pi,х1);
у2 = polyval(р2,xl);
уЗ = polyval(рЗ,х1);
у4 = polyval(р4,xl);
plot(xl,yl,':', х 1 , у 2 , ’,х1,уЗ,,х1,у4,
grid on
set(gca,'FontName','Arial Cyr','FontSize’,16);
title(' Полиномна Апроксимация')
xlaOoel ('x ') , ylabel('y')

Фиг. 4.3. Апроксимация на таблични данни


4. 6 .2. Интерполация
Едномерна таблична интерполация се извършва с процедурата
interpl.
Синтаксис:
yi = in te rp l(х, у, xi, 'method'),
където х е вектор с таблични стойности на аргумента;
у - вектор с таблични стойности на функцията;
xi - скалар или вектор със стойности на аргумента, за които
желаем да получим стойности на функцията;

195
MATLAB. Част 1

'method' - метод на интерполиране; възможни са три стойности


за този аргумент: ’linear’ - линейна интерполация; ’cubic’ -
кубична интерполация; ’spline’ - кубична сплайн-интерполация.
yi - скалар или вектор с интерполираните стойности на функция­
та, съответстващи на елементите на вектора xi.
Забележки:
1) По подразбиране се прилага линейна интерполация.
2) Работата на функцията interpl при указан метод 'spline' е екви­
валентна на функцията spline:
yi = spline(x, у, xi);
3) При указана опция 'extrap' е допустимо някои от елементите на
xi да са извън интервала на табличните стойности на х. За тях
функцията извършва екстраполация.
MATLAB предлага още следните интерполиращи функции:
interp2 - двумерна интерполация за функция на две независими
променливи z = f(x, у), зададена таблично;
interp3 - тримерна интерполация за функция u = f(x, у, z);
interpn - n-мерна интерполация за функция у = f(xi, х2, .., хп).
Пример:
х = 0:10; у = sin(x); xi = 0:0.25:10;
yi = interpl(x,y,xispline');
plot(x,y,'o-',xi,yi,':'), grid on
legend('Table','Interp',0)

Фиг. 4.4. Интерполация на таблични данни

196
Приложение 1
Основни функции, оператори и команди в MATLAB
Командите, операторите и функциите в това приложение са системати­
зирани по предназначение. Над таблицата за всяка група е посочена
командата за получаване на информация от системата Help.
I. Системни команди » help general
1. Команди за управление на работното пространство
workspace - отваряне на Workspace Browser ;
who - информация за променливите в работното пространство;
whos - подробна информация за променливите в работното пространство;
clear - премахване на променливи от работното пространство;
pack - дефрагментиране на работното пространство;
save - запис на променливи от работното пространство в двоичен файл;
load - зареждане на променливи в работното пространство от файл ;
quit - излизане отMATLAB.
2. Команди за работа с файлове
what списък на файловете в дадена дирктория;
which извеждане на пълния адрес на даден файл;
lookfor претърсване на всички m-файлове по ключова дума;
exist проверка за съществуване на даден обект -файл, директория,...;
edit редактиране на т-файл;
type разпечатване на съдържанието на m-файл в командния прозорец;
dbtype номериране на редовете на извеждания файл;
open отваряне на масив или файл;
pcode създаване на р-код на даден т-файл.
3. Команди за настройване на пътя за достъп
path извеждане и настройка на списъка на достъпните директории;
addpath добавяне на нови директории към текущия Search Path ;
rmpath премахване на директории от текущия Search Path ;
pathtool активиране на MATLAB Set Path Tool.
4. Команди за управление на командния прозорец
clc изчистване на командния прозорец, като изтрива всичко;
home изчистване само на видимата част на командния прозорец;
echo управление на echo-печата на командите в изпълняваните файлове;
more управление на изходния печат в командния прозорец;
diary запис на MATLAB -сесия в текстов файл;
format настройка на формата на изходните числени данни;
beep подаване на звуков сигнал.
5. Команди на операционната система
! - изпълнение на DOS-команда отMATLAB без връщане на резултата;
dos - изпълнение на DOS-команда отMATLAB с връщане на резултата;
dir - извеждане на съдържанието на определена директория;
cd - смяна на текущата директория;

197
Приложения

pwd връщана на адреса на текущата директория;


m k d ir създаване на директория;
r m d ir премахване на директория;
c o p y file копиране на файл или директория;
m o v e file премахване на файл или директория;
d e le te изтриване на файл или графичен обект.

II. Получаване на информация от системата HELP__________ _____


h e lp - извеждане на списък на темите ( l i s t o f t o p i c s ) ;
h e lp to p ic - извеждане на списък на функциите от дадена тема t o p i c ;
h e lp f nam e - извеждане на информация за конкретна функция f nam e в
командния прозорец;
h e l p w i n fn a m e - извеждане на информация за конкретна функция fn a ro e
в H e lp B ro w s e r;
d o c f nam e - пълна информация от документацията за конкретна функция.
Забележка. Информация за потребителски функции и програми може да се полу-
чи само с командите h e l p и h e l p w i n .________________________________________

III. Системни константи


Pi числото тт;
i или j имагинерната единица;
eps относителната точност на системата;
re a lm ! n минималното реално число;
r e a lm a x максималното реално число;
Inf безкрайност;
N aN Not-a-Number - неопределеност.

IV. Математически оператори » h e lp o p s _______________

Обикновени: *, /, \, А, '
Поелементни: + , - , .*, ./, . \ , . А, . '
v e c to r iz e - замяна на обикновените оператори с поелементни.

V. Елементарни математически функции » help e lfu n


sin(х) , asin(x) , sinh(x) , asinh(x) , exp (x)
cos(х) , acos(х) , cosh(x) , acosh(x) , log(x)
tan (х) , atan(х) , tanh(x) , atanh(x) , abs(x)
cot(x) , acot(x) , coth(x) , acoth(x) , sqrt(x)
VI. Вектори и матрици » help elmat
1. Въвеждане, извличане и премахване на елементи, конкатенация______
х = хО : x s t e p : x e n d ; - вектор с равноотдалечени елементи;
х = lin s p a c e (х О , x e n d , п ) ; - вектор със зададен брой елементи п;
v = [1 , 2 , 3] - директно въвеждане на вектор чрез елементите му;
А = [ 1 2 3 ; 4 5 6 ; 7 8 9] - въвеждане на матрица;
А (i , j ) - извличане на елемента а; j ;
A ( i , :) - извличане на i -тия ред;
А (: , j ) - извличане на j -тия стълб;

198
Приложение 1. Основни функции, оператори и команди в MATLAB

А<: , j) = п - премахване на j -тия стълб;


A(logexpr(А)) - логическо индексиране;
А = [А1, А2 , . . . ] - хоризонтална конкатенация на матрици;
А = [А1;А2;. . . ] - вертикална конкатенация на матрици.

2. Генериране на вектори и матрици


zeros запълване c нули;
ones запълване c единици;
eye единична матрица;
rand матрица с равномерно разпределени случайни числа;
randn матрица с елементи, разпределени по нормален закон.
3. Размери на вектори и матрици
length - дължина на вектор;
size - размер на матрица.
4. Преобразуване на вектори и матрици
fliplr огледален образ спрямо вертикалната ос;
flipud огледален образ спрямо хоризонталната ос;
rot90 завъртане на матрица на 90° обратно на часовниковата стрелка;
reshape промяна на формата (размера) на матрица;
tril връщане на долната триъгълна част на матрица;
triu връщане на горната триъгълна част на матрица;
diag извличане на главния диагонал или създаване на диагонална
матрица.
5. Произведения на вектори_______________________________
dot - скаларно произведение на вектори;
cross - векторно произведение на триелементни вектори.
6. Матрични функции » help matfun
expm - матрична експонента;
logm - натурален логаритъм;
sqrtm - корен квадратен;
funm - пресмятане на матричната версия на дадена функция.
7. Обработка на експериментални данни » help datafun
max, min максимален/минимален елемент;
mean средноаритметична стойност;
std средноквадратично отклонение;
sort сортиране във възходящ ред;
sum сума на елементите;
prod произведение на елементите;
cumsum кумулативна сума;
cumprod кумулативно произведение;
diff пресмятане на разликите между съседните елементи;
trapz интегриране на таблично зададена функция.

199
Приложения

VII. Операции над полиноми » help polyfun


Р — [ /an_i,...,ax,a0] - задаване на полином чрез коефициентите му;
conv - умножение на полиноми;
deconv - деление на полиноми;
roots - пресмятане на корените на полином;
poly - намиране на полином по зададени корени *йли пресмятане на
характеристичния полином на квадратна матрица;
polyval - пресмятане на полином по зададена стойност на аргумента.

VIII. Файл - функция» help lang


function [yl ,у2,...] = funcname(xl,х2,.
global pi р2
yl = fl(xl,x2, .,pl,p2,...);
у2 = f2(xl/x2/ .,р1,р2,...);

yN = fn(xl,x2,...,pl,p2,...);
nargin - брой на действителните входни аргументи;
nargout - брой на действителните изходни аргументи;
varargin - масив от клетки с променлив брой входни аргументи;
varargout - масив от клетки с променлив брой изходни аргументи;
feval - пресмятане на функция, чието име е зададено като низ;
private - име на директория с файл-функции, обслужващи само роди-
_________________ телската директория.__________________________________________

IX. Файлове с данни. Форматирани файлове » help iofun


save запис на данни в двоичен файл;
load зареждане на данни от файл;
fopen отваряне на файл;
fclose затваряне на файл;
fprintf печат на форматирани данни във файл или на екрана;
fscanf четене на форматирани данни от файл;
fgetl четене на ред от форматиран файл;
sprintf печат на форматирани данни в низ;
sscanf четене на данни от низ.

X. Управляващи оператори. Програмиране » help lang______


Релации: < , < = , > , > = , = = , ~ =
Логически оператори: & - И, | - ИЛИ, ~ - НЕ
Логически функции: all, any
if ...elseif ...else ...end - условен оператор;
switch ...case ...otherwise ...end - превключващ оператор;
for i = i s t a r t : i s t e p : i e n d , s t a t e m e n t s , end - аритметичен цикъл;
while l o g e x p r , s t a t e m e n t s , end - условен цикъл;
try ...catch ...end - обработка на аварийни ситуации;

- 200-
Приложение 1. Основни функции, оператори и команди в MATLAB

b re a k - прекъсване на изпълнението на цикъл; ако цикълът е вграден,


управлението се предава на външния цикъл;
c o n t in u e - прекъсване на текущата итерация на цикъла и продължаване
със следващата итерация;
pause - пауза в пресмятанията;
k e y b o a rd - предаване на управлението към клавиатурата;
re tu rn - връщане към извикващата програма;
in p u t - диалогово въвеждане на данни;
d is p - извеждане на данни и съобщения;
e rro r - съобщение за грешка с прекратяване на изпълнението;
w a r n in g - предупредително съобщение без прекратяване на изпълнението;
n u m 2 s tr - конвертиране на число в низ;
m enu - организиране на менюта;
eval - изпълнение на MATLAB-команда, зададена като низ;
t i c , statements , t o e - засичане на време на изпълнение на оператори.

XI. Двумерна графика » h e lp g ra p h 2 d

p lo t - графика на функция на една променлива;


lo g lo g - графика в логаритмичен мащаб по двете оси;
s e m ilo g x - графика в логаритмичен мащаб по оста х;
sem i lo g y - графика в логаритмичен мащаб по оста у;
p o la r - графика в полярни координати;
a x is - управление на мащабирането и изгледа на координатните оси;
g r id o n /o ff - добавяне/премахване на мрежата от текущата графика;
h o ld o n / o f f - задържане/освобождаване на текущия прозорец;
s u b p lo t - разделяне на основния графичен прозорец на части;
x la b e l - надпис по оста х;
y la b e l - надпис по оста у;
title - заглавие на графика;
te x la b e l - конвертиране на израз във формат ТеХ;
g te x t - нанасяне на надпис с мишката;
te x t - нанасяне на текст на определено място в графиката;
le g e n d - нанасяне на легенда на графиките на няколко функции;
set - настройка на параметрите на отделните графични обекти.

XII. Тримерна графика » h e lp g ra p h 3 d

m esh изобразяване на повърхнина c помощта на мрежа;


s u rf изобразяване чрез непрекъсната повърхнина;
s u rfl изобразяване чрез непрекъсната осветена повърхнина;
m e s h g r id пресмятане на матриците на координатите на възлите,
c o lo r b a r изобразяване на цветовата лента;
c o lo r m a p задаване на цветова карта;
s h a d in g i n t e r p - плавен преход на сенките.

201
Приложения

XIII. Специална графика » h e lp s p e c g ra p h


com et анимационно начертаване на равнинни линии с комета;
c o m e t3 анимационно начертаване на пространствени линии с комета;
bar стълбчести графики в равнината;
Ь агЗ стълбчести графики в пространството;
s te m графики на дискретни функции в равнината;
s te m 3 графики на дискретни функции в пространството;
p ie кръгови графики в равнината;
p ie 3 кръгови графики в пространството;
h is t построяване на хистограми;
fp lo t изобразявана на графиката на аналитично зададена функция;
e z p lo t графика на явно, неявно и параметрично зададена функция;
e z p o la r графика на функция в полярни координати;
s u rfc като s u r f , с допълнително изобразяване линиите на ниво;
ezm esh облекчено изобразяване на повърхнина с мрежа;
e zs u rf облекчено изобразяване на повърхнина;
e z s u rfc като e z s u r f , плюс линии на ниво;
e zg ra p h 3 облекчено изобразяване на повърхнини.

XIV. Числени пресмятания » help m a tfu n ; » help fu n fu n

A x = b —> x A\b - решаване на линейна система уравнения;


e ig - собствени стойности и собствени вектори на матрица;
svd - сингулярно разлагане на матрица;
fz e ro - пресмятане на корен на уравнение от вида f (х) = 0;
f m in b n d - минимум на функция на една променлива;
f m in s e a r c h - минимум на функция на няколко променливи;
o p tim s e t - настройка на опциите;
o p tim g e t - извличане на стойности на текущи опции;
in lin e - дефиниране на i n l i n e -функции;
quad - пресмятане на обикновен интеграл чрез метода на Симпсон;
quadl - пресмятане на обикновен интеграл чрез метода на Лобато;
d b lq u a d - пресмятане на двоен интеграл;
t r ip le q u a d - пресмятане на троен интеграл;
p o ly fit апроксимиране на таблично зададена функция с полином ;
in te r p l - интерполация на функция на една променлива;
s p lin e сплайн-интерполация на функция на една променлива;
in te r p 2 двумерна интерполация;
in te r p 3 - тримерна интерполация;
in te rp n - n-мерна интерполация;
d o u b le - пресмятане на символни числени изрази с двойна точност.

202
Приложение2
Кратък справочник за работа с Notebook

Първоначално конфигуриране на Notebook


От средата на MATLAB подаваме командата
» notebook -setup
Създаване, коригиране и отпечатване на М-книга
Нова М-книга
От MATLAB :» notebook
От M S Word: File/New..., избираме шаблона m-book.dot
File/New M-file
От Notebook:
Отваряне на съществуваща М-книга
От MATLAB: » notebook filename
От M S Word: File/Open... , избираме файла.
От Win Explorer: Двойно щракване върху файла.
Превръщане на обикновен Word-файл в М-книга
От средата на MS Word създаваме нова М-книга:
File/New..., избираме шаблона m-book. dot.
Вмъкваме Word файла:
Insert/File... , избираме .doc ф айла.

Запис на файла с М-книгата


File/Save или File/Save As...
Отпечатване на М-книга
File/Print
Описание на командите от менюто Notebook
Ако“ не е указано изрично, описаните тук команди се изпълняват върху
един от т. нар. т е к у щ и обекти: абзац, клетка, група от клетки или секция.
Обектът е текущ, когато е изпълнено едно от следните условия:
• Курсорът се намира в произволно място на обекта;
• Курсорът е в края на реда, в който е разположена затварящата скоба
на входна клетка или група;
• Курсорът е в изходната клетка на съответната входна клетка или
група;
• Обектът е предварително маркиран, както се маркира обикновен текст
в M S Word.

203
Приложения

^ D e fin ^ ^ n p u ^ ^ e l^ J
Дефинира входна клетка от текущия абзац, маркирана последова­
телност от MATLAB-команди или клетка тип Autoinit. Входната клетка се
загражда в квадратни скоби и се изобразява в стил input: удебелен шрифт
Courier New с тъмнозелен цвят и размер 10 pt.

^ D e f in e ^ A u t o I n i ^ C ^
Дефинира автоматично изпълнима клетка от текущия абзац, текущата
входна клетка или маркирана последователност от MATLAB-команди. Този
тип клетки се изпълняват автоматично при всяко отваряне на М-книгата.
Клетката се загражда в квадратни скоби и се изобразява в стил Autoinit:
удебелен шрифт Courier New с тъмносин цвят и размер 10 pt.

I D e fin e Cailc Zone I


Дефинира автономна секция от документа (зона за пресмятане), която
обединява предварително маркирани текст, входни и изходни клетки, решава­
щи съвместно определена задача. Секциите се разграничават със специални
маркери.
^ J n d e fin ^ ^ e ll^ j
Преобразува текущата клетка или маркирана последователност от
клетки в обикновен текст, стил Normal. При това квадратните скоби, заграж­
дащи клетките, се премахват. При преобразуване на входни клетки автома­
тично се преобразуват и съответните им изходни клетки, дори и ако не са
маркирани. Обратното не е вярно.
Ако се преобразува изходна клетка, която съдържа графика, графиката
се запазва, но вече не е свързана със създалата я входна клетка. Това озна­
чава, че при повторно изпълнение на входната клетка новата графика се
разполага в отделен прозорец, а старата остава непокътната.
^ P u r g ^ O u t p u ^ C e lls T J
Премахва всички маркирани изходни клетки.
^ J r o u p ^ e lls j
Преобразува маркирана последователност от входни клетки в една-
единствена многоредова входна клетка, наречена група клетки. С тази
група клетки оперираме както с една входна клетка.
Ако маркираният фрагмент включва обикновен текст, той се разполага
след групата клетки. Ако обаче текстът се намира пред първата входна
клетка, той остава на мястото си.

204
Приложение 2. Кратък справочник за работа с Notebook

Ако маркираният фрагмент включва изходни клетки, те се отстраняват,


но в групата се включват съответните им входни клетки, дори и да не са били
маркирани.
Ако първата клетка е била от типа Autoinit, цялата група приема
този тип.
Пресмятането на една група става с командата Evaluate Cell. При
това резултатите от пресмятанията се разполагат в една-единствена изходна
клетка, разположена непосредствено след групата.
Обединяването на няколко входни клетки в една е особено полезно,
когато няколко команди генерират една графика, например командите plot,
grid on, xlabel, ylabel, title, legend.
^ U n g r o u p ~ C e lls J
Преобразува текущата група входни клетки в последователност от
единични входни клетки или клетки от типа Autoinit. При това съответната
изходна клетка се премахва.
^ ^ ^ te /S h o ^ ^ e llj^ S r k e r ^ jj
Скрива или показва маркерите на клетките в цялата М-книга. Това не
оказва влияние върху вида на отпечатвания документ, защото тези маркери
(квадратните скоби, заграждащи всяка клетка) не се отпечатват.
^oggl€^Grapl^Output^fo3^Cel^|
Тази команда има превключваща функция: забранява или разрешава
извеждането на графиката, генерирана от текущата входна клетка. При заб­
рана в края на клетката се появява надписът (no graph). При следващо
изпълнение на командата надписът изчезва. В режима (no graph) се
отменя действието на опцията Embed Figures in M-book, избрана в
диалоговия прозорец Notebook Options, но само за текущата клетка.
^ v a lu a te C e ^ ^
Изпраща текущата входна клетка или група клетки в средата на MATLAB
за обработка. Резултатите от пресмятанията или съобщенията за грешки се
поместват в изходна клетка.
Когато се пресмята входна клетка, за която все още не съществува
изходна, резултатите се поместват в изходна клетка, разположена непосред­
ствено след входната. Ако съществува изходна клетка, резултатите се раз­
полагат в нея независимо от местоположението й в М-книгата!
Резултатите от пресмятанията се изобразяват в стил Output - шрифт
Courier New със син цвят и размер 10 pt. Съобщенията за грешки се изо­
бразяват в стил Error - удебелен шрифт Courier New с червен цвят и
размер 10 pt.

205
Приложения

J ^ E v a lu a t^ ^ a l^ ^ o n ^ J
Изпраща всички входни клетки от текущата секция (зона за пресмята­
ния) в MATLAB за обработка. На всяка входна клетка съответства изходна
клетка за резултатите от пресмятанията. Ако не е съществувала изходна клет­
ка, тя се създава непосредствено след входната. Ако пък е съществувала,
тогава резултатите се поместват в нея независимо от местоположението й в
документа. При това старите резултати се заменят от новите.
^ J E v a lu a t< ^ ^ - b o o ]J
Пресмята цялата М-книга, като изпраща всички входни клетки от доку­
мента в MATLAB за обработка. Пресмятанията започват от началото на кни­
гата независимо от текущото положение на курсора.
За всяка входна клетка Notebook генерира изходна клетка. Ако не е има­
ло изходна клетка, тя се създава непосредствено след входната. Ако пък е
имало, тогава резултатите се поместват в нея независимо от местоположе­
нието й в документа.
^ ^ v a lu a t^ L o o p J
Пресмята циклично предварително маркирана последователност от
входни клетки определен брой пъти. След подаване на крмандата се появява
___________________ диалогов прозорец - Evaluate Loop. В полето
Evaluate Loop stop After в този прозорец въвеждаме броя на
циклите и щракваме бутона |
Loop Count: 0

Stop After: 1 10
Notebook започва изпълнението на коман­
дите, като указва броя на завършените итерации
Loop Speed: Slower J в полето Loop Count. За да удължим паузата в
края на всяка итерация, щракваме бутона
I r 's i a i r t :l 1 dose I Slower, а за да я съкратим - бутона Faster. За
1________________________________________ временно спиране на изпълнението на
командите щракваме бутона Pause, а за продължаване - бутона Resume.
Обработката прекратяваме, като щракнем бутона stop. Диалоговия прозорец
затваряме с бутона Close.
^ J B rin g ^ lA T L A B ^ to ^ lro n tJ
Извежда командния прозорец на MATLAB на преден план. Тук можем да
извършим серия от пресмятания, като използваме пълните възможности на
системата. При необходимост можем да прехвърлим част от резултатите през
Clipboard в М-книгата.
^ lo te b o o j^ ^ jp tio n ^
Позволява настройка на опциите, свързани с извеждането на екрана на
числените и графичните резултати от пресмятането на М-книгата. След
въвеждането на тази команда се появява прозорецът Notebook Options.

206
Приложение 2. Кратък справочник за работа с Notebook

Notebook Options X Тук можем да зададем формата Numeric


ч Format, в който да се извеждат числените
Numeric Format
резултати (избира се от падащия списък);
[shot ▼]
разстоянието между входните и изходни клетки
• Loose
(Loose - голямо, Compact - малко); дали
Compact
генерираните графики да се вграждат в
документа (по подразбиране - да), или да се
Figure Options
извеждат в отделен прозорец (при изключена
Embed Figures in M-book
опция Embed Figures in M-book); цветовата
W Use 16-Color Figures
палитра - 16 или 256 цвята; размера на
U n its | In c h e s вгражданите в документа фигури - Units,
W id th
> Width, Height.
H e ig h t | 3 .5 Опцията Stop evaluating on error
се използва за контролиране на грешките при
^ Stop evaluating on error пресмятане на цялата М-книга. Ако тази опция е
включена, Notebook прекратява пресмятанията
l!irSgZl~l| Cancel 1 при първата възникнала грешка. Ако пък е из­
ключена, пресмятанията продължават до края
на М-книгата независимо от възникналите грешки.
Избраните опции се потвърждават с бутона ок. Важно е да се знае, че
избраните опции не влизат автоматично в сила за получените вече резултати.
Те се прилагат само при пресмятане на нови клетки или при преизчисляване
на старите! Ако желаем тези опции да се приложат върху целия документ,
трябва да подадем командата Evaluate M-book.
Работата с Notebook значително се ускорява, ако вместо да избираме
командите от менюто Notebook използваме съответните им клавишни
комбинации или т. нар. "горещи клавиши".
Горещи клавиши
Alt + D - дефиниране на входна клетка;
Alt + G - групиране на клетки;
Alt + U - преобразуване на клетки в обикновен текст;
Ctrl + Enter - пресмятане на клетка или група клетки;
Alt + Enter - пресмятане на секция (Calc Zone);
Alt + R - пресмятане на цялата М-книга;
Alt + L - циклично изпълнение на маркирани входни клетки.

207
Приложение 3
Списък на функциите на Symbolic Math Toolbox
» help symbolic

Symbolic Math Toolbox.


Version 2.1.3 (R13) 28-Jun-2002

Математически анализ
Diff - диференциране
Int - интегриране
limit - пресмятане на граници
taylo,r - редове на Тейлор
jacobian - матрица на Якоби
symsum - сумиране на редове

Линейна алгебра
diag създаване и изваждане на диагонали от матрица
triu горна триъгълна част на матрица
tril долна триъгълна част на матрица
inv обратна матрица
det пресмятане на детерминанта
rank ранг на матрица
rref привеждане на матрица в триъгълен вид
null базис на нулевото пространство на матрица
colspace базис на множеството стълбове на матрица
eig собствени стойности и собствени вектори
svd сингулярни стойности и сингулярни вектори
jordan канонична форма на Жордан
poly характеристичен полином на матрица
expm матрична експонента

Опростявания
simplify опростяване на изрази
expand развиване на изрази - разкриване на скоби
factor разлагане на множители
collect групиране по степените на дадена променлива
simple привенздане в най-компактен вид
numden извличане на числител или знаменател от дроб
horner представяне на полином във формата на Хорнер
subexpr замяна на повтарящи се подизрази
subs извършване на субституции

208
Приложение 3. Списък на функциите на Symbolic Math Toolbox

Решаване на уравнения
solve - аналитично решаване на алгебрични уравнения
dsolve - аналитично решаване на диференциални уравнения
finverse - обратна функция
compose - композиция от функции

Аритметика с променлива точност


vpa - аритметика с променлива точност
digits - настройка на точността на vpa

Интегрални преобразувания
fourier -преобразувание на Фурие
laplace -преобразувание на Лаплас
ztrans - Z- преобразувание
ifourier -обратно преобразувание на Фурие
ilaplace - обратно преобразувание на Лаплас
iztrans - обратно Z- преобразувание

Конвертиране
double конвертиране на символна матрица в числена (тип
double)
poly2sym конвертиране на вектор в символен полином
sym2poly конвертиране на полином във вектор с коефициентите му
char конвертиране на символен обект в низ

Основни операции
sym създаване на символен обект
syms дефиниране на символни променливи
findsym определяне на символните променливи в един израз
pretty нагледно изобразяване на символен израз
latex представяне на символен израз в LaTeX
ccode представяне на символен израз в С -код
fortran представяне на символен израз във FORTRAN- код.

Специални функции
sinint - интегрален синус
cosint - интегрален косинус
zeta - Zeta функция на Риман
1ambertw -W -функция на Ламберт

Функции за работа с низове


isvarname - проверяване на валидността на име на променлива
vectorize - въвеждана на поелементни операции в символен израз

14 209
Приложения

Образователни и графически приложения


rsums суми на Риман
ezcontour облекчено изчертаване на линии на ниво
ezcontourf облекчено изчертаване на линии на ниво със запълване
ezmesh облекчено изобразяване на повърхнини с мрежа
ezmeshc като горното, плюс линии на ниво
ezplot изчертаване на явно, неявно и параметрично зададена
функция
ezplot3 облекчено изчертаване на пространствени криви
ezpolar • облекчено изчертаване на функции в полярни ко­
ординати
ezsurf облекчено изчертаване на повърхнини
ezsurfc като горното, плюс линии на ниво
funtoo^ калкулатор за операции над функции
taylortool калкулатор за разлагане на функции в ред на Тейлор

Демонстрации
symintro въведение в Symbolic Toolbox
symcalcdemo демонстрации от математическия анализ
syml indemo демонстрации от символната линейна алгебра
symvpademo демонстрации от аритметиката с променлива точност
symrotdemo изучаване на равнинни ротации
symeqndemo демонстрации на символно решаване на уравнения
Достъп до Maple
maple достъп до ядрото на Maple
mfun числено пресмятане на специални функции на Maple
mfunlist списък на специалните функции на Maple
mhelp Help-информация за функциите на Maple
procread зареждане на Мар1е-процедура

210
Приложение 4

Кратък справочник за системата Maple V

I. Команди за получаване на Help-информация


mhelp intro - въведение в Maple;
mhelp index - списък на основните категории в Maple ;
mhelp index[expression] оператори за формиране на изрази;
mhelp index[function] - списък на всички Maple-функции;
mhelp index[procedure] - теми, свързани с процедури и програмиране;
mhelp index[packages] - списък на библиотечните пакети;
mhelp index[misc] - разнообразна информация;
mhelp keywords - ключови (резервирани) думи в Maple ;
mhelp fname - пълна информация за функцията fname ;
maple ('info(fname)') - предназначение и общо описание на функцията;
maple ('usage(fname)') - използване: синтаксис, аргументи;
maple ('example (fname) ') - примери за приложение;
maple ('related (fname) ') - Други, свързани с функцията fname теми.

II. Някои често използвани символи и оператори


- знак за равенство в уравнения и булеви изрази;
- оператор за присвояване;
- край на оператор; потиска извеждането;
- край на оператор; резултатите се извеждат;
\ - пренасяне на оператор на нов ред;
%,%%,%%% - ditto оператор - обръщение към предишни резултати;
# - начало на коментар;
'string' - низът се загражда в обратни апострофи;
’uneval_expr’ - замразен израз;
Int(f(x), x) - инертна функция (започва с главна буква!).

III. Програмиране - основни сведения


1. Аритметични оператори__________
+ - събиране;
- - изваждане;
★ - умножение;
/ - деление;
л - степенуване.
2. Логически отношения и оператори
< - по-малко;
<= - по-малко или равно;

-211 -
Приложения

> - по-голямо;
>= - по-голямо или равно;
= - равно;
<> - не е равно;
and - и;
or - или;
not - не.______________________________________________
3.Математически константи___________________________________
Pi - числото п ;
ехр(1) - числото е ;
I - имагинерна единица;
infinity - безкрайност;
true, false - булеви константи;______________________________
4. Глобални променливи_____________________________________
Digits - брой цифри в числата с плаваща точка; по подразбиране е 10;
Order - порядък на отхвърлените членове при разлагане в ред; по подраз­
биране е 6;
Тези стойности могат да се променят от потребителя, например:
Digits := 16; Order :=10;
5.Математически функции
sin(x) arcsin(x) , sinh(x) , arcsinh(x)
cos(х) , arccos(x) , cosh(x) , arccosh(x)
tan(x) , arctan(x) , tanh(x) , arctanh(x)
cot(x) arccot(x) , coth(x) , arccoth(x)
abs(x) , signum(x) / Bessell(n,x)
exp (x) factorial(n) t BesselJ(n,x)
ln(x) , binomial (m,n) t BesselK(n,x)
loglO(x), erf(t) t BesselY(n,x)
sqrt(x) Забележка. ln(x) ~ log(x);
6.Структури от данни
v := array ([1 ,х,хА2 ,хА3,хА4]) - вектор;
А := аггау(1..2,1..3,[[a,b,c],[d,e,f]]); _ матрица 2x3;
evalm(A) - извеждане на матрица;
evalm(A+B) - събиране на матрици;
evalm(A&*B) - умножение на матрици;
a := expl,exp2 ,...,expN ; - sequence - последователност;
b := [expl,exp2,. ..,expN]; - list - списък;
c := {expl,exp2,. ..,expN}; - set - множество.
Генериране на последователности: seq, $ (dollar), op.
Примери:
>а$6; # допустими са интервали > а $ 6;
а , д, а, а , а, а
> $ 1..6;
1,2, 3,4, 5, 6

- 212-
Приложение 4. Кратък справочник за системата MapleV

> iA2 $ i=l..6;


1,4, 9, 16,25,36
> a[i] $ i=l..3;

> seq([cat(q,i),cat(qt,i)], i=l..3);


[ql,qtl], [q2, qt2], [q3, qt3]
> seq(i!/iA2, i=1..7);
1 I 2 3 24 720
’2’3’2’ 5 ’ ’ 7
> op(x+y+z);
X,y,Z
7.Управляващи оператори
цикъл for - пълна Форма:
for i from istart by istep to iend while logexpr do
statl, stat2, stat3, . statN od;
цикъл for - in-форма:
for i in expr while logexpr do
statl, stat2, stat3, statN od;
Забележки:
1)Ако from или by отсъстват, началната стойност на индекса или стъп­
ката му се приемат по подразбиране равни на 1.
2)Двете форми for и while могат да се използват както заедно, така и
поотделно.
3) Тестовете на iend и logexpr се извършват в началото на всеки цикъл.
4) Излизането от безкраен цикъл може да стане с помощта на командите
break, quit или RETURN;
5) Във формата in expr индексната променлива i приема за стойности
последователните операнди в expr, така както биха били определени от ор-
функцията.
break - прекъсва изпълнението на цикъл for/while. Ако цикълът е
вграден, предава управлението на външния цикъл.
next - прекъсва текущата итерация на цикъл for/while и продължава със
следващата итерация.
оператор if
if logexprl then
staternentsl:
elif logexpr2 then
statements2:

else
statements
fi;

- 213-
Приложения

read - зареждане на Maple-файл;


save - запис на променливи от работното пространство във файл;
ERROR - съобщение за грешка;
WARNING - предупредително съобщение;
restart - рестартиране на Maple;
done, quit или stop - прекъсване на текущата Maple-сесия.
8. Конвертиране на изрази____________________________________
С (ехрг) - С-код на израза ехрг;
Fortran (ехрг) - Fortran-код на израза ехрг;
latex (ехрг) - LaTeX-код на израза ехрг .
9.Функции и процедури на Maple_______________________________
Възможни са 5 метода за дефиниране и изпълнение на една функция:
1) > f := expression;
> a := subs(x =2.3, у = Pi, f);
2) > f := expression;
> a := eval(f,[x = 2.3, y = Pi]);
3) C помощта на функцията unapply:
> f := expression;
> f:= unapply (f, x, у) ;% превръща израза във функция !
> a := f (2.3, Pi) ;
4) C помощта на функционален оператор
> f := (х,у) -> f(x,y);
> a := f (2.3, Pi);
5) C помощта на Maple-процедура proc ( )
> f := proc(x, y) f(x, y) end;
> a := £(2.3, Pi);
Примери:
> # Първи метод - subs
>f := sin (2*x) *exp (-0.3*y) :
>a := subs (x = 2.3, y * 3.14, f) ;
a := - 0 .3 8 7 3 8 7 8 1 4 8
> # Втори метод - eval
>f := sin(2*x)*exp(-0.3*y):
>a := eval(f,[x = 2.3,y = 3.14]); # аргумента - list или set!
<z:= - 0 .3 8 7 3 8 7 8 1 4 8

> # Трети метод - unapply


> f := sin(2*x)*exp(-0.3*y):
>f := unapply (£, x, y) ;
/ := (л\ y ) —>sin( 2jc) e* °3’ >
> a := f (2.3, 3.14);
a : = -0 .3 8 7 3 8 7 8 1 4 8

- 214 -
Приложение 4. Кратък справочник за системата MapleV

> # Четвърти метод - функционален оператор


>f := (х,у) -> sin (2*х) *ехр (-0.3*у) ;
I-0.31)
/ := (.V, у ) -> sin( 2 .t) е
> а := f (2.3, 3.14) ;
а : = -0 .3 8 7 3 8 7 8 1 4 8
> # Пети метод - процедура функция
> f := proc(x,y) sin(2*х)*ехр(-0.3*у) end;
/: = ргос (.т, у) sin( 2хл: )хехр( -О.Зху) end ргос
> а := f (2.3, 3.14);
а : = -0 .3 8 7 3 8 7 8 1 4 8
Общ вид на процедура-функция
proc_name := ргос (argl,arg2, ...)
local pari,par2,...; # локални параметри
options optl,opt2,...; # опции
statements: # работни оператори
end: # край на процедурата
Забележки:
1)Всички локални параметри трябва да се обявят с оператора local.
2) Всички параметри (имена на променливи), които не са обявени явно за
локални, се приемат от системата за глобални.
3)Опцията remember непременно трябва да се включва при рекурсивни
процедури, защото увеличава многократно бързодействието им.
4) Функцията връща стойността от последния изпълним оператор или тази,
указана в оператора RETURN (outl, out2, ...).
5) При процедури с променлив брой действителни аргументи се използват
системните променливи args и nargs:
args [i] - i-тия действителен аргумент;
args [i..j] - последователността от i-тия до j-тия действителен аргу­
мент;
nargs - брой действителни аргументи, с които е извикана процедурата.
6) При процедури с неопределен брой аргументи списъкът на формалните
аргументи е празен.

IV. Преобразуване и опростяване на изрази


cat или | | конкатенация на низове;
lhs лява част на равенство;
rhs дясна част на равенство;
numer числител на дробен израз;
denom знаменател на дробен израз;
has проверява наличието на указан операнд в даден израз;
indets показва всички независими променливи или променливите от
определен тип, намиращи се в даден израз ;
expand развиване на изрази (разкриване на скоби);
factor разлагане на множители (обратно на expand);

215
Приложения

normal съкращаване на общите множители на рационална дроб;


simplify опростяване на изрази;
collect групиране по степените на дадена променлива;
combine комбиниране на няколко операнда в един (обратно на expand);
convert преобразуване в друг тип;
subs извършване на субституции;
subsop замяна на операнд на израз, аргумент на една функция, елемент
на списък по указан пореден номер;
ор извличане на определени операнди от даден израз;
isolate решаване на дадено уравнение спрямо определен израз;
map прилагане на дадена функция към всеки елемент на един масив;
add събиране на поредица от числа или изрази;
mul умножаване на поредица от числа или изрази;
select извличане на елементи от списък, множество, сума, произведе­
ние или израз по дадено логическо отношение (правило);
remove премахване на елементи от списък, множество, сума, произве­
дение или израз по дадено логическо отношение (правило);
coeff - връщане на коефициента пред дадена степен на полином;
eval - пълно пресмятане на даден израз;
evaln - пресмятане на даден израз до име на променлива;
testeq - проверка на еквивалентността на два израза;
freeze, thaw - "замразяванеТразмразяване" на даден израз.

V. Математически анализ
sum - сумиране;
product - произведение;
limit - граници;
iscont - проверка на дадена функция за непрекъснатост;
D - диференциален оператор;
dif f - пресмятане на производни;
linalg [grad] - градиент на функция на няколко променливи;
linalg[ jacobian] - Якобиан на векторна функция;
assume - налагане на ограничения върху дадена променлива;
int - интегриране;
Dirac - делта-функция на Дирак и нейните производни;
Heaviside - единична функция на Хевисайд;
solve - решаване на алгебрични уравнения и системи уравнения;
rsolve - решаване на рекурентни уравнения;
dsolve - решаване на диференциални уравнения; явно, чрез Лаплас, чрез
развиване в редове, числено;
series - разлагане в ред на функция на една променлива;
taylor - разлагане в ред на Тейлор на функция на една променлива;
mtaylor - разлагане в ред на Тейлор на функция на няколко променливи;
piecewise - представяне с един израз на частично непрекъсната функция.

216
Приложение 4. Кратък справочник за системата МарюУ

VI. Интегрални преобразувания - пакетът Inttrans______________


mhelp inttrans - информация за пакета по интегрални преобразувания;
maple ('with (inttrans) ;') - зареждане на пакета;
laplace - право преобразувание на Лаплас;
invlaplace - обратно преобразувание на Лаплас;
fourier - право преобразувание на Фурие;
invfourier - обратно преобразувание на Фурие;
fouriercos - косинус-преобразувание на Фурие;
fouriersin - синус-преобразувание на Фурие;
mellin - право преобразувание на Меллин;
invmellin - обратно преобразувание на Меллин;
hilbert - право преобразувание на Хилберт;
invhilbert - обратно преобразувание на Хилберт;
hankel - преобразувание на Ханкел.

VII. Числени пресмятания


evalf - пресмятане на числена стойност на израз с произволна точност;
evalhf - пресмятане на числена стойност на израз сдвойна точност;
evalxn - пресмятане на матрични изрази, включващи суми, произведения и
цели степени;
evalc - пресмятане на израз с комплексни променливи;
fsolve - числено решаване на системи трансцендентни уравнения;
min - минимум на последователност от числа;
шах - максимум на последователност от числа;
minimize - минимум на функция на няколко променливи;
maximize - максимум на функция на няколко променливи;
evalf/int - числено пресмятане на интеграл;
dsolve/numeric - числено решаване на обикновени диференциални урав­
нения;
rand - генератор на случайни числа;
Eigenvals - собствени стойности и собствени вектори на матрици;
Svd - сингулярни стойности и вектори на матрица.

VIII. Работа с пакети програми от средата на MATLAB


mhelp index [packages] - списък на всички пакети;
mhelp package_name - списък на функциите вдаден пакет;
maple ('with (package_name) ;') - зареждане на цял пакет;
maple ('with (package_name, f u n d , func2 ,...);') - зареждане
само на определени функции fund, func2,. ..от пакета ;
maple (' func_name ',argl,arg2 , ...) - изпълнение на заредена в па­
метта функция;
maple ('package_name [func_name ]',argl ,arg2 ,...) - директно из­
пълнение на функция, без предварителното й зареждане.

217
MATLAB. Част 1

ЛИТЕРАТУРА

1. Андриевский, Бм А. Фрадков. Злементн математическото моделирования


в программннх средах MATLAB и Scilab. Наука, Москва, 2002.
2. Ануфриев, И. Самоучитель. MatLab 5.3/б.х. БХВ-Петербург, Санкт-Петер-
бург, 2002.
3. Борцов, Ю. А., Н. Д. Поляхов, В. В. Путов. Злектро-механические системи
с адаптивна и модальнь1м управлением. Знергоатомиздат, Ленинград,
1984.
4. Васильев, А. Самоучитель Maple 8. Вильямс, Москва, 2003.
5. Васильков, Ю. В., Н. Н. Василькова. Компнотернне технологии
внчислений в математическом моделировании. Финанси и статистика,
Москва, 2001.
6. Веретенников, В. Г., И. И. Карлов, А. П. Маркеев и др. ЗВМ в техническом
ВУЗе: Теоретическая механика. Внвод и анализ уравнений движения на
ЗВМ. Вьюшая школа, Москва, 1990.
7. Вибрации в технике. Том 1 - Колебания линейнь1х систем. Под ред.
Болотина, В., Машиностроение, Москва, 1978.
8. Говорухин, В., В. Цибулин. Компьютер в математическом исследовании:
Maple, MATLAB, LaTeX. Питер, Санкт-Петербург, 2001.
9. Голуб, Дж., Ч. Ван Лоун. Матричнне вь!числения. Мир, Москва, 1999.
10. Горинштейн, А. М. Практика решения инженерних задач на ЗВМ. Радио и
связь, Москва, 1984.
11. Деммель, Дж. Вь1числительная линейная алгебра. Теория и приложения.
Мир, Москва, 2001.
12. Дьяконов, В. П., И. В. Абраменкова, В. В. Круглов. MATLAB 5.3.1 с
пакетами разширений. Нолидж, Москва, 2001.
13. Дьяконов, В. П. MATLAB 6 - Учебнь1Й курс. Санкт-Петербург, Москва, 2001.
14. Дьяконов, В. П., В. В. Круглов. Математические пакети расширения
MATLAB - специальннй справочник. Питер, Санкт-Петербург, 2001.
15. Дьяконов, В. П. MAPLE 7 - Учебний курс. Питер, Санкт-Петербург, 2002.
16. Дьяконов, В. П. Компьютерная математика - теория и практика. Нолидж,
Москва, 2001.
17. Дьяконов, В. П. MATLAB 6/6.1/6.5 + Simulink 4/5 в математике и модели­
ровании. СОЛОН-Р, Москва, 2003.
18. Зарубин, В. С. Математическое моделирование в технике. Издательство
МГГУ имени Н. 3. Баумана, Москва, 2001.
19. Иглин, С. П. Вариационное исчисление с применением MATLAB. Харь-
ковский политехнический институт, Кафедра прикладной математики,
Харьков, 2000. http://users.kpi.kharkov.ua/apm/VarNet/
20. Калиткин, Н. Н. Численнне методи. Наука, Москва, 1978.
21. Кондрашов, В. Е., С. Б. Королев. MATLAB как система программирования
научно-технических расчетов. Мир, Москва, 2002.

218
Литература

22. Коткин, Г. Л., В. С. Черкасский. Компьютерное моделирование физических


процессов с использованием MATLAB. Новосибирский государственнь1й
университет, Физический факультет, Новосибирск, 2001.
http://www.phys.nsu.ru/cherk/main
23. Краскевич, В. Е., К. X. Зеленский, В. И. Гречко. Числените методи в
инженернь1х исследованиях. Вища школа, Киев, 1986.
24. Лазарев, Ю. MatLAB 5.x.“Ирина", BHV, Киев, 2000.
25. Львович, А. Ю. Основи теории злектромеханических систем. Изд. Ленин­
градското Университета, Ленинград, 1973.
26. Манзон, Б. М. MAPLE V Power Edition. Филинь, Москва, 1998.
27. Мартинов, Н. Н. Введение в MATLAB 6. КУДИЦ-ОБРАЗ, Москва, 2002.
28. Матросов, A. MAPLE 6 - Решение задач внсшей математики и механики.
БХВ-Петербург, Санкт-Петербург, 2001.
29. Мзтьюз, Дж. Г., К. Д. Финк. Численнне методи. Использование MATLAB.
Издательский дом "Вильямс", Москва, 2001.
30. Пановко, Я. Г. Основи прикладной теории колебаний и удара. Машино-
строение, Ленинград, 1976.
31. Пейчев, П., М. Иванов, Й. Йорданов, X. Тепавичаров. Методично
ръководство за решаване на задачи по Теоретична механика - Динамика. ТУ
- Габрово, 1988.
32. Писарев, А. М. Механични трептения. Техника, София, 1985.
33. Потемкин, В. Г. Введение в MATLAB. Диалог-МИФИ, Москва, 2000.
34. Потемкин, В. Г. Система инженерннх и научннх расчетов MATLAB 5.x. Том
1 и 2.Диалог-МИФИ, Москва, 1999.
35. Потемкин, В. Г. MATLAB 6: Среда проектирования инженерннх приложе-
ний. Диалог-МИФИ, Москва, 2003.
36. Сдвижков, О. А. Математика на компьютере: Maple 8. СОЛОН-Пресс,
Москва, 2003.
37. Стренг, Г. Линейная алгебра и ее применения. Мир, Москва, 1980.
38. Тимошенко, С. П., Д. X. Янг, У. Уивер. Колебания в инженерном деле.
Машиностроение, Москва, 1985.
39. Фарлоу, С. Уравнения с частними производннми для научннх работников и
инженеров. Мир, Москва, 1985.
40. Филиппов, А. П. Колебания деформируемнх систем. Машиностроение,
Москва, 1970.
41. Форсайт, Дж., М. Малкълм, К. Молър. Компютърни методи за математи­
чески пресмятания. Наука и изкуство, София, 1986.
42. Хорн, Р., Ч. Джонсон. Матричннй анализ. Мир, Москва, 1989.
43. Цонев, С., В. Витлиемов, П. Коев. Методи за оптимизация. Русе, 2003.
44. Чешанков, Б. И. Теория на трептенията. Издателство на ТУ - София, 1991.
45. Шехтер, Р. Вариационннй метод в инженерннх расчетах. Мир, Москва,
1971.
46. Шуп, Т. Решение инженерннх задач на ЗВМ. Мир, Москва, 1982.

219
MATLAB. Част 1

47. Зльсгольц, Л. 3. Дифференциальнь1е уравнения и вариационное исчис-


ление. Наука, Москва, 1969.
48. Cathey, J. J. A MATLAB - Based graphical Technique for Amortization Study of
Adjustable Speed Drives, IEEE Trans. On Education, vol.45, 2002, 177-181.
49. Dixon, W., D. Dawson, B. Costic, M. de Queiroz. A MATLAB - Based Control
Systems Laboratory Experience for Undergraduate Students: Toward Standardi­
zation and Shared Resources, IEEE Trans. On Education, vol. 45, 2002, 218-226.
50. Gander, W., J. Hrebicek. Solving problems in Scientific Computing Using Maple
and MATLAB. Springer, Berlin, 1997.
51. Griffits, F. D. An Introduction to MATLAB 6.1. Dep.. of Mathematics, The
University Dundee, 2001.
http://www.maths.dundee.ac.uk/~ftp/na-reports/MatlabNotes. pdf
52. Jordanov, J., V. Enchev. Applying MATLAB in the Training of the Students in
Technical Mechanics. 13th Conference of Computational Mechanics, 1997,
Pernink, Czech republic.
53. Kraft, R. Programming in Maple. Purdue University Columet, Maple Student
Center, http://www.mapleapps.com/tutorial.shtml
54. Pfeiffer, F. EinfOrung in die Dynamik. B.G. Teubner, Stuttgart, 1992.
55. Prabhu, G. S., P. M. Shankar. Simulation of Flat Fading Using MATLAB for
Classroom Instruction, IEEE Trans, on Education, vol. 45, 2002, 19-25.
56. Rao, S. S. Mechanical vibrations. 3rd edition, Addison-Wesley Publishing Com­
pany, Reading, Massachusetts, 1995.
57. Spencer, R. L. Introduction to Maple for Physics Students. Brigham Young
University, Maple Student Center, http://www.mapleapps.com/tutorial.shtml
58. Steven, J. L. Linear Algebra with Applications. 3rd edition. Macmillan Publishing
Company, New York, 1990.
59. Su, J., J. Chen, D. Wu. Learning Feedback Controller Design of Switching
Converters Via MATLAB, IEEE Trans, on Education, vol. 45, 2002, 307-315.
60. Waller, H., R. Schmidt. Schwingungslehre fur Ingenieure: Theorie, Simulation,
Anwendungen. Bl - Wissenschaftverlag, Manheim, 1989.

Фирмена литература на The MathWorks Inc.


1. Getting Started with MATLAB, Version 6, 2000.
2. Using MATLAB, Version 6, 2000.
3. Using MATLAB Graphics, Version 6, 2000.
4. MATLAB Function reference, Version 6, Vol. 1 - 3,2000 .
5. MATLAB Notebook User’s Guide, Version 5.2, 1998.
6. Symbolic Math Toolbox. User’s Guide, Version 3, 2002.
7. Optimization Toolbox. User’s Guide, Version 2.1 , 2000.
8. Partial Differential Equation Toolbox. User’s Guide, 1996.

-220-
MATLAB. Преобразувания, изчисления, визуализация
Част I. Графичен интерфейс
Системни команди
Основни функции
Документи с Notebook
Symbolic Math Toolbox

Автор: доц. д-р инж. ЙОРДАН ТОНЧЕВ ЙОРДАНОВ


Рецензент: доц. д-р инж. Стоян Цонев Стоянов

Народност българска
Първо издание
ISBN 978-954-03-0659-9 (ч.1)
Изд. № 17901

Редактор: инж. Любов Алексиева


Технически редактор: Иван Георгиев

Формат: 60x90/16
Печатни коли: 14,00
Издателски коли: 14,00

Издателство „Техника“ ООД, пл. „Славейков“ 1, София


Печат „Полиграфюг“, Хасково

You might also like