background image

13

 

2. Podstawowe operacje macierzowe i tablicowe 

 

Polecenia w Matlabie dotyczące działań matematycznych są na ogół podobne do 

zapisu stosowanego w matematyce, jednak w wielu przypadkach symbolom 
przypisany jest znacznie szerszy zakres działań i operacji. Użytkownik chcący 
efektywnie korzystać z zasobów Matlaba powinien znać na pamięć wszystkie 
podstawowe operacje macierzowe i tablicowe, ich notacje, zakres i ograniczenia. 
 
 

Dwukropek : 

  W Matlabie do operacji macierzowych jest często używany symbol dwukropka. 
Poniżej podano przykładowe polecenia z wykorzystaniem dwukropka. 
 
i:n  

oznacza wektor [i,i+1,...,n] 

 

 i=1;  n=5; i:n 
ans = 
     1     2     3     4     5 

 
Jeżeli i>n, to otrzymuje się wektor pusty 
 

i=5; n=1; i:n 
ans = 
   Empty matrix: 1-by-0 

 
i:k:n 

 generuje wektor [i,i+k,i+2k,...,i+mk], gdzie m=fix((n-1)/k) 

 

i=1; k=2; n=10;  i:k:n 
ans = 
     1     3     5     7     9 

W tym przypadku m=fix((n-1)/k = 4 
 
Za pomocą symbolu dwukropka można wygenerować wektor o elementach 
malejących 
 

i=10; k=-2; n=1;  i:k:n 
ans = 
    10     8     6     4     2 

 
 Dwukropek 

służy także do wybierania wierszy, kolumn i elementów wektorów 

oraz macierzy. Polecenie A(:) - przestawia wszystkie elementy macierzy A w wektor 

background image

14

 

kolumnowy. Elementy macierzy wypisywane są kolejno kolumnami od pierwszej do 
ostatniej. Przykładowo dla macierzy 
 

A =[11 12 13; 11 10 11; 11 11 11]; 
 

polecenie A(:) daje w wyniku 
 

ans = 
    11 
    11 
    11 
    12 
    10 
    11 
    13 
    11 
    11 

 
A(:,i)   wypisuje i-tą kolumnę macierzy A, np. 
 

A(:,3) 
ans = 
    13 
    11 
    11 

 
A(i:n)   wypisuje elementy macierzy od i-tego do n-tego, np. 
 

A = [     1     2;      3     4;      5     6]; 
A(2:5) 
ans = 
     3     5     2     4 

 
A(:,i:n)  wypisuje kolumny począwszy od i-tej do n-tej, np. 
 

A = [    97   110    99   111   114    97 
   105   109   112    97   114   111] 
 A(:,2:5) 
ans = 
   110    99   111   114 
   109   112    97   114 

 
A(i,:)   wypisuje i-ty wiersz macierzy A, np.  
 

A =[    97   110    99   111   114    97 
   105   109   112    97   114   111] 

background image

15

 

 A(2,:) 
ans = 
   105   109   112    97   114   111 

 
A(i:n,:)  wypisuje elementy od i-tego do n-tego wiersza, np.  
 

A = [    97   105 
   110   109 
    99   112 
   111    97 
   114   114 
    97   111] 
 A(2:5,:) 
ans = 
   110   109 
    99   112 
   111    97 
   114   114 
 
 

 

Operator dzielenia lewostronnego \ 

 Do 

rozwiązywania układu równań liniowych o postaci 

 

A x 

najczęściej jest używany operator dzielenia lewostronnego czyli 

 

x = A\b 

 
 Przykład 

 Rozwiązać układ równań liniowych z wykorzystaniem operatora dzielenia 
lewostronnego 
 2x

1

 + 5x

2

 = 7 

 3x

1

 -   x

2

 = 2 

 4x

1

 + 6x

2

 = 10 

 
 Rozwiązanie 
 

A=[2 5; 3 -1; 4 6]; b=[7;2;10]; 
x=A\b 
x = 
    1.0000 
    1.0000 

 
Ponieważ macierz A jest macierzą prostokątną do rozwiązania układu równań 
liniowych nie może być tu wykorzystana inwersja macierzy 

 

x = inv(A)*b 

 

background image

16

 

 
 Przykład 

  Przykład ilustruje częsty błąd popełniany przy rozwiązywaniu układu równań 
liniowych. Rozwiązać układ równań liniowych 
 3x

1

 + 2x

2

 +  x

3

 = 5 

 2x

1

 + 3x

2

 +  x

3

 = 1 

 2x

1

 +  x

2

 + 3x

3

 = 11 

 
 Rozwiązanie 
 

A=[3 2 1; 2 3 1; 2 1 3]; b=[5 1 11]; 
x=A\b 
??? Error using ==> \ 
Matrix dimensions must agree. 
 

Zasygnalizowany został błąd wykonania wynikający z niezgodności wymiarów 
macierzy. Wektor b musi być wektorem kolumnowym. 
 

b=[5;1;11]; 
x=A\b 
x = 
    2.0000 
   -2.0000 
    3.0000 

 
Macierz A jest macierzą kwadratową i do rozwiązania układu równań liniowych może 
być wykorzystana inwersja macierzy 
 

x=inv(A)*b 
x = 
    2.0000 
   -2.0000 
    3.0000 

 
 
 

Operator dzielenia prawostronnego / 

 

Prawostronne dzielenie macierzy B/A jest równoważne prawostronnemu mnożeniu 

macierzy B przez macierz odwrotną lub pseudoodwrotną do A, tzn. 

 B*inv(A) 

a dokładniej 

 

 B/A = (A'\B')' 

gdzie ' oznacza operacje transponowania macierzy. Przykładowo 
 

A=[4 5 6];  B=[1 2 3];  
B*inv(A) 

background image

17

 

??? Error using ==> inv 
Matrix must be square. 
 B/A 
ans = 
    0.4156 
 (A'\B')' 
ans = 
    0.4156 

 
 
 

Operator prawostronnego dzielenia tablic ./ 

 Wynikiem 

operacji 

A./B jest macierz o elementach A(i,j)/B(i,j), tzn., dzielone 

elementy macierzy A i B mają te same indeksy. Macierze A i B muszą być 
kwadratowe lub jedna z nich jest skalarem. 
 

A=[8 16; 72 80]; B=[2 8; 6 10];  
A./B 
ans = 
     4     2 
    12     8 

 
 
 

Operator dzielenia lewostronnego tablic .\ 

 Wynikiem 

operacji 

A.\B jest macierz o elementach B(i,j)/A(i,j), tzn. dzielone są 

elementy macierzy B przez elementy macierzy A o tych samych indeksach, np. 
 

A=[8 16; 72 80];  B=[2 8; 6 10];  
A.\B 
ans = 
    0.2500    0.5000 
    0.0833    0.1250 

 
 
 Nawiasy 

okrągłe ( ) 

 

W operacjach arytmetycznych nawiasy okrągłe wskazują działania wykonywane w 

pierwszej kolejności, np. 

x=(4+5^2)-(2+7); 
 

 

W funkcjach nawiasy wskazują na argumenty wejściowe funkcji, np. 

function [no,xo]=hist(y,x) 

 
 
 

Nawiasy kwadratowe [ ] 

 

Służą do tworzenia macierzy, wektorów oraz listy argumentów wyjściowych 

funkcji, np 

background image

18

 

 

b=[1;2;3];  
function [no,xo]=hist(y,x) 

 
 
 Kropka 

dziesiętna . 

 Służy do oddzielenia części całkowitej od dziesiętnej. 
 
 
 

Kontynuacja linii ... 

  Stosowana w przypadku, gdy polecenie nie mieści się w jednej linii. Także dla 
większej przejrzystości treści m-pliku czy m-funkcji. Przykładowo 

function [a,b,c]=test(x,y,z,A,B,C) 

jest równoważne poleceniu 

function[a,b,c]= ... 
   test(x,y,z,A,B,C) 

 
 
 Przecinek 

 

Jest wykorzystywany do separacji indeksów w macierzy, np. 

A(1,2) 

do separacji argumentów funkcji 

function [ret,x0,str,ts,xts] = pd(t,x,u,flag) 

i do separacji poleceń 

clc, date 

 
 
 

Średnik ; 

 

W przypadku macierzy średnik oznacza koniec wiersza macierzy, np. 

A=[1 2 3; 4 5 6] 

 

 W przypadku polecenia lub wyrażenia  średnik blokuje wypisywanie odpowiedzi 

na ekran 

pi % wypisuje warto

ść

 liczby pi 

ans = 
    3.1416 
pi; % blokuje wypisanie warto

ś

ci liczby pi 

 
 
 Procent 

 

Procent jest używany do rozpoczęcia komentarza w m-plikach, np. 

 

% Liczba pi jest zdefiniowana w Matlbie jako funkcja podstawowa 
 % o nazwie pi 
% Napisanie w oknie polecn Matlaba 

background image

19

 

% pi 
% a nastepnie nacisniecie ENTER wyprowadzi na ekran monitora 
% nastepujacy wynik 
» pi 
ans = 
   3.14159265358979 

 
 
 

Apostrof '  

 

W przypadku macierzy rzeczywistej oznacza transpozycję macierzy, np. 

 

A=[1 2 3; 4 5 6]; 
A' 
ans = 
     1     4 
     2     5 
     3     6 

 
  W przypadku macierzy zespolonej oznacza także wyznaczenie macierzy 
sprzężonej, np. 
 

Z=[1i 2i 3i; 4i 5i 6i];  
Z' 
ans = 
        0 - 1.0000i        0 - 4.0000i 
        0 - 2.0000i        0 - 5.0000i 
        0 - 3.0000i        0 - 6.0000i 

 
 
 

Apostrof jako oznaczenie łańcucha  '  ' 

  Dwa apostrofy oznaczają łańcuch znaków, często wyprowadzanych na ekran za 
pomocą funkcji disp lub fprintf, np.  
 

disp('napis') 
ans = 
napis 
fprintf('WYDRUK WYNIKÓW') 
WYDRUK WYNIKÓW 

 
 Operatory 

relacji 

 <  

mniejsze 

od 

 

<=   

mniejsze lub równe 

 >  

większe od 

 >= 

 

większe lub równe 

 == 

 

równe 

background image

20

 

 ~= 

 

różne od (nierówne) 

 
Argumentami relacji mogą być macierze o tych samych wymiarach. Wynikiem jest 
macierz, w której elementy są równe 0 (zero) lub 1 (jeden). Możliwe jest również 
porównywanie wartości skalarnych i macierzy, czyli wartości skalarnej z każdym 
elementem macierzy. Przykładowo 
 

A=[8 2 3; 4 6 5; 6 7 8]; B=[8 3 2; 5 8 4; 7 6 8]; 
  
A<B 
ans = 
     0     1     0 
     1     1     0 
     1     0     0 
 
A<=B 
ans = 
     1     1     0 
     1     1     0 
     1     0     1 
 
A>B 
ans = 
     0     0     1 
     0     0     1 
     0     1     0 
 
A>=B 
ans = 
     1     0     1 
     0     0     1 
     0     1     1 
 
A==B 
ans = 
 
     1     0     0 
     0     0     0 
     0     0     1 
 
A~=B 
ans = 
     0     1     1 
     1     1     1 
     1     1     0 
 
A>4 

background image

21

 

ans = 
     1     0     0 
     0     1     1 
     1     1     1 

 
 
 Operatory 

logiczne 

 

iloczyn logiczny (koniunkcja, and) 

 

suma logiczna (alternatywa, or) 

 

negacja (zaprzeczenie, not) 

 xor 

różnica symetryczna (exclusive or) 

 
  Działanie operatorów logicznych jest takie same jak w innych językach 
programowania. W przypadku argumentów macierzowych zerowe elementy macierzy 
są równe false, a niezerowe true. Przykładowo 
 

A=[8 2 3; 4 8 5; 6 0 8]; B=[8 3 2 ; 5 8 4; 7 6 8]; 
  
A&B 
ans = 
     1     1     1 
     1     1     1 
     1     0     1 
 
A|B 
ans = 
     1     1     1 
     1     1     1 
     1     1     1 
 
 ~A 
ans = 
     0     0     0 
     0     0     0 
     0     1     0 
 
xor(A,B) 
ans = 
     0     0     0 
     0     0     0 
     0     1     0 

 

background image

22

 

 

Zadania do samodzielnego rozwiązania 

 
 Zadanie 

 Korzystając z okna poleceń Matlaba powtórzyć we własnym katalogu wszystkie 
podane powyżej działania macierzowe i tablicowe sprawdzając, czy uzyskane wyniki 
są takie same. 
 
 
 Zadanie 

 

Wzory transformacji prądów oraz napięć z układu L1, L2, L3 do układu 0, 1, 2 są 

następujące 
 

L3

L2,

L1,

0,1,2

I

S

I

=

 (2.1) 

 

L3

L2,

L1,

0,1,2

U

S

U

=

 (2.2) 

gdzie 

 

=

a

a

1

a

a

1

1

1

1

3

1

2

2

S

 (2.3) 

 
Wzory transformacji prądów oraz napięć z układu 0, 1, 2 do układu L1, L2, L3 są 
następujące 

 

0,1,2

1

L3

L2,

L1,

I

S

I

=

 (2.4) 

 

0,1,2

1

L3

L2,

L1,

U

S

U

=

 (2.5) 

 
Z pomiarów otrzymano następujące wartości napięć i prądów 
  

U

L1

 = 0 V,  U

L2

 = 400e

-j2

π

/3

 V,  U

L3

 = 400e

+j2

π

/3

 V 

  

I

L1

 = 100e

-j

π

/2

 V A,  I

L2

 = 0 A,  I

L3

 = 0 A 

Należy wyznaczyć wartości napięć i prądów w układzie 0,1,2. 
 
 
 Zadanie 

 Moc 

trójfazową w stanie niesymetrycznego obciążenia można obliczyć w układzie 

L1, L2, L3 z następującego wzoru 

 

*

L3

L2,

L1,

T

L3

L2,

L1,

I

U

=

+

+

=

+

*

3

L

3

L

*

2

L

2

L

*

1

L

1

L

I

U

I

U

I

U

jQ

P

 (2.6) 

lub w układzie 0, 1, 2 ze wzoru 

 

*

2

2

*

1

1

*

0

0

I

U

3

I

U

3

I

U

3

3

jQ

P

+

+

=

=

+

*

0,1,2

T

0,1,2

I

U

 (2.8) 

 
Należy sprawdzić tożsamość wzorów na moc 3-fazową dla wartości napięć i prądów z 
zadania 2.