WIMIM/MIBM/N1/-/B04 WIMIM/ME/S1/-/C46 WIMIM/IM/S1/-/B19
Co mam zrobić, jeżeli obliczenia potrzebne są na wczoraj, trzeba jeszcze zrobić wykres, a do tego mam użyć Bardzo Skomplikowanego Czegoś wiedząc o tym raczej niewiele? dr Sławomir Marczyński 2014-06-03 2
Aby móc obliczyć jak rozchodzi się tsunami, albo czy jutro będzie padał deszcz, albo jak wygnie się belka pod obciążeniem potrzebne są odpowiednie równania i sposób na obliczenie rozwiązań tych równań. Im dokładniej chcemy wykonać takie obliczenia, tym większą ilością liczb będziemy się posługiwać. Sensownie jest więc użyć macierzy zamiast robić rachunki na pojedynczych wartościach liczbowych. dr Sławomir Marczyński 2014-06-03 3
Dodawanie Odejmowanie Mnożenie Dzielenie Transponowanie Sprzęganie, sprzęganie hermitowskie Odwracanie i obliczanie wyznacznika Obliczanie śladu macierzy Obliczanie wektorów i wartości własnych dr Sławomir Marczyński 2014-06-03 4
Tworzenie macierzy Wyodrębnianie fragmentu Dekompozycje Czytanie/pisanie/drukowanie/rysowanie Konwersja Uwaga: wektory to też macierze. dr Sławomir Marczyński 2014-06-03 5
for (i = 1; i <= N; i++) for (j = 1; j <= N; j++) { c[i][j] = 0; for (k = 1; k <= N; k++) c[i][j] = c[i][j] + a[i][k] * b[k][j]; } Ten algorytm działa, ale zwykle działa zbyt powoli są szybsze sposoby na mnożenie. To zbyt pracochłonne łatwiej przecież napisać po prostu A * B dr Sławomir Marczyński 2014-06-03 7
Matlab jest programem licencjonowanym, można go kupić http://www.mathworks.com/ Alternatywą są darmowe programy Octave (GNU) http://www.gnu.org/software/octave/ SciLab (Open Source INRIA) http://www.scilab.org/ dr Sławomir Marczyński 2014-06-03 8
dr Sławomir Marczyński 2014-06-03 9
Interaktywnie CLI GUI Wsadowo skrypty (polecenie diary) run "skrypt.m" matlab r "skrypt" funkcje (alternatywa dla skryptów) dr Sławomir Marczyński 2014-06-03 10
MAT-files zapis poleceniem save odczyt poleceniem load zawierają wartości zmiennych na jakich prowadzi się obliczenia M-files zapis jako pliku z dowolnego edytora tekstu uruchomienie przez podanie nazwy pliku jako polecenia/funkcji (bez.m) MEX-files Simulink: pliki.slx oraz.mdl dr Sławomir Marczyński 2014-06-03 11
Najprościej Google Napisać help Napisać helpdesk Napisać doc Odnaleźć opcję menu help Uruchomić programy przykładowe Przeczytać PDF Przeczytać podręcznik Uwaga: dokumentacja do tworzonych funkcji dr Sławomir Marczyński 2014-06-03 12
dr Sławomir Marczyński 2014-06-03 13
Duże i małe litery są traktowane jako różne znaki, zmienna A i zmienna a to dwie różne zmienne. Nie przejmujemy (?) się typami zmiennych Gdy chcemy zobaczyć co jest w zmiennej to ją piszemy w oknie poleceń i naciskamy enter Gdy nie chcemy widzieć wyniku stawiamy średnik Polecenie clear pozwala pozbyć się niepotrzebnych już zmiennych dr Sławomir Marczyński 2014-06-03 14
Możemy macierz wczytać z pliku Możemy ją wpisać z klawiatury [1, 2.1e-8; pi, 1+i] Możemy użyć funkcji do tworzenia macierzy np.: eye(n), speye(n), zeros(n), ones(n), magic(n) rand(n), randi(n), randn(n) gallery(nazwa_macierzy_z_galerii, p1, p2, ) Możemy utworzyć jako ciąg, np. 5:5:25 dr Sławomir Marczyński 2014-06-03 15
Dodawanie, odejmowanie, mnożenie zapisujemy jako + - * Transpozycje kropka-apostrof i apostrof Odwracanie macierzy funkcja inv Dzielenie macierzy są dwie odmiany ze ukośnikiem i ukośnikiem odwrotnym Wyznacznik det, ślad trace Suma, różnica, iloczyn elementów sum, diff, prod i mnóstwo innych operacji, np. reshape dr Sławomir Marczyński 2014-06-03 16
Normalnie Matlab każdą operację robi na macierzach (czyli jako operację na macierzach, wektorach i liczbach zależnie od tego co jest użyte) Jeżeli operator poprzedzi się kropką, to Matlab wykona daną operację skalarnie, choć przetworzy tak wszystkie elementy macierzy Funkcje takie jak sinus też wykonują się na wszystkich elementach macierzy naraz. dr Sławomir Marczyński 2014-06-03 17
MatLab pozwala tworzyć bardzo złożone rysunki i zapisywać je np. jako pliki PS (nadają się do druku!) Na początek przydadzą się polecenia plot(x,y) które rysuje wykres y(x) surf(x,y,z) rysujące wykres trójwymiarowy contour(x,y,z) rysujący poziomice Przy pomocy odpowiednich poleceń można umieścić na rysunku tytuły, opisać osie współrzędnych, zmienić skale na logarytmiczne itd. dr Sławomir Marczyński 2014-06-03 18
http://www.mathworks.com/products/matlab/demos. html?file=/products/demos/shipping/matlab/ dostarczane wraz z programem Matlab dr Sławomir Marczyński 2014-06-03 19
Język programowania pakietu Matlab jest językiem programowania Wikipedia dr Sławomir Marczyński 2014-06-03 20
M-pliki MEX-pliki Skrypty w Matlabie Funkcje w Matlabie Instrukcje warunkowe Instrukcje pętli Obsługa wyjątków Programowanie obiektowe?! dr Sławomir Marczyński 2014-06-03 21
Skrypty to pliki, w których jest to czego nie chcemy wpisywać z klawiatury za każdym razem od nowa. Nazwa skryptu powinna mieć rozszerzenie.m, np. policz.m Skrypty to po prostu pliki tekstowe: Notepad++ edit policz.m diary ' policz.m' Aby uruchomić polecenia zapisane w skrypcie piszemy jego nazwę bez.m: policz.m wywołuje się pisząc policz dr Sławomir Marczyński 2014-06-03 22
dr Sławomir Marczyński 2014-06-03 23
dr Sławomir Marczyński 2014-06-03 24
Skrypt używa zmiennych globalnych. Zmienne zmodyfikowane przez skrypt będą miały nowe wartości także i poza skryptem. Skrypt nie ma zmiennych lokalnych. Skrypty są uruchamiane z bieżącego katalogu. Gdy nie ma w bieżącym, przeszukiwana jest tzw. ścieżka. cd zmiana katalogu addpath dopisywanie katalogu do ścieżki run - uruchamianie skryptu z dowolnego katalogu Kolizje nazw skryptów i zmiennych dr Sławomir Marczyński 2014-06-03 25
Funkcje w Matlabie są wygodniejsze niż skrypty zmienne lokalne zmienne globalne parametry wejściowe parametry wyjściowe uchwyty dokumentacja dla help dr Sławomir Marczyński 2014-06-03 26
Funkcje podstawowe Funkcje inlinie Funkcje anonimowe Funkcje lokalne Funkcje prywatne Funkcje zagnieżdżone Funkcje przeładowane/przeciążone (overloaded) dr Sławomir Marczyński 2014-06-03 27
dr Sławomir Marczyński 2014-06-03 28
Jeżeli funkcja nazywa się fun to musi być zapisana w pliku fun.m Na początku musi być napisane słowo kluczowe function, co ma być wynikiem działania, jaka jest nazwa i jakie są parametry Na końcu może być napisane end Wszystkie zmienne wewnątrz funkcji są lokalne chyba że są globalne Specjalne komentarze - autodokumentacja dr Sławomir Marczyński 2014-06-03 29
dr Sławomir Marczyński 2014-06-03 30
dr Sławomir Marczyński 2014-06-03 31
dr Sławomir Marczyński 2014-06-03 32
Zamiast pliku fun.m możemy użyć funkcji inline, np.: fun = inline('x^3-1'); fzero(fun, [0, 1]) dr Sławomir Marczyński 2014-06-03 33
Funkcje anonimowe to funkcje nie mające własnej nazwy są wygodniejsze niż inline fzero(@(x)x^3-1, pi/4) Można je nazwać, np.: fun1 = @(x,y)x * y / (x + y) ; dr Sławomir Marczyński 2014-06-03 34
dr Sławomir Marczyński 2014-06-03 35
dr Sławomir Marczyński 2014-06-03 36
Funkcje prywatne są to tak samo napisane funkcje jak funkcje podstawowe ale umieszczone w folderze private W ten sposób stają się one niedostępne do normalnego wywołania chyba że wywołuje je inna funkcja, taka która jest w folderze w którym jest folder private dr Sławomir Marczyński 2014-06-03 37
dr Sławomir Marczyński 2014-06-03 38
elseif dr Sławomir Marczyński 2014-06-03 39
opcja = 'WARIANT1'; switch opcja case {'WARIANT1','WARIANT2'} disp('1 albo 2 ') case 'WARIANT3' disp('3') otherwise disp('ani 1, ani 2, ani 3') end dr Sławomir Marczyński 2014-06-03 40
eps = 1; while (1+eps) > 1 eps = eps/2; end eps = eps*2 dr Sławomir Marczyński 2014-06-03 41
a = zeros(k,k) for m = 1:k for n = 1:k a(m,n) = 1/(m + n -1); end end for s = 1.0: -0.1: 0.0,..., end for s = [1,5,8,17],..., end for e = eye(n),..., end for V = A,..., end for k = 1:n, V = A(:,k);..., end dr Sławomir Marczyński 2014-06-03 42
A = rand(3); B = ones(5); try C = [A; B]; catch err % -- tu możemy coś zrobić -- rethrow(err); end dr Sławomir Marczyński 2014-06-03 43
global, persistent break return ~ do pomijania parametrów nargin nargout, ; % # i, j dr Sławomir Marczyński 2014-06-03 44
Matlab jest bardzo prosty w użyciu, efektywność Matlaba jest bardzo wysoka, ale wymaga wektoryzacji problemu, tj. zapisania go macierzowo. Większość obliczeń można równie dobrze wykonać w programach Octave lub SciLab używając takich samych poleceń lub po automatycznej translacji ale niektórych obliczeń nie da się wykonać równie łatwo w darmowych programach. Możliwości graficzne Matlaba znacznie przewyższają konkurencję. Wydajność samych obliczeń numerycznych jest praktycznie taka sama dla wszystkich programów. dr Sławomir Marczyński 2014-06-03 45
Życie jest zbyt krótkie, aby marnować je na getchar() dr Sławomir Marczyński 2014-06-03 46
Mamy dane liczbowe pochodzące z pomiarów i chcemy nad nimi popracować w Matlabie Chcemy wczytać do Matlaba fotografię, dźwięk lub arkusz kalkulacyjny Chcemy dziś zapisać wyniki obliczeń, aby jutro można było kontynuować pracę w Matlabie Tworzymy jakiś złożony projekt w Matlabie i chcemy go testować na zawsze takim samym zestawie danych Wyniki obliczeń chcemy przekazać komuś, kto nie ma Matlaba lub użyć jako danych w innym programie dr Sławomir Marczyński 2014-06-03 47
dr Sławomir Marczyński 2014-06-03 48
dr Sławomir Marczyński 2014-06-03 49
dr Sławomir Marczyński 2014-06-03 50
Mamy dane w postaci plików na dysku. Jak wprowadzić te dane do programu Matlab? # DANE Z DNIA 2011.02.31 1.0000 2.0001 3.0004 2.0000 3.0043 4.0002 tu jeszcze wiele wiele linii z danymi # KONIEC BLOKU DANYCH dr Sławomir Marczyński 2014-06-03 51
Przygotowujemy plik tekstowy jak poniżej d = [ 1.0000 2.0001 3.0004 2.0000 3.0043 4.0002 ]; tu jeszcze wiele wiele linii z danymi Zapisujemy ten plik jako skrypt dane.m Uruchamiamy ten skrypt poleceniem dane dr Sławomir Marczyński 2014-06-03 52
Usuwamy z pliku komentarze Oczywiście możemy użyć nie tylko programu do edycji tekstu (Notepad, vi), ale pary poleceń head i tail, edytora sed, programu w awk, skryptu VBS czytujemy cały plik do jednej macierzy przez load d = load('dane.txt'); dr Sławomir Marczyński 2014-06-03 53
textread jest funkcją pozwalającą łatwo wczytać dane z pliku tekstowego do kilku zmiennych jedną instrukcją Pomijanie komentarzy dr Sławomir Marczyński 2014-06-03 54
Pomijanie komentarzy dr Sławomir Marczyński 2014-06-03 55
dr Sławomir Marczyński 2014-06-03 56
dr Sławomir Marczyński 2014-06-03 57
Wszystkie elementy są tego samego typu Dane mogą być dowolnego typu Macierze liczb rzeczywistych lub zespolonych Całe macierze jako elementy Łańcuchy znaków jako napisy Nie do obliczeń Trzeba np. znajdować macierz odwrotną Macierz Macierz komórkowa dr Sławomir Marczyński 2014-06-03 58
Typowym rodzajem pliku ASCII-delimited jest plik CSV Pliki tego rodzaju używają specjalnego znaku (najczęściej znaku tabulacji, średnika lub przecinka) do rozdzielenia wartości liczbowych Sekwencja dwóch znaków rozdzielających jeden po drugim pojawia się wtedy, gdy brak jest jakiejkolwiek wartości w danym miejscu tabeli dlmread('myfile.txt', ';', 2, 3) dlmread('myfile.txt', ';', 'C1..G4') dr Sławomir Marczyński 2014-06-03 59
Matlab potrafi przeczytać/zapisać nie tylko zwykłe pliki tekstowe, lecz także pliki XML i w różnych innych popularnych formatach, w tym (niektóre) zawierające dźwięk lub obraz. Służą do tego wyspecjalizowane wysokopoziomowe funkcje, takie jak np. xmlread, xmlwrite, csvread, csvwrite, wavread, wavwrite, aviread itd. Wymagają one tylko podania nazwy pliku nie są potrzebne ani fopen i fclose, ani znajomość wewnętrznej struktury takiego pliku. Można też do czytania danych używać funkcji importdata oraz interaktywnie przez uiimport dr Sławomir Marczyński 2014-06-03 60
dr Sławomir Marczyński 2014-06-03 61
dr Sławomir Marczyński 2014-06-03 62
dr Sławomir Marczyński 2014-06-03 63
dr Sławomir Marczyński 2014-06-03 64
dr Sławomir Marczyński 2014-06-03 65
fopen, fclose feof fgetl, fgets fscanf sscanf - otwieranie i zamykanie plików - sprawdzanie, czy plik da się czytać - czytanie całej linii tekstu - czytanie z pliku - czytanie z łańcucha znaków i jeszcze parę innych (np. frewind, ftell, fseek, ferror) NIGDY nie używać str2num(s) bo to ukryte eval(s) str2double(s) jest bezpieczne dr Sławomir Marczyński 2014-06-03 66
powinniśmy sprawdzić czy plik się otworzył dr Sławomir Marczyński 2014-06-03 67
input = fopen('dane.txt','r'); output = fopen('wyniki.txt','w'); while ~feof(input) line = fgetl(input); if ~isempty(line) end end begin = 1; [ s, ~, ~, next ] = sscanf(line(begin:end), '%s', 1); begin = begin + next - 1; [ n, ~, ~, next ] = sscanf(line(begin:end), '%d', 1); begin = begin + next - 1;... tu coś jeszcze... fclose(input); fclose(output); dr Sławomir Marczyński 2014-06-03 68
534D 9446 06f6 741f 409f 0000 0000 4000 408f 0000 input = fopen('dane.dat', 'rb'); byte1 = fread(input, 1, '*uint8' ); byte2 = fread(input, 1, '*uint8' ); values = fread(input, 8192, '*double'); fclose(input); dr Sławomir Marczyński 2014-06-03 69
Pliki zapisane jako.mat mogą zawierać kilka macierzy wraz z informacją o ich rozmiarach itd. aby je przeczytać potrzebny jest program Matlab, ewentualnie Octave lub Scilab gwarantują, że nie będzie dodatkowych zaokrągleń i konwersji Pliki zapisane jako.txt (z opcją -ascii) mogą zawierać tylko jedną macierz i nie ma w nich dodatkowych informacji można otworzyć w dowolnym edytorze tekstu mogą prowadzić do utraty dokładności obliczeń dr Sławomir Marczyński 2014-06-03 70
dr Sławomir Marczyński 2014-06-03 71
dr Sławomir Marczyński 2014-06-03 72
dr Sławomir Marczyński 2014-06-03 73
Matlab oferuje bardzo wiele funkcji do czytania i zapisywania różnych danych m.i. dlatego, aby ułatwić przetwarzanie danych z różnych źródeł. Zawsze zanim sięgnie się po niskopoziomowe czytanie/pisanie do plików warto sprawdzić czy nie da się czytać/zapisywać wysokopoziomowo. Gdy dane mają być np. wstawienia w tekst w MS Word to przydatne mogą być funkcje fprintf oraz print. Ustawienie w print wyższej rozdzielczości opcją -r poprawia jakość. W prostych zastosowaniach wystarcza się disp i load. dr Sławomir Marczyński 2014-06-03 74
Suma trzech liczb to 15, ich iloczyn wynosi 125, jakie to są liczby? dr Sławomir Marczyński 2014-06-03 75
liniowe kwadratowe stopnia trzeciego stopnia czwartego nielinowe trygonometryczne zwyczajne całkowe cząstkowe DAE DDE UKŁADY RÓWNAŃ różniczkowo-całkowe dr Sławomir Marczyński 2014-06-03 76
dr Sławomir Marczyński 2014-06-03 77
dr Sławomir Marczyński 2014-06-03 78
Wartości własne macierzy kwadratowej są pierwiastkami wielomianu charakterystycznego det(a λi) = 0 Matlab oblicza wartości własne stowarzyszonej macierzy Frobeniusa [diag(ones(n-1,1),-1), flipud[p]] a tak obliczone wartości własne są oczywiście pierwiastkami wielomianu o współczynnikach p Algorytm znajdowania wartości własnych nie wymagający rozwiązywania równania z wielomianem charakterystycznym p = poly(r) daje wielomian p mający pierwiastki r dr Sławomir Marczyński 2014-06-03 79
dr Sławomir Marczyński 2014-06-03 80
dr Sławomir Marczyński 2014-06-03 81
2.219107148913746 dr Sławomir Marczyński 2014-06-03 82
Halley druga pochodna dr Sławomir Marczyński 2014-06-03 83
Muller parabola zamiast prostej dr Sławomir Marczyński 2014-06-03 84
dr Sławomir Marczyński 2014-06-03 85
dr Sławomir Marczyński 2014-06-03 86
Algorytm Illinoisa dr Sławomir Marczyński 2014-06-03 87
dr Sławomir Marczyński 2014-06-03 88
dr Sławomir Marczyński 2014-06-03 89
Brent?! bisekcja, sieczna, odwrotna interpolacja paraboliczna dr Sławomir Marczyński 2014-06-03 90
Mamy więcej niż jedno równanie Mamy więcej niż jedną niewiadomą Równania są liniowe Dlaczego takie równania są ważne? Bo wiele problemów technicznych itp. daje się sprowadzić do takich równań. dr Sławomir Marczyński 2014-06-03 91
Równań jest dużo? Macierz trójkątna? Trójdiagonalna? Diagonalna? Osobliwa macierz? Dużo jest takich układów? dr Sławomir Marczyński 2014-06-03 92
Jest mniej równań niż niewiadomych i nie zawsze jest to oczywiste dr Sławomir Marczyński 2014-06-03 93
Podobnie jak poprzednio macierz nie jest kwadratowa, mamy za dużo równań dr Sławomir Marczyński 2014-06-03 94
Metoda eliminacja Gaussa-Jordana zamiana dwóch wierszy w macierzy A jednocześnie zamiana odpowiednich dwóch elementów b zamiana dwóch kolumn w macierzy A jednocześnie zamiana elementów w x oraz b zastąpienie jednego z wierszy w macierzy A odpowiedniego elementu b poprzez kombinację liniową pivoting nadaje się do odwracania macierzy Metoda eliminacji Gaussa z podstawieniem zamiast tworzyć macierz jednostkową otrzymujemy macierz trójkątną dr Sławomir Marczyński 2014-06-03 95
Równanie A * x = b rozwiązujemy wpisując x = A \ b Równanie x * A = b rozwiązujemy wpisując x = b / A dr Sławomir Marczyński 2014-06-03 96
dr Sławomir Marczyński 2014-06-03 97
Mając macierz A macierz odwrotną obliczamy wpisując B = inv(a) Mając macierz A macierz pseudoodwrotną obliczamy wpisując B = pinv(a) dr Sławomir Marczyński 2014-06-03 98
dr Sławomir Marczyński 2014-06-03 99
dr Sławomir Marczyński 2014-06-03 100
dr Sławomir Marczyński 2014-06-03 101
dr Sławomir Marczyński 2014-06-03 102
Obliczenia są szybkie Obliczenia są dokładne Dzielenie przez zero? dr Sławomir Marczyński 2014-06-03 103
dr Sławomir Marczyński 2014-06-03 104
Dekompozycję LU wykonuje funkcja lu Dekompozycję Choleskiego wykonuje funkcja chol Dekompozycję QR wykonuje funkcja qr Dekompozycję SVD wykonuje funkcja svd dr Sławomir Marczyński 2014-06-03 105
Zamiast wektorów x, b mogą być macierze Łatwo można obliczyć wyznacznik i macierz odwrotną dr Sławomir Marczyński 2014-06-03 106
Crout Doolittle dr Sławomir Marczyński 2014-06-03 107
dr Sławomir Marczyński 2014-06-03 108
dr Sławomir Marczyński 2014-06-03 109
dr Sławomir Marczyński 2014-06-03 110
dr Sławomir Marczyński 2014-06-03 111
Banachiewicz opracował rachunek krakowianowy: krakowiany mnoży się kolumna przez kolumnę. Tadeusz Banachiewicz (1882 1954) Andre-Louis Cholesky (1875 1918) Prescott Durand Crout (1907 1984) dr Sławomir Marczyński 2014-06-03 112
to nie jest macierz kwadratowa to jest (już) macierz kwadratowa a nawet symetryczna dodatnio określona dr Sławomir Marczyński 2014-06-03 113
dr Sławomir Marczyński 2014-06-03 114
dr Sławomir Marczyński 2014-06-03 115
Odwracanie takiej macierzy algorytmem TDMA Thomasa jest równie łatwe jak macierzy diagonalnej (koszt liniowy) najpierw eliminujemy elementy pod przekątną, potem rozwiązujemy równanie z macierzą dwuprzekątniową Tego rodzaju macierze pasmowe powstają gdy rozwiązujemy różne problemy, w tym przy tworzeniu funkcji sklejanych oraz rozwiązywaniu równań PDE. dr Sławomir Marczyński 2014-06-03 116
W metodach Gaussa-Seidela, SOR i SSOR rozbijamy macierz A na sumę macierzy dolnotrójkątnej, diagonalnej i górnotrójkątnej. dr Sławomir Marczyński 2014-06-03 117
dr Sławomir Marczyński 2014-06-03 118
dr Sławomir Marczyński 2014-06-03 119
Gaussa-Seidela: zamiast starego x po prawej stronie używamy bieżącego już zaktualizowanego wektora x jeszcze przed zakończeniem jednej iteracji górnotrójkątna SOR: ekstrapolacja dla przyspieszenia zbieżności dolnotrójkątna SSOR: SOR dla symetrycznych macierzy A dr Sławomir Marczyński 2014-06-03 120
przestrzeń Kryłowa x = pcg(a,b) CG sprzężonych gradientów x = bicg(a,b) BiCG bi-sprzężonych gradientów x = bicgstab(a,b) x = bicgstabl(a,b) Bi-CGSTAB stabilizowana bi-sprzężonych gradientów x = minres(a,b) MINRES minimalnego residuum x = symmlq(a,b) SYMMLQ symetryczna LQ? CGNE, CGNR (nie ma w Matlabie) x = gmres(a,b) GMRES uogólniona najmniejszego residuum x = qmr(a,b) QMR quasi-minres x = cgs(a,b) CGS kwadratowego gradientu sprzężonego? Czebyszewa (nie ma w Matlabie) x = lsqr(a,b) LSQR x = tfqmr(a,b) TFQMR transpose-free quasi-minimal residual dr Sławomir Marczyński 2014-06-03 121
dr Sławomir Marczyński 2014-06-03 122
Moore-Penrose pinv(a) to niemal to samo co A = inv(a'*a)*a' ortonormalne diagonalna dr Sławomir Marczyński 2014-06-03 123
dr Sławomir Marczyński 2014-06-03 124
dr Sławomir Marczyński 2014-06-03 125
Oczywiście można samodzielnie użyć tego rodzaju metody, ale najlepiej sprawdzić, czy zadziała fsolve Broyden jakobian jest aktualizowany Metody Adomiana: ADM, RADM dr Sławomir Marczyński 2014-06-03 126
OPTIMISATION TOOLBOX dr Sławomir Marczyński 2014-06-03 127
Matlab i Octave same wybierają najlepszy z możliwych algorytm rozwiązywania równań liniowych (na przykład potrafią rozpoznać równanie trójdiagonalne) Takie metody jak np. Jacobiego czy SOR można bardzo prosto zapisać w Matlabie lub Octave (patrz www.netlib.org) Najbardziej zaawansowane metody są po prostu jako gotowe funkcje. Jeżeli nie musimy mieć macierzy odwrotnej to nie używamy funkcji inv jest mniej dokładna. NIGDY nie używamy wyznaczników do rozwiązywania układów równań dr Sławomir Marczyński 2014-06-03 128
Dajcie mi warunki początkowe, a obliczę przyszłość dr Sławomir Marczyński 2014-06-03 129
W nauce, technice itd. różne wielkości mogą być powiązane ze sobą formułami matematycznymi na przykład ciężar kuli zależy od jej średnicy i materiału z jakiego została wykonana. W wielu wzorach występują pochodne na przykład prędkość i przyspieszenie, natężenie prądu, przyrost naturalny Problemem nie jest ułożenie równania Problemem jest rozwiązanie równania dr Sławomir Marczyński 2014-06-03 130
dr Sławomir Marczyński 2014-06-03 131
Ruch ciężarka na idealnej sprężynie ma ładne rozwiązanie analityczne nieprzydatne w praktyce dr Sławomir Marczyński 2014-06-03 132
Równanie przepisujemy w postaci takiego układu równań, w którym są tylko pierwsze pochodne Obliczamy numeryczne rozwiązania przy pomocy programu Matlab/Octave dr Sławomir Marczyński 2014-06-03 133
dr Sławomir Marczyński 2014-06-03 134
dr Sławomir Marczyński 2014-06-03 135
dr Sławomir Marczyński 2014-06-03 136
dr Sławomir Marczyński 2014-06-03 137
Klasyczny oscylator tłumiony jest tłumiony siłą proporcjonalną do prędkości Daje to równanie Te równanie można rozwiązać analitycznie Dodatkowo można wprowadzić wymuszenie a co zrobić jak tłumienie ma inną naturę, na przykład jego źródłem jest zwykła siła tarcia? dr Sławomir Marczyński 2014-06-03 138
1 położenie 0.5 x 1 0 0.3 diagram fazowy -0.5 0.2-1 0 20 40 60 80 100 t 0.3 0.2 0.1 prędkość x 2 0.1 0-0.1-0.2-0.3 x 2 0-0.1-0.4-1 -0.5 0 0.5 1 x 1-0.2-0.3-0.4 0 20 40 60 80 100 t dr Sławomir Marczyński 2014-06-03 139
x 2 x 1 położenie 1 0.5 0-0.5-1 0 2 4 6 8 10 t x 10 4 prędkość 0.3 0.2 0.1 0-0.1-0.2-0.3-0.4 0 2 4 6 8 10 t x 10 4 x 2 0.3 0.2 0.1 0-0.1-0.2-0.3 diagram fazowy -0.4-1 -0.5 0 0.5 1 x 1 1000 razy zwiększamy tend, czyli czas objęty symulacją 1 błąd: aliasing 2 błąd: numeryczne tłumienie drgań dr Sławomir Marczyński 2014-06-03 140
1 położenie 1 położenie 0.5 0.5 x 1 0 0.3 diagram fazowy x 1 0 0.3 diagram fazowy -0.5 0.2-0.5 0.2-1 0 2 4 6 8 10 t x 10 4 prędkość 0.3 0.2 0.1 x 2 0.1 0-0.1-0.2-0.3-1 0 2 4 6 8 10 t x 10 4 prędkość 0.3 0.2 0.1 x 2 0.1 0-0.1-0.2-0.3 x 2 0-0.1-0.4-1 -0.5 0 0.5 1 x 1 x 2 0-0.1-0.4-1 -0.5 0 0.5 1 x 1-0.2-0.2-0.3-0.3-0.4 0 2 4 6 8 10 t x 10 4-0.4 0 2 4 6 8 10 t x 10 4 więcej kroków ode23t dr Sławomir Marczyński 2014-06-03 141
1 położenie 0.5 x 1 0 0.15 diagram fazowy -0.5 0.1-1 0 20 40 60 80 100 t 0.15 0.1 0.05 prędkość x 2 0.05 0-0.05-0.1-0.15 x 2 0-0.05-0.2-1 -0.5 0 0.5 1 x 1-0.1-0.15-0.2 0 20 40 60 80 100 t dr Sławomir Marczyński 2014-06-03 142
8 położenie 6 4 x 1 2 0 3 diagram fazowy -2-4 2-6 0 20 40 60 80 100 t x 2 1 0 3 prędkość -1 x 2 2 1 0-1 -2-3 -5 0 5 10 x 1-2 -3 0 20 40 60 80 100 t dr Sławomir Marczyński 2014-06-03 143
Problemem jest wybór znaku i tarcie statyczne, którego siła nie musi być maksymalna dr Sławomir Marczyński 2014-06-03 144
dodatkowe parametry Siła tarcia zawsze jest przeciwnie skierowana do prędkości, a jeżeli ciało spoczywa to dr Sławomir Marczyński 2014-06-03 145
dr Sławomir Marczyński 2014-06-03 146
dr Sławomir Marczyński 2014-06-03 147
dr Sławomir Marczyński 2014-06-03 148
Procedury rozwiązywania numerycznie równań ODE (takie jak ODE45 czy ODE113) uruchamiamy podając zakres (lub ciąg wartości) zmiennej niezależnej dla którego chcemy mieć rozwiązanie Czasami chcemy np. przerwać obliczenia gdy będą spełnione pewne warunki np. lecąca piłka uderzy o boisko dr Sławomir Marczyński 2014-06-03 149
dr Sławomir Marczyński 2014-06-03 150
dr Sławomir Marczyński 2014-06-03 151
ode23 (Shampine-Bogacki) i ode45 (Dormand-Prince) implementują schematy Runge-Kutty rzędu odpowiednio 3 i 4 oraz 4 i 5. Każda z nich w trakcie działania używa pary metod po to, aby móc ocenić dokładność obliczeń i odpowiednio dobrać krok. ode113 używa wielokrokowej, z predykatorem i korektorem, automatycznym dopasowaniem rzędu i kroku, metody Adamsa-Bashfortha-Moultona (przeniesiona z fortranowskich DE/STEP/INTERP Shampine a i Gordona). ode15s implementuje techniki różniczkowania do tyłu NDF (Klopfenstein-Shampine) i BDF wybierając wzory rzędu od 1 do 5. ode23s wywodzi się z metody Rosenbrocka, ale ma pewne udoskonalenia (Shampine-Reichelty). ode23t to niejawna metoda trapezów. ode23tb to ode23t z różniczkowaniem BDF. Octave ma wbudowaną funkcję lsode (Livermore Solver of ODE), która wymaga nieco innej kolejności parametrów niż funkcje znane z Matlaba. dr Sławomir Marczyński 2014-06-03 152
dr Sławomir Marczyński 2014-06-03 153
Jeden wykres wymaga tysiąca punktów dr Sławomir Marczyński 2014-06-03 154
dr Sławomir Marczyński 2014-06-03 155
dr Sławomir Marczyński 2014-06-03 156
dr Sławomir Marczyński 2014-06-03 157
dr Sławomir Marczyński 2014-06-03 158
dr Sławomir Marczyński 2014-06-03 159
dr Sławomir Marczyński 2014-06-03 160
dr Sławomir Marczyński 2014-06-03 161
dr Sławomir Marczyński 2014-06-03 162
dr Sławomir Marczyński 2014-06-03 163
barh daje belki horyzontalne rose to hist we współrzędnych biegunowych dr Sławomir Marczyński 2014-06-03 164
dr Sławomir Marczyński 2014-06-03 165
dr Sławomir Marczyński 2014-06-03 166
dr Sławomir Marczyński 2014-06-03 167
dr Sławomir Marczyński 2014-06-03 168
dr Sławomir Marczyński 2014-06-03 169
dr Sławomir Marczyński 2014-06-03 170
dr Sławomir Marczyński 2014-06-03 171
dr Sławomir Marczyński 2014-06-03 172
dr Sławomir Marczyński 2014-06-03 173
dr Sławomir Marczyński 2014-06-03 174
dr Sławomir Marczyński 2014-06-03 175
dr Sławomir Marczyński 2014-06-03 176
dr Sławomir Marczyński 2014-06-03 177
dr Sławomir Marczyński 2014-06-03 178
dr Sławomir Marczyński 2014-06-03 179
Mamy dane dla 10, 15, 25, 30 i 35 stopni Celsjusza. Temperatura wynosi 18 C. dr Sławomir Marczyński 2014-06-03 180
Ile wynosi log 10 2.053? Abramowitz and Stegun, Handbook of Mathematical Functions with Formulas, Graphs, and Mathematical Tables http://www.cs.bham.ac.uk/~aps/research/projects/as/ dr Sławomir Marczyński 2014-06-03 181
Interpolacja tworzenie pośrednich wartości na podstawie istniejących danych Ekstrapolacja prognozowanie wartości poza zakresem istniejących danych Aproksymacja przybliżenie, czyli odtworzenie możliwie dokładnie istniejących danych dr Sławomir Marczyński 2014-06-03 182
Funkcja: dla zadanej funkcji f możemy szukać takiej funkcji g aby zminimalizować wartość normy. Liczby: mając tablicę liczb możemy szukać algorytmu pozwalającego odtworzyć właśnie te liczby. Wyniki pomiarów obarczone błędami/niepewnościami: klasyczne podejście i interpretacja Bayesa. dr Sławomir Marczyński 2014-06-03 183
aproksymacja jednostajna są możliwe inne normy możliwie dokładne dopasowanie dla WSZYSTKICH możliwych wartości x Trzy współczynniki: JAK JE OBLICZYĆ?!? Możemy mieć tyle równań, ile będziemy chcieli mieć dr Sławomir Marczyński 2014-06-03 184
Jeżeli znajdziemy f(x), to będziemy mogli robić różne rzeczy, np. interpolować, ekstrapolować, obliczać pochodne, całki itd. Równań mamy tylko tyle ile jest par (x,y) mamy tylko to i nic więcej nie ma funkcji obliczającej y(x) nie wiemy co jest dla x = 36.6 zakładamy postać funkcji f(x) możliwe jest, że dane są niedokładne, czyli występują niepewności pomiarowe dla aproksymacji potrzebna jest miara jakości dopasowania dla interpolacji mamy po prostu y = f(x) dla wartości z tabelki dr Sławomir Marczyński 2014-06-03 185
Nie można policzyć ani całki, ani pochodnej z danych będących dyskretnymi wartościami liczbowych ale można skonstruować funkcję interpolującą takie wartości aby wykonać na niej te operacje matematyczne otrzymując wzory, w który występują wartości liczbowe, jakie mieliśmy jako dane. dr Sławomir Marczyński 2014-06-03 186
Interpolacja liniowa jest automatyczna na wykresach rysowanych plot(x,y) dr Sławomir Marczyński 2014-06-03 187
Najpierw musimy sprawdzić, czy wartość x jest w środku przedziału (x 1, x 2 ), i określić ile konkretnie wynoszą x 1, x 2, y 1, y 2. Jeżeli przypadkiem x jest mniejsze lub większe niż współrzędne w danych wejściowych musimy przeprowadzić ekstrapolację Potem musimy wyliczyć dla podanego x wartość y Jeżeli mamy podany uporządkowany ciąg wartości x, to powtarzając obliczenia moglibyśmy zaoszczędzić trochę na czasie wyszukiwania dr Sławomir Marczyński 2014-06-03 188
dr Sławomir Marczyński 2014-06-03 189
dr Sławomir Marczyński 2014-06-03 190
Macierz Vandermonde a UWAGA: w Matlabie macierz Vandermode a to fliplr(vander(x)) dla wektora x Ale to działa tylko wtedy, gdy m = n dr Sławomir Marczyński 2014-06-03 191
Taki sam rezultat można osiągnąć wywołaniem funkcji polyfit Można opuścić jednocześnie fliplr i flipud, wtedy kolejność elementów a będzie odwrotna dr Sławomir Marczyński 2014-06-03 192
dr Sławomir Marczyński 2014-06-03 193
Jest lepszy sposób: algorytm Neville a który wyparł algorytm Aitkena dr Sławomir Marczyński 2014-06-03 194
Zawsze tylko jeden z wielomianów Lagrange a jest różny od zera w każdym z punktów danych. dr Sławomir Marczyński 2014-06-03 195
Złożoność obliczeniowa: Matlab używa właśnie tego odwracanie macierzy przy interpolacji funkcją wielomianową złożoną z jednomianów O(N 3 ) naiwna interpolacja wielomianem Lagrange O(N 2 ) interpolacja barycentryczna O(N) można wstępnie obliczyć, bo nie zależy od y to tylko inna organizacja obliczeń, wynik powinien być taki sam dr Sławomir Marczyński 2014-06-03 196
dr Sławomir Marczyński 2014-06-03 197
dr Sławomir Marczyński 2014-06-03 198
dr Sławomir Marczyński 2014-06-03 199
http://www.mathworks.com/matlabcentral/fileexchange/4913-chebyshevpoly-m dr Sławomir Marczyński 2014-06-03 200
dr Sławomir Marczyński 2014-06-03 201
Przeskalowujemy interesujący nas zakres do przedziału [-1, +1] Wybieramy maksymalny rząd wielomianu n Obliczamy ile wynoszą rzędne dla odciętych w miejscach zerowych wielomianu Czebyszewa rzędu n Mamy n+1 punktów pozwalających wyznaczyć interpolację Nie odwracamy macierzy: wystarcza transpozycja dr Sławomir Marczyński 2014-06-03 202
Pierwszy wielomian Czebyszewa zastępujemy przez 1/sqrt(2) Zamiast odwracać wystarczy transponować dr Sławomir Marczyński 2014-06-03 203
dr Sławomir Marczyński 2014-06-03 204
dr Sławomir Marczyński 2014-06-03 205
dr Sławomir Marczyński 2014-06-03 206
dr Sławomir Marczyński 2014-06-03 207
wartości nachylenia krzywej interpolującej (czyli pierwsza pochodna) dla x k not-a-knot dr Sławomir Marczyński 2014-06-03 208
wymaga DLC: Curve Fitting Toolbox dr Sławomir Marczyński 2014-06-03 209
dr Sławomir Marczyński 2014-06-03 210
dr Sławomir Marczyński 2014-06-03 211
dr Sławomir Marczyński 2014-06-03 212
osculatory interpolation dr Sławomir Marczyński 2014-06-03 213
Skrajne punkty są traktowane odmiennie Jeżeli ilorazy różnicowe δ k-1 i δ k dla kolejnych punktów danych k-1, k, k+1 mają przeciwne znaki (przynajmniej jeden z nich jest równy zero), to przyjmujemy d k = 0 Jeżeli ilorazy różnicowe mają ten sam znak i przedziały po obu stronach węzła są jednakowej długości, to d k jest średnią harmoniczną tych ilorazów Jeżeli przedziały mają różną długość, to średnia harmoniczna jest średnią ważoną dr Sławomir Marczyński 2014-06-03 214
dr Sławomir Marczyński 2014-06-03 215
dr Sławomir Marczyński 2014-06-03 216
FD cardinal Catmull-Rom Akima Fritsch-Carlson Kochanek-Bartels TCB Gdzie? Na przykład w programie 3D Studio Max dr Sławomir Marczyński 2014-06-03 217
Zamiast wielomianów bierzemy funkcje trygonometryczne sinus i cosinus układamy równania itd. w praktyce niczym specjalnym się to nie różni od tego co można zrobić z wielomianami Jeżeli węzły interpolacji są równoodległe, to znacznie lepiej (?) jest stosować do interpolacji szybką transformację Fouriera (FFT). Zaleta: nadaje się do funkcji mających okres dr Sławomir Marczyński 2014-06-03 218
dr Sławomir Marczyński 2014-06-03 219
funkcje sklejane z naprężeniem (splines with tension) funkcje sklejane Czebyszewa interpolacja funkcją wymierną / Pade Kriging interpolacja Whittakera Shannona (sinc) interpolacja przy pomocy falek (wavelets) dr Sławomir Marczyński 2014-06-03 220
Zamiast przeciągać krzywą przez punkty możemy ją poprowadzić możliwie blisko zadanych punktów. Potrzebne jest kryterium określające czym jest blisko, jednym z możliwych (ale są i inne) jest minimalizacja sumy kwadratów odchyleń Nie jesteśmy w stanie odtworzyć zadanych punktów, ale taka aproksymacja znacznie lepiej się sprawdza gdy dane wejściowe są obarczone niepewnościami pomiarowymi Krzywe używane do aproksymacji mogą być wielomianami, funkcjami sklejanymi itp. Jeżeli wiadomo jaka jest postać funkcji, a tylko nie znane są konkretne parametry, to problem aproksymacji sprowadza się do optymalizacji parametrów. dr Sławomir Marczyński 2014-06-03 221
polyfit, polyval, polyder, polyint dr Sławomir Marczyński 2014-06-03 222
splinetool dr Sławomir Marczyński 2014-06-03 223
splinetool dr Sławomir Marczyński 2014-06-03 224
splinetool dr Sławomir Marczyński 2014-06-03 225
splinetool, bspligui csape, csapi, csaps, cscvn, getcurve, ppmak, spap2, spapi, spaps, spcrv, spmak, rpmak, rscvn, rsmak, stmak, tpaps, fnbrk,fnchg, fncmb, fnder, fndir, fnint, fnjmp, fnmin, fnplt, fnrfn, fntlr, fnval, fnxtr, fnzeros, fn2fm aptknt, augknt, aveknt, brk2knt, chbpnt, knt2brk, knt2mlt, newknt, optknt, sorted spcol, stcol,slvblk, bkbrk splpp, sprpp franke, subplus, titanium Carl de Boor bspline, spterms http://pages.cs.wisc.edu/~deboor/ dr Sławomir Marczyński 2014-06-03 226
spap2 powinno być też i w Octave dr Sławomir Marczyński 2014-06-03 227
dr Sławomir Marczyński 2014-06-03 228
W praktyce można najpierw spróbować wywołać interp1 z parametrem 'spline. W teorii najczęściej pojawiają się wielomiany Lagrange a i Czebyszewa. Gdy dane są z niepewnościami pomiarowymi, to lepszym pomysłem niż interpolacja będzie aproksymacja. Najlepiej wtedy dopasować krzywą uzasadnioną modelem teoretycznym np. jeżeli zależność ma być liniowa, to linię prostą (regresja liniowa). Jeżeli potrzebna jest interpolacja funkcją dwóch i więcej zmiennych, to odpowiednie będą interp2, interp3, interpn. dr Sławomir Marczyński 2014-06-03 229
Jeżeli samochód przyspiesza do 100 km/h w ciągu 8 sekund, to jakie ma przyspieszenie? dr Sławomir Marczyński 2014-06-03 230
dr Sławomir Marczyński 2014-06-03 231 Obojętnie jak obliczamy (Newton, Lagrange, Czebyszew), to i tak powinniśmy otrzymać zawsze taki sam wielomian.
wartości y k Zamiast obliczać wielomian interpolacyjny w postaci Newtona lub Lagrange a wygodniej zastosować schemat obliczeń Nevilla lub schemat Aitkena wartości interpolowane interpolacja wielomianem stopnia piątego dr Sławomir Marczyński 2014-06-03 232
dr Sławomir Marczyński 2014-06-03 233
dr Sławomir Marczyński 2014-06-03 234
dr Sławomir Marczyński 2014-06-03 235
musimy znać n ale tylko dwie wartości u są potrzebne możemy rozwiązać aby wyznaczyć n dr Sławomir Marczyński 2014-06-03 236
dr Sławomir Marczyński 2014-06-03 237
można użyć ekstrapolacji Richardsona dr Sławomir Marczyński 2014-06-03 238
zamiast wielomianów Lagrage moglibyśmy użyć czegoś innego?! współczynniki nie zależą od danych wejściowych dr Sławomir Marczyński 2014-06-03 239
dr Sławomir Marczyński 2014-06-03 240
więcej współczynników: http://en.wikipedia.org/wiki/finite_difference_coefficients dr Sławomir Marczyński 2014-06-03 241
Pozwalają zamienić równania z pochodnymi na równania bez pochodnych dr Sławomir Marczyński 2014-06-03 242
Wielomiany Czebyszewa Algorytm Riddersa Funkcje sklejane Konstruujemy funkcję sklejaną, np. przy pomocy polecenia spline lub wywołując csape, ewentualnie spap2 Dla tak otrzymanych wielomianów wywołujemy polecenie polyder (lub fnder jeżeli mamy Curve Fit Toolbox) Transformacja Fouriera Twierdzenie Cauchy ego dr Sławomir Marczyński 2014-06-03 243
dr Sławomir Marczyński 2014-06-03 244
dr Sławomir Marczyński 2014-06-03 245 metoda Riddersa ekstrapoluje do h = 0 pochodne dla wielomianów wyliczanych algorytmem Nevilla
dr Sławomir Marczyński 2014-06-03 246
? dr Sławomir Marczyński 2014-06-03 247
dr Sławomir Marczyński 2014-06-03 248
dr Sławomir Marczyński 2014-06-03 249
dr Sławomir Marczyński 2014-06-03 250
dr Sławomir Marczyński 2014-06-03 251
Newton-Cotes metoda trapezów Simpsona 3/8 Simpsona metoda Boole a Chochlik drukarski w książce Abramowitza i Steguna i wielu innych podręcznikach (włącznie z Numerical Recipes): Boole jest pomylony z Bode dr Sławomir Marczyński 2014-06-03 252
http://mathworld.wolfram.com/newton-cotesformulas.html dr Sławomir Marczyński 2014-06-03 253
dr Sławomir Marczyński 2014-06-03 254
podstawowy problem: ocena dokładności Jeżeli możemy obliczać wartość funkcji tam gdzie chcemy, to zamiast zwiększać liczbę punktów możemy je lepiej rozmieścić (w zerach wielomianów orto) Gaussa-Czebyszewa, Czebyszewa i Czebyszewa-Radau Legendre, Laguerre, (każdy wielomian ortogonalny) Lobatto Gaussa-Kronroda Całkowanie metodą Romberga (algorytm Richardsona) Jeżeli nie możemy obliczać: funkcje sklejane MC, PMC, QMC najlepsza metoda? metody adaptacyjne http://mathworld.wolfram.com/topics/numericalintegration.html dr Sławomir Marczyński 2014-06-03 255
dr Sławomir Marczyński 2014-06-03 256
dr Sławomir Marczyński 2014-06-03 257
dr Sławomir Marczyński 2014-06-03 258
dr Sławomir Marczyński 2014-06-03 259
dr Sławomir Marczyński 2014-06-03 260
arrayfun dr Sławomir Marczyński 2014-06-03 261
trapz uwaga: nieco inne granice całkowania dr Sławomir Marczyński 2014-06-03 262
dr Sławomir Marczyński 2014-06-03 263
trik: łatwo wyznaczyć współczynniki dr Sławomir Marczyński 2014-06-03 264
quad2d całki podwójne triplequad całki potrójne dr Sławomir Marczyński 2014-06-03 265
Matlab nie ma funkcji do obliczania pochodnych, polecenie diff służy jedynie od obliczania różnic pomiędzy kolejnymi elementami. Najdokładniejszą ogólną metodą numeryczną obliczania pochodnych funkcji ciągłej jest algorytm Riddersa, choć powszechnie stosuje się najprostsze wzory z centralnymi różnicami skończonymi. Liczenie pochodnych z danych uzyskanych w pomiarach jest ryzykowne, można stosować aproksymację funkcją sklejaną albo w inny sposób wstępnie wygładzić dane. Dla funkcji ciągłych dobrym i prostym sposobem na policzenie numerycznie całki jest w Matlabie polecenie quadgk. Dla danych dyskretnych najprościej jest użyć jednocześnie interpolacji i funkcji quadgk. Dobre rezultaty osiąga daje spap2 wraz z fnint i fnval. Matlab ma funkcje do liczenia całek wielokrotnych. dr Sławomir Marczyński 2014-06-03 266
Aby dotrzeć na szczyt wystarczy iść pod górę. dr Sławomir Marczyński 2014-06-03 267
Mamy pewną funkcję (lub dane) i chcemy znaleźć wartość maksymalną znaleźć wartość minimalną Typowe problemy szukanie najlepszego rozwiązania, np. dającego największy zysk finansowy, najmniejsze zużycie paliwa itd. znajdowanie najlepszych parametrów minimalizujących sumę kwadratów odchyleń dr Sławomir Marczyński 2014-06-03 268
max daje największą wartość z wektora i pozycję gdzie ona jest funkcje min i max są bardzo przydatne, ale to nie są te funkcje, których szukamy dr Sławomir Marczyński 2014-06-03 269
min(a) nie daje najmniejszej wartości jaka jest w macierzy A zamiast jednej liczby dostajemy cały wektor wartości najmniejszych dla kolejnych kolumn (oraz ewentualnie określenie, skąd te wartości pochodzą). typowy sposób określenia najmniejszej wartości w całej macierzy - wywołanie min rekurencyjnie dr Sławomir Marczyński 2014-06-03 270
sort, sortrows Maksymalna interpolowana wartość: niewielka dokładność ograniczona przez liczbę punktów interpolacji i wybór spline dr Sławomir Marczyński 2014-06-03 271
dr Sławomir Marczyński 2014-06-03 272
dr Sławomir Marczyński 2014-06-03 273
Bez gradientu, bez hessjanu) Down hill / up hill Simplex (Nedler-Mayer) PS (pattern-search, Fermi- Metropolis) Monte-Carlo RS (random-search, Rastrigin, Marsaglia) RO (random-optimisation, Matyas) LJ (Luus Jaakola) EA (evolutionary algorithms) GA (genetic algorithm) MA (memetic algorithm) DE (differential evolution) PSO (particle swarm optimization) SA (simulated annealing) Tabu Z gradientem steepest descent (Cauchy) Powell s gradient conjugate gradient Fletcher-Reeves Polak-Ribiere variable metrics, quasi-newton DFP (Davidon Fletcher Powell) SR1 (symmetric rank 1) BFGS (Broyden Fletcher Goldfarb Shanno) Z gradientem i hessjanem Newtona LMA (Levenberg Marquardt) dr Sławomir Marczyński 2014-06-03 274
http://en.wikipedia.org/wiki/nelder%e2%80%93mead_method dr Sławomir Marczyński 2014-06-03 275
Mamy pary przybliżonych współrzędnych punktów na okręgu, chcemy znaleźć środek okręgu i jego promień. Wiemy też, że punkty te są rozłożone równomiernie (mamy przynajmniej kilkanaście punktów i w każdej ćwiartce okręgu jest przynajmniej jeden z nich). dr Sławomir Marczyński 2014-06-03 276
% Generowanie punktów prawie na okręgu n = 50.0; % liczba punktów R = 10.0; % promień okręgu dr = 0.5; % odchylenie standardowe phi = 2*pi * rand (n,1); r = R + dr * randn(n,1); dane = [r.* cos(phi), r.* sin(phi)]; save data.txt dane -ascii dr Sławomir Marczyński 2014-06-03 277
-7.2651472e+000 6.9428764e+000 3.7811982e+000-9.2799087e+000-9.4287546e+000-1.9727257e+000-5.9056384e+000 8.0508096e+000 9.3822332e+000-3.7829441e+000 7.2644727e+000-7.1789111e+000-9.3303006e+000-3.0417347e+000-7.0974373e+000-6.8757411e+000-9.4055628e+000-5.7267904e+000 2.3277424e+000 8.5599718e+000-3.5173107e+000 1.0543509e+001-9.9995511e+000 1.8474580e+000 1.2840449e+000 1.0421222e+001 5.1201546e+000-7.6049151e+000 3.3009655e+000 9.1263528e+000 1.4861609e+000 9.7483339e+000 4.8795016e+000 8.9700777e+000 dr Sławomir Marczyński 2014-06-03 278
y 15 10 5 0-5 -10-15 -15-10 -5 0 5 10 15 x dr Sławomir Marczyński 2014-06-03 279
y 20 15 10 5 0-5 -10-15 -15-10 -5 0 5 10 15 x dr Sławomir Marczyński 2014-06-03 280
dr Sławomir Marczyński 2014-06-03 281
http://en.wikipedia.org/wiki/file:direct_search_broyden.gif dr Sławomir Marczyński 2014-06-03 282
dr Sławomir Marczyński 2014-06-03 283
dr Sławomir Marczyński 2014-06-03 284
Standardowo Matlab oferuje zasadniczo tylko algorytm Neldera-Mayera (sympleks). Funkcja lsqnonneg jest mniej przydatna. Dużo więcej metod staje się dostępnych dzięki Optimization Toolbox, np. przez wywołanie fminunc, lsqcurvefit Kolejne DLC to Global Optimization Toolbox dr Sławomir Marczyński 2014-06-03 285
Znajdowanie minimum funkcji jednej zmiennej jest zazwyczaj bardzo łatwe w ostateczności możemy wykreślić funkcję i znaleźć minimum na wykresie. Dla funkcji kilku zmiennych algorytm sympleksu jest wystarczająco efektywny i nie wymaga pochodnych. Warto wiedzieć, jakie algorytmy są zupełnie różne, a jakie bardzo podobne do siebie. dr Sławomir Marczyński 2014-06-03 286
Widmo mocy dr Sławomir Marczyński 2014-06-03 287
w tej postaci potrzebny jest tylko jeden wektor na współczynniki Wielomiany i funkcje sklejane są ok., ale nienajlepiej nadają się do przedstawiania funkcji okresowych, tj. takich że f(x + okres) = f(x) Funkcje sinus i cosinus są okresowe, więc suma z nich złożona (kombinacja liniowa) też jest funkcją okresową Wystarczy skonstruować macierz Vandermonde a i rozwiązać układ równań (uwaga: z nadmiarem równań poradzimy sobie znajdując rozwiązanie układu nadoznaczonego). dr Sławomir Marczyński 2014-06-03 288
trik ze stylami linii dr Sławomir Marczyński 2014-06-03 289
Aproksymacja funkcjami trygonometrycznymi czyli szukanie najlepszego wielomianu Fouriera jest bardzo dobrym sposobem aproksymacji zwłaszcza dla funkcji okresowych ale Problem numer 1: co zrobić z całkową transformacją Fouriera? Zamiast k = 1, 2, mamy ciągłą zmienną i całkowanie zamiast sumy. Problem numer 2: odwracanie macierzy (dzielenie A\y) kosztuje O(n 3 ) czasu dla algorytmu Gaussa-Jordana dr Sławomir Marczyński 2014-06-03 290
czas częstotliwość dr Sławomir Marczyński 2014-06-03 291
Transformacja Fouriera bywa różnie definiowana przez różnych autorów w różnych podręcznikach! Ogólnie wszystkie wzory można zapisać jako Współczynniki (a,b) Fizyka (0,1) albo (-1,1); Matematyka (1,-1); Teoria prawdopodobieństwa (1,1); Teoria sygnałów (0, 2π); może też być np. (0,-2π) dr Sławomir Marczyński 2014-06-03 292
te wzory nie będą potrzebne dr Sławomir Marczyński 2014-06-03 293
twierdzenie Wienera-Khinchina te wzory umożliwiają np. dekonwolucję dr Sławomir Marczyński 2014-06-03 294
twierdzenie Plancherela (wynika z tw. Parsevala) definicja widma gęstości mocy Uwaga: zawsze trzeba sprawdzić, bo są używane różne definicje PSD w różnych zastosowaniach. dr Sławomir Marczyński 2014-06-03 295
częstotliwość Nyquista jest równa połowie częstości próbkowania dwa triki: granice całkowania i sumowania; znika delta DELTA! dr Sławomir Marczyński 2014-06-03 296
dr Sławomir Marczyński 2014-06-03 297
funkcje fft oraz ifft DFT w klasycznej postaci wymaga mnożenia macierzy, a to kosztuje O(N 2 ) Tymczasem od roku 1965 (1805?) mamy algorytm Cooley a-tukey a znany jako Fast Fourier Transform, czyli FFT, o złożoności obliczeniowej O(N log N) Dziś możemy używać nie tylko zwykłego FFT, ale także wiele innych (np. WFTA Winograda) Dużo zależy także od implementacji algorytmu FFT, jedną z najlepszych jest FFTW (Fastest Fourier Transform in the West, www.fftw.org) używany w Octave Istnieją transformacje TFA jeszcze lepsze, o złożoności zaledwie O(N), tj. transformacje falkowe (1990) dr Sławomir Marczyński 2014-06-03 298
Poza przesunięciem indeksów wszystko się zgadza funkcja fft funkcja ifft dr Sławomir Marczyński 2014-06-03 299
1. Są jakieś dane ciąg par wartości (x, y) 2. Jest funkcja fft w Matlabie 3. Beztrosko wstawiamy F = fft(y) 4. Rysujemy wykres plot(abs(f)), bo F jest zespolone, więc rysujemy tylko moduł Niestety, to kompletna bzdura tak nie wolno robić! Przynajmniej jeden podręcznik prezentuje taki wykres jako transformację Fouriera! dr Sławomir Marczyński 2014-06-03 300
teraz nawet jednostki fizyczne się zgadzają 1. Mamy dane jako np. dwa wektory x, y 2. Upewniamy się, że w wektorze x każda kolejna wartość różni się o te same Δ od poprzedniej (jeżeli nie, to nie da się zastosować FFT) 3. Obliczamy wartości w wektorze f tworząc skalę częstotliwości (od -0.5N/Δ do +0.5N/Δ co 1/Δ) 4. Przeprowadzamy właściwą transformację FFT wywołując F = fft(y) 5. Mnożymy wektor F przez wartość Δ może być częstotliwość próbkowania dla transformacji odwrotnej dzielimy 6. Tasujemy wektor F za pomocą funkcji fftshift 7. Rysujemy co chcemy, np. amplitudę plot(f, abs(f)) 8. Dla ominięcia problemu ujemnych częstotliwości możemy narysować PSD ifftshift dla funkcji odwrotnej ifft dr Sławomir Marczyński 2014-06-03 301
dr Sławomir Marczyński 2014-06-03 302
Przykład, że nie zawsze musimy mieć skalę częstotliwości i nie zawsze musimy mnożyć/dzielić przez Δ dr Sławomir Marczyński 2014-06-03 303
Najprostsze implementacje FFT wymagają aby N było całkowitą potęgą liczby 2; gdy danych jest mniej po prostu uzupełnia się wektor y zerami. Implementacja FFT jakiej używa Matlab tego nie wymaga, N może być dowolne (najlepiej gdy jest 2 m, najgorzej gdy jest liczbą pierwszą). Padding powiększając N zwiększa rozdzielczość w częstotliwości, i choć to samo można mieć przez (dobrą) interpolację, to przez padding robi się to wygodnie i szybko. Padding jest niezbędny przy liczeniu splotu i autokorelacji. dr Sławomir Marczyński 2014-06-03 304
Jeżeli mamy funkcję y = sin(2πfx), to spodziewalibyśmy się że jej transformacja FFT wykaże niezerową amplitudę tylko dla częstotliwości f. Problem w tym, że nie możemy dostarczyć do FFT danych o całej sinusoidzie, ale tylko o pewnym jej fragmencie. Ucinając funkcję sinus tworzymy w rzeczywistości różne kształty nie będące sinusoidą. Ten sam problem występuje najwyraźniej przy uzupełnianiu danych zerami i prowadzi do zanieczyszczenia transformaty dr Sławomir Marczyński 2014-06-03 305
dr Sławomir Marczyński 2014-06-03 306
Aby ograniczyć wprowadzanie zanieczyszczeń do transformaty i wyodrębnić część danych stosuje się okna czasowe (window function). Są różne okna czasowe (żadne nie jest idealne). Zawsze jakieś jest, bo brak okna to okno prostokątne. Najłatwiej jest w Matlabie użyć funkcji polecenia wintool z pakietu Signal Processing Toolbox. Ale jeżeli nie mamy tego toolbox a, to obędziemy się bez niego. Dobrym pomysłem jest użycie przesuwającego się okna czasowego dla uwidocznienia jak transformata ewoluuje w czasie (wymagać to będzie wykresu 3D, np. jako scroll map ). Jeszcze lepszym pomysłem jest użycie falek. dr Sławomir Marczyński 2014-06-03 307
dr Sławomir Marczyński 2014-06-03 308
dr Sławomir Marczyński 2014-06-03 309
dr Sławomir Marczyński 2014-06-03 310
dr Sławomir Marczyński 2014-06-03 311
dr Sławomir Marczyński 2014-06-03 312
FFT jest jednym z dziesięciu najważniejszych algorytmów jakie kiedykolwiek powstały. Najważniejszy jest wzrost prędkości obliczeń w porównaniu z klasycznym DFT. Matlab i Octave mają bardzo dobre gotowe funkcje fft i ifft. Napisanie własnego FFT jest możliwe, ale niepotrzebne. FFT to nie to samo co transformacja Fouriera trzeba pamiętać o mnożeniu (dzieleniu) przez Δ, właściwej skali częstotliwości itd. Istnieją lepsze algorytmy niż FFT algorytmy falkowe. dr Sławomir Marczyński 2014-06-03 313
czyli jak używać pdepe i pdetool w programie Matlab dr Sławomir Marczyński 2014-06-03 314
Matlab i OOP? dr Sławomir Marczyński 2014-06-03 315
Od lat 90-tych XX wieku, dzięki popularności takich języków jak C++ i Java (a także obiektowych dialektów Pascala) powszechne stało się programowanie obiektowe (object oriented programming). Matlab przed wersją 2008a niby miał możliwości OOP, ale koncepcja obiektowości w Matlabie nie pasowała do tego co oferował C++ Matlab od wersji 2008a ma zupełnie nowy model OOP, bardzo zbliżony do tego jaki jest np. w języku Java dr Sławomir Marczyński 2014-06-03 316
Program w Matlabie ma współpracować układami pomiarowymi, tak by na bieżąco odczytywać i aktualizować wartości przedstawiane na wykresach Każdy przetwornik ma swój numer identyfikacyjny, każdy przetwornik trzeba najpierw przygotować do pomiarów, potem można odczytywać, w razie potrzeby resetować, a po pomiarach powinien być wyłączony. Możliwe jest, że nie wszystkie przetworniki będą takie same (np. różni producenci itd.) dr Sławomir Marczyński 2014-06-03 317
Aby utworzyć klasę obiektów MyClass trzeba utworzyć folder o nazwie @MyClass Każda funkcja, jaką umieścimy w folderze @MyClass, staje się metodą klasy MyClass Jeżeli taką funkcję umieścimy w folderze @MyClass/private to będzie to metoda prywatna W folderze @MyClass musi być konstruktor, tj. funkcja nazywająca się MyClass w pliku MyClass.m Konstruktor musi utworzyć strukturę i przekształcić ją na obiekt dr Sławomir Marczyński 2014-06-03 318
dr Sławomir Marczyński 2014-06-03 319
wersja overload funkcji display dr Sławomir Marczyński 2014-06-03 320
Metody mają dostęp do prywatnych pól obiektu dr Sławomir Marczyński 2014-06-03 321
Dziedziczenie jest realizowane nie dla klas, ale dla instancji, tj. obiektów klas, np.: sensor = Sensor(13); ulepszonysensor = class(obj,'ulepszonysensor',sensor); Subclassing/superclassing superiorto('klasa1', 'klasa2'); inferiorto('klasa1', 'klasa2'); dr Sławomir Marczyński 2014-06-03 322
Duża odmienność od OOP w C++ trudno ogarnąć co, jak i dlaczego, trudno przenieść nabyte doświadczenia. Każda klasa wymaga oddzielnego folderu i wielu plików w tym folderze trudno o porządek, łatwo coś zgubić. Zaleta: taki samo jest w Octave. dr Sławomir Marczyński 2014-06-03 323
Można umieszczać pliki w folderach @nazwa, np. @Sensor Można całą definicję klasy zawrzeć w jednym pliku normalnie zapisanym w zwykłym katalogu dr Sławomir Marczyński 2014-06-03 324
classdef (ClassAttributes) ClassName < SuperClass & SC2 end ClassAttributes ::= ClassAtribute = value ClassAttribute ::= Abstract AllowedSubclasses ConstructOnLoad HandleCompatible Hidden InferiorClasses Sealed dr Sławomir Marczyński 2014-06-03 325
classdef MyClass < MyBaseAbstractClass end property (SetAccess = private, GetAccess = private) PropertyName1 PropertyName2 = 'some text'; PropertyName3 = sin(pi/12); end dr Sławomir Marczyński 2014-06-03 326
classdef ClassName methods function obj = ClassName(arg1,arg2) end function normal_method(obj,arg1) end end methods (Static = true) function static_method(arg1,...) end end end dr Sławomir Marczyński 2014-06-03 327
classdef ClassWithEvents events MyEvent end methods function foo... notify(obj, 'MyEvent'); end end end dr Sławomir Marczyński 2014-06-03 328
function qux obj1 = ClassWithEvents; addlistener(obj1, 'MyEvent', @MyEventHandler)... end function MyEventHandler(eventSource, eventdata)... end dr Sławomir Marczyński 2014-06-03 329
classdef WeekDays enumeration Monday, Tuesday, Wednesday, Thursday, Friday end end dr Sławomir Marczyński 2014-06-03 330
dr Sławomir Marczyński 2014-06-03 331
dr Sławomir Marczyński 2014-06-03 332
Stare podejście do OOP w Matlabie/Octave jest po prostu niewygodne i nie daje 100% tego, czego spodziewać należałoby się po języku programowania obiektowego. Nowe podejście do OOP w Matlabie jest praktycznie bardzo mało przydatne (nie ma go w Octave). Na szczęście dość łatwo zrozumieć klasy definiowane w nowym stylu. Rekomendacja: nie używać, chyba że naprawdę wiemy dlaczego chcemy to robić. dr Sławomir Marczyński 2014-06-03 333
Po co pisać, skoro można rysować? dr Sławomir Marczyński 2014-06-03 334
dr Sławomir Marczyński 2014-06-03 335
dr Sławomir Marczyński 2014-06-03 336
dr Sławomir Marczyński 2014-06-03 337
dr Sławomir Marczyński 2014-06-03 338
dr Sławomir Marczyński 2014-06-03 339
dr Sławomir Marczyński 2014-06-03 340
dr Sławomir Marczyński 2014-06-03 341
Sine Wave Scope Transport Delay du/dt Derivative -K- Gain XY Graph dr Sławomir Marczyński 2014-06-03 342
dr Sławomir Marczyński 2014-06-03 343
dr Sławomir Marczyński 2014-06-03 344
dr Sławomir Marczyński 2014-06-03 345
Jakie jest GUI każdy widzi dr Sławomir Marczyński 2014-06-03 346
dr Sławomir Marczyński 2014-06-03 347
dr Sławomir Marczyński 2014-06-03 348
dr Sławomir Marczyński 2014-06-03 349
dr Sławomir Marczyński 2014-06-03 350
dr Sławomir Marczyński 2014-06-03 351
dr Sławomir Marczyński 2014-06-03 352
dr Sławomir Marczyński 2014-06-03 353
dr Sławomir Marczyński 2014-06-03 354
dr Sławomir Marczyński 2014-06-03 355
dr Sławomir Marczyński 2014-06-03 356
dr Sławomir Marczyński 2014-06-03 357
dr Sławomir Marczyński 2014-06-03 358
dr Sławomir Marczyński 2014-06-03 359