MATLAB Wprowadzenie Zbigniew Rudnicki (dr inż) 1 MATLAB (MATrix LABoratory) - pakiet oprogramowania matematycznego firmy MathWorks Inc. (od roku 1984) to język i środowisko programowania do obliczeń naukowo-technicznych oraz obszerny zestaw tematycznych bibliotek podprogramów (toolbox ów) i wiele tysięcy stron podręczników Dlaczego warto poznać MATLABa? bo : jest powszechnie nauczany na uczelniach Świata jest łatwy (w prostych programach) jak BASIC a nie jak C czy C++ jest często używany w badaniach naukowych ( publikacje) posiada bardzo obszerną i przystępnie napisaną dokumentację, oraz przykłady i system pomocy (w jęz. angielskim) specjalistyczne toolbox y czynią go narzędziem dostosowanym do prawie każdej dziedziny pozwala poznawać metody matematyczne w praktyce pozwala tworzyć wykresy, animacje, aplikacje,... jest stale rozwijany i wzbogacany Literatura po polsku: Materiały do zajęć na stronie WWW przedmiotu Informatyka Z. Rudnicki: Wprowadzenie do informatyki i programowania a także: A.Kamińska, B.Pańczyk: Matlab - przykłady i zadania - wyd. Mikom 2002, z serii ćwiczenia z... (10 stron) J.Brzózka, L.Dorobczyński: Programowane w Matlab wyd.mikom 1998. (314 stron) B.Mrozek, Zb.Mrozek: MATLAB.x, Simulink 2.x. wyd. PLJ 1998 B.Mrozek, Zb.Mrozek: MATLAB uniwersalne środowisko obliczeń naukowo-technicznych. PLJ 1996 3 4 Niektóre cechy MATLABa Przyjazne dla użytkownika okienka dialogowe tworzące, tzw. interaktywne środowisko Matlaba (IDE - Interactive Development Environment) Język programowania wysokiego poziomu Zbiór kilkudziesięciu toolbox ów - zestawów funkcji Zbiór podręczników (ok.70 po kilkaset stron) MATLAB umożliwia m.in: wykonywanie obliczeń naukowych i inżynierskich, modelowanie i symulację, analizę danych (w tym: sygnałów i obrazów) graficzną wizualizację danych i wyników obliczeń. Podstawowym typem danych w MATLABie jest tablica (macierz) o elementach rzeczywistych lub zespolonych. Co to jest "Środowisko programowania" czyli IDE Programista potrzebuje narzędzi takich jak: edytor do pisania i poprawiania programów, translator (kompilator lub interpretator) do ich tłumaczenia na kod procesora i uruchamiania, debugger (do wykrywania błędów) oraz system pomocy (help). Narzędzia te mogą być połączone w jednym programie nazywanym " zintegrowanym środowiskiem programowania" lub IDE od angielskiego: Integrated Development Environment. 6 1
Interaktywne środowisko Matlab a: Pisanie programów w edytorze Pomoc (podręczniki) Historia (poprzednie komendy) Bieżący folder Okno KOMEND i wyników (dialogu) 7 Darmowi krewni Matlab a Matlab jest drogim programem ale opracowano także jego darmowe odpowiedniki: FreeMat - można pobrać z serwera Katedry lub ze stron http://freemat.sourceforge.net/ a także: OCTAVE - http://octave.sourceforge.net/ SCILAB - www.scilab.org, Informacje: po polsku - Wikipedia-Scilab, SCICOS dla SCILAB'a - odpowiednik Simulink'a dla Matlab'a 8 FreeMat - podobny do Matlab a Tryby użytkowania Matlab a 1) tryb bezpośredni - wpisywanie poleceń w oknie komend - naciśnięcie ENTER powoduje natychmiastowe wykonanie (przez interpreter Matlaba) poleceń wpisanych w tej linii; 2) tryb pośredni - programowy - pisanie programów w edytorze Matlab a, zapisywanie do pliku (z rozszerzeniem.m ) i uruchamianie; 3) tryb graficzny - z wykorzystaniem graficznego interfejsu użytkownika - GUI - graphic user interface i ewentualnie kreatora GUIDE 4) tryb symulacyjny - symulacja działania układów za pomocą SIMULINK a i pakietów rozwiniętych na jego bazie jak np.: SimMechanics 9 10 MATLAB: Działania w oknie komend czyli działanie w trybie bezpośrednim najprostsze polecenia stałe, zmienne, wyrażenia typy wartości reguły dotyczące nazw operatory działań funkcje Działanie w oknie komend Matlaba W jednej linii okna komend można wpisać jedno lub kilka poleceń oddzielanych przecinkami lub średnikami. Naciśnięcie ENTER powoduje wykonanie poleceń, jeśli: mają budowę zgodną z regułami składni języka Matlab, a zmienne w wyrażeniach mają nadane wcześniej wartości. W przeciwnym przypadku wyświetlany jest komunikat o błędzie. Wyniki poleceń nie zakończonych średnikiem [;] - są wyświetlane czyli średnik zapobiega wyświetleniu wyniku polecenia. Klawisz [ ] przywołuje poprzednie polecenia, które można powtórnie wykonać lub zmodyfikować przed wykonaniem. Bardzo długie polecenia można zapisać w kilku liniach kończąc je znakiem kontynuacji czyli trzema kropkami [...]. 11 12 2
Elementy języka - wyrażenia i instrukcje Programy składają się z poleceń (inaczej: komend albo instrukcji). Składnikami poleceń są: słowa kluczowe (np.: if, while, end,...) wyrażenia arytmetyczne a wśród nich: stałe, zmienne i funkcje (jako najprostsze postacie wyrażeń) wyrażenia logiczne: a) proste czyli relacje np.: a-b>0 b) złożone, z użyciem operatorów logicznych (negacja, alternatywa, koniunkcja) wyrażenia tekstowe (m in.funkcje do: sklejania i wycinania fragmentów tekstów) 13 Najprostsze polecenia Gotowość do przyjmowania poleceń jest sygnalizowania znakiem: Najprostsze polecenia to: 1) wyrażenie np.: 2*sqrt(.33)/(.7-3.2*sin(pi/6)^2) 2) instrukcja przypisania zmiennej wartości wyrażenia, zwana też instrukcją podstawiania, o budowie: zmienna = wyrażenie co oznacza: Oblicz wartość wyrażenia i przypisz ją zmiennej na przykład: x=pi/6; y=3*sin(x)^2 x=x+1 14 Wyrażenia arytmetyczne i ich składniki Wyrażenia arytmetyczne mogą zawierać: stałe (liczby) zmienne (nazwy zmiennych) operatory działań nawiasy funkcje Jednak inaczej niż w innych językach - wyrażenia te dotyczą tablic (macierzy), które w szczególności mogą być skalarami (pojedynczymi liczbami). 1 Wyrażenia jako polecenia (obliczenia kalkulatorowe) Znak gotowości do przyjmowania komend: Wpisanie w oknie komend wyrażenia np.: 2+3 daje wynik: 2+3 ans = Nie wstawiliśmy wyniku do żadnej zmiennej dlatego MATLAB użył zmiennej ans - od angielskiego answer - odpowiedź. Gdy przypiszemy wartość wyrażenia zmiennej x i nie zakończymy polecenia średnikiem to otrzymamy: x=2+3 16 Operacje arytmetyczne na skalarach lub macierzach realizowane są przy pomocy operatorów: + dodawanie - odejmowanie / dzielenie * mnożenie ^ potęgowanie Inne działania realizowane są przy pomocy FUNKCJI np.: pierwiastek z 2: sqrt(2) 17 Stałe liczbowe - postacie zapisu liczb Podobnie jak w większości języków programowania zapis liczb w MATLABie może zawierać: początkowy znak plus (na ogół pomijany) lub minus kropkę dziesiętną (NIE PRZECINEK!) poprzedzającą część ułamkową np.: -97.6397 może być stosowana tzw. notacja naukowa w której e oznacza "dziesięć do potęgi..." np.: -1.60210e-23 oznacza: -1.60210 razy 10 do potęgi -23 w zapisie liczb urojonych i zespolonych stosuje się symbole i oraz j np.: 1i, 2-3.1419j, 3ei 18 3
Przypisywanie wartości zmiennym i wyświetlanie wartości Możemy wyniki obliczeń podstawiać do zmiennych. Gdy w jednej linii ma być kilka poleceń to oddzielamy je przecinkami lub średnikami: x=2, y=3; z=x+y 2 z = Komenda zakończona średnikiem wykonała się lecz nie został wyświetlony jej wynik. W dowolnej chwili możemy sprawdzić aktualną wartość zmiennej, po prostu wpisując jej nazwę i naciskając ENTER y y = 19 3 Nadawanie (przypisywanie) wartości zmiennym i wyświetlanie wartości zmiennych c.d. Każda zmienna pamięta nadaną wartość aż do czasu gdy nadamy jej nową wartość albo usuniemy zmienne poleceniem clear y y = 3 y=y+1 y = 4 z z = 20 Polecenia who, whos Można sprawdzić jakie zmienne zdefiniowaliśmy poleceniami who lub whos: who Your variables are: ans x y z whos Name Size Bytes Class ans 1x1 8 double x 1x1 8 double y 1x1 8 double z 1x1 8 double 21 Polecenia clear, clc, help Polecenie clear usuwa wszystkie zmienne, natomiast clear zmienna1 zmienna2... usuwa wymienione zmienne (oddzielane odstępami) clear - po tym poleceniu komendy who i whos nic nie wyświetlą: whos who Polecenie: clc czyści okno komend (usuwa wyświetlone wyniki) Polecenie: help nazwa funkcji lub grupy tematów wyświetla objaśnienia. Na przykład: help elfun - wyświetli objaśnienia funkcji elementarnych help ops - wyświetli objaśnienia operatorów 22 Polecenia save, load save - zapisuje pamięć zmiennych do pliku matlab.mat load - wczytuje pamięć zmiennych z pliku matlab.mat 23 Zmienne - macierze - deklarowanie Wszystkie zmienne w MATLABie sa traktowane jak macierze Skalary i wektory są szczególnymi przypadkami macierzy Deklarowanie typu i wymiarów macierzy odbywa się automatycznie i w trakcie wykonywania programu - przez rozpoznanie rodzaju wpisanych wartości oraz maksymalnych wskaźników. Nazywane jest to typowaniem dynamicznym np.: M=[3,2,;1,4,8] % Zmiennej M przypisano macierz M = 3 2 1 4 8 M='Jola' % Tej samej zmiennej M przypisano tekst M = Jola 24 4
Nazwy zmiennych (identyfikatory) Nazwy zmiennych można tworzyć według następujących reguł: muszą rozpoczynać się od litery, a dalej mogą mieć tylko litery angielskie, nie wolno dawać polskich np.:ą, ć, ę, ł, ń,... oraz cyfry i znaki podkreślenia np.: Moment_sily9 długość nazwy nie powinna przekraczać max. 19 znaków (tyle jest zapamiętywanych) MATLAB rozróżnia duże i małe litery. Polecenia standardowe należy pisać małymi literami a dla nazw własnych programów i zmiennych można używać małych i dużych liter Przykłady poprawnych i niepoprawnych nazw zmiennych DOBRE: Moc2 MomentGn1 moment_gn_1 SILA_Px1 ZŁE: 2Moc Moment-1 moment_gnący1 SIŁA_Px1 2 26 Typy wartości stałych, zmiennych oraz wyrażeń Matlab nie wymaga deklarowania typów zmiennych lecz nadaje zmiennej typ zależny od wprowadzanej wartości. Domyślnie wszystkie zmienne są traktowane jak macierze. Matlab potrafi dynamicznie zmieniać zarówno typ jak i rozmiar macierzy przypisywanych zmiennym. Stałe i zmienne liczbowe mają domyślnie typ double a łańcuchy znaków (teksty) typ char. Sprawdzić typ zmiennej można funkcją class(zmienna) a typy wszystkich zdefiniowanych zmiennych poleceniem whos. W wyrażeniach logicznych można używać wyrażeń liczbowych - wtedy ZERO jest traktowane jako FAŁSZ a wartość różna od zera jako PRAWDA 27 Typ double Typ double czyli liczb rzeczywistych podwójnej precyzji jest jedynym typem w obrębie którego można wykonywać działania arytmetyczne. Zakres liczb typu double sięga od - realmax do +realmax, gdzie realma1.7977 e+308 Najmniejszy ułamek ma wartość: realmin=2.221 e-308 Precyzja: Liczby są pamiętane z dokładnością ok. 1-16 cyfr znaczących. Wartość typu double zajmuje 8 bajtów (64 bity) w pamięci 28 Inne typy wartości. Konwersja typów Łańcuchy znaków czyli teksty mają typ array of char - tablica znaków W wyrażeniach logicznych wartość ZEROWA jest równoznaczna z FAŁSZEM a wartości różne od zera traktowane są jako PRAWDA Do oszczędniejszego przechowywania danych - na przykład obrazów - mogą służyć takie typy jak: - uint8, uint16, uint32 - liczby całkowite bez znaku - int8, int16, int32 - liczby całkowite ze znakiem Możliwe jest dokonywanie różnych konwersji typów m.in.: num2str(liczba) - przekształca liczbę na ciąg znaków str2num(tekst) - przekształca tekst (ciąg cyfr) na liczbę uint8, uint16, uint32 - konwertują do całkowitych bez znaku int8, int16, int32 - konwertują do całkowitych ze znakiem 29 Postacie wyświetlanych wyników Obliczenia są dokonywane z dużą dokładnością ale standardowo wyświetlane są 4 miejsca po kropce dziesiętnej czyli domyślny jest format short w=x/y w = 0.6667 można zmienić format wyświetlania np.: format long w w = 0. 66666666666667 lub: format long e w w = 30 6.66666666666667e-001
Funkcje i stała pi Aby obliczyć sinus 30 stopni trzeba przeliczyć stopnie na radiany: x=sin(pi/6) 0. Komenda zakończona średnikiem też wykona się lecz nie będzie wyświetlony jej wynik: x=sin(pi/6); możemy sprawdzić aktualną wartość zmiennej x wpisując jej nazwę i naciskając ENTER x 31 0. Przykład obliczeń z funkcją sinus Chcemy obliczyć 3sinus 2 30 stopni i wstawić do zmiennej x. Wiemy że sinus 30 stopni wynosi 0, (stosunek najkrótszego do najdłuższego boku w ekierce nierównoramiennej), a więc wynik powinien być równy 0,7. Czy dobre będą zapisy 3sin 2 30, 3SIN 2 (30), 3sin 2 (30)? (1) argumenty każdej funkcji muszą być w nawiasach, Oczywiście NIE! bo: (2) dla funkcji trygonometrycznych - argument musi być w radianach, a nie stopniach (3) nazwy funkcji standardowych (z bibliotek Matlab'a) piszemy małymi literami (4) separatorem części ułamkowej w liczbach jest kropka a nie przecinek,... () nie wolno pomijać znaku mnożenia [*] (6) do kwadratu mamy podnosić obliczoną wartość sinusa z 30 stopni a nie nazwę A więc musimy napisać tak: 3*(sin(pi/6))^2 0.7 lub tak: 3*sin(pi/6)^2 0.7 32 Jakie funkcje mamy do dyspozycji - pokaże HELP Funkcje według kategorii 33 34 Alfabetyczny wykaz funkcji Ważniejsze elementarne funkcje matematyczne abs(x) - wartość bezwzględna sqrt(x)- pierwiastek exp(x) - e do x log(x) - logarytm naturalny log2(x) - logarytm o podstawie 2 log10(x) - logarytm o podst 10 gcd(x) - największy wspólny podzielnik lcm(x) - najmniejsza wspólna wielokrotność mod(x) - reszta z dzielenia sign(x) - znak Opis ich można uzyskać wpisując: help elfun 3 36 6
Funkcje do zaokrąglania wartości liczbowych ceil - sufit - zaokrąglenie w górę fix - zaokrągla w stronę zera floor - podłoga - zaokrągla w dół round - zaokrągla do najbliższej całkowitej 37 Ciągi i wektory Każdy ciąg jest zarazem wektorem Definicja ciągu X typu postęp arytmetyczny ma postać: X = pocz : przyrost : koniec na przykład: -0.2 : 0.1 : 0.3-0.2-0.1 0 0.1 0.2 0.3 Przyrost pominięty w definicji jest uważany za równy 1 i=1:6 i = 1 2 3 4 6 Ciąg można też definiować jako wyrażenie wykorzystujące wcześniej zdefiniowany ciąg indeksów np.: a=(i-1)/2 a = 0 0. 1.0 1. 2.0 2. 38 Wektory wierszowe i kolumnowe Dowolny wektor wierszowy można zdefiniować przez wpisanie jego składowych oddzielanych przecinkami wewnątrz nawiasów prostokątnych: W=[12.1, -3.2, 0.03] W = 12.1000-3.2000 0.0300 Dowolny wektor kolumnowy można zdefiniować przez wpisanie jego składowych oddzielanych średnikami wewnątrz nawiasów prostokątnych: K=[12.1; -3.2; 0.03] K = 12.1000-3.2000 0.0300 39 Mnożenie macierzowe W Matlabie - domyślnie operującym na macierzach - mnożenie zapisywane operatorem * jest działaniem macierzowym które wyznacza sumy iloczynów wyrazów wiersza przez wyrazy kolumny np.: a = [1, 3], b = [2; 4] a = 1 3 b = 2 4 c = a*b c = 14 bo: c = 1*2 +3*4 Macierzowo nie można więc mnożyć wektora wierszowego przez wierszowy: a*a??? Error using ==> mtimes Inner matrix dimensions must agree. 40 Mnożenie i potęgowanie tablicowe (operatory z kropką) Potęgowanie elementów wektora lub macierzy oraz mnożenie dwu macierzy o jednakowych rozmiarach są możliwe przy zastosowaniu operatorów z kropką.^ i.* czyli działań tablicowych Mnożenie tablicowe przy pomocy operatora.* dotyczy par odpowiadających sobie elementów: a = [1, 3] a = 1 3 d=a.*a d = 1 9 bo: d = [1*1, 3*3] c = a.^2 c = 1 9 bo: c = [1^2, 3^2] 41 Definiowanie macierzy Jednym ze sposobów definiowania macierzy jest wpisanie wszystkich jej elementów wewnątrz nawiasów prostokątnych, przy czym elementy wiersza oddzielane mają być przecinkami lub spacjami a poszczególne wiersze oddzielane średnikami. Np.: A=[4,1,; 2,3,6] A = 4 1 2 3 6 42 7
Macierze - indeksy i rola dwukropka A=[4,1,; 2,3,6] A = 4 1 2 3 6 Dwukropek zastępuje wszystkie wartości indeksu (wskaźnika) A więc pierwszy wiersz macierzy to: A(1,: ) ans = 4 1 Podobnie aby wybrać trzecią kolumnę wpisujemy: A(:,3) ans = 6 A(2,2) Jak otrzymać wykres funkcji x=0:0.1:4*pi; plot(x,sin(x)); grid on ans = 3 43 44 Wykres powierzchni trójwymiarowej [x,y]=meshgrid(-3*pi:0.1:3*pi,-3*pi:0.1:3*pi); z=600-x.*y+0*sin(x)+0*sin(y); mesh(x,y,z) 4 Tematyka toolbox-ów Matlaba SIMULINK - Symulacja układów dynamicznych Układy Sterowania Przetwarzanie i analiza Sygnałów Przetwarzanie i analiza Obrazów Sieci Neuronowe; Logika rozmyta Statystyka; Finanse i giełda Akwizycja danych Projektowanie filtrów Bazy danych Matematyka symboliczna Identyfikacja systemów Analiza falkowa i Fourier'a Optymalizacja Równania różniczkowe Sterowanie nieliniowe Sterowanie predykcyjne Analiza chemiczna Geografia i mapy Funkcje sklejane (splajny) Metoda elem. skończonych Teoria grafów 46........ Koniec wykładu wprowadzającego do Matlaba 47 8