MatLab część II 1
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. 2
Pliki tekstowe otwarcie Plik 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. 3
Pliki tekstowe identyfikator Po 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 4
Pliki tekstowe odczyt Skł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 pliku format 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ńca Par1,Val1,, Parn,Valn seria parametrów funkcji i ich wartości, podanych parami: Parametr,Wartość 5
Funkcja textscan format Składnia argumentu format (podstawowe typy danych): argument ten podajemy w postaci łańcucha znakowego typy 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. %*f Moż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 6
Funkcja textscan parametry Parametry 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 7
Funkcja textscan wartości Funkcja 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 odczytanych danych o długości równej argumentowi N funkcji textscan Jeżeli określone pole formatu było typu łańcucha znakowego, 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) 8
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 3 4 5 6 7 8 9] w rezultacie otrzymamy to samo 9
Wprowadzanie macierzy c.d. Sybkie tworzenie wektorów: a=1 :10 ans= 1 2 3 4 5 6 7 8 9 10 a=0:2 :10 ans= 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!) 10
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 11
Indeksowanie macierzy Odwoł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 12
Indeksowanie macierzy c.d Odwołanie poprzez zakres: a(2,2:4) ans= 6 7 8 Można indeksować wszystkie kolumny czy wiersze: a(2,:) ans= 5 6 7 8 a(:,2:4) ans= 2 3 4 6 7 8 10 11 12 13
Modyfikacja macierzy poprzez indeksowanie Modyfikacja elementu macierzy: a(1,2)=1 ans= 1 1 3 4 5 6 7 8 9 10 11 12 Modyfikacja wiersza (kolumny) macierzy: a(2,:)=1:4 ans= 1 1 3 4 1 2 3 4 9 10 11 12 14
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 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 16
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 17
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) 18
Operacje macierzowe Dodawanie 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 19
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: A B =VD B V 1 20
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 21
Operacje relacyjne i logiczne Operacje 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) 22
Funkcje macierzowe det(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 macierzy d=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 23
Elementarne funkcje statystyczne Dział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) sum(a) prod(a) mean(a) std(a) var(a) element maksymalny suma elementów iloczyn elementów średnia odchylenie standardowe wariancja 24
Elementarne funkcje tablicowe Dział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) rem(a) exp(a) log(a) log10(a) pierwiastek kwadratowy reszta z dzielenia funkcja wykładnicza logarytm naturalny logarytm dziesiętny 25
Elementarne funkcje tablicowe Dział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) rem(a) exp(a) log(a) log10(a) pierwiastek kwadratowy reszta z dzielenia funkcja wykładnicza logarytm naturalny logarytm dziesiętny 26
Funkcje trygonometryczne i cyklomeryczne Działają na elementach macierzy (tablicowo) Argumentem (lub wynikiem) funkcji jest miara łukowa Funkcje trygonometryczne: sin(a) sinus Funkcje cyklometryczne: asin(a) arcus sinus cos(a) cosinus tan(a) tangens cot(a) cotangens acos(a)arcus cosinus atan(a)arcus tangens acot(a) arcus cotangens Odpowiedniki hiperboliczne tych funkcji mają w nazwie dodakowo literę h na końcu, np. sinh, acoth 27
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) 28
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) 29
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) 30
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 31