Upload
others
View
8
Download
0
Embed Size (px)
Citation preview
1
MatLabczęść II
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.
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.
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
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ść
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
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
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 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)
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
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!)
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
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
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
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
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 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
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
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)
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
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
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
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)
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
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
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
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
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
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)
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)
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)
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