MatLab część II - vistula.wis.pk.edu.plvistula.wis.pk.edu.pl/~qmq/MatLab/MatLab2.pdf · 6...

31
1 MatLab część II

Transcript of MatLab część II - vistula.wis.pk.edu.plvistula.wis.pk.edu.pl/~qmq/MatLab/MatLab2.pdf · 6...

Page 1: MatLab część II - vistula.wis.pk.edu.plvistula.wis.pk.edu.pl/~qmq/MatLab/MatLab2.pdf · 6 Funkcja textscan – format Składnia argumentu format (podstawowe typy danych): argument

1

MatLabczęść II

Page 2: MatLab część II - vistula.wis.pk.edu.plvistula.wis.pk.edu.pl/~qmq/MatLab/MatLab2.pdf · 6 Funkcja textscan – format Składnia argumentu format (podstawowe typy danych): argument

2

Wprowadzanie danych — pliki tekstowe ogólnego formatu

Do odczytu danych z plików tekstowych ogólnego (swobodnego) formatu zaleca się użycie funkcji textscan.

Funkcja textscan nie zawiera procedury otwarcia i zamknięcia pliku, tak więc należy najpierw plik z danymi otworzyć do odczytu, nadając mu identyfikator (numer wskaźnika do pliku).

Odczyt danych może być przeprowadzany wielokrotnie.

Kolejny odczyt zaczyna się od miejsca, na które wskazuje wskaźnik.

Po zakończeniu sekwencji odczytów, należy identyfikator zwolnić, zamykając plik.

Page 3: MatLab część II - vistula.wis.pk.edu.plvistula.wis.pk.edu.pl/~qmq/MatLab/MatLab2.pdf · 6 Funkcja textscan – format Składnia argumentu format (podstawowe typy danych): argument

3

Pliki tekstowe — otwarciePlik otwieramy poleceniem: fileID=fopen(nazwa_pliku)

fileID jest nazwą zmiennej, w której przechowamy identyfikator pliku

nazwa_pliku to łańcuch znakowy (string), w którym podajemy pełną (!) nazwę istniejącego pliku

Przykłady:plk=fopen('dane.txt')

dane1='D:\pomiary\Stanowisko 1\dat20130424.txt'plk=fopen(dane1)

Jeżeli funkcja fopen zwróci wartość –1, to jest to informacja, że plik nie został otwarty. Najczęściej powodem jest nieznalezienie pliku.

Page 4: MatLab część II - vistula.wis.pk.edu.plvistula.wis.pk.edu.pl/~qmq/MatLab/MatLab2.pdf · 6 Funkcja textscan – format Składnia argumentu format (podstawowe typy danych): argument

4

Pliki tekstowe — identyfikatorPo otwarciu pliku odwołujemy się do niego za pomocą identyfikatora

Identyfikator jest numerem wskaźnika do pliku

Plik można otworzyć wielokrotnie, wtedy każdy identyfikator wskazuje na inny wskaźnik

W trakcie czytania można ponownie przesunąć wskaźnik do początku pliku poleceniem: rewind(fileID)

Po zakończeniu pracy z plikiem należy zwolnić identyfikator wskaźnika pliku zamykając plik

Plik zamykamy poleceniem: fclose(fileID)fileID jest oczywiście nazwą zmiennej, w której przechowujemy identyfikator pliku

Page 5: MatLab część II - vistula.wis.pk.edu.plvistula.wis.pk.edu.pl/~qmq/MatLab/MatLab2.pdf · 6 Funkcja textscan – format Składnia argumentu format (podstawowe typy danych): argument

5

Pliki tekstowe — odczytSkładnia: C = textscan(fileID,format,N,Par1,Val1, …, Parn,Valn)

C – zmienna, do której zapisujemy wynik odczytu (jest to wektor komórkowy)fileID – identyfikator plikuformat – format danych czytanych jednorazowo; więcej: na następnym slajdzie!N – liczba powtórzeń odczytu; jeśli jej brak, to plik czytany jest do końcaPar1,Val1, …, Parn,Valn – seria parametrów funkcji i ich wartości, podanych parami: Parametr,Wartość

Page 6: MatLab część II - vistula.wis.pk.edu.plvistula.wis.pk.edu.pl/~qmq/MatLab/MatLab2.pdf · 6 Funkcja textscan – format Składnia argumentu format (podstawowe typy danych): argument

6

Funkcja textscan – formatSkładnia argumentu format (podstawowe typy danych):

argument ten podajemy w postaci łańcucha znakowegotypy danych: %d – liczba całkowita (ze znakiem); %f – liczba zmiennoprzecinkowa; %s – łańcuch znakowy; %c – pojedynczy znak (także spacja!)Istnieją także inne typy danych; więcej: help textscan

Należy również w formacie podać dane pomijane, używając składni %*, np. %*fMożemy także określić rozmiar danej, np. %3d lub %10.5f

W przypadku pominięcia reszty danych w linii można użyć składni %*[^\n]

Więcej o formacie: help textscan

Page 7: MatLab część II - vistula.wis.pk.edu.plvistula.wis.pk.edu.pl/~qmq/MatLab/MatLab2.pdf · 6 Funkcja textscan – format Składnia argumentu format (podstawowe typy danych): argument

7

Funkcja textscan — parametryParametry służą do zmiany domyślnych ustawień funkcji

Niektóre parametry:HeaderLines określa liczbę wierszy pomijanych na początku czytania. Wartość parametru podajemy w postaci liczby całkowitej

ExpChars określa znak symbolu potęgi w zapisie zmiennoprzecinkowym, tzn. typu 2.7e–3. Domyślną wartością jest łańcuch znakowy 'eEdD'. Wartość parametru podajemy w postaci łańcucha znakowego, np. 'ExpChars','×10^' dla liczb w postaci 2.7×10^–3

Więcej o parametrach: help textscan

Page 8: MatLab część II - vistula.wis.pk.edu.plvistula.wis.pk.edu.pl/~qmq/MatLab/MatLab2.pdf · 6 Funkcja textscan – format Składnia argumentu format (podstawowe typy danych): argument

8

Funkcja textscan — wartościFunkcja zwraca wynik w postaci wektora komórkowego o tylu kolumnach, ile było niepominiętych pól formatu

Aby zorientować się w strukturze wektora komórkowego, można użyć funkcji celldisp. Przykład: celldisp(C)

Jeżeli określone pole formatu było typu liczbowego, to odpowiednia komórka zawiera wektor kolumnowy od­czytanych danych o długości równej argumentowi N funkcji textscan

Jeżeli określone pole formatu było typu łańcucha znako­wego, to odpowiednia komórka zawiera jednowymiarowy wektor komórkowy, o długości N

Jeżeli wektor komórkowy zawiera dane tego samego typu, to można je połaczyć w jedną macierz za pomocą funkcji cell2mat. Przykład: cell2mat(C)

Page 9: MatLab część II - vistula.wis.pk.edu.plvistula.wis.pk.edu.pl/~qmq/MatLab/MatLab2.pdf · 6 Funkcja textscan – format Składnia argumentu format (podstawowe typy danych): argument

9

Wprowadzanie macierzy z linii poleceń

Pojedyncza liczba (skalar): a=1.27

Wektor wierszowy: a=[1 2 3]

Wektor kolumnowy: a=[1; 2; 3] (średnik oznacza przejście do następnego wiersza)

Macierz:(kolejno wierszami): a=[1 2 3; 4 5 6; 7 8 9]

Można też tak:a=[1 2 34 5 67 8 9]w rezultacie otrzymamy to samo

Page 10: MatLab część II - vistula.wis.pk.edu.plvistula.wis.pk.edu.pl/~qmq/MatLab/MatLab2.pdf · 6 Funkcja textscan – format Składnia argumentu format (podstawowe typy danych): argument

10

Wprowadzanie macierzy – c.d.

Sybkie tworzenie wektorów: a=1 :10ans=

1 2 3 4 5 6 7 8 9 10

a=0:2 :10ans=

0 2 4 6 8 10

składnia: a = początek : skok : koniec

Można też macierze: a=[1 :10;2:2:20](uwaga na rozmiary wierszy!)

Page 11: MatLab część II - vistula.wis.pk.edu.plvistula.wis.pk.edu.pl/~qmq/MatLab/MatLab2.pdf · 6 Funkcja textscan – format Składnia argumentu format (podstawowe typy danych): argument

11

Wprowadzanie danych – funkcja input

Funkcja input wyprowadza do okna poleceń komunikat i oczekuje na wprowadzenie danej:

składnia: input('komunikat')

komunikat musi być łańcuchem znakowym (stąd w apostrofach) lub zmienną łańcuchową (nazwę zmiennej podajemy bez apostrofów!)

użycie w komunikacie sekwencji znaków \n oznacza polecenie przejścia do następnej linii

składnia: input('komunikat','s') oznacza, że wprowadzana dana będzie czytana jako łańcuch znakowy

Page 12: MatLab część II - vistula.wis.pk.edu.plvistula.wis.pk.edu.pl/~qmq/MatLab/MatLab2.pdf · 6 Funkcja textscan – format Składnia argumentu format (podstawowe typy danych): argument

12

Indeksowanie macierzyOdwołanie się do pojedynczego elemenu macierzy:a(w,k), gdzie w oznacza numer wiersza, a k kolumny

Przykład:a=[1 2 3 4;5 6 7 8; 9 10 11 12]a(2,3)ans=

7

Można też odwołać się do kilku elementów macierzy poprzez wektor indeksów:a(2,[1 3])ans=

5 7

Page 13: MatLab część II - vistula.wis.pk.edu.plvistula.wis.pk.edu.pl/~qmq/MatLab/MatLab2.pdf · 6 Funkcja textscan – format Składnia argumentu format (podstawowe typy danych): argument

13

Indeksowanie macierzy – c.dOdwołanie poprzez zakres:a(2,2:4)ans=

6 7 8

Można indeksować wszystkie kolumny czy wiersze:a(2,:)ans=

5 6 7 8a(:,2:4)ans=

2 3 4 6 7 810 11 12

Page 14: MatLab część II - vistula.wis.pk.edu.plvistula.wis.pk.edu.pl/~qmq/MatLab/MatLab2.pdf · 6 Funkcja textscan – format Składnia argumentu format (podstawowe typy danych): argument

14

Modyfikacja macierzy poprzez indeksowanie

Modyfikacja elementu macierzy:a(1,2)=1ans=

1 1 3 4 5 6 7 8 9 10 11 12

Modyfikacja wiersza (kolumny) macierzy:a(2,:)=1:4ans=

1 1 3 4 1 2 3 4 9 10 11 12

Page 15: MatLab część II - vistula.wis.pk.edu.plvistula.wis.pk.edu.pl/~qmq/MatLab/MatLab2.pdf · 6 Funkcja textscan – format Składnia argumentu format (podstawowe typy danych): argument

15

Modyfikacja macierzy poprzez indeksowanie – c.d.

Redukcja macierzy:a(:,4)=[]ans=

1 1 3 1 2 3 9 10 11

Permutacja macierzy:b=a(:,[2 3 1])b=

1 3 1 2 3 1 10 11 9

Page 16: MatLab część II - vistula.wis.pk.edu.plvistula.wis.pk.edu.pl/~qmq/MatLab/MatLab2.pdf · 6 Funkcja textscan – format Składnia argumentu format (podstawowe typy danych): argument

16

Modyfikacja macierzy poprzez indeksowanie – c.d.

Redukcja macierzy:a(:,4)=[]ans=

1 1 3 1 2 3 9 10 11

Permutacja macierzy:b=a(:,[2 3 1])b=

1 3 1 2 3 1 10 11 9

Page 17: MatLab część II - vistula.wis.pk.edu.plvistula.wis.pk.edu.pl/~qmq/MatLab/MatLab2.pdf · 6 Funkcja textscan – format Składnia argumentu format (podstawowe typy danych): argument

17

Modyfikacja macierzy – funkcje specjalne

fliplr(a) – odbicie lustrzane w poziomie (lr=left-right)

flipud(a) – odbicie lustrzane w pionie (ud=up-down)

rot90(a) – obrót o 90 stopni (odwrotnie do ruchu wskazówek zegara)

tril(a) – ekstrakcja macierzy trójkątnej dolnej (l=lower)

triu(a) – ekstrakcja macierzy trójkątnej górnej (u=upper)

diag(a) – ekstrakcja elementów diagonalnych macierzy (a jak wyekstrachować elementy niediagonalne?)

a' – utworzenie macierzy transponowanej

inv(a) – utworzenie macierzy odwrotnej = a-1

Page 18: MatLab część II - vistula.wis.pk.edu.plvistula.wis.pk.edu.pl/~qmq/MatLab/MatLab2.pdf · 6 Funkcja textscan – format Składnia argumentu format (podstawowe typy danych): argument

18

Tworzenie macierzy specjalnych

Tworzenie macierzy zer: zeros(w,k) – w, k oznaczają odpowiednio liczbę wierszy i kolumn (podanie tylko jednej liczby tworzy macierz kwadratową)Tworzenie macierzy jedynek: ones(w,k)Tworzenie macierzy jednostkowej: eye(n) (co powstanie, gdy podamy różną liczbę wierszy i kolumn?)Tworzenie macierzy o rozkładzie losowym równomiernym: rand(w,k)Tworzenie macierzy o rozkładzie losowym normalnym: randn(w,k)

Page 19: MatLab część II - vistula.wis.pk.edu.plvistula.wis.pk.edu.pl/~qmq/MatLab/MatLab2.pdf · 6 Funkcja textscan – format Składnia argumentu format (podstawowe typy danych): argument

19

Operacje macierzoweDodawanie i odejmowanie macierzowe:

macierz-macierz: a+b oraz a-b (macierze muszą mieć te same wymiary)

macierz-skalar: skalar dodawany do (odejmowany od) każdego elementu macierzy

Mnożenie macierzowe:macierz-macierz: a*b (wewnętrzne wymiary macierzy muszą być równe)

macierz-skalar: skalar przemnaża każdy element macierzy

Dzielenie macierzowe:dzielenie prawostronne: a/b tożsame z a*inv(b)

dzielenie lewostronne: a\b tożsame z inv(a)*b

Page 20: MatLab część II - vistula.wis.pk.edu.plvistula.wis.pk.edu.pl/~qmq/MatLab/MatLab2.pdf · 6 Funkcja textscan – format Składnia argumentu format (podstawowe typy danych): argument

20

Operacje macierzowe – c.d.Potęgowanie: a^b (jeden element musi być skalarem, a drugi macierzą kwadratową):

jeśli b jest liczbą całkowitą, to macierz a jest b-krotnie przemnażana przez siebie

jeśli a jest skalarem, a macierz b jest diagonalna, to wynikiem jest macierz diagonalna z elementami równymi liczbie a podniesionej do potęgi wartości odpowiedniego elementu macierzy b

w pozostałych przypadkach operacja potęgowania dokonywana jest w przestrzeni wektorowej, w której składnik macierzowy jest diagonalny (rozwiązywane jest zagadnienie wartości i wektorów własnych: A=VDV–1) – wynik podawany jest jednak w przestrzeni pierwotnej: AB=VDBV–1

Page 21: MatLab część II - vistula.wis.pk.edu.plvistula.wis.pk.edu.pl/~qmq/MatLab/MatLab2.pdf · 6 Funkcja textscan – format Składnia argumentu format (podstawowe typy danych): argument

21

Operacje tablicowe

Odróżnia się je od operacji macierzowych poprzez poprzedzenie ich kropką: .* ./ .\ .^

Wykonywane są pomiędzy odpowiednimi elementami macierzy (element po elemencie)

Macierze muszą mieć te same wymiary (za wyjątkiem oczywiście operacji na parze macierz-skalar)

Dodawanie i odejmowanie tablicowe nie wymaga kropki, bo działa tak samo, jak w operacjach macierzowych

W przypadku, gdy mogło by to doprowadzić do niejednoznacznej interpretacji polecenia, przed kropką należy postawić spację: 2 .^a

Page 22: MatLab część II - vistula.wis.pk.edu.plvistula.wis.pk.edu.pl/~qmq/MatLab/MatLab2.pdf · 6 Funkcja textscan – format Składnia argumentu format (podstawowe typy danych): argument

22

Operacje relacyjne i logiczneOperacje na macierzach o tych samych wymiarach lub pomiędzy macierzą a skalarem – wynikiem jest macierz tych samych wymiarów, której elementami są wartości logiczne (0 lub 1) wyniku operacji na odpowiednich elementach macierzy

Operatory relacyjne:== równości

~= nierówności

< mniejszości

<= niewiększości

> większości

>= niemniejszości

Operatory logiczne:& logiczne And

| logiczne Or

~ logiczne Not

Elementy niezerowe macierzy traktowane są jak 1 (prawda)

Page 23: MatLab część II - vistula.wis.pk.edu.plvistula.wis.pk.edu.pl/~qmq/MatLab/MatLab2.pdf · 6 Funkcja textscan – format Składnia argumentu format (podstawowe typy danych): argument

23

Funkcje macierzowedet(a) – wyznacznik macierzy

trace(a) – ślad macierzy (suma elementów diagonalnych)

rank(a) – rząd macierzy

eig(a) – wartości własne i wektory własne macierzyd=eig(a)d jest wektorem (kolumną) wartości własnych

[V,D]=eig(A)V jest macierzą wektorów własnych (kolumny)D jest macierzą diagonalną wartości własnych

A=VDV–1

Page 24: MatLab część II - vistula.wis.pk.edu.plvistula.wis.pk.edu.pl/~qmq/MatLab/MatLab2.pdf · 6 Funkcja textscan – format Składnia argumentu format (podstawowe typy danych): argument

24

Elementarne funkcje statystyczneDziałają na seriach danych wzdłuż kolumn (standardowo) lub wierszy (trzeba to wymusić, np. min(a,2))Wynikiem jest wektor o długości równej liczbie kolumn (wierszy) z elementami będącymi wartościami funkcji obliczonych na kolumnach (wierszach)

min(a) element minimalny

max(a) element maksymalny

sum(a) suma elementów

prod(a) iloczyn elementów

mean(a) średnia

std(a) odchylenie standardowe

var(a) wariancja

Page 25: MatLab część II - vistula.wis.pk.edu.plvistula.wis.pk.edu.pl/~qmq/MatLab/MatLab2.pdf · 6 Funkcja textscan – format Składnia argumentu format (podstawowe typy danych): argument

25

Elementarne funkcje tablicoweDziałają tablicowo, tzn. na elementach macierzy

abs(a) wartość bezwzględna

round(a) zaokrąglenie

fix(a) zaokrąglenie ku 0

floor(a) zaokrąglenie ku –∞

ceil(a) zaokrąglenie ku +∞

sqrt(a) pierwiastek kwadratowy

rem(a) reszta z dzielenia

exp(a) funkcja wykładnicza

log(a) logarytm naturalny

log10(a) logarytm dziesiętny

Page 26: MatLab część II - vistula.wis.pk.edu.plvistula.wis.pk.edu.pl/~qmq/MatLab/MatLab2.pdf · 6 Funkcja textscan – format Składnia argumentu format (podstawowe typy danych): argument

26

Elementarne funkcje tablicoweDziałają tablicowo, tzn. na elementach macierzy

abs(a) wartość bezwzględna

round(a) zaokrąglenie

fix(a) zaokrąglenie ku 0

floor(a) zaokrąglenie ku –∞

ceil(a) zaokrąglenie ku +∞

sqrt(a) pierwiastek kwadratowy

rem(a) reszta z dzielenia

exp(a) funkcja wykładnicza

log(a) logarytm naturalny

log10(a) logarytm dziesiętny

Page 27: MatLab część II - vistula.wis.pk.edu.plvistula.wis.pk.edu.pl/~qmq/MatLab/MatLab2.pdf · 6 Funkcja textscan – format Składnia argumentu format (podstawowe typy danych): argument

27

Funkcje trygonometryczne i cyklomeryczne

Działają na elementach macierzy (tablicowo)

Argumentem (lub wynikiem) funkcji jest miara łukowa

Funkcje trygonometryczne:sin(a) sinus

cos(a) cosinus

tan(a) tangens

cot(a) cotangens

Odpowiedniki hiperboliczne tych funkcji mają w nazwie dodakowo literę h na końcu, np. sinh, acoth

Funkcje cyklometryczne:asin(a) arcus sinus

acos(a)arcus cosinus

atan(a)arcus tangens

acot(a) arcus cotangens

Page 28: MatLab część II - vistula.wis.pk.edu.plvistula.wis.pk.edu.pl/~qmq/MatLab/MatLab2.pdf · 6 Funkcja textscan – format Składnia argumentu format (podstawowe typy danych): argument

28

Operacje symboliczne

Operacje symboliczne wymagają zdefiniowania zmiennych symbolicznych – dokonuje się tego za pomocą polecenia syms

syms x n nadaje obiektom (zmiennym) x i n klasę obiektu symbolicznego

więcej: help syms

Dobrze jest operacje symboliczne rozbić na elementy prostsze (w miarę własnych umiejętności), gdyż MatLab nie radzi sobie zbyt dobrze ze zbyt skomplikowanymi funkcjami (wzorami)

Page 29: MatLab część II - vistula.wis.pk.edu.plvistula.wis.pk.edu.pl/~qmq/MatLab/MatLab2.pdf · 6 Funkcja textscan – format Składnia argumentu format (podstawowe typy danych): argument

29

Operacje symboliczne – c.d.

Obliczanie granicy ciągu:limit(F,x,a) znajduje granicę wyrażenia F (podajemy je bez apostrofów), dla zmiennej x (symbolicznej), w punkcie a (liczba, także ±Inf)

pominięcie a oznacza a=0

pominięcie x uruchomi funkcję findsym(F), szukającą w wyrażeniu F zmiennej symbolicznej najbliższej 'x'

limit(F,x,a,'left') oblicza granicę lewostronną

limit(F,x,a,'right') oblicza granicę prawostronną

UWAGA! W rezultacie możemy otrzymać wynik: Inf (oznacza +∞), –Inf czy NaN (brak granicy w danym punkcie)

Page 30: MatLab część II - vistula.wis.pk.edu.plvistula.wis.pk.edu.pl/~qmq/MatLab/MatLab2.pdf · 6 Funkcja textscan – format Składnia argumentu format (podstawowe typy danych): argument

30

Operacje symboliczne – c.d.

Obliczanie sumy ciągu:symsum(F,x,a,b) oblicza sumę ciągu o wyrazach F dla zmiennej x (symbolicznej), o wartościach od a (liczba) do b (liczba)

pominięcie a i b oznacza sumę nieoznaczoną

granice sumy mogą mieć wartość Inf, np. symsum(1/x^3,x,1,Inf)

wynik może być podany w postaci wyrażenia czy funkcji, np. 1/2*Psi(2,x) czy zeta(3)

Page 31: MatLab część II - vistula.wis.pk.edu.plvistula.wis.pk.edu.pl/~qmq/MatLab/MatLab2.pdf · 6 Funkcja textscan – format Składnia argumentu format (podstawowe typy danych): argument

31

Operacje symboliczne – c.d.

Obliczanie różniczki wyrażenia:diff(F,n,x) oblicza n-tą pochodną wyrażenia F po zmiennej x (symbolicznej)

pominięcie n oznacza pierwszą pochodną

Obliczanie całki wyrażenia:int(F,x,a,b) oblicza całkę wyrażenia F dla zmiennej x (symbolicznej), w granicach od a (liczba) do b (liczba)

pominięcie a i b oznacza całkę nieoznaczoną

granice całki mogą mieć wartość Inf, np. int(1/x^3,x,1,Inf)

wynik może mieć wartość nieskończoną, np. Inf