MATLAB, rozdzial2

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

background image

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)

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

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.


Wyszukiwarka

Podobne podstrony:
MATLAB rozdzial3
MATLAB, rozdzial1
MATLAB rozdzial1
MATLAB, rozdzial6
MATLAB, rozdzial3
MATLAB rozdzial2
MATLAB rozdzial6
MATLAB rozdzial4
MATLAB rozdzial5 id 768819 Nieznany
Matlab cw1 2 zaoczni
Podstawy zarządzania wykład rozdział 05
cz 1, Matlab moj
Image Processing with Matlab 33
2 Realizacja pracy licencjackiej rozdziałmetodologiczny (1)id 19659 ppt
Ekonomia rozdzial III
rozdzielczosc
kurs html rozdział II
MATLAB graf(1)
Podstawy zarządzania wykład rozdział 14

więcej podobnych podstron