STEROWANIE ROBOTAMI
CWICZENIA LABORATORYJNE NR 1
PODSTAWY MATLABA
Akademia Górniczo – Hutnicza w Krakowie
Cwiczenia laboratoryjne nr 1. Podstawy Matlaba
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:
1
Cwiczenia laboratoryjne nr 1. Podstawy Matlaba
>> 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
2
Cwiczenia laboratoryjne nr 1. Podstawy Matlaba
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.
3
Cwiczenia laboratoryjne nr 1. Podstawy Matlaba
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:
4
Cwiczenia laboratoryjne nr 1. Podstawy Matlaba
>>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 2
wielomianu w kolejnosci zmniejszajacych sie poteg. Na przyklad, aby wprowadzic wielomian p = s +
s
5
+ 6 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., q = s3 +
s
5
+ 6 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
5
Cwiczenia laboratoryjne nr 1. Podstawy Matlaba
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:
6
Cwiczenia laboratoryjne nr 1. Podstawy Matlaba
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 eX. 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 eX 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, 7
Cwiczenia laboratoryjne nr 1. Podstawy Matlaba
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.
8
Cwiczenia laboratoryjne nr 1. Podstawy Matlaba
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:
− 5 1
0
0
A = 0
− 2 1 , b = 0 , c = [−1 1 ]
0 .
0
0
1
1
a). W równaniu Ax = b znajdz x.
b). W równaniu yA = C znajdz y.
c). G(s) = c(sI - A)-1b. Znajdz G(0) i G(1).
d). CM = [b Ab A2b]. Znajdz rzad CM.
e). Niech A bedzie dowolna macierza n x n, a b dowolnym wektorem n x l. CM = [b Ab A2b ... An-1b]. Napisz skrypt, który obliczy rzad macierzy CM.
Cwiczenie 2.
Rozwaz funkcje
9
Cwiczenia laboratoryjne nr 1. Podstawy Matlaba
(
n s)
H ( s) =
d ( s)
Gdzie:
n( s)
3
= s + 4
.
6
2
s +
29
.
11
s + 78
.
6
d ( s)
4
= s + 14 3
s + 46 2
s + 64 s + 40
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 –2 i, 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 –2 i, 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
2
s + 2 s + 2
C( s) =
2
s + 6 s + 10
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
10