WIMIM/MIBM/N1/-/B04 WIMIM/ME/S1/-/C46 WIMIM/IM/S1/-/B19

Podobne dokumenty
WIMIM/MIBM/N1/-/B04 WIMIM/ME/S1/-/C46 WIMIM/IM/S1/-/B19

Ćwiczenie 1. Wprowadzenie do programu Octave

ECTS (Część 2. Metody numeryczne) Nazwa w języku angielskim: Algorithms and data structures.

Ćwiczenie 1. Wprowadzenie do programu Octave

Egzamin z Metod Numerycznych ZSI, Egzamin, Gr. A

do MATLABa programowanie WYKŁAD Piotr Ciskowski

Aproksymacja funkcji a regresja symboliczna

SKRYPTY. Zadanie: Wyznaczyć wartość wyrażenia arytmetycznego

Mathcad c.d. - Macierze, wykresy 3D, rozwiązywanie równań, pochodne i całki, animacje

Elementy projektowania inzynierskiego Przypomnienie systemu Mathcad

LABORATORIUM 3 ALGORYTMY OBLICZENIOWE W ELEKTRONICE I TELEKOMUNIKACJI. Wprowadzenie do środowiska Matlab

Przetwarzanie sygnałów

Matlab, zajęcia 3. Jeszcze jeden przykład metoda eliminacji Gaussa dla macierzy 3 na 3

Metody i analiza danych

Ćwiczenie 1. Matlab podstawy (1) Matlab firmy MathWorks to uniwersalny pakiet do obliczeń naukowych i inżynierskich, analiz układów statycznych

; B = Wykonaj poniższe obliczenia: Mnożenia, transpozycje etc wykonuję programem i przepisuję wyniki. Mam nadzieję, że umiesz mnożyć macierze...

Podstawy MATLABA, cd.

Układy równań liniowych. Krzysztof Patan

znajdowały się różne instrukcje) to tak naprawdę definicja funkcji main.

Wprowadzenie do środowiska

MATLAB Prowadzący: dr hab. inż. Marek Jaszczur Poziom: początkujący

Elementy metod numerycznych - zajęcia 9

5. Rozwiązywanie układów równań liniowych

Diary przydatne polecenie. Korzystanie z funkcji wbudowanych i systemu pomocy on-line. Najczęstsze typy plików. diary nazwa_pliku

Szukanie rozwiązań funkcji uwikłanych (równań nieliniowych)

Metody numeryczne Laboratorium 2

//warunki początkowe m=500; T=30; c=0.4; t=linspace(0,t,m); y0=[-2.5;2.5];

Interpolacja. Marcin Orchel. Drugi przypadek szczególny to interpolacja trygonometryczna

Obliczenia w programie MATLAB

Wstęp do metod numerycznych Zadania numeryczne 2016/17 1

w analizie wyników badań eksperymentalnych, w problemach modelowania zjawisk fizycznych, w analizie obserwacji statystycznych.

MATLAB - laboratorium nr 1 wektory i macierze

x y

Całkowanie numeryczne przy użyciu kwadratur

ROZWIĄZYWANIE RÓWNAŃ NIELINIOWYCH

Excel w obliczeniach naukowych i inżynierskich. Wydanie II.

GNU Octave (w skrócie Octave) to rozbudowany program do analizy numerycznej.

Interpolacja, aproksymacja całkowanie. Interpolacja Krzywa przechodzi przez punkty kontrolne

METODY NUMERYCZNE. Wykład 3. Plan. Aproksymacja Interpolacja wielomianowa Przykłady. dr hab.inż. Katarzyna Zakrzewska, prof.agh. Met.Numer.

Przykład 1 -->s="hello World!" s = Hello World! -->disp(s) Hello World!

Korzystanie z podstawowych rozkładów prawdopodobieństwa (tablice i arkusze kalkulacyjne)

Ćwiczenie 3. MatLab: Algebra liniowa. Rozwiązywanie układów liniowych

dr inż. Damian Słota Gliwice r. Instytut Matematyki Politechnika Śląska

PODSTAWY AUTOMATYKI. MATLAB - komputerowe środowisko obliczeń naukowoinżynierskich - podstawowe operacje na liczbach i macierzach.

04 Układy równań i rozkłady macierzy - Ćwiczenia. Przykład 1 A =

Inżynierskie metody analizy numerycznej i planowanie eksperymentu / Ireneusz Czajka, Andrzej Gołaś. Kraków, Spis treści

UKŁADY ALGEBRAICZNYCH RÓWNAŃ LINIOWYCH

Metody numeryczne I Równania nieliniowe

III TUTORIAL Z METOD OBLICZENIOWYCH

Aproksymacja. funkcji: ,a 2. ,...,a m. - są funkcjami bazowymi m+1 wymiarowej podprzestrzeni liniowej X m+1

DOPASOWYWANIE KRZYWYCH

Metody numeryczne. materiały do wykładu dla studentów. 7. Całkowanie numeryczne

Zajęcia: VBA TEMAT: VBA PROCEDURY NUMERYCZNE Metoda bisekcji i metoda trapezów

Wprowadzenie do Mathcada 1

Macierze. Rozdział Działania na macierzach

= i Ponieważ pierwiastkami stopnia 3 z 1 są (jak łatwo wyliczyć) liczby 1, 1+i 3

Rozwiązywanie układów równań liniowych

UKŁADY ALGEBRAICZNYCH RÓWNAŃ LINIOWYCH

Metody numeryczne Wykład 4

Spis treści. I. Skuteczne. Od autora... Obliczenia inżynierskie i naukowe... Ostrzeżenia...XVII

Zad. 3: Układ równań liniowych

Widoczność zmiennych Czy wartości każdej zmiennej można zmieniać w dowolnym miejscu kodu? Czy można zadeklarować dwie zmienne o takich samych nazwach?

Podstawy Automatyki ćwiczenia Cz.1. Środowisko Matlab

MATEMATYKA I SEMESTR ALK (PwZ) 1. Sumy i sumy podwójne : Σ i ΣΣ

dr Mariusz Grządziel 15,29 kwietnia 2014 Przestrzeń R k R k = R R... R k razy Elementy R k wektory;

Ćwiczenie 3: Wprowadzenie do programu Matlab

METODY KOMPUTEROWE W OBLICZENIACH INŻYNIERSKICH

WYDZIAŁ ELEKTROTECHNIKI, AUTOMATYKI I INFORMATYKI INSTYTUT AUTOMATYKI I INFORMATYKI KIERUNEK AUTOMATYKA I ROBOTYKA STUDIA STACJONARNE I STOPNIA

PORÓWNANIE TREŚCI ZAWARTYCH W OBOWIĄZUJĄCYCH STANDARDACH EGZAMINACYJNYCH Z TREŚCIAMI NOWEJ PODSTAWY PROGRAMOWEJ

ROZKŁAD MATERIAŁU DO II KLASY LICEUM (ZAKRES ROZSZERZONY) A WYMAGANIA PODSTAWY PROGRAMOWEJ.

Funkcja kwadratowa. f(x) = ax 2 + bx + c,

WYMAGANIA EDUKACYJNE Z MATEMATYKI KLASA I GIMNAZJUM Małgorzata Janik

W naukach technicznych większość rozpatrywanych wielkości możemy zapisać w jednej z trzech postaci: skalara, wektora oraz tensora.

Optymalizacja ciągła

Wstęp do Programowania Lista 1

Rozdział 5. Macierze. a 11 a a 1m a 21 a a 2m... a n1 a n2... a nm

1 Równania nieliniowe

Transformata Fouriera. Sylwia Kołoda Magdalena Pacek Krzysztof Kolago

Wstęp do Programowania potok funkcyjny

Spis treści. Przedmowa... XI. Rozdział 1. Pomiar: jednostki miar Rozdział 2. Pomiar: liczby i obliczenia liczbowe... 16

RACHUNEK MACIERZOWY. METODY OBLICZENIOWE Budownictwo, studia I stopnia, semestr 6. Instytut L-5, Wydział Inżynierii Lądowej, Politechnika Krakowska

Skrypty i funkcje Zapisywane są w m-plikach Wywoływane są przez nazwę m-pliku, w którym są zapisane (bez rozszerzenia) M-pliki mogą zawierać

Wprowadzenie Metoda bisekcji Metoda regula falsi Metoda siecznych Metoda stycznych RÓWNANIA NIELINIOWE

KRYTERIA OCENIANIA Z MATEMATYKI W OPARCIU O PODSTAWĘ PROGRAMOWĄ I PROGRAM NAUCZANIA MATEMATYKA 2001 DLA KLASY DRUGIEJ

Zał nr 4 do ZW. Dla grupy kursów zaznaczyć kurs końcowy. Liczba punktów ECTS charakterze praktycznym (P)

Metody numeryczne Numerical methods. Elektrotechnika I stopień (I stopień / II stopień) Ogólnoakademicki (ogólno akademicki / praktyczny)

Przykładowo, jeśli współrzędna x zmienia się od 0 do 8 co 1, a współrzędna y od 12 co 2 do 25, to punkty powinny wyglądać następująco:

Wymagania edukacyjne z matematyki klasa II technikum

Laboratorium Algorytmy Obliczeniowe. Lab. 9 Prezentacja wyników w Matlabie

WYMAGANIA Z WIEDZY I UMIEJĘTNOŚCI NA POSZCZEGÓLNE STOPNIE SZKOLNE DLA KLASY CZWARTEJ H. zakres rozszerzony. Wiadomości i umiejętności

Egzamin z Metod Numerycznych ZSI, Grupa: A

WYKŁAD 9 METODY ZMIENNEJ METRYKI

Układy stochastyczne

Definicja macierzy Typy i właściwości macierzy Działania na macierzach Wyznacznik macierzy Macierz odwrotna Normy macierzy RACHUNEK MACIERZOWY

WYRAŻENIA ALGEBRAICZNE

Programowanie i techniki algorytmiczne

Funkcja kwadratowa. f(x) = ax 2 + bx + c = a

Ćwiczenia nr 7. TEMATYKA: Krzywe Bézier a

ZADANIA OPTYMALIZCJI BEZ OGRANICZEŃ

1 Programowanie w matlabie - skrypty i funkcje

Transkrypt:

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