Professional Documents
Culture Documents
it 09
Доц. д-р инж. Йордан Тончев Йорданов
M ATLAB
Преобразувания
Изчисления
Визуализация
Издателство „Техника“
София, 2007
; :? t \s , ;A I
u V) Q
•^л/С o „ i, ^
3
( v £ i
3
MATLAB. Част 1
- 4 -
Съдържание
- 5 -
MATLAB. Част 1
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
- 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
10
Глава 1. Основни сведения за MATLAB
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: ! ,
»
-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.
12
Глава 1. Основни сведения за MATLAB
- 13-
MATLAB. Част 1
14
Глава 1. Основни сведения за MATLAB
- 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
» ходимост.
тем ната променлив
16
Глава 1. Основни сведения за MATLAB
2 17
MATLAB. Част 1
18
Глава 1. Основни сведения за MATLAB
19
MATLAB. Част 1
20
Глава 1. Основни сведения за MATLAB
21
MATLAB. Част 1
22
Глава 1. Основни сведения за MATLAB
Забележки:
1) р-кодовете се изпълняват сравнително по-бързо от съответните
т-файлове;
2) Ако в една директория са разположени m-файлове и техните р-
кодове, при включване на името на един от файловете (без разши
рението) в дадена команда системата изпълнява съответния р-код!
3) Ако m-файлът и съответният р-код са в различни директории,
системата изпълнява този от тях, който е в текущата директория или в
директорията, която предхожда другата в списъка на достъпните
директории.
4) Използвайте р-код и когато желаете да скриете оригиналния
(source) код на вашите програми от чужди лица.
23
MATLAB. Част 1
24
Глава 1. Основни сведения за MATLAB
25
MATLAB. Част 1
- 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
About MATLAB
28
Глава 1. Основни сведения за MATLAB
Пример:
» 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, това е най-
рационалния и бърз начин да преминете към новата.
29
MATLAB. Част 1
- 30-
Глава 1. Основни сведения за MATLAB
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 - аркус котангенс хиперболичен
3
■Р Щ .
ш
MATLAB. Част 1
Пример 1:
Функцията на Бесел от първи род b e s s e l j ни дава решението на ди
ференциалното уравнение на Бесел
, d y
z~ — — + z — + (z:- v 2)v = 0,
dz- dz
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(' Функция на Бесел от първи р о д ')
/ : \ \
! / , \ . \
’ •' ' \ /
1 __j..J.....i ......
l '1
\ \ '/ , \ \ /
\ { ! >
..................
i {
а. ■■
.0.41
-------- 1 1-------- i1_-___________
-------- i____________ -------
0 5 10 15 20
Фиг. 1.8
35
MATLAB. Част 1
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 )
40
Глава 1. Основни сведения за MATLAB
41
MATLAB. Част 1
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
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
46-
Глава 1. Основни сведения за MATLAB
47
MATLAB. Част 1
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
- 50-
Глава 1. Основни сведения за MATLAB
-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
54
Глава 1. Основни сведения за MATLAB
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
- 57-
MATLAB. Част 1
- 58-
Глава 1. Основни сведения за MATLAB
- 59-
MATLAB. Част 1
- 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
63
MATLAB. Част 1
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
- 66-
Глава 1. Основни сведения за MATLAB
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.
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
- 73-
MATLAB. Част 1
74
Глава 1. Основни сведения за MATLAB
75
MATLAB. Част 1
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
- 76-
Глава 1. Основни сведения за MATLAB
- 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
79
MATLAB. Част 1
80
Глава 1. Основни сведения за MATLAB
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
83
MATLAB. Част 1
- 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
- 85-
MATLAB. Част 1
86
Глава 1. Основни сведения за MATLAB
yi =
у2 =
87
MATLAB. Част 1
Тестване на функцията 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
- 90-
Глава 1. Основни сведения за 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, както и
за останалите функции и възможности естествено можете да получите
от фирмената документация.
91
MATLAB. Част 1
92
Глава 1. Основни сведения за MATLAB
- 93-
MATLAB. Част 1
- 94-
Глава 1. Основни сведения за MATLAB
- 95-
MATLAB. Част 1
96
Глава 1. Основни сведения за MATLAB
х = -2 0 :0 .0 6 :2 0 ; 400r --------------
Y (:,D 350>\
xlabel('x ');
•0
/ '
>•150- -
7' \ ' 7 --------------
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
98
Глава 1. Основни сведения за MATLAB
- 99-
MATLAB. Част 1
Специални графики
При обяснение на синтаксиса на графичните функции тук са изпол
звани следните означения:
х - вектор с абсцисите;
у - вектор със стойностите на функцията;
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
-101 -
MATLAB. Част 1
Фиг. 1.17
102
Глава 1. Основни сведения за MATLAB
- 103-
MATLAB. Част 1
104
Глава 1. Основни сведения за MATLAB
sm(sqrt(*2♦ ♦y2)
105
MATLAB. Част 1
• Редактиране
- 106-
Глава 1. Основни сведения за MATLAB
107
MATLAB. Част 1
108
Глава 1. Основни сведения за MATLAB
109
MATLAB. Част 1
- 110-
Глава 1. Основни сведения за MATLAB
Пример:
Анимация на бягаща вълна, получена чрез суперпозиция на две
вълни: у = cos(k*x - w*t) + cos(x - 1),
където k, w са параметри;
t е време;
х - координата.
(у ****************************************************************
-111 -
MATLAB. Част 1
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
» 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.
114
Глава 2. Интегриране на MATLAB с MS Word - Notebook
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. Ш
115
MATLAB. Част 1
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
Прилаганена-командата- 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. Ш
119
MATLAB. Част 1
120
Глава 2. Интегриране на MATLAB с MS Word - Notebook
-121 -
MATLAB. Част 1
Пример:
х = 3
у = 4
R = sqrt(хА2 + уА2)
х =
2. 4. 4. Пресмятане на секция
За целта трябва да позиционираме курсора на произволно място в
секцията и да изберем командата Notebook->Evaluate Calc Zone
или да натиснем Alt + Enter. Резултатите от пресмятането на всяка
входна клетка се поместват в съответната изходна клетка. Ако не съ
ществува изходна клетка, тя се създава непосредствено след входната.
Ако пък съществува съответна изходна клетка, резултатите се помест
ват в нея независимо от мястото й в документа.
122
Глава 2. Интегриране на MATLAB с MS Word - Notebook
Брояч на циклите
Максимален брой цикли
Скорост на пресмятане
Стартиране или спиране
Фиг. 2.5
- 123-
MATLAB. Част 1
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.
126
Глава 2. Интегриране на MATLAB с MS Word - Notebook
M icrosoft Word
This task is taking longer than expected. Do you want to continue waiting?
J S .... 1 No
127
MATLAB. Част 1
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
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
1/2
I а + b I
132
Глава 3. Символни преобразувания - Symbolic Math Toolbox
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 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
139
MATLAB. Част 1
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
142
Глава 3. Символни преобразувания - Symbolic Math Toolbox
%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
146
Глава 3. Символни преобразувания - Symbolic Math Toolbox
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 =
- 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
± т
к=т
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 52 -
Глава 3. Символни преобразувания - Symbolic Math Toolbox
153
MATLAB. Част 1
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
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
- 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)
Обратно преобразувание на Фурие
Определя се от формулата
Синтаксис:
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
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
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
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)
164
Глава 3. Символни преобразувания - Symbolic Math Toolbox
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- преобразу-
вание на тази функция се определя от формулата
Синтаксис:
- 1 65 -
MATLAB. Част 1
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
.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 е началният интензитет;
168
Глава 3. Символни преобразувания - Symbolic Math Toolbox
= 1, /о=1
1.2
0.8
0.6
0.4
0.2
-20 -10 0 10 20 30
X
- 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
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
172
Глава 3. Символни преобразувания - Symbolic Math Toolbox
173
MATLAB. Част 1
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
12 177
MATLAB. Част 1
a \ I ^ а , 2 а \п
° 2 \ Q 22 ~ ^ а 2п
. ° п \ а п2 а пп ~ Л
178
Глава 4, Използване на числени методи в MATLAB
179
MATLAB. Част 1
180
Глава 4. Използване на числени методи в MATLAB
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], който
няма да бъде разгледан тук.
-181 -
MATLAB. Част 1
182
Глава 4. Използване на числени методи в MATLAB
- 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
J = \ f ( x) dx
а
Синтаксис:
q = quad(@fun, a, b) - пресмята определен интеграл от функцията
f(x) в границите от а ло b с подразбираща се точност eps = 1.е-6.
186
Глава 4. Използване на числени методи в MATLAB
- 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 Зя].
Зл- .— ---------------------------- Зя ------------------------------------------------------
% Подпрограма-функция:
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
F ( x ) = j e '77(sin/ + co st)d t
0
- 1 89 -
MATLAB. Част 1
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
'StringN']);
Пример 2:
Да се пресметне интегралът
Iп
j \(е хsin2х + е~хcos2y ) d x d y
0-п
-191 -
MATLAB. Част 1
- 1 92 -
Глава 4. Използване на числени методи в MATLAB
13 - 193-
MATLAB. Част 1
194
Глава 4. Използване на числени методи в MATLAB
195
MATLAB. Част 1
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
Приложения
Обикновени: *, /, \, А, '
Поелементни: + , - , .*, ./, . \ , . А, . '
v e c to r iz e - замяна на обикновените оператори с поелементни.
198
Приложение 1. Основни функции, оператори и команди в MATLAB
199
Приложения
yN = fn(xl,x2,...,pl,p2,...);
nargin - брой на действителните входни аргументи;
nargout - брой на действителните изходни аргументи;
varargin - масив от клетки с променлив брой входни аргументи;
varargout - масив от клетки с променлив брой изходни аргументи;
feval - пресмятане на функция, чието име е зададено като низ;
private - име на директория с файл-функции, обслужващи само роди-
_________________ телската директория.__________________________________________
- 200-
Приложение 1. Основни функции, оператори и команди в MATLAB
201
Приложения
202
Приложение2
Кратък справочник за работа с Notebook
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.
204
Приложение 2. Кратък справочник за работа с Notebook
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
207
Приложение 3
Списък на функциите на Symbolic Math Toolbox
» help symbolic
Математически анализ
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 - композиция от функции
Интегрални преобразувания
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 -функция на Ламберт
14 209
Приложения
Демонстрации
symintro въведение в Symbolic Toolbox
symcalcdemo демонстрации от математическия анализ
syml indemo демонстрации от символната линейна алгебра
symvpademo демонстрации от аритметиката с променлива точност
symrotdemo изучаване на равнинни ротации
symeqndemo демонстрации на символно решаване на уравнения
Достъп до Maple
maple достъп до ядрото на Maple
mfun числено пресмятане на специални функции на Maple
mfunlist списък на специалните функции на Maple
mhelp Help-информация за функциите на Maple
procread зареждане на Мар1е-процедура
210
Приложение 4
-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
else
statements
fi;
- 213-
Приложения
- 214 -
Приложение 4. Кратък справочник за системата MapleV
215
Приложения
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. Кратък справочник за системата МарюУ
217
MATLAB. Част 1
ЛИТЕРАТУРА
218
Литература
219
MATLAB. Част 1
-220-
MATLAB. Преобразувания, изчисления, визуализация
Част I. Графичен интерфейс
Системни команди
Основни функции
Документи с Notebook
Symbolic Math Toolbox
Народност българска
Първо издание
ISBN 978-954-03-0659-9 (ч.1)
Изд. № 17901
Формат: 60x90/16
Печатни коли: 14,00
Издателски коли: 14,00