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
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
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
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
~=
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
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.