 
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