S
TEROWANIE
R
OBOTAMI
C
WICZENIA
L
ABORATORYJNE NR
1
P
ODSTAWY
M
ATLABA
Akademia Górniczo – Hutnicza w Krakowie
Cwiczenia laboratoryjne nr 1. Podstawy Matlaba
1
Podstawy Matlaba
Zasadnicze wyrazenia
Srodowisko Matlaba jest przyjazne dla uzytkownika, poniewaz wiekszosc komend jest wprowadzana zgodnie z zapisem
matematycznym. Na przyklad, wprowadzajac nastepujace proste wyrazenie:
>> a = 4/3
Matlab zwraca odpowiedz:
a =
1.3333
I wyznacza, wprowadzajac do zmiennej a, wartosc 4 dzielone przez 3. Przydatna zasada jest uzywanie stosownych i latwo
zapamietywalnych nazw dla zmiennych. Matlab rozróznia wielkosc liter, na przyklad, a i A to dwie rózne zmienne.
Wszystkie rozkazy Matlaba sa wpisywane malymi literami.
Jezeli nie chcesz tworzyc nowych zmiennych, ale chcesz znac wartosc wyrazenia, wystarczy wprowadzic samo
wyrazenie, na przyklad:
>> 4/3
Które zwraca:
ans =
1.3333
Gdzie ans jest zmienna generowana przez Matlaba. Alternatywnie, jezeli chcesz stworzyc nowa zmienna, ale nie chcesz,
aby Matlab wyswietlil odpowiedz, nalezy wpisac srednik na koncu wyrazenia. Na przyklad:
>> b = 4+7;
Zostanie stworzona nowa zmienna b, której wartosc wynosi 11, ale Matlab jej nie wyswietli. Srednik jest bardzo
uzyteczny, kiedy wielkie wektory albo macierze sa definiowane lub obliczane w posrednich krokach obliczenia.
Obserwowanie jak Matlab wyswietla macierz 100 x 100, której wartosc cie nie interesuje, moze byc bardzo nudne.
Ponadto, mozesz kontrolowac wartosc zmiennej kiedykolwiek, przez wprowadzenie nazwy zmiennej jak nastepuje:
>>b
b=
11
To jest nadzwyczaj uzyteczny cecha, zwlaszcza, kiedy usuwasz bledy z programu lub skryptu.
Wyrazenia, w przeciwienstwie do zmiennych, moga byc sporzadzane jako sekwencje liczb, operatorów, funkcji i
zmiennych, które poprzednio byly zdefiniowane. Na przyklad, poniewaz a i b byly juz definiowane, mozemy napisac:
>>c=a*(b-1)
c=
13.3333
Zauwaz, ze mozesz wstawiac znak spacji w wyrazeniu dla polepszenia czytelnosci. Jezeli wpisujesz wyrazenie, które nie
miesci sie w jednej linii, uzyj trzech kropek na koncu linii i kontynuuj pisanie w nastepnej, na przyklad:
>>p=1+2+...
3+4+6;
Operatory arytmetyczne sa takie same jak te powszechnie uzywane, oprócz tego, ze * reprezentuje mnozenie,\ dzielenie i
^ jest operatorem potegowania. Na przyklad, wpis anie:
Cwiczenia laboratoryjne nr 1. Podstawy Matlaba
2
>> p^2
Powoduje, iz Matlab zwróci:
ans=
256
Mozesz zmieniac kolejnosc wpisywania dzielnej i dzielnika zmieniajac znak dzielenia z \ na /. Gdy a i b to wielkosci
skalarne a\b = b/a.
Matlab wykonuje dzialania uzywajac nastepujacych operatorów:
^
operator potegowania
*
mnozenie
/ i \
dzielenie
+
dodawanie
-
odejmowanie
Kolejnosc wykonywania dzialan jest zgodna z zasadami arytmetyki, a w przypadku dzialan równorzednych (mnozenie -
dzielenie) nastepuje od lewej do prawej strony, ale mozna uzyc nawiasów, aby wymusic odpowiednia kolejnosc dzialan.
Nastepujace trzy przyklady ilustruja te reguly pierwszenstwa:
>>1+2^3/4*2
ans=
5
>>1+2^3/(4*2)
ans=
2
>>(1+2)^3/(4*2)
ans=
3.3750
Matlab ma kilka pierwotnie zdefiniowany zmiennych. Obejmuja one i i j, które wskazuja
1
−
. Uzywanie i albo j do
generowania liczb zespolonych moze byc bardzo wygodne. Jednakze, pierwotnie zdefiniowane zmienne moga zostac
nadpisane, wiec uwazaj, jesli definiujesz pod nazwa i lub j inna wartosc niz
1
−
. Na przyklad, wiele osób uzywa i i j
jako indeksów dla wektorów i macierzy. W rezultacie przypisuja oni w Matlabie zmiennej i lub j wartosc 1 zastepujac
1
−
. Zaleca sie, aby unikac nadpisywania zmiennych pierwotnie zdefiniowanych. Jednakze, jesli postepowanie takie
jest konieczne, warto po zakonczeniu uzywania zmiennej, powrócic do jej pierwotnie zdefiniowanej wartosci. Na przyklad,
aby odzyskac wartosc
1
−
zawarta w zmiennej i nalezy wpisac polecenie clear i. Inne predefiniowane zmienne to:
pi - która oznacza p
Inf - która oznacza 8
NaN - który oznacza „nie liczbe” (np. 0/0)
Matlab bedzie zwracac Inf albo NaN, kiedy dzielisz przez zero. Kiedy wystapi taka sytuacja wykonywanie twojego
wyrazenia zostanie przerwane, ale Matlab poinformuje cie o wystapieniu problemu:
>>d=4/0
Warning:Divide by zero
d=
Inf
Cwiczenia laboratoryjne nr 1. Podstawy Matlaba
3
Matlab posiada tez duza liczbe funkcji, które mozna wykorzystac przy tworzeniu wyrazen. Najprostsze funkcje maja jeden
wejsciowy argument i zwracaja jeden argument wyjsciowy, jak np. funkcja sqrt, która zwraca pierwiastek kwadratowy
wejsciowego argumentu. Argument wejsciowy wpisujemy w nawiasach. Na przyklad:
>> y = sqrt(1+4*i)
zwraca
y=
1.6005 + 1.2496i
Zwróc uwage w jaki sposób zostala wprowadzona liczba zespolona 1 + 4i.
Bezposrednia Pomoc.
Wprowadzenie samej komendy help powoduje wyswietleni listy dostepnych tematów pomocy. Te zawieraja m.in.:
ops - operatory i klawisze skrótu,
elfun - elementarne funkcje matematyczne, i
plotxy - dwuwymiarowa grafika.
Aby otrzymac wiecej informacji lub liste funkcji Matlaba zwiazanych z danym tematem wpisz help i nazwe tematu, który
cie interesuje. Na przyklad, wpisanie help elfun zwróci wykaz elementarnych funkcji matematycznych sklasyfikowanych
jako trygonometryczne, wykladnicze, zlozone, i numeryczne. Ten wykaz bedzie zawierac krótki opis kazdej funkcji. Aby
otrzymac wiecej informacja o konkretnej komendzie, wpisz help i nazwe komendy.
Wykazy komend sa latwe w uzyciu nawet, jezeli chcesz wykonac skrypt w Matlabie, ale nie wiesz, których funkcji i
rozkazów nalezy uzyc. Wiekszosc z rozkazów Matlaba posiada mnemoniczne nazwy, zwiazane z funkcja jaka wykonuja.
Mozesz tez uzywac rozkazu lookfor aby przeszukiwac wykazy uzywajac slów kluczowych.
Tworzenie Skryptów
Znacznym ulatwieniem jest uzywanie skryptów zamiast wprowadzania komend linia po linii w przestrzeni roboczej
Matlaba. Skrypt to plik Ascii, który zawiera serie komend Matlaba wpisanych w sposób identyczny jak w przestrzeni
roboczej Matlaba. Linie, które zaczynaja sie od % sa odczytywane przez Matlaba jako komentarz i nie sa wykonywane.
Skrypt moze byc stworzony poza srodowiskiem Matlaba w jakimkolwiek dostepnym edytorze tekstów. Kazdy skrypt
powinien miec rozszerzenie „.m”. Rozkazy zawarte w skrypcie zostana wykonane przez Matlaba po wprowadzeniu do
przestrzeni roboczej nazwy skryptu bez rozszerzenia. Na przyklad, zalózmy, ze plik tekstowy magphase.m zawiera
nastepujace polecenia:
%magphase.m: example m-file to
% compute the magnitude and phase of G at w=1.
w=1;
G=1/(j*w+2);
mag=abs(G)
phase = atan ( imag ( G ) / real ( G ) )
Wtedy wpisanie magphase w przestrzeni roboczej Matlaba bedzie dawac nastepujaca odpowiedz:
mag =
0.4472
phase =
-0.4636
Która zawiera amplitude i faze funkcji przejscia G (j?) = 1 / (j? + 2) wyliczona dla ? = 1. Wpisanie help magphase
spowoduje wyswietlenie w przestrzeni roboczej Matlaba linii komentarza z poczatku pliku:
magphase.m: example m-file to
compute the magnitude and phase of G at w=1.
Cwiczenia laboratoryjne nr 1. Podstawy Matlaba
4
Oczywistym wydaje sie byc fakt, ze warto w kazdym nowo tworzonym pliku umieszczac kilka linii komentarza jako
naglówek.
Poniewaz Matlab traktuje skrypt dokladnie tak jak sekwencje komend, wszystkie zmienne, które sa aktualnie w
przestrzeni roboczej Matlaba moga byc uzywane przez polecenia zawarte w skrypcie, i podobnie po wykonaniu skryptu
wszystkie zmienne w nim stworzone sa dostepne w przestrzeni roboczej. Na przyklad po wykonaniu magphase.m
mozemy sprawdzic zmienna G jak nastepuje:
>> G
G =
0.4000-0. 2000i
Macierze, wektory i wielomiany
Macierze sa wprowadzane do Matlaba przez wypisanie elementów macierzy w nawiasach kwadratowych. Elementy
kolejnych wierszy sa rozdzielane przez przecinki albo spacje, a rzedy sa rozdzielane przez sredniki albo enter. Na przyklad:
>> A = [ 1 2; 3 4 ]
zwraca odpowiedz
A=
1
2
3
4
a
>> A = [ 1, 2
3, 4 ]
Daje ten sam efekt.
Elementami macierzy moga byc dowolne wyrazenia Matlaba; jakkolwiek, Matlab rozpoznaje tylko prostokatne macierze;
tj., macierz musi miec te sama liczbe kolumn w kazdym rzedzie. Rozmiar macierzy znajdujemy uzywajac komendy size, np .
>> size(A)
ans =
2
2
Poszczególne elementy macierzy moga byc edytowane przy uzyciu indeksów dolaczonych do nazwy zmiennej w
nawiasach. Pierwszy indeks identyfikuje numer wiersza, a drugi kolumny. Na przyklad, aby zmienic drugi element w
drugim rzedzie macierzy na 5, wpisz:
>> A(2, 2) = 5
A =
1
2
3
5
Jezeli dodasz element do macierzy poza jej rozmiarem, wtedy Matlab automatycznie wstawi zera we wszystkie niezbedne
miejsca tak, aby zachowac prostokatny charakter macierzy:
>> A(3, 3) = 6
A =
1
2
0
3
5
0
0
0
6
Poniewaz wektor jest po prostu macierza o rozmiarze 1 x n lub n x 1, gdzie n jest jakakolwiek liczba naturalna, mozesz
generowac wektory w ten sam sposób jak macierze:
Cwiczenia laboratoryjne nr 1. Podstawy Matlaba
5
>>v=[sin(pi/3) –7^3 a+1]
v =
0.8660
-343.0000
2.3333
Alternatywnie, niektóre wektory moga byc tworzone przy uzyciu operatora „:” . Komenda k = 1 : 10 generuje wektor
wierszowy z elementami od 1 do 10 z przyrostem 1. Jakikolwiek inny przyrost moze byc stosowany przez dodanie
drugiego „:” w nastepujacy sposób:
>> knew = 1 : 0.25 : 2
knew =
1.0000 1.2500 1.5000 1.7500 2.000
Uzywajac prostych komend opisanych dotychczas, mozesz latwo manipulowac zarówno macierzami jak i wektorami. Na
przyklad, aby dodawac rzad do macierzy piszemy
>> A = [A; [ 7 8 9 ] ]
1
2
0
3
5
0
0
0
6
7
8
9
Matlab ma rozkazy do generowania specjalnych macierzy. Na przyklad, mozesz stworzyc macierz diagonalna uzywajac
komendy diag, wprowadzajac jako argument wejsciowy wektor zawierajacy elementy przekatnej generowanej macierzy,
np:
>> D = diag ( [ 1 2 ] )
1
0
0
2
>> B = diag ( [ 5 6 ] )
5
0
0
6
Aby wprowadzic elementy na druga przekatna macierzy (prostopadla do glównej) uzyj diag z drugim argumentem
wejsciowym. Inna przydatna macierza jest macierz jednostkowa eye(4,4) tworzy 4 x 4 macierz jednostkowa. Zeros, ones i
rand dzialaja podobnie jak eye i tworza macierze, kolejno z elementami zerowymi, jedynkami i elementami losowymi (z
przedzialu od 0 do 1). Komendami tymi mozna tez tworzyc macierze niekwadratowe. Na przyklad, zeros( 2,4) generuje 2x4
macierz zer.
Wielomiany sa definiowane w Matlabie jako wektory wierszowe z elementami, które sa równe wspólczynnikom
wielomianu w kolejnosci zmniejszajacych sie poteg. Na przyklad, aby wprowadzic wielomian
6
s
5
s
p
2
+
+
=
wpisz p =
[ 1 5 6 ]. Wspólczynniki, których wartosc jest równa zero musza byc równiez wprowadzane, w celu unikniecia bledów; tj.,
6
s
5
s
q
3
+
+
=
musi zostac wprowadzony w nastepujacy sposób q = [ 1 0 5 6 ]. Wartosc wielomianu moze byc
obliczona przy pomocy komendy polyval. Na przyklad:
>> polyval ( p, 1)
ans =
12
Zwraca wartosc wielomianu p dla s = 1. Komenda roots oblicza pierwiastki wielomianu, np.
>> r = roots(p)
-3
-2
Podobnie, mozesz definiowac wielomian podajac jego pierwiastki,
>> t = poly( [-4 -5] )
t =
1
9
20
Cwiczenia laboratoryjne nr 1. Podstawy Matlaba
6
Polecenie conv mnozy, a deconv dzieli dwa wielomiany. Skrypt polyroly.m, zamieszczony ponizej, ilustruje sposób uzycia
tych komend:
po1yroh.m
% polyroly
% Example of multiplying and dividing polynomials.
f1 = [ 1 3 2 ];
% f1 = s^2 +3s +2
f2 = [ 1 3 ];
% f2 = s+3
f3 = [ 1 2 ];
% f3 = s+2
g = conv ( f1,
f2 );
% g = ( s^2 + 3^s + 2) ( s + 3 )
h = deconv ( g, f3 )
% h = ( s^2 + 3^s + 2) ( s + 3 ) / ( s + 2 )
Zwróc uwage na sposób uzycia operatora % w celu zaznaczenia komentarzy. Wszystkie linie zaczynajace sie od % sa
ignorowane przez Matlaba. Wpisanie polyroly w przestrzeni roboczej Matlaba generuje nastepujaca odpowiedz:
h =
1
4
3
W tym przykladzie f3 dzieli g bez reszty. Generalnie komenda deconv uzywana z jednym argumentem zwróci tylko iloraz
nawet, jezeli reszta jest niezerowa. Jednakze, jezeli komenda deconv zostanie uzyta z dwoma argumentami wyjsciowymi,
jak pokazano w przykladzie, Matlab zwróci zarówno iloraz q jaki i reszte r:
>> [ q, r ] = deconv ( f1, f2 )
q =
1
0
r =
0
0
2
Dzialania na macierzach i Funkcje
Matlab wykonuje dzialania arytmetyczne na macierzach równie latwo jak na wielkosciach skalarnych. Aby dodac dwie
macierze, napisz po prostu:
>> B + D
ans =
6
0
0
8
Podobnie, aby pomnozyc dwie macierze wystarczy wpisac:
>> B*D
ans =
5
0
0
12
Dzielenie macierzy jest równiez proste, gdy raz zrozumiesz jak Matlab interpretuje operatory dzielenia / i \. Przypuscmy, ze
chcesz rozwiazywac, ze wzgledu na x, równanie Px = Q. Aby zapisac wyrazenie x = P
-1
Q uzyj w Matlabie lewego
dzielenia: x = P\Q. Teraz zalózmy, ze chcesz rozwiazac równanie yP = Q ze wzgledu na y. Rozwiazanie tego zagadnienia
ma postac y = Q P
-1
, co mozesz zapisac w Matlabie jako y = Q/P, uzywajac prawego dzielenia.
Chociaz Matlab nie wymaga zadnych specjalnych instrukcji, aby mnozyc i dzielic macierze, to niezbedne jest by
odpowiednie wymiary dzielonych lub mnozonych macierzy byly równe. Wyjatkiem jest mnozenie lub dzielenie macierzy
przez skalar. Matlab powie ci, gdy bedziesz próbowac mnozyc macierze majace niezgodny rozmiar. Na przyklad,
uruchamiajac mistake.m:
Cwiczenia laboratoryjne nr 1. Podstawy Matlaba
7
mistake. m
% mistake: Shows what happens when you try to multiply
% matrices having incompatible dimensions.
X = eye (2);
Y = [ 1 2; 3 4; 5 6];
Z = X * Y;
Zwraca Matlabowski komunikat bledu:
??? Error using ==> *
Inner matrix dimensions must agree.
Error in ==> mistake.m
On line 5 ==> z = X * Y;
Aby znalezc bledy w skrypcie mistake.m wpisz size(X) i size(Y) aby sprawdzic rozmiary macierzy X i Y. Oczywiscie,
okaze sie, ze X ma rozmiar 2 x 2, a Y 3 x 2. Dlatego, ostatnia linia w skrypcie mistake.m jest bledna, gdyz odpowiednie
wymiary macierzy X i Y nie zgadzaja sie. Mnozenie moze byc wykonane, jezeli transponujemy Y, poniewaz Y
transponowana jest macierza 2 x 3. Rozkaz ‘ generuje macierz transponowana wartosci sprzezonych. Aby otrzymac
prosta macierz transponowana nalezy uzyc polecenia transpose. Zastapienie ostatniej linii mistake.m wyrazeniem Z =
X*Y’ i ponowne wykonanie da poprawny wynik .
Operator potegowania tez dziala na macierzach, ale tylko, gdy sa one kwadratowe. Na przyklad, X^2 jest równowazne do
X * X. Jednakze, Y^2 jest wyrazeniem blednym, poniewaz Y nie jest kwadratowa.
Matlab posiada duzo funkcji, które wykonuja jakies dzialania na macierzach, naleza do nich det ( X ) i inv ( X ), które
obliczaja wyznacznik X i macierz odwrotna. Rank(X) okresla rzad macierzy X, eig(X) zwraca wartosci wlasne X w
wektorze kolumnowym, a expm(X) oblicza e
X
. Zauwaz, ze wiele z tych funkcji wymaga, aby macierz wejsciowa byla
kwadratowa. Aby poznac inne funkcje na macierzach oraz nauczyc sie jak je poprawnie uzywac, uzyj help.
Czasami mozesz chciec rozwazac macierz, po prostu jako tablice liczb i wykonywac dzialania na poszczególnych
elementach macierzy. Czesto bedziesz tworzyc arkusze danych w postaci macierzy, aby wykonywac na nich wspólne
operacje arytmetyczne. Zwlaszcza serie danych uzyskanych w wyniku pomiarów lub generowane przez inne
oprogramowanie, moga byc wczytane do przestrzeni roboczej Matlaba, w celu wykonania na nich odpowiednich dzialan
przy uzyciu komendy load (jezeli plik jest tekstowy nalezy dodac parametr -ascii). Matlab pozwala na operowanie na
tablicach liczb, przy uzyciu innej skladni niz w przypadku macierzy. Na przyklad, zalózmy, ze masz arkusz danych, które
wprowadziles do Matlaba jako tablice o nazwie Data. Chcialbys obliczyc wartosc skuteczna i w tym celu potrzebna jest ci
znajomosc kwadratu kazdego z elementów zmiennej Data. Uzywajac operatora „.” mozesz zamienic operacje podnoszenia
calej macierzy do kwadratu na potegowanie kazdego z jej elementów. Dzialania takie jak dodawanie i odejmowanie sa
takie same w obu przypadkach. Poprzedzenie operatora dzialania znakiem „.” powoduje wykonanie tego dzialania na
poszczególnych elementach tablicy a nie na calej macierzy. W celu podniesienia do kwadratu kazdego elementu tablicy
Data, napisz Data .^2. Podobnie, aby pomnozyc odpowiednie elementy dwóch tablic R i S (tych sam rozmiarów), pisz
R.* S jak nastepuje:
>> R = [4
5
0
1];
>> S = [2
3
4
6];
>> R .* S
ans =
8
15
0
6
Niektóre funkcje Matlaba automatycznie wykonuja dzialania na poszczególnych elementach tablicy liczb. Na przyklad,
exp (X) bedzie zwracac tablice zawierajaca logarytmy naturalne kolejnych elementów X. [Jezeli faktycznie chcesz e
X
uzyj
expm(X)]. Funkcje trygonometryczne oraz inne elementarne funkcje matematyczne takie jak abs, sqrt, real, i log równiez
operuja na elementach tablic.
Operatory relacyjne i logiczne Matlaba takze dzialaja na zasadzie „element po elemencie”. Operatory relacyjne porównuja
dwa skalary i zwracaja 1 jezeli dzialanie jest prawdziwe i 0 jezeli to jest falszywe. Na przyklad, jezeli wpiszesz t=17>55,
Cwiczenia laboratoryjne nr 1. Podstawy Matlaba
8
Matlab odpowie t=0. Kiedy operator relacji jest uzywany z dwoma macierzami, porównane zostana odpowiadanie
elementy macierzy. Na przyklad, L = D <= X bedzie porównywac kazdy element D z odpowiednim elementem X. Jezeli
element D jest mniejszy lub równy od odpowiadajacego elementu X, to w L pojawi sie 1 na odpowiednim miejscu, w
przeciwnym przypadku do L zostanie wpisane 0. Patrz ponizej:
>> L = D <= X
1
1
1
0
Operatory logiczne: & dla logicznego AND, | dla logicznego OR, i ~ dla logicznego NOT zwracaja 1, gdy zdanie jest
prawdziwe i 0 gdy falszywe.
Tworzenie Funkcji
W trakcie tworzenia skryptu dazysz do optymalnego wykorzystania istniejacych funkcji w celu wykonania pozadanej
operacji. Istnieje jednak mozliwosc tworzenia wlasnych funkcji. Funkcjami sa, podobnie jak skrypty, pliki z rozszerzeniem
.m. Podstawowa róznica jest to, iz pierwsza linia funkcji rozpoczyna sie od slowa function, po którym nastepuje
wyrazenie definiujace nazwe funkcji oraz ilosc i kolejnosc argumentów wyjsciowych i wejsciowych. Wyrazenie to ma
nastepujaca forme:
function [argumenty wyjsciowe] = nazwa funkcji (argumenty wejsciowe).
Na przyklad, zalózmy, ze chcesz stworzyc nowa funkcje rms, która bedzie obliczala wartosc sredniokwadratowa szeregu
liczb. Pierwsza linia twojej funkcji moglaby wygladac nastepujaco function y = rms(v). Kilka nastepnych linii powinno
zawierac komentarz, dotyczacy zastosowania i sposobu uzycia nowej funkcji. Pózniej, po wpisaniu help rms linie te
zostana wyswietlone.
Pozostale linie pliku funkcji powinny wygladac analogicznie jak w skrypcie o tym samym zadaniu. Pamietaj, ze parametr
wejsciowy v musi zostac wprowadzony przy wywolywaniu funkcji. Pamietaj takze, aby kazda linie konczyc srednikiem.
Wyjatkowo, podczas debugowania funkcji, mozesz nie konczyc linii srednikami, aby móc obejrzec kolejne etapy jej
dzialania. Funkcja rms.m moze miec nastepujaca strukture:
rms. m
function y=rms(v)
% rms Root mean square
% rms(v) returns the root mean square of the
% elements of column vector v. If v is a matrix then
% rms(v) returns a row vector such that each element
% is the root mean square of the elements in the
% corresponding column of v.
vs = v.^2;
s = size ( v );
y = sqrt ( sum ( vs ) / s(1) );
Spróbuj stworzyc funkcje rms.m i nastepnie wywolac ja z wlasnym parametrem wejsciowym. Zauwaz, ze, podczas gdy
skrypt moze byc wywolany tylko przez wpisanie jego nazwy w przestrzeni roboczej Matlaba, lub przez uzycie go w innym
skrypcie, to funkcja moze byc wykorzystana wszedzie gdzie jest potrzebna. Na przyklad, jezeli p jest uprzednio
zdefiniowanym wektorem albo macierza, móglbys uzyc rms w nastepujacym wyrazeniu differ=max(p)-rms(p). Spróbuj
tez wpisac help rms aby sprawdzic dzialanie komendy help.
Druga podstawowa róznica pomiedzy skryptami, a funkcjami jest fakt, iz zmienne wykorzystywane w funkcji maja
charakter lokalny. Oznacza to, ze zmienne y, v, vs w naszym przykladzie, sa niedostepne po wykonaniu funkcji. Dlatego
po wpisaniu z=rms(p), bedziemy mieli dostep tylko do p i z.
Jakkolwiek, w celu usuniecia bledów z programu, albo w celach demonstracyjnych moze okazac sie konieczne
sprawdzenie zmiennych lokalnych. Matlab udostepnia kilka funkcji, które sa pomocne przy debugowaniu, lub przy
prezentacji twoich funkcji. Na przyklad, komenda echo powoduje wyswietlenie wszystkich linii wykonywanej funkcji.
Polecenie pause zatrzymuje wykonywanie programu w zadanym miejscu, az do nacisniecia dowolnego klawisza.
Silniejszym narzedziem jest polecenie keyboard, które pozwala na zatrzymanie dzialania funkcji i wprowadzenie dowolnej
ilosci komend, z poziomu przestrzeni roboczej Matlaba. Aby powrócic do wykonywania funkcji nalezy wpisac slowo
return. Polecenie input zada od uzytkownika wprowadzenia danych wejsciowych. Wszystkie te polecenie moga byc
uzywane takze w skryptach.
Cwiczenia laboratoryjne nr 1. Podstawy Matlaba
9
Podczas pisania funkcji lub skryptów niezbedne jest tez uzywanie komend typu for, while, if. Sa to komendy podobne
do tych, jakie wystepuja w wiekszosci jezyków programowania. Sluza do tworzenia petli lub warunków. Na przyklad,
funkcja init pokazana ponizej uzywa polecenia for do zdefiniowania macierzy o wymiarach m x n, której elementy maja
wartosci równe sumom swych indeksów.
init.m
function M = init (m,n)
% init: Creates an m x n matrix
% such that each element is the sum of its indices.
for k=1:m
for l=1:n
M(k,l)=k+l;
end
end
Kazdorazowe wywolanie komendy for, while, lub if musi zostac zakonczone slowem end. Polecenie break powoduje
przerwanie wykonywania petli.
Polecenie if moze byc uzywane w polaczeniu z nargin, nargout oraz error w celu kontrolowania poprawnego wywolania
funkcji. Nargin i nargout umieszczone wewnatrz funkcji maja wartosc równa, odpowiednio, ilosci parametrów
wyjsciowych i wejsciowych uzytych przy jej wywolaniu. Polecenie error(‘komunikat’) uaktywnia klawiature i wyswietla
komunikat. I tak, aby upewnic sie, ze nasza funkcja init bedzie dzialala tylko przy wprowadzeniu dwóch parametrów
wejsciowych, wpisz nastepujaca strukture zaraz pod liniami komentarza w pliku init.m.
if (nargin ~= 2)
error ('Incorrect number of input arguments')
end
Spróbuj wywolac funkcje init z poprawna i niepoprawna liczba argumentów wejsciowych. Zauwaz, ze komunikat bledu
jest zawarty pomiedzy „pazurkami” (pojedynczy cudzyslów). Uzyj pomocy (temat lang), aby nabyc wiecej informacji o
poleceniach for, while, if, break, i error.
Dodatkowo, poza tworzeniem wlasnych funkcji, powinienes wykorzystac fakt, ze mozesz modyfikowac wiele istniejacych
funkcji Matlaba. Wynika to z faktu, ze wiekszosc funkcji Matlaba jest zdefiniowana w postaci m-plików, do których masz
dostep. Mozesz tworzyc nowe funkcje, zapisujac juz istniejace pod nowymi nazwami i edytujac je. Analizujac istniejace
funkcje mozna równiez nauczyc sie jak efektywnie wykorzystywac kod Matlaba. Napisz type i nazwe interesujacej cie
funkcji, aby obejrzec zawartosc jej m-pliku w przestrzeni roboczej. Przegladanie tych plików pomoze ci w rozwiazywaniu
problemów z tworzeniem nowych uzytecznych funkcji.
Cwiczenia
Cwiczenie 1
Dane sa:
[
]
.
0
1
1
,
1
0
0
,
1
0
0
1
2
0
0
1
5
−
=
=
−
−
=
c
b
A
a). W równaniu Ax = b znajdz x.
b). W równaniu yA = C znajdz y.
c). G(s) = c(sI - A)
-1
b. Znajdz G(0) i G(1).
d). C
M
= [b Ab A
2
b]. Znajdz rzad C
M
.
e). Niech A bedzie dowolna macierza n x n, a b dowolnym wektorem n x l. C
M
= [b Ab A
2
b ... A
n-1
b]. Napisz skrypt, który
obliczy rzad macierzy C
M
.
Cwiczenie 2.
Rozwaz funkcje
Cwiczenia laboratoryjne nr 1. Podstawy Matlaba
10
)
(
)
(
)
(
s
d
s
n
s
H
=
Gdzie:
40
64
46
14
)
(
78
.
6
29
.
11
4
.
6
)
(
2
3
4
2
3
+
+
+
+
=
+
+
+
=
s
s
s
s
s
d
s
s
s
s
n
a). Znajdz n(-12), n(-10), n(-8). Znajdz d(-12), d(-10), d(-8).
b). Znajdz H(-12), H(-10), H(-8).
c). Niech s = a + bi, gdzie a i b sa calkowite i -15 < a < 0 i -2 < b < 2. Stwórz macierz S o rozmiarze 16 x 5 wszystkich
mozliwych wartosci s. Na przyklad, S (1, 1) powinno byc równe –15 –2i, S (1, 2) powinno byc równe –15 –i, S (1, 3)
powinno byc równe –15, itd. S (2, 1) powinno byc równe –14 –2i, S(2, 2) powinno byc równe –14 –i, S (2, 3) powinno byc
równe –14, itd.
d). Wylicz H(s) dla wartosci s rozwazanych w punkcie c) wykonujac operacje na macierzy S.
e). Dla jakich wartosci s H(s) = 0? Dla jakich wartosci H(s) dazy do nieskonczonosci?
f). Zalóz teraz, ze a i b nie musza byc calkowite. Znajdz wszystkie wartosci s, dla których H (s) = 0.
g). Niech
10
6
2
2
)
(
2
2
+
+
+
+
=
s
s
s
s
s
C
Dla jakich wartosci s C(s) H(s) = 0? Dla jakich wartosci s C(s) H(s) dazy do nieskonczonosci?
Cwiczenie 3
.
Zmodyfikuj plik rms.m, tak aby dzialal poprawnie bez wzgledu na to, czy v jest wektorem kolumnowym czy wierszowym.
(W Matlabie operator relacyjny równosci to ==, a nie =).
Cwiczenie 4
.
Napisz funkcje range1(p), która oblicza róznice pomiedzy najwiekszym i najmniejszym elementem wektora p. Uzyj for i if .
Nastepnie stwórz range2(p), która daje ten sam wynik, ale wykorzystaj while oraz if . Sprawdz, która z funkcji dziala
szybciej (Uzyj polecen tic i toc, aby to sprawdzic.)
Literatura
[1] Brzózka J.: Cwiczenia z automatyki w Matlabie i Simulinku. MIKOM, Warszawa 1997
[2] Matlab User’s Guide
[3] Simulink User’s Guide
[4] Leonard N., Levine W.: Using Matlab to Analyze and Design Control System. The Benjamin/Cummings Publishing
Company, 1995
[5] Zalewski A., Cegiela R.: Matlab – obliczenia numeryczne i ich zastosowania. NAKOM, Poznan 1996