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
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
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
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)
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
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
3
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.