background image

Matlab – środowisko obliczeń numerycznych

• Nazwa Matlab pochodzi od matrix laboratory.

• Jest to język wysokiego poziomu, w którym polecenia są sekwencyjnie interpretowane.

• Kolejne instrukcje wpisywane są w wierszu poleceń specjalnego edytora (command window).   

Wykonanie prostych instrukcji następuje po wpisaniu w edytorze nazwy instrukcji i naciśnięciu 
klawisza Enter. Wykonanie pętli bądź instrukcji warunkowych (for, while, if, switch) 

następuje po zamknięciu bloku instrukcji słowem end i wciśnięciu klawisza Enter.

• Ciągi instrukcji można umieszczać w funkcjach lub skryptach, będących plikami o nazwach 

[nazwa].m, po czym wykonywać zawarte w nich instrukcje wpisując w edytorze poleceń 
[nazwa] i wciskając Enter.

• Podstawowym typem danych jest macierz, tzn. domyślnym argumentem wejściowym funkcji 

(poleceń) jest macierz o nieustalonych z góry rozmiarach i wymiarze.

• Zmienne są inicjalizowane przez przypisanie im wartości (ogólnie macierzy liczbowej), zaś 

usuwane są z pamięci poleceniem clear [nazwa_zmiennej].

• Rozmiary zmiennych są dynamicznie skalowane w trakcie wykonywania programu. 

Przypisanie wartości elementowi macierzy o indeksie, którego dana zmienna nie obejmowała, 
powoduje zwiększenie rozmiaru macierzy.

• Nie operuje się na adresach zmiennych, zaś argumenty są przekazywane do funkcji poprzez 

wartość (por. z C, gdzie tablice przekazywane były poprzez referencję). Aby uniknąć 
kopiowania zmiennych przy przekazywaniu ich do funkcji, można użyć zmiennych globalnych.

background image

Matlab – deklarowanie zmiennych i przypisywanie wartości

• zadeklarujmy zmienną skalarną (macierz 1x1), np:

» X=1

X =

1

» 

umieszczenie średnika na 
końcu instrukcji powoduje, iż 
wartość zmiennej nie zostaje 
wyświetlona

» X=1;

» 

znak 

zachęty

kolejny 

znak 

zachęty

• możemy rozszerzyć zadeklarowaną powyżej zmienną np. do macierzy 3x3 instrukcją:

» X(3,3)=2

X =

1     0     0

0     0     0

0     0     2

możemy jeszcze zwiększyć liczbę wymiarów, tworząc macierz 3x3x2 następująco:

» X(3,1,2)=5
X(:,:,1) =

1     0     0
0     0     0
0     0     2

X(:,:,2) =

0     0     0
0     0     0
5     0     0

operator : symbolizuje 
wszystkie indeksy 
danego wymiaru

zbadajmy rozmiar macierzy X:

» size(X)

ans = 

3     3     2

background image

Matlab – właściwości nazw zmiennych

• rozpoznawane są małe i wielkie litery

• nazwy mogą się składać maksymalnie z 31 znaków, znaki powyżej tej granicy są 

ignorowane

• nazwy muszą się zaczynać od liter, kolejne znaki mogą być literami, cyframi lub 

podkreśleniami: „ _ ”

• nazwy nie mogą być tożsame ze słowami kluczowymi języka. Zastrzeżonymi 

sekwencjami znaków są: 

• nazwy nie powinny pokrywać się z nazwami funkcji, jakich użytkownik będzie miał zamiar 

używać po zadeklarowaniu zmiennej. Np. deklaracja clear=4; zablokuje dostęp do 

funkcji clear usuwającej wszystkie zmienne z pamięci. Wywołanie „ clear” jedynie 
spowoduje wyświetlenie:

zaś wywołanie „clear;” w ogóle niczym się nie objawi

• nazwy zmiennych nie powinny pokrywać się z nazwami zmiennych specjalnych

break case catch continue else elseif end for function 
global if  otherwise persistent return switch try while

clear =

4

background image

Matlab – wybrane zmienne specjalne

liczba argumentów wejściowych funkcji, lista argumentów wejściowych funkcji

nargin,

varargin

liczba argumentów wyjściowych funkcji, lista argumentów wyjściowych funkcji

nargout,

varargout

największa dodatnia całkowita liczba w formacie zmiennoprzecinkowym, najczęściej 

2

53

-1, dla liczb większych od bitmax nie ma gwarancji, iż po dodaniu 1 zmienią swoją 

wartość, np.

» bitmax + 5 == bitmax + 6
ans =

1

bitmax

największa dodatnia liczba zmiennoprzecinkowa

realmax

najmniejsza dodatnia liczba zmiennoprzecinkowa

realmin

jednostka urojona, np. » sqrt(-1)

ans = 

0 + 1.0000i

lub j

symbol nieoznaczony, np. 0/00*infinf/inf0*NaN

NaN lub nan

nieskończoność, np. 1/01.1*realmax2*inf

Inf lub inf

określa precyzję pewnych obliczeń, np. rzędu macierzy

eps

stosunek obwodu koła do jego średnicy

pi

przechowuje wynik ostatnio obliczonego wyrażenia, jeżeli wynik ten nie był 

przypisany do żadnej innej zmiennej, np.

» 2+2
ans =

4

ans

funkcja clear przywraca domyślne wartości zmiennych 

przedstawionych w wierszach od 1 do 9 tabeli 

background image

Matlab – działania na macierzach (1)

• ręczne wprowadzanie elementów macierzy:

• elementy można także odczytać z pliku dyskowego, Matlab domyślnie tworzy nową 

zmienną o nazwie identycznej z nazwą pliku bez rozszerzenia.

• macierz  może zostać zapisana jako wartość wyjściowa funkcji, np: 

• sposoby odwoływania się do elementów macierzy (indeksowania):

» A=[1 2 3; 4 5 6; 7 8 9]

A =

1     2     3

4     5     6

7     8     9

średniki oddzielają 

wiersze

odstępy (lub przecinki) 

oddzielają kolumny

» load proba.txt

» who

Your variables are:

proba     

w pliku tekstowym umieszcza się liczby 

oddzielone spacjami (lub przecinkami) 

oraz znakami nowej linii

» A=rand(2,3)

A =

0.4565    0.8214    0.6154

0.0185    0.4447    0.7919

(2,3)

6

(2,2)

4

(2,1)

2

(1,3)

5

(1,2)

3

(1,1)

1

» A(6)
ans =

0.7919

» A(2,3)
ans =

0.7919

poprzez podanie 

numeru wiersza i 

kolumny:

poprzez 

indeksowanie 

liniowe:

Próba odwołania się do nieistniejącego elementu, np 

» A(3,3)

zakończy się wyświetleniem 

komunikatu o błędzie:

???

Index exceeds matrix dimensions.

background image

Matlab – działania na macierzach (2)

działania wykonywane element po elemencie:

operandy muszą być tych samych rozmiarów

• działania oparte na algebrze macierzy:

+

-

.*

./

.\

.^

*

/

\

^

prawostronne 

dzielenie macierzy

A/B = A*(B^-1)

lewostronne 

dzielenie macierzy

A\B = (A^-1)*B

transpozycja 

macierzy

background image

Należy zwrócić uwagę, aby nie pomylić funkcji pobierających jako argumenty wejściowe macierze, 
ale liczących element po elemencie, z funkcjami macierzy wykorzystującymi algebrę macierzy.

Rozważmy następujący przykład. Funkcja 

polyval(

p

,

x

)

zwraca wartość wielomianu o 

współczynnikach zawartych w wektorze 

p

w punkcie 

x

w następujący sposób:

polyval(p,x)= p

x

n-1 

+ p

x

n-2 

+ ... + p

n-1 

x

+ p

n

x

0

gdzie 

n

to rozmiar wektora 

p

, zaś stopień zdefiniowanego przez ten wektor wielomianu to 

n-1

Pierwszy element wektora 

p

jest współczynnikiem przy najwyższej potędze. Prosty przykład 

zastosowania to np. 

Jeżeli jako drugi argument funkcji 

polyval

podamy macierz, obliczenia zostaną wykonane element 

po elemencie, np:

» A=[0 0 1; 0 1 0; 0 0 1]

A =

0     0     1

0     1     0

0     0     1

» polyval([1 2 3],A)

ans =

3     3     6

3     6     3

3     3     6

» polyval([1 2 3],2)

ans =

11

ponieważ
1·2

2

+ 2·2

1

+ 3·2

0

= 4 + 4 + 3 = 11

Inaczej zachowuje się funkcja 

polyvalm

, która obliczy wartość 

wielomianu podnosząc macierze do odpowiednich potęg:

polyvalm(p,X)= p

X

n-1 

+ p

X

n-2 

+ ... + p

n-1 

X

+ p

n

X

0

Analogicznie zachowują się funkcje exp expm

» A=[0 0 1; 0 1 0; 0 0 1]

A =

0     0     1

0     1     0

0     0     1

» polyvalm([1 2 3],A)

ans =

3     0     3

0     6     0

0     0     6

Matlab – funkcje macierzy

background image

Matlab – operatory relacji

warunek uzyskania 1 w wyniku

operacja

równe B

A == B

mniejsze lub równe B

A <= B

większe lub równe B

A >= B

mniejsze od B

A < B

większe od B

A > B

różne od B

A ~= B

przykład:

» A=[1 2; 3 4]
A =

1     2
3     4

» B=[4 1; 3 2]
B =

4     1
3     2

» A>=B
ans =

0     1
1     1

Macierze muszą być tych samych rozmiarów.

Operatory relacji porównują odpowiadające sobie 
elementy macierzy i zapisują wynik do nowej macierzy, 
wypełnionej wyłącznie wartościami 0 lub 1.

Operatory relacji porządkujących mają sens tylko dla
liczb rzeczywistych. W przypadku czterech ostatnich 
operatorów Matlab porównuje części rzeczywiste liczb.

background image

Matlab – operatory i funkcje logiczne dwuargumentowe

opis

operacja

zwracana jest macierz, której element (ij) jest równy
• 0  – jeżeli A(i, j) · B(i, j)

=0

• 1 – w przeciwnym wypadku

A & B

zwraca 1 jeżeli wszystkie elementy są równe 

odpowiadającym im elementom macierzy B
(tzn. sprawdza, czy A

=B)

isequal(A, B)

zwracana jest macierz, której element (ij) jest równy
• 0  – jeżeli A(i, j)

=0 oraz B(i, j)=0 lub jeżeli A(i, j)−0 

oraz B(i, j)

−0

• 1 – w przeciwnym wypadku

xor(A,B)

zwracana jest macierz, której element (ij) jest równy
• 0  – jeżeli A(i, j)

=0 oraz B(i, j)=0

• 1 – w przeciwnym wypadku

A | B

muszą 

być tych 

samych 

rozmiarów

background image

Matlab – operatory i funkcje logiczne jednoargumentowe

zwracany jest wektor, którego n-ta współrzędna przyjmuje 
wartość: 1 – jeżeli w n-tej kolumnie macierzy wszystkie 
wartości są niezerowe;  0 – w przeciwnym wypadku

all(A)

zwraca wartość 1, jeżeli macierz A jest pusta, np.

isempty(A)

zwracany jest wektor, którego n-ta współrzędna przyjmuje 
wartość: 1 – jeżeli w n-tej kolumnie macierzy wszystkie 
wartości są niezerowe;  0 – w przeciwnym wypadku

all(A)

zwracany jest wektor, którego n-ta współrzędna przyjmuje 
wartość: 1 – jeżeli w n-tej kolumnie macierzy wystąpiła 
choć jedna niezerowa wartość;  0 – w przeciwnym wypadku

any(A)

zwraca wektor kolumnowy zawierający liniowe indeksy 
niezerowych elementów, np:

find(A)

zwracana jest macierz, której element (ij) jest równy
• 0  – jeżeli A(i, j)

−0

• 1  – jeżeli A(i, j)

=0

~A

» A=[0 1 2; 0 i 1]

A =

0             1.0000             2.0000          

0                  0 + 1.0000i   1.0000          

» find(A)'

ans =

3     4     5     6

» A=ones(0)

A =

[]

» isempty(A)

ans =

1

background image

Matlab – wizualizacja wektorów

-1

-0.8

-0.6

-0.4

-0.2

0

0.2

0.4

0.6

0.8

1

-1

-0.8

-0.6

-0.4

-0.2

0

0.2

0.4

0.6

0.8

1

-1

-0.5

0

0.5

1

-1

-0.5

0

0.5

1

0

5

10

15

20

0

1

2

3

4

5

6

7

-1

-0.8

-0.6

-0.4

-0.2

0

0.2

0.4

0.6

0.8

1

krzywa w przestrzeni dwuwymiarowej 
opisana parametrycznie:

» t=0:0.1:2*pi;
» x=cos(t);
» y=sin(t);
» plot(x,y)

» x=0:0.1:2*pi;
» y=sin(x);
» plot(x,y)

krzywa w przestrzeni trójwymiarowej 
opisana parametrycznie:

wykres funkcji jako przykład krzywej w 
przestrzeni dwuwymiarowej:

» t=0:0.1:6*pi;
» x=cos(t);
» y=sin(t);
» z=t;
» plot3(x,y,z)

background image

Matlab – wykreślanie powierzchni trójwymiarowych

-2

0

2

-2

0

2

0

2

4

6

x

y

z

-2

-1

0

1

2

-2

-1

0

1

2

0

1

2

3

4

5

-2

-1

0

1

2

-2

-1

0

1

2

0

1

2

3

4

5

Powierzchnie trójwymiarowe o dowolnym kształcie składane są z płaskich, sąsiadujących 
ze sobą czworokątów. Współrzędne ich wierzchołków można zapisać do trzech odrębnych 
macierzy (np. XYZ) i wykreślić używając np. funkcji mesh(X,Y,Z) lub surf(X,Y,Z).

-1  1  1 -1 –1
-2  2  2 -2 –2

0  0  0  0  0

X

1  1 -1 -1  1
2  2 -2 -2  2
0  0  0  0  0

Y

0  0  0  0  0
5  5  5  5  5
2  2  2  2  2

Z

linia 1 linia 2

zamykamy

bryłę - ponownie

linia 1

zaznaczono przykładowy czworokąt, 
zbiegający się do trójkąta