Wstep do Matlab'a

9

Click here to load reader

Transcript of Wstep do Matlab'a

Page 1: Wstep do Matlab'a

Metody numeryczne

Instytut Sterowania i Systemów InformatycznychWydział Elektrotechniki, Informatyki i Telekomunikacji

Uniwersytet Zielonogórski

Elektrotechnika stacjonarne-dzienne pierwszego stopnia z tyt. inżynieraInformatyka stacjonarne-dzienne drugiego stopnia z tyt. magistra inżyniera

Wstęp do Matlab’a

Laboratorium, prowadzący: mgr inż. Błażej CichyRok akademicki 2010/2011

1 Materiał omawiany na laboratorium

Materiał laboratorium obejmuje następujące zagadnienia:

1. Wstęp, plan zajęć na laboratoriumpodstawowe informacje o Matlab’ie.

2. Obliczenia, operacje elementarne namacierzach.

3. Grafika 2D i 3D w Matlab’ie.4. Programowanie w Matlab’ie, m-pliki,

m-funkcje.

5. Błędy związane z obliczeniami nume-rycznymi, konwersje liczb.

6. Rozwiązywanie równań nieliniowych.7. Zagadnienia algebry liniowej.8. Zagadnienia interpolacji.9. Zagadnienia aproksymacji.

10. Całkowanie numeryczne.

Jednak wszystkie informacje o Matlab’ie można odszukać w samym programie. Posiadaon bardzo dobrą dokumentację z której trzeba korzystać!

2 Kilka uwag o programie Matlab

Poniższe uwagi mają charakter informacyjny nie wyczerpują dokładnie całościzagadnień. Dlatego zachęcam do dokładnego przeczytania dokumentacji oraz

eksperymentowania1.

Program Matlab to jeden z lepszych pakietów zorientowanych przede wszystkim naobliczenia numeryczne. Obecnie dostępna jest już siódma wersja tego pakietu. Zaletą Ma-tlab’a jest możliwość interaktywnej pracy z konsoli, gdzie można wydawać pojedynczepolecenia. Istnieje też możliwość tworzenie skryptów oraz dodawanie nowych funkcji. Za-letą Matlab’a jest także duży pakiet gotowych do wykorzystania funkcji np.: do tworzeniasieci neuronowych, czy pakiet Simulink. Tego rodzaju pakiety nazywa się też toolbox’ami.Ważnym aspektem jest także wydajność numeryczna. Wcześniejsze wersje Matlab’a nieoferowały pod tym względem dużych możliwości. Jednak od wersji 6.5 Matlab dzięki bi-bliotekom Atlas2 może zaoferować wysoką wydajność.

1Choć przy funkcjach obsługi systemów plików np.: delete oraz rmdir zalecana jest daleko idącapowściągliwość.2Pakiet Atlas – co jest bardzo ciekawe – to darmowy zestaw procedur numerycznych napisanych w

C dostępnych pod adresem: http://math-atlas.sourceforge.net/. Nie jest to jedyna darmowa biblioteka z

1

Page 2: Wstep do Matlab'a

Wstęp do Matlab’a 2

Rysunek 1: Główne okno pomocy programu Matlab

2.1 Pomoc programu Matlab

Program Matlab posiada bardzo bogatą dokumentację z licznymi przykładami. Z po-mocy możemy korzystać na dwa sposoby: za pomocą konsoli i polecenia help, bądź zinterfejsu graficznego programu. Dokumentacja została zgromadzone w opcji Help/FullProduct Family Help i jest to główny zbiór gdzie znajdują się informacje o toolbox’achi funkcjach w nich zgromadzonych. Po wybraniu tej opcji pokaże się okno podobne dookna z rysunku 1. Korzystanie z tej formy pomocy jest charakterystyczne dla aplikacjiokienkowych. Cała struktura pakietu Matlab jak widać na rysunku 1 została przedsta-wiona w formie drzewa. Upraszcza to dostęp do informacji o poszczególnych toolbox’ach.Podczas wyszukiwania informacji przydają się zakładki Index – zostały tam zgromadzo-ne wszystkie słowa kluczowe. Wpisując słowa system zawęża listę słów rozpoczynającychsię od podanej przez nas frazy. Okno pomocy posiada też zakładkę Favorites możemyw niej umieszczać odniesienia do najbardziej interesujących nas zagadnień. Wystarczy wdrzewie Contents wybrać nam potrzebne zagadnienia i poprzez menu kontekstowe (prawyprzycisk myszy) wybrać opcję Add to Favorites.

System pomocy Matlab’a pozwala także na przeszukiwanie dokumentacji elektronicz-nej. Służy do tego zakładka Search w oknie pomocy. Możemy przeszukiwać dokumentacjęna kilka sposobów:

• opcja Full Text – przeszukuje treść dostępnych dokumentów pomocy• opcja Document Titles – umożliwia przeszukiwanie wśród tytułów zgromadzonych

dokumentów• opcja Function Name – szuka podanej frazy w bazie nazw funkcji dostępnych w

Matlab’ie• opcja Online Knownledge Base – przeszukiwanie zasobów sieciowych

Oprócz wygodnego graficznego systemu pomocy Matlab oferuje także specjalne pole-cenie help. Wszelkie informacje jakie uzyskamy są wyświetlane bezpośrednio w konsoli

jakiej korzysta Matlab innym jest zbiór metod numerycznych napisanych w Fortranie o nazwie LAPACKczy BLAS.

Page 3: Wstep do Matlab'a

Wstęp do Matlab’a 3

programu. Uzyskanie informacji nt. jakiegoś polecenia jest następujące np.:

>> help det

Po wydaniu tego polecenie otrzymamy na ekranie konsoli informacje na temat podanejfunkcji. Gdy pomoc dla danego polecenia nie będzie dostępna to Matlab wyświetli sto-sowny komunikat jak w poniższym przykładzie:

>> help fid2

No help comments found in fid2.m.

Jednak gdy dana funkcja rzeczywiście nie istnieje to otrzymamy inny komunikat:

>> help fff

fff.m not found.

Polecenie help jest w rzeczywistości funkcją którą należy utożsamiać np.: z pojęciem funk-cji w języku Pascal. Przyjmuje ona argumenty i zawraca wartość np.: msg=help(’sin’);oznacza, że funkcja help znajdzie informacje na temat sin a tekst pomocy zapisze dozmiennej msg.

Wersja 7.0 posiada dodatkowe polecenie o nazwie doc związane z systemem pomocy.Sposób użycia tego polecenia jest podobny do help np.: doc vpa spowoduje wyświetlenieinformacji za pośrednictwem okna Help, czyli z głównego systemu pomocy.

Wiele cennych informacji znajduje się także na stronie producenta programu Matlab3.Natomiast podstawowym forum wymiany informacji o tym programie jest strona MatLab-Central4. Znajduje się tam wiele odsyłaczy do innych miejsc w sieci oraz wiele przykładówstosowania różnych toolbox’ów.

2.2 Ścieżki przeszukiwań

Istotną czynnością jaką warto wykonać przed rozpoczęciem pracy jest utworzenie no-wego katalogu. W katalogu tym powinny znajdować się pliki z jakimi będziemy pracować.Aby zwiększyć wygodę pracy warto dołączyć wspomniany katalog do ścieżki przeszukiwań.Tą czynność wykonujemy w oknie Set Path (Rysunek 2). Aby to zrobić należy wybraćopcję Set Path z menu File a następnie dodać potrzebną ścieżkę za pomocą przycisku AddFolder... po czym zapisać zmiany przyciskiem Save. Pozwoli to korzystać z utworzonychprzez nas m-plików identycznie jak z pozostałych funkcji programu Matlab.

Ścieżkę można także dodać poprzez polecenie addpath. Wystarczy np.: wydać na-stępujące polecenie: addpath c:\mojepliki aby uzupełnić ścieżkę przeszukiwań o nowekatalog. W Matlab’ie wiele rzeczy można zrobić na różne sposoby. Nową ścieżkę można do-pisać także w następujący sposób: path(path,’c:\\mojepliki’). Czasami przydaje sięinformacja o tym w jakim katalogu został zainstalowany Matlab. Tą informację uzyskamyza pomocą polecenia: matlabroot.

3http://www.mathworks.com/4http://www.mathworks.com/matlabcentral/

Page 4: Wstep do Matlab'a

Wstęp do Matlab’a 4

Rysunek 2: Ścieżki przeszukiwań, czyliokno Set Path Rysunek 3: Okno preferencji

2.3 Uruchamianie i wyłączanie Matlab’a

Proces uruchamiania Matlab’a sprowadza się do kliknięcie na odpowiednią ikonę napulpicie, bądź wybrania z menu Start, jeśli Matlab został zainstalowany w środowiskuWindows, stosownej opcji. Matlab można także uruchomić za pomocą pliku bat. Znaj-duje się on w katalogu c:\matlab\bin, jeśli naturalnie program został zainstalowany wkatalogu c:\matlab.

Podczas pierwszego uruchomienia Matlab’a po instalacji dokonywana jest indeksacjatoolbox’ów. Operację tę warto powtórzyć jeśli instalowany były nowe toolbox’y. Wykonu-jemy ją np.: wydając polecenie rehash z odpowiednim parametrem:

>> rehash toolboxcache

Oczywiście operację uaktualnienia wykonać z poziomu menu. Należy z menu File wybraćopcję Preferences.... Ukaże się okno podobne do okna z rysunku 3 a następnie w sekcjiGeneral przyciskiem Update Toolbox Path Cache rozpoczyna operację uaktualnienia.

Zakończenie pracy z Matlab’em można wykonać na dwa sposoby. Wybierając z menuFile opcję Exit, bądź klikając na oknie przycisk zamknięcia okna lub kombinacją klawiszyALT-F4. Oprócz tych podstawowych możliwości zakończenie pracy można wymusić po-leceniem quit. Przyjmuje ono dwa argumenty: quit cancel odwołuje proces zamknięcianatomiast quit force definitywnie zamknie program. Otóż polecenie quit domyślnie szu-ka m-pliku o nazwie finish.m. Jeśli ten plik zostanie odszukany to wykonywana jest jegotreść. W owym pliku można nakazać odwołanie operacji zamknięcia podaną opcją cancel.Doskonałym przykładem może być poniższy kod który umieszczony w pliku finish.m wmomencie zamykania programu zada pytanie czy istotnie chce zamknąć program Matlab:

button = questdlg(’Zakończyć działanie programu?’, ’Pytanie’, ...’Tak’,’Nie’,’Nie’);

switch buttoncase ’Tak’,disp(’Zamykanie programu’);savecase ’Nie’,quit cancel;

end

Page 5: Wstep do Matlab'a

Wstęp do Matlab’a 5

W powyższym skrypcie występuje jedno bardzo istotne polecenie: save. Za jego pomocąmożna zapisać całą przestrzeń roboczą do pliku. Polecenie to przyjmuje cały szereg para-metrów np.: save roboczy.mat zapisze workspace do pliku roboczy o rozszerzeniu mat.Za wczytanie zapisanych danych jest odpowiedzialne polecenie load.

Podczas pracy z Matlab’em nader często przydaje się historia wszystkich poleceń ja-kie są wydawane z poziomu konsoli. Sam Matlab w oknie History przechowuje histo-rie wydanych poleceń. Można też nakazać programowi umieszczanie wszystkich danychwyświetlanych na konsoli (nie tylko historię wydanych poleceń ale także ich wyników)poleceniem diary. Polecenie to przyjmuje za argument nazwę pliku. Wydanie poleceniadiary moja_sesja.txt spowoduje, że w pliku moja sesja.txt będą zapisywane wszystkieinformacje jakie ukazują się na ekranie konsoli. Wyłączenie zapisu następuje po wydaniupolecenia: diary off.

2.4 Zmienne oraz funkcje specjalne

Jeśli wynik działania jakiejkolwiek operacji nie zostanie umieszczony w zmiennej toMatlab samodzielnie tworzy zmienną o nazwie ans. W tej zmiennej umieszczany jestwynik działania.

Matlab posiada też predefiniowane wartości do oznaczania wartości specjalnych np.:nieskończoności. Za pomocą litery j oznaczany jest czynnik liczby zespolony. Za pomocąskrótu NaN (ang. not a number) oznaczono sytuację, że dana wartość nie jest wartościąw sensie liczbowym. Podobnie przez Inf oznaczono nieskończoność.

Wartości NaN, Inf może stosować tak jak inne liczby czy ciągi znaków i porównywaćchoćby przy pomocy instrukcji if. Matlab oferuje także specjalne funkcje sprawdzająceczy podana zmienna lub wyrażenie jest określonego typu. Oto kilka przykładów:

• isinf – sprawdza czy wartość jest nieskończona• isfinite – przeciwieństwo poprzedniej funkcji bo sprawdzamy czy wartość jest

skończona• isnan – czy wartość jest typu NaN• isreal – czy wartość jest typu rzeczywistego• isfloat – czy wartość jest typu zmiennoprzecinkowego• isinteger – czy wartość jest całkowita

Matlab jako pakiet numeryczny definiuje kilkanaście różnych typów. Tabela 1 prezen-tuje podstawowe typy dostępne w Matlab’ie. Dokładniejsze informacje o typach możnauzyskać po wydaniu polecenia: help datatypes.

W przypadku różnych typów całkowitych czy zmiennoprzecinkowych ważne są warto-ści minimalne i maksymalne. W kontekście metod numerycznych jest to bardzo istotnainformacja. Poznajemy je za pomocą następujących funkcji: intmin, intmax, realmin,realmax.

Uzupełniającą te informacje jest funkcja eps. Jej wartością jest dokładność z jakąprzeprowadzane są obliczenia a dokładniej różnica pomiędzy podaną liczbą a następnąwiększą od niej liczbą zmiennoprzecinkową. Poniżej kilka przykładów zastosowania funkcjieps:

double precisioneps(1/2) = 2^(-53)eps(1) = 2^(-52)eps(2) = 2^(-51)

Page 6: Wstep do Matlab'a

Wstęp do Matlab’a 6

Typ Krótki opislogical Logical array of true and false valueschar Characters array

numeric Integer or floating-point arrayinteger Signed or unsigned integer array

int8 8-bit signed integer arrayuint8 8-bit unsigned integer arrayint16 16-bit signed integer arrayuint16 16-bit unsigned integer arrayint32 32-bit signed integer arrayuint32 32-bit unsigned integer arrayint64 64-bit signed integer arrayuint64 64-bit unsigned integer arrayfloat Single- or double-precision floating-point arraysingle Single-precision floating-point arraydouble Double-precision floating-point array

cell Cell arraystruct Structure array

function handle Function handle’class name’ Custom MATLAB object class or Java class

Tabela 1: Podstawowe typy danych w Matlab’ie

single precisioneps(single(1/2)) = 2^(-24)eps(single(1)) = 2^(-23)eps(single(2)) = 2^(-22)

2.5 Format oraz funkcje wyjścia

Standardowo wyniki obliczenia w Matlab’ie są wyświetlane do pięciu miejsc po przecin-ku. Odpowiada to poleceniu format short. Jest to tzw. format stałoprzecinkowy. Zwięk-szenie dokładności do piętnastu miejsc po przecinku wymaga podania opcji long dlapolecenia format. Polecenie to pozwala na wyświetlanie liczba w postaci szesnastkowej(format hex) oraz w postaci ułamków format rat jednak tylko dla małych liczb.

Większa dokładność obliczeń można wymusić poprzez polecenie vpa np.:vpa(’pi’, 1000) oblicza wartość liczby π do tysięcznego miejsca po przecinku.

Choć po wpisaniu samej nazwy zmiennej Matlab wyświetli wartość jaką jest w niejprzechowywana, w skryptach taki sposób wyświetlania wartości nie jest poprawny. Dowyświetlania własnych komunikatów można zastosować kilka poleceń np.: disp, sprintflub fprintf.

Polecenie disp przyjmuje za argument wyrażenie lub zmienną przeznaczoną do wy-świetlenia, np.: disp(a). Dopuszczalnym argumentem jest ciąg znaków objęty apostrofa-mi, np.: disp(’ jakis tekst ’). Gdy istnieje potrzeba wyświetlenia kilku zmiennych tonależy stosować operator konkatencji ciągów znaków reprezentowany przez dwa nawiasykwadratowe ’[’ oraz ’]’. Jednak należy w przypadku każdej wykonać konwersję z wartościliczbowej na tekst za pomocą funkcji num2str (bądź int2str):

Page 7: Wstep do Matlab'a

Wstęp do Matlab’a 7

Rysunek 4: Okno edytora m-plików

x=1; y=2; z=3;disp([num2str(x) ’,’ num2str(y) ’,’ num2str(z)])

Więcej możliwości formatowania reprezentacji liczb daje funkcja przeniesiona z językaC o nazwie sprintf. Jednak przygotowuje ona tylko i wyłącznie ciąg znaków zgodniez parametrami. Do ostatecznego wyświetlenia trzeba stosować polecenie disp. Przykładformatowania z wykorzystaniem polecenia sprintf jest następujący:

x=1; y=2; z=3;disp(sprintf(’%d %d %d’,x,y,z))

W przypadku ostatniej funkcji fprintf, wystarczy podać argument w postaci łańcuchaznaków, aby wyświetlić komunikat bezpośrednio na ekranie:

a=3; b=4;fprintf(’Mamy następujące liczby a=%d, b=%d.\n’, a, b);

Więcej informacji help fprintf.

2.6 Tworzenie m-plików

Matlab jest środowiskiem interaktywnym tzn. z poziomu konsoli wydajemy polecenia.Jednak wiele z tych poleceń to nazwy skryptów, czyli plików zawierających polecenia dowykonania przez Matlab’a. Takie pliki nazywa się m-plikami. Istnieją dwa rodzaje tychplików tzw. skrypty gdzie instrukcje wykonywane są kolejno linia po linii począwszy odpoczątku pliku. Drugi rodzaj to m-funkcje. W pliku tworzona jest specjalna funkcja, któraprzyjmuje argumenty. W ten sposób zostały opracowane niemal wszystkie dodatkowepakiety dostępne w systemie.

Tworzenie m-funkcji jest tematem jednego z następnych laboratoriów i zostanie tamdokładniej omówione. Jednakże tworzenie skryptów jest bardzo łatwe. Z menu File należywybrać opcję New a z menu jakie się ukaże opcję M-File. Ukaże się okno podobne dookna z rysunku 4. Po wpisaniu treści m-pliku, można go natychmiast uruchomić/wykonaćnaciskając klawisz F5, wpierw zapisując go pod jakąś nazwą (bez spacji) z rozszerzeniem’.m’ np. ’zad1.m’. Można go również uruchomić z poziomu konsoli wpisując jego nazwębez rozszerzenia, czyli ’zad1’ (katalog zawierający ten plik musi być bieżącym katalogiemlub musi być wpisany na listę ścieżek przeszukiwań).

Page 8: Wstep do Matlab'a

Wstęp do Matlab’a 8

3 Octave – darmowy odpowiednik

Program Octave5 to darmowy odpowiednik programu Matlab. Choć nie jest on takbardzo rozbudowany jak Matlab to ma pewne zalety. Po pierwsze jest programem znaczniemniejszym przez co nie wymaga dużej ilości pamięci RAM czy szybkiego procesora. Pra-cuje bardzo sprawnie na starszych komputerach. Posiada pełny kod źródłowy co pozwalana pełna modyfikację tego pakietu i dopasowanie go do własnych potrzeb.

Octave nie oferuje po instalacji tak dużego zbioru funkcji jak Matlab ale z punktuwidzenia metod numerycznych obydwa pakiety oferują podobne możliwości. Przy czym wrzeczywistości społeczność użytkowników tego programu opracowała wiele dodatkowychtoolbox’ów. Niestety dodatkowe funkcje wymagają więcej wysiłku w ich instalacje.

Pakiet Octave najlepiej funkcjonuje w systemie Unix w tym oczywiście także pod Li-nux’em. W nim też najłatwiej instalować dodatkowe pakiety. Wydajność pakietu wbrewpozorom nie jest niższa niż Matlab’a to z tego względu, że wykorzystywane są te samezbiory metod numerycznych zgromadzone w pakietach LAPACK, BLAS oraz Atlas. Cowięcej mogą one działać nawet sprawniej ponieważ Octave jest pozbawiony wielu dodat-ków co niewątpliwie wpływa bardzo dobrze na jego szeroko pojętą wydajność.

Sposób pracy z Octave jest identyczny jak z Matlab’em. Dostępny jest tryb interaktyw-ny, można też tworzyć m-pliki. Na stronie domowej tego projektu dostępna jest obszernadokumentacja.

4 Zadania

1. Odszukać informacje o funkcji det za pomocą graficznego interfejsu (poszukać zapomocą zakładek Index oraz Search). Co wyznacza funkcja det?

2. Poszukać informacji o funkcji fsolve za pomocą okna Help.3. Spróbować wykonać przykłady związane z funkcją fsolve.4. Wyszukać informacje o funkcji plot za pomocą Search we wszystkich czterech ka-

tegoriach.5. Jakie informacje otrzymujemy po wydaniu polecenia help.6. Przeczytać informacje uzyskane z polecenia: help help.7. Uzyskać informacje o poleceniach: lookfor, what, which, more, who. Podać przy-

kłady ich zastosowań.8. Polecenie help (jak i kilka innych) występuje w dwóch formach. Jakie są to formy i

jakie mają przeznaczenie.9. Sprawdzić jak działają klawisze kursora w konsoli programu Matlab.

10. Odszukać informacje na temat poleceń systemu plików: dir, cd, ls, pwd, copyfile,delete, fileattrib, movefile, mkdir, rmdir, exist.

11. Jakie jest przeznaczenie poleceń: clear, clc, home12. Sprawdzić działanie funkcji demo.13. Wykonać następujące polecenia w Matlab’ie:

[x,y] = meshgrid(-3:1:3);z = peaks(x,y);surf(x,y,z)

Zapoznać się z funkcjami okna wykresów jakie się pojawiło.

5Program można odszukać pod adresem http://www.octave.org. Jest on też dostępny w wielu dystry-bucjach Linux’a np.: Fedora, Ubuntu, Debian.

Page 9: Wstep do Matlab'a

Wstęp do Matlab’a 9

14. Utworzyć plik finish.m z treścią podaną w poprzednich punktach i sprawdzić czyistotnie blokuje on proces wyłączanie programu?

15. Sprawdzić jak działają polecenia save, load oraz diary.?16. Polecenie save posiada możliwość zapisu wybranych zmiennych podać przykład jego

zastosowania.17. Sprawdzić na czym polegają różnice pomiędzy poleceniami path oraz addpath.18. Po co stosujemy polecenie rehash? Jakie inne argumenty można zastosować?19. Napisać krótki skrypt (m-plik) który pokaże wartości minimalne i maksymalne dla

wszystkich podstawowych typów liczbowych.20. Funkcje num2str oraz int2str wykonują tą samą operację dokonują konwersji liczby

na ciąg znaków. Różnią się jednak istotnym detalem. Jakim?

Literatura

[1] Bjarck Ake i Dahlquist Germund. Metody numeryczne. PWN, Warszawa, 1987.[2] Jerzy Brzózka i Lech Dorobczyński. Programowanie w MATLAB. Warszawa,

Wydanie I, 1998.[3] Zenon Fortuna, Bohdan Macukow i Janusz Wąsowski. Metody numeryczne. WNT,

Warszawa, 1995.[4] Jerzy Klamka i in. Metody numeryczne. Politechnika Śląska, Gliwice, 1998.[5] David Kincaid i Ward Cheney. Analiza numeryczna. WNT, Warszawa, 2006.[6] Anna Kamińska i Beata Pańczyk. Matlab. Ćwiczenia z . . . , Przykłady i zadania.

Warszawa, Wydanie I, 2002.[7] Wanat Kazimierz. Algorytmy numeryczne. Helion, Gliwice, 1994.[8] Bogumiła Mrozek i Zbigniew Mrozek. MATLAB i Simulink. Poradnik użytkownika.

Wydanie II, 2004.[9] Jurij Povstenko. Wprowadzenie do metod numerycznych. Akademicka Oficyna

Wydawnicza EXIT, Warszawa, Wydanie drugie poprawione i uzupełnione, 2005.[10] Rudra Pratap. MATLAB 7 dla naukowców i inżynierów. PWN, 2007.[11] Wiesława Regel. Wykresy i obiekty graficzne w MATLAB. Warszawa, Wydanie I,

2003.[12] Marcin Stachurski. Metody numeryczne w programie Matlab. Warszawa, Wydanie I,

2003.