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

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]

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 = b

najczęściej jest używany operator dzielenia lewostronnego czyli x = A\b

Przykład

1

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

2x1 + 5x2 = 7

3x1 - x2 = 2

4x1 + 6x2 = 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

16

Przykład

2

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

3x1 + 2x2 + x3 = 5

2x1 + 3x2 + x3 = 1

2x1 + x2 + 3x3 = 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)

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

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

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

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

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

22

Zadania do samodzielnego rozwiązania

Zadanie

1

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

2

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

I

= S I

(2.1)

0,1,2

L1,L2,L3

U

= S U

(2.2)

0,1,2

L1,L2,L3

gdzie

 1 1 1 

1 



=  1 a a2

S

 (2.3)

3 

2



 1 a a 

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

− 1

I

= S I

(2.4)

L1,L2,L3

0,1,2

− 1

U

= S U

(2.5)

L1,L2,L3

0,1,2

Z pomiarów otrzymano następujące wartości napięć i prądów UL1 = 0 V, UL2 = 400e-j2π/3 V, UL3 = 400e+j2π/3 V

IL1 = 100e-jπ/2 V A, IL2 = 0 A, IL3 = 0 A

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

Zadanie

3

Moc

trójfazową w stanie niesymetrycznego obciążenia można obliczyć w układzie L1, L2, L3 z następującego wzoru

*

*

*

T

*

P + jQ = U

I

U

I

U

I

(2.6)

L1

L1 +

L2

L 2 +

L3

L3 = U

I

L1,L2,L3

L1,L2,L3

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

T

*

*

*

*

P + jQ = 3U

I

(2.8)

0,1,2

0,1,2 =

U

3

I + U

3

I + U

3

I

0

0

1

1

2

2

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