Informatyka INP2005 Inżynieria Biomedyczna Semestr zimowy 2017/2018
Wykład 1 Sprawy organizacyjne O MATLABie Zapoznanie ze środowiskiem Wstęp do programowania w Matlabie: Typy zmiennych Odwoływanie się do elementów tablic i macierzy Podstawowe działania Podstawowe funkcje wbudowane
Wykład 1 Sprawy organizacyjne Czym jest MATLAB? Zapoznanie ze środowiskiem Wstęp do programowania w Matlabie: Typy zmiennych Odwoływanie się do elementów tablic i macierzy Podstawowe działania Podstawowe funkcje wbudowane
Zespół Dr inż. bogumil.konopka@pwr.edu.pl, p. 118/D1 Konsultacje: sr 12:00 14:00, pt 10:00 12:00 Ćwiczenia laboratoryjne Mgr inż. Maciej Bartuzel Mgr inż. Agnieszka Kazimierska Dr hab. Krystian Kubica, prof. PWr (p. 115/D1)
Plan wykładów 1. Wprowadzenie (historia, środowisko programistyczne, podstawowe komendy) 2. Skrypty. Instrukcje sterujące. Budowanie funkcji. 3. Optymalizacja obliczeń. Przetwarzanie tekstu. Wizualizacja danych. Praca z plikami. Strukturyzacja danych. 4. Graficzny interfejs użytkownika. 5. Interpolacja oraz obliczenia numeryczne. 6. Rekurencja. Programowanie obiektowe. 7. Kolokwium termin I. 8. (pierwsza połowa wykładu) Kolokwium termin II.
Warunki zaliczenia Kolokwium pierwszy termin - 9 stycznia 2018 Kolokwium termin poprawkowy 23 stycznia 2018 Zaliczenie > 50% pkt Do końcowego wyniku będą wliczane punkty za aktywność na wykładach
Materiały Slajdy, listy zadań i inne http://www.kotulska-lab.pwr.edu.pl (zakładka For Students ) Książki: B. Mrozek, Z. Mrozek. MATLAB i Simulink. Poradnik użytkownika. Wydanie III. Helion 2010. R. Pratap. MATLAB 7 dla naukowców i inżynierów. PWN 2010. Internet: MATLAB Documentation Center http://www.mathworks.com/help/matlab/
Wykład 1 Sprawy organizacyjne O MATLABie? Zapoznanie ze środowiskiem Wstęp do programowania: Typy zmiennych Odwoływanie się do elementów tablic i macierzy Podstawowe działania Podstawowe funkcje wbudowane
MATLAB MATrix LABoratory Matlab to: język programowania wysokiego poziomu interaktywne środowisko programistyczne bardzo szeroki zbiór bibliotek funkcji
Poziomy języków programowania MATLAB http://www.codecommit.com/blog/java/defining-high-mid-and-low-level-languages
Poziomy języków programowania MATLAB Assembler Java Matlab ;http://www.8052.com/add16.phtml ;Step 1 of the process MOV A,R7 ;Move the low-byte into the accumulator ADD A,R5 ;Add the second low-byte to the accumulator MOV R3,A ;Move the answer to the low-byte of the result ;Step 2 of the process MOV A,R6 ;Move the high-byte into the accumulator ADDC A,R4 ;Add the second high-byte to the accumulator, plus carry. MOV R2,A ;Move the answer to the high-byte of the result ;Step 3 of the process MOV A,#00h ;By default, the highest byte will be zero. ADDC A,#00h ;Add zero, plus carry from step 2. MOV MOV R1,A ;Move the answer to the highest byte of the result public class MyFirstJavaProgram { } public static void main(string []args) { int a=2; int b=3; int c; c=a+b; System.out.println(c); } a=2; b=3; c=a+b ;Return - answer now resides in R1, R2, and R3. RET http://www.codecommit.com/blog/java/defining-high-mid-and-low-level-languages
MATLAB MATrix LABoratory Matlab to: język programowania wysokiego poziomu interaktywne środowisko programistyczne bardzo szeroki zbiór bibliotek funkcji
MATLAB środowisko programistyczne
MATLAB środowisko programistyczne Zarządzanie kodem Tworzenie Modyfikowanie Testowanie Zarządzanie plikami i danymi
MATLAB MATrix LABoratory Matlab to: język programowania wysokiego poziomu interaktywne środowisko programistyczne bardzo szeroki zbiór bibliotek funkcji
MATLAB zbiór bibliotek Biblioteki do operacji blokowo-macierzowych LAPACK (Linear Algebra Package) BLAS (Basic Linear Algebra Subroutines) Toolbox-y Bioinformatics Toolbox Curve Fitting Toolbox Financial Toolbox Neural Networks Toolbox Parallel Computing Toolbox Symbolic Math Toolbox.
MATLAB MATrix LABoratory Matlab umożliwia: Interaktywną analizę danych przetwarzanie obrazów i sygnałów, analizę statystyczną, wizualizację Przeprowadzanie obliczeń numerycznych Budowę i testowanie algorytmów Budowę i symulację modeli matematycznych Tworzenie aplikacji z interfejsem graficznym
Historia Matlaba Lata `70: Biblioteki LINPACK i EISPACK do obliczeń numerycznych 1980: Cleve Moler opracowuje pierwszą wersję MATLABA, w oparciu o język FORTRAN oraz fragmenty bibliotek LINPACK i EISPACK Wczesne lata `80: Jack Little, Steve Bangert przepisują MATLAB w jezyku C M-pliki, toolboxy, zwiększone możlowości graficzne Powołanie firmy The MathWorks in California in 1984. http://www.mathworks.com/company/newsletters/articles/the-origins-of-matlab.html http://www.mathworks.com/company/aboutus/founders/index.html Autorzy LINPACK: Jack Dongarra, Cleve Moler, Pete Stewart, and Jim Bunch (1978) Jack Little i Cleve Moler prezes i główny matematyk MathWorks
Dostęp do MATLABa MATLAB jest środowiskiem komercyjnym. Licencja studencka : 69 lub 35 (http://www.mathworks.com/academia/student_version/?s_tid=acmain_st-pop-ml_gw_bod) Dostęp do Matlaba Ćwiczenia laboratoryjne s. 015/D1 Platforma Obliczeń Kampusowych PLATON U3 https://wcss.cloud.pionier.net.pl/
Rejestracja do usługi Platon U3. 1. Wejść na stronę https://wcss.cloud.pionier.net.pl/index.php?page=register 2. Wypełnić pola. UWAGA! W polu e-mail podać adres skrzynki uczelnianej! 3. Sprawdzić dane. 4. Zapoznać się z regulaminem. 5. Wybrać hasło. 6. Potwierdzić rejestrację po otrzymaniu maila na skrzynkę studencką. 7. Konto zostanie aktywowane po zatwierdzeniu przez administratora systemu.
Programy zastępcze GNU Octave 4.2.1 (https://www.gnu.org/software/octave/) Identyczna składnia, wiele podobnych bibliotek SciLab 6 (http://www.scilab.org/) Zbliżona składnia istnieją konwertery R (http://cran.at.r-project.org/bin/windows/base/) Inne środowisko, inna składnia, ale funkcjonalność taka sama lub większa Dużo darmowych bibliotek
Wykład 1 Sprawy organizacyjne Czym jest MATLAB? Zapoznanie ze środowiskiem Wstęp do programowania: Typy zmiennych Odwoływanie się do elementów tablic i macierzy Podstawowe działania Podstawowe funkcje wbudowane
Pulpit MATLAB Folder roboczy Przestrzeń robocza Okno poleceń Historia poleceń
Tryb pracy Interaktywne wpisywanie poleceń w linii komend Uruchamianie skryptów (sekwencji poleceń), programów i aplikacji.
Dokumentacja - Help HELP pierwsze miejsce, w którym należy szukać informacji o funkcjach MATLABa Można wpisać nazwę funkcji Można poruszać się po hiperłączach MathWorks Documentation Center http://www.mathworks.com/help/
Wykład 1 Sprawy organizacyjne Czym jest MATLAB? Zapoznanie ze środowiskiem Wstęp do programowania: Typy zmiennych Odwoływanie się do elementów tablic i macierzy Podstawowe działania Podstawowe funkcje wbudowane
Typy zmiennych typ numeric Zmienne liczbowe numeric typ double (domyślny) format zmiennoprzecinkowych, zapewnia dokładność 15 17 liczb po przecinku, 8 bajtów (64 bity) zakres (~3.4 x 10 38, ~-3.4 x 10 38 ) typ single format zmiennoprzecinkowy, zapewnia dokładność 6 9 liczb po przecinku, 4 bajtów (32 bity), (~3.4 x 10 38, ~-3.4 x 10 38 ) typy intx - (np. int8, int16) liczby całkowite zapisane na X bitach typy uintx (np. uint8, uint16) liczby całkowite bez znaku
Typy zmiennych typ numeric >> a = 4; %domyślnie a jest typu double >> b = single(a); %zamiana na typ single >> whos %wyświetlenie informacje o zmiennych w przestrzeni roboczej Name Size Bytes Class a 1x1 8 double b 4x4 4 single
Typy zmiennych typ char Zmienne znakowe typ char pojedynczy znak - 2 bajty (16 bitów) łańcuchy znaków tworzą jednowymiarowe tablice zmiennych typu char aby utworzyć wielowymiarową tablicę znaków trzeba skorzystać ze zmiennych typu cell (o tym będzie na kolejnych wykładach)
Typy zmiennych typ char >> znak='a'; >> znaki='abc'; >> whos Name Size Bytes Class Attributes znak 1x1 2 char znaki 1x3 6 char
Typy zmiennych typ logical Zmienne logiczne: reprezentują stany false oraz true za pomocą liczb 0 oraz 1 niektóre funkcje i operatory MATLABa zwracają zmienne logiczne by sygnalizować spełnienie lub niespełnienie określonego warunku ==, <, >, >=, =<, &,, xor mogą być wykorzystywane do odwoływania się do elementów tablic (o tym za chwilę)
Typy zmiennych typ logical >> a=5; %zadeklarowanie wartości zmiennej a >> b=4; %zadeklarowanie wartości zmiennej b b = 4 >> a==b % czy a jest równe b? ans = 0 >> a>b % czy a jest większe od b? ans = 1 >> a<b ans = 0 >> a>=b ans = 1 >> a<=b ans = 0 >> a & b %koniunkcja - logiczne i ans = 1 >> a b %alternatywa - logiczne lub ans = 1 >>~a %zaprzecznie ans = 0 >>xor(a,b) % kto wie?? ans = 0
Typy zmiennych typ logical >> a=5; %zadeklarowanie wartości zmiennej a >> b=4; %zadeklarowanie wartości zmiennej b b = 4 >> a==b % czy a jest równe b? ans = 0 >> a>b % czy a jest większe od b? ans = 1 >> a<b ans = 0 >> a>=b ans = 1 >> a<=b ans = 0 >> a & b %koniunkcja - logiczne i ans = 1 >> a b %alternatywa - logiczne lub ans = 1 >>~a %zaprzecznie ans = 0 >>xor(a,b) % alternatywa wykluczająca - exclusive or ans = 0
Inne typy zmiennych struct struktury - grupują związane ze sobą dane dowolnego typu w polach zdefiniowanych przez użytkownika (będzie na innym wykładzie) cell typ komórkowy grupują dane dowolnego typu w indeksowanych polach (będzie na innym wykładzie) Od wersji 2013b istnieją też: categorical zmienne kategoryczne wartości ze zdefiniowanego przez użytkownia dyskretnego zbioru np. { kobieta, mężczyzna }, { zimno, umiarkowanie, gorąco } table - zmienne do przechowywania tabel danych każde pole w tabeli może być innego typu, ale ilość wierszy w każdej kolumnie musi być taka sama
Tablice, macierze, wektory. Każda zmienna w MATLABie jest tablicą (ang. array). Macierze (ang. matrix) to szczególny przypadek tablic: Mają dwa wymiary Wektory to szczególny przypadek macierzy: Długość w ramach jednego wymiaru jest równa 1
Tworzenie tablic deklarowanie wartości >> V=[1 2 3 4] V = 1 2 3 4 >> V=[1, 2, 3, 4] V = 1 2 3 4 >> M=[1 2; 3 4] % ; rozdziela wiersze M = 1 2 3 4
Tworzenie tablic deklarowanie wartości >> V=[1 2 3 4] V = 1 2 3 4 >> V=[1, 2, 3, 4] V = 1 2 3 4 >> M=[1 2; 3 4] % ; rozdziela wiersze M = 1 2 3 4 >> V=[ 1:4 ] %domyślny krok między elementami 1 V = 1 2 3 4 >> V=[0:0.25:1] % krok między elementami 0.25 V = 0 0.2500 0.5000 0.7500 1.0000 >> V=linspace(0, 1, 5) %elementy równomiernie rozmieszczone V = 0 0.2500 0.5000 0.7500 1.0000
Tworzenie tablic za pomocą funkcji >> M = rand(3) % liczby z rozkładu równomiernego M = 0.4898 0.7094 0.6797 0.4456 0.7547 0.6551 0.6463 0.2760 0.1626 >> M = randi(5,3) % liczby całkowite z rozkładu równomiernego U(1, 5) M = 1 2 4 3 3 2 5 2 3 % macierz o szczególnych właściwościach %statystycznych >> N=magic(3) N = 8 1 6 3 5 7 4 9 2 Inne funkcje: np. ones, zeros
Łączenie tablic >> A = [1 2 3]; >> B = [4 5 6]; >> C = [A B] % sklejenie wektorów w jednym wierszu C = 1 2 3 4 5 6 >> D = [A ; B] % każdy wektor utworzy oddzielny wiersz D = 1 2 3 4 5 6
Odwoływanie się do elementów tablic indeksowanie liniowe Przez numer elementu: >>a=d(2); >>b=d(4:7); >>c=d(end); 1 2 3 4 5 7 6 2 3 11 6 5 9 7 3 9 12 5 9 9 8 8 134 4 3 5 9 3 142 8 7 2 10 8 153 6 7
Odwołania do elementów tablic indeksowanie wierszowo-kolumnowe (1) Przez indeksy >> a=d(2, 4); >> b=d(1:2, 3); >> c=d(5, :); >> d=d(:, 1:2); 1 2 3 4 5 1 2 3 4 5 7 2 3 6 5 9 3 9 5 9 9 8 4 4 3 5 3 2 8 7 2 8 3 6 7
Odwołania do elementów tablic indeksowanie wierszowo-kolumnowe (2) Przez indeksy >> e=d(:,[1 3]); >> f =D(1:2:5, end) >> g=d(end-1, 1:2); Automatycznie utworzony wektor [1 3 5] 1 2 3 1 2 3 4 5 7 2 3 6 5 9 3 9 5 9 9 8 4 4 3 4 5 3 2 8 7 5 2 8 3 6 7
Odwołania do elementów tablic indeksowanie logiczne Przez zmienne logiczne: 1. Najpierw wygenerować odpowiednią macierz logiczną 2. Odwołać się za pomocą tej macierzy >>L=D<3; 7 2 3 6 5 9 3 9 5 9 9 8 4 4 3 5 3 2 8 7 2 8 3 6 7
Odwołania do elementów tablic indeksowanie logiczne Przez zmienne logiczne: 1. Najpierw wygenerować odpowiednią macierz logiczną 2. Odwołać się za pomocą tej macierzy >>L=D<3; Utworzona macierz logiczna L 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 1 0 0 0 0
Odwołania do elementów tablic indeksowanie logiczne Przez zmienne logiczne: 1. Najpierw wygenerować odpowiednią macierz logiczną 2. Odwołać się za pomocą tej macierzy >>L=D<3; >>v=d(l) % powstaje wektor kolumnowy v= 2 2 2 7 2 3 6 5 9 3 9 5 9 9 8 4 4 3 5 3 2 8 7 2 8 3 6 7
Odwołania do elementów tablic indeksowanie logiczne Przez zmienne logiczne: 1. Najpierw wygenerować odpowiednią macierz logiczną 2. Odwołać się za pomocą tej macierzy >>L=D<3; >>D(L)=0; % wybrane elementy są zerowane %lub zamiast dwóch poprzednich: D(D<3)=0; 7 0 3 6 5 9 3 9 5 9 9 8 4 4 3 5 3 0 8 7 0 8 3 6 7
Najczęstsze błędy przy odwołaniach >>D = [1 2 3 4]; >> D(1.5) Subscript indices must either be real positive integers or logicals. >> D(10,20) Index exceeds matrix dimensions.
Wyszukiwanie elementów Funkcja find zwraca indeksy (liniowe lub wierszowe-kolumnowe) niezerowych elementów macierzy >>ind= find(d) ind = 1 2 3 4 7 8 9 >> ind = find(d==0) ind = 5 6 14 7 0 3 6 5 9 3 9 5 9 9 8 4 4 3 5 3 0 8 7 0 8 3 6 7
MATLAB jako kalkulator Oblicz wartość wyrażenia: x t = Ae γt/2 cos ωt + φ, ω = 2πf dla t=5 i dla wartości współczynników A=1, γ=0.2, f =1, φ=0. >> A=1; gamma=0.2; f=1; omega=2*pi*f; fi=0; t=5; >> x=a*exp(-gamma*t/2)*cos(omega*t+fi) x = 0.6065 Dwie funkcje wbudowane Inne podstawowe funkcje matematyczne np. : log2, log10, log, atan, asin, abs, sqrt,
Częste błędy przy liczeniu Chcemy wyliczyć wartość wyrażenia: arctg(log(ln(4(3 + 2)))) >> atan(log(ln(4(3+2))) atan(log(ln(4(3+2))) Error: Unbalanced or unexpected parenthesis or bracket. >> atan(log(ln(4*(3+2))) atan(log(ln(4*(3+2))) Error: Expression or statement is incorrect--possibly unbalanced (, {, or [. Prawidłowy zapis >> atan(log10(log(4*(3+2)))) ans = 0.4447 >> atan(log(ln(4*(3+2)))) Undefined function 'ln' for input arguments of type 'double'.
Działania macierzowe MATLAB domyślnie wykonuje działania na macierzach >> A=[1,2,3;2,-1,0] A = 1 2 3 2-1 0 >> B=[2-1 5; 4 0, 10] B = 2-1 5 4 0 10 >> A+B ans = 3 1 8 6-1 10 >> A-B ans = -1 3-2 -2-1 -10 >> A/B % w tym przypadku jest możliwe ans = -2.0000 1.2931 1.0000-0.4310
Działania macierzowe vs tablicowe (z kropką) A 1 2 3 2-1 0 B 2-1 5 4 0 10 >> A^2 Error using ^ Inputs must be a scalar and a square matrix. To compute elementwise POWER, use POWER (.^) instead. >> A*B Error using * Inner matrix dimensions must agree.
Działania macierzowe vs tablicowe (z kropką) A 1 2 3 2-1 0 B 2-1 5 4 0 10 >> A^2 %potęgowanie macierzowe Error using ^ Inputs must be a scalar and a square matrix. To compute elementwise POWER, use POWER (.^) instead. >> A.^2 %potęgowanie tablicowe ans = 1 4 9 4 1 0 1 2 2 2 3 2 2 2 1 2 0 2 >> A*B %mnożenie macierzowe Error using * Inner matrix dimensions must agree. >> A.*B %mnożenie tablicowe ans = 2-2 15 8 0 0 1*2 2*(-1) 3*5 2*4-1*0 0*10
MATLAB jako kalkulator c.d. Oblicz wartość wyrażenia: x t = Ae γt/2 cos ωt + φ, ω = 2πf dla tϵ[0,100] i dla wartości współczynników A=1, γ=0.2, f =1, φ=0. >> A=1; gamma=0.2; f=1; omega=2*pi*f; fi=0; t=[0:100]; >> x=a*exp(-gamma*t/2)*cos(omega*t+fi) Error using * Inner matrix dimensions must agree.
MATLAB jako kalkulator c.d. Oblicz wartość wyrażenia: x t = Ae γt/2 cos ωt + φ, ω = 2πf dla tϵ[0,100] i dla wartości współczynników A=1, γ=0.2, f =1, φ=0. >> x=a*exp(-gamma*t/2).*cos(omega*t+fi); >>size(x) %sprawdza wymiary macierzy ans= 1 101
Najprostsza funkcja graficzna Plot - rysowanie wykresów 2D >> plot(t,y) >>y2=-0.01*t + 1; >>plot(t,y,t,y2) % dwie krzywe na jednym wykresie
Kilka innych przydatnych funkcji (1) >>x=randn(1,100) % losowanie wektora liczb z rozkładu normalnego >> hist(x) %rysowanie histogramu
Kilka innych przydatnych funkcji (2) Suma -> sum >> x=randi(5,1,6) % losowy wektor liczb całkowitych x = 5 4 5 4 1 5 >> sum(x) % suma elementów ans = 24 PRZYKŁAD! Wylicz wartość średnią elementów wektora >> srednia = 1/length(x) * sum(x) % można też srednia = mean(x) srednia = 4 N x = 1 N i=1 x i
Kilka innych przydatnych funkcji (3) >>x %wyświetlenie zmiennej x = 5 4 5 4 1 5 >> cumsum(x) % suma kumulowana ans = 5 9 14 18 19 24 >> prod(x) %iloczyn elementów ans = 2000 >> length (x) % długość tablicy ans = 6 >> size (x) %wymiary tablicy ans = 1 6
Najważniejsze do zapamiętania: MATLAB to środowisko programistyczne oraz język programowania W MATLABie można pisać programy jak w Java, albo pracować interaktywnie wpisując polecenia w linii komend. W MATLABie mamy dostęp do olbrzymiej gamy wyspecjalizowanych funkcji i algorytmów nie ma potrzeby implementacji od podstaw