Kier. MTR Programowanie w MATLABie Laboratorium Ćw. Wprowadzenie do środowiska MATLAB. Zapis wyrażeń arytmetycznych. Matematyczne funkcje biblioteczne. Tworzenie wektorów i macierzy Wprowadzenie. Ogólna charakterystyka programu MATLAB MATLAB jest rozwijanym od ponad 3 lat przez firmę Mathworks pakietem programów przeznaczonych do obliczeń naukowych i inżynierskich. Najważniejszym elementem pakietu jest interpreter języka wysokiego poziomu przeznaczonego głównie do realizacji algorytmów numerycznych. Podstawowym typem danych stosowanym w MATLABie są tablice, w szczególności tablice dwuwymiarowe nazywane macierzami, dla których zaimplementowano szereg operacji i algorytmów numerycznej algebry linowej (znalazło to swoje odzwierciedlenie w nazwie programu pochodzącej do słów MATri LABoratory). Środowisko MATLAB wraz z licznymi, ciągle rozwijanymi i udoskonalanymi przybornikami (Toolbo) zawierającymi funkcje pozwalające na rozwiązywanie typowych zadań obliczeniowych z najróżniejszych dziedzin nauki i techniki, stało się w niektórych zastosowaniach niemal standardem. Wyniki obliczeń mogą być prezentowane w postaci różnego typu wykresów a także animacji. Możliwe jest także budowanie aplikacji wykorzystujących interfejs graficzny. MATLAB pozwala na wymianę danych z innymi aplikacjami (np. arkuszem MS Ecel) oraz wykorzystywanie kodu zapisanego w innych językach programowania, jak Fortran i C. Zwykle dwa razy do roku pojawia się nowa wersja ciągle udoskonalanego i rozszerzanego oprogramowania. Poszczególne wersje oznaczane są literą R, numerem roku ukazania się danej wersji i małą literą np. R8a. Ze względu na stały rozwój środowiska, programy i pliki z danymi przygotowane w nowszych wersjach mogą nie być kompatybilne ze starszymi wersjami. Począwszy od wersji R6a MATLAB w wersji dla komputerów PC dostępny jest jedynie dla platform z procesorami 64-bitowymi. Użytkowanie programu ułatwia m. in. rozbudowany system pomocy i wsparcia ze strony producenta oraz możliwość wymiany doświadczeń między użytkownikami m. in. za pośrednictwem serwisu MATLAB Central, możliwość uczestniczenia w webinariach. Korzystając z wyszukiwarek internetowych można także dotrzeć do szeregu informacji umieszczanych przez użytkowników na forach dyskusyjnych, mediach społecznościowych i in.. Podstawy pracy z programem MATLAB Po zainstalowaniu i uruchomieniu program okno programu MATLAB przyjmuje domyślny wygląd (Default) i zależy on od wersji programu. Zasadniczo jednak okno aplikacji jest podzielone na szereg okien. Listę podstawowych okien i ich opis ich przeznaczenia zawiera tab.. Nazwa okna Command Window Editor Workspace Command History Current Folder Figure Variables Tab.. Podstawowe okna środowiska MATLAB Zadanie Główne okno aplikacji służące do wprowadzania i wykonywania instrukcji i programów, wyświetlania wyników ich realizacji, pomocy i in. Opracowywanie plików skryptowych i funkcyjnych Zawartość przestrzeni roboczej, tj. lista aktualnie wykorzystywanych zmiennych Rejestrowanie poleceń wydawanych w linii poleceń Zawartość bieżącego katalogu roboczego Wyświetlanie wyników instrukcji graficznych Możliwość przeglądania i edytowania wartości zmiennych
Help Wyświetlanie pomocy na wybrany temat Możliwa jest, w zależności do potrzeb czy upodobań, modyfikacja wyglądu aplikacji przez dodawanie i zamykanie poszczególnych okien oraz zmianę ich położenia, rodzajów i wielkość czcionek oraz koloru. Modyfikacji środowiska można dokonywać za pomocą poleceń Layout i Preferences zgrupowanych w sekcji ENVIRONMENT zakładki HOME. W trakcie laboratorium zaleca się pracę z wykorzystaniem widoku domyślnego. Okno poleceń Aby móc wykonywać polecenia, uruchamiać programy, określać parametry środowiska itd., należy zapoznać się z zasadami pracy z oknem Command Window. Jego najważniejszym elementem jest linia poleceń. Dalej przedstawiono najważniejsze zasady korzystania z niej: Wprowadzanie poleceń jest możliwe, gdy kursor znajduje się obok znaku zachęty >>, Polecenie jest wykonywane po jego wpisaniu i wciśnięciu klawisza Enter, Można wprowadzić więcej niż jedno polecenie na raz. Należy je oddzielić przecinkami. Po zatwierdzeniu klawiszem Enter będą one wykonywane w kolejności ich wprowadzenia (od lewej do prawej), Niekiedy zachodzi konieczność zapisania długiego polecenia nie mieszczącego się w jednej linii. Kontynuacja zapisu polecenia w kolejnych liniach możliwa jest przez umieszczenie znaku (trzy kropki); długość polecenia jest ograniczona do 496 znaków, Wydanie nieprawidłowego polecenia (np. błąd składniowy, odwołanie się do nie istniejącej funkcji lub zmiennej) spowoduje wyświetlenie komunikatu o błędzie. Po uruchomieniu polecenia wyjście tekstowe przez nie generowane wyświetlane jest w oknie poleceń; umieszczenie średnika (;) na końcu polecenia wyłącza tą możliwość, jest to przydatne, gdy np. rezultatem wykonania polecenia jest macierz o dużej liczbie elementów, Rozpoczęcie polecenia od znaku % spowoduje potraktowanie ciągu znaków po nim występującego jako komentarza, Użycie polecenia clc pozwala na usunięcie tekstu w oknie poleceń i ustawienie kursora w jego lewym, górnym rogu, zaś wykonanie polecenia home ustawia kursor w lewym górnym rogu okna poleceń (bez usuwania tekstu), Stosunkowo często zachodzi potrzeba przywołania poprzednio wykonanych poleceń np. w celu ich korekty lub powtórzenia. Za pomocą klawiszy kierunkowych, możliwe jest przeszukiwanie listy wcześniej wydanych poleceń. Wpisanie początkowych liter polecenia i użycie klawisza pozwoli na odnalezienie polecenia zaczynającego się od podanych liter. Zamknięcie programu MATLAB powoduje utratę zawartości okna poleceń. Można tego uniknąć za pomocą polecenia diary. Powoduje ono otwarcie pliku tekstowego o domyślnej nazwie diary, do którego dopisywane są wszystkie polecenia i wyniki ich wykonania w formie tekstowej. Nie dotyczy to wyników graficznych, które muszą być zapamiętane w inny sposób. Polecenie diary off powoduje przerwanie zapisywania. Zakończenie sesji w programie MATLAB możliwe jest przez zamknięcie okna aplikacji bądź przez wydanie polecenia quit lub eit. Katalog roboczy W trakcie instalacji oprogramowania ustalane są ścieżki dostępu do katalogów bibliotek standardowych funkcji i skryptów wchodzących w skład uporządkowanych tematycznie przyborników (Toolbo). Ich wykonanie wymaga jedynie podania nazwy w linii poleceń lub w innym pliku. Listę tych katalogów można przejrzeć za pomocą polecania path. Skrypty i funkcje opracowane przez użytkownika i zapisane w postaci plików tekstowych (do ich opracowania można więc wykorzystać dowolny edytor ASCII) powinny być umieszczone w folderze roboczym (Current Folder), gdyż tylko wtedy będzie możliwe ich wykonanie. Do wyboru katalogu roboczego można użyć paska folderu znajdującego się pod wstążką menu głównego. Zawartość tego katalogu wyświetlana jest w oknie Current Folder.
Z poziomu linii poleceń, a także skryptów i funkcji katalog roboczy można wybrać za pomocą polecenia cd ścieżka dostępu, np. cd c:\obliczenia\ Gdy w ścieżce dostępu występuje katalog (lub katalogi) ze spacją w nazwie, całą ścieżkę należy umieścić w parze pojedynczych apostrofów: cd c:\moje obliczenia\ lub cd ( c:\moje obliczenia\ ) Nie należy używać w ścieżkach dostępu do katalogów roboczych polskich znaków (ą, ę, ó itd.) Wykaz przydatnych poleceń systemowych przedstawia tab.. Polecenie pwd dir dir scieżka dostepu cd \ cd.. del nazwapliku Tab.. Wybrane polecenia systemowe Operacja zwraca pełną ścieżkę dostępu do aktualnego katalogu roboczego Wyświetlenie zawartości bieżącego katalogu roboczego Wyświetlenie zawartości katalogu określonego w ścieżce dostępu Zmiana katalogu roboczego na katalog główny Zmiana katalogu roboczego na katalog o poziom wyższy w strukturze katalogów Usunięcie pliku Demonstracja działania programu i dodatkowe informacje Z obsługą Matlaba najszybciej można się zapoznać wywołując program demonstracyjny» demo Uruchamia ono zestawy programów pokazujących podstawowe operacje MATLABa. Dodatkowe informacje o danej wersji Matlaba można uzyskać poprzez wykonanie takich poleceń jak : whatsnew, info, ver, intro, help help Z możliwościami oferowanymi przez MATLABa w zakresie grafiki można wstępnie zapoznać się, wykonując próbny rysunek wielomianu dwóch zmiennych, za pomocą polecenia peaks. Szybkość działania własnego komputera w środowisku MATLABa można poznać za pomocą polecenia testującego bench. Bada ono oddzielnie czasy wykonywania typowych algorytmów. Może służyć do oceny tego, czy posiadany komputer jest odpowiednio skonfigurowany z punktu widzenia efektywności obliczeń i przetwarzania grafiki Zmienne w MATLABie Podstawowym typem zmiennej w MATLAB jest tablica, w szczególności tablica dwuwymiarowa, czyli macierz. Wartości skalarne są traktowane jako macierze jednoelementowe. Inaczej niż w językach programowania ogólnego przeznaczenia (np. język C) nie deklaruje się zmiennej poprzez podanie jej nazwy i typu. Typ zmiennej jest określany po obliczeniu wartości wyrażenia i podstawieniu go za zmienną, tj. przy wykonaniu operacji zmienna = wyrażenie W przypadku, gdy wyrażenie nie zostało przyporządkowane konkretnej zmiennej, MATLAB domyślnie utworzy zmienną o nazwie ans (z ang. answer) i podstawi pod nią wynik tego wyrażenia. Wartość zmiennej jest cały czas dostępna w przestrzeni roboczej (listę zmiennych znajdujących się tej przestrzeni można śledzić w oknie Workspace). Kolejna operacja przypisania spowoduje, że dotychczasową jej wartość zastąpi nowa. W nazywaniu zmiennych należy przestrzegać następujących najważniejszych zasad: Nazwa zmiennej musi zaczynać się od litery i może zawierać litery, cyfry i podkreślnik ( _ ); nie może być też dłuższa niż 64 znaki, 3
Jako nazw zmiennych nie można używać słów zastrzeżonych, jak np. break, case, end, for, catch, classdef, continue, else, elseif, function, global, if, otherwise, parfor, persistent, return, spmd, switch, try, while, Należy unikać stosowania nazw zmiennych predefiniowanych jak np. ans, pi, eps, inf, i, j, NaN, Należy unikać nazw zmiennych pokrywających się z nazwami wbudowanych funkcji i zaczynających się na is, Wielkość liter jest rozróżniana, np. zmienne, XX, X będą traktowane jako zmienne o różnych nazwach. Listę zmiennych znajdujących się w przestrzeni roboczej wyświetla się za pomocą polecenia who i whos. Usunięcie zbędnych zmiennych w celu zwolnienia pamięci jest możliwe za pomocą polecenia clear lista zmiennych, np. clear, y Usunięcie wszystkich zmiennych z przestrzeni roboczej możliwe jest za pomocą polecenia clear all. Format wyświetlania liczb Domyślnie wyniki obliczeń w oknie poleceń wyświetlanie są w formacie short, tj. pięć cyfry wyniku wraz z wykładnikiem. Niekiedy jednak zachodzi potrzeba wyprowadzania wyników z większą precyzją. W tab. 3 przedstawiono wybrane polecenia określające sposób wyświetlania wyników. Tab. 3. Wybrane polecenia formatowania wyświetlania wyników Polecenie Wyprowadzanie wyniku format short 5 cyfr, stałoprzecinkowy dla liczb z zakresu od -3 do 3, w innym przypadku jak format short e format short e 5 cyfr, zmiennoprzecinkowy format short g 5 cyfr, stało- lub zmiennoprzecinkowy format long 5 cyfr, stałoprzecinkowy dla liczb z zakresu od -3 do, w innym przypadku jak format long e format long e 5 cyfr, zmiennoprzecinkowy format long g 5 cyfr, stało- lub zmiennoprzecinkowy format rat Przybliżenie wyniku w postaci ilorazu (ułamka) dwóch liczb całkowitych format bank Dwie cyfry rozszerzenia dziesiętnego Obliczanie wartości wyrażeń Najprostsze wyrażenia mają postać działań arytmetycznych składających się z dodawania (+), odejmowania (-), mnożenia (*), dzielenia (/), potęgowania (^). MATLAB można więc w najprostszym przypadku wykorzystać jako kalkulator. Poszczególne działania mogą być ujmowane w nawiasy okrągłe ( ), przy czym nawiasy mogą być zagnieżdżone. Kolejność działań jest taka sama jak w arytmetyce, tj. najpierw wykonywane są działania w nawiasach (począwszy od najbardziej zagnieżdżonych), potem wykonywane jest potęgowanie, następnie mnożenie i dzielenie (ten sam priorytet), a na końcu dodawanie i odejmowanie. Działania są zawsze wykonywane od strony lewej do prawej. Należy pamiętać przy pisaniu liczb, że ich miejsca dziesiętne są oddzielane w liczbie kropką, a nie przecinkiem. Błędne wpisanie przecinka zamiast kropki spowoduje, że MATLAB potraktuje ten zapis jako dwie liczby całkowite, zamiast jednej liczby z rozszerzeniem dziesiętnym. Przykład obliczenia wartości wyrażeń arytmetycznych:» =.75; y=((-3/4)^3*(+.5)^)-8*9;» =.75, y=((-3/4)^3*(+.5)^), y=-8*9, y=y+y =.75 y = 7 y = 4
-7 y = Możliwe jest też wykonywanie działań na liczbach zespolonych. W MATLABie liczby zespolone są zapisywane z wykorzystaniem symbolu i lub j. Polecenie z= 3+4i lub z= 3+4j daje w wyniku z = 3. + 4.i Można jednak zdefiniować jednostkę urojoną w przestrzeni roboczej i zapisywać liczby zespolone z wykorzystaniem mnożenia. Przykładowo j=sqrt(-); z=3+j*4; z = 3. + 4.i Należy zwrócić uwagę, że obliczanie pierwiastka kwadratowego z ujemnej liczby rzeczywistej nie prowadzi do błędu, a uzyskana w wyniku liczba będzie traktowana jako zespolona. Dla wyrażeń z argumentami zespolonymi obowiązują takie same zasady jak w przypadku wyrażeń z argumentami rzeczywistymi. Matematyczne funkcje biblioteczne W obliczeniach wykorzystywać można także rozmaite funkcje matematyczne, zarówno biblioteczne jaki i te, utworzone przez użytkownika. W tab. 4 przedstawiono listę podstawowych funkcji matematycznych wbudowanych i zmiennych predefiniowanych. Tab. 4. Podstawowe wbudowane funkcje matematyczne Funkcja Opis abs wartość absolutna lub moduł liczby zespolonej angle argument liczby zespolonej atan arcus tangens ceil zaokrąglenie w kierunku + conj sprzężenie liczby zespolonej cos cosinus ep eksponent, e fi zaokrąglenie w kierunku zera floor zaokrąglenie w kierunku - imag część urojona liczby zespolonej inf nieskończoność, np. wynik dzielenia przez log logarytm naturalny log logarytm dziesiętny ma największa wartość min najmniejsza wartość NaN nie liczba, np. dzielenie przez pi liczba real część rzeczywista liczby zespolonej rem reszta z dzielenia round zaokrąglenie do najbliższej liczby całkowitej sign znak parametru funkcji (signum) sin sinus, sqrt pierwiastek kwadratowy sum suma eps najmniejsza różnica między liczbami (ok.. -6 ) i, j stosowane przy zapisie części urojonej liczb zespolonych 5
W przypadku wątpliwości przy stosowaniu którejś z funkcji możliwe jest uzyskanie informacji na jej temat za pomocą polecenia help. Przykładowo help sqrt powoduje wypisanie następujących informacji dotyczących funkcji obliczania pierwiastka kwadratowego sqrt Square root. sqrt(x) is the square root of the elements of X. Comple results are produced if X is not positive. See also sqrtm, realsqrt, hypot. Reference page for sqrt Other functions named sqrt Polecenie which nazwa_m-pliku lub which nazwa_funkcji powoduje wyświetlenie ścieżki dostępu do m-pliku lub funkcji (nazwy podaje się bez rozszerzenia *.m). Przykładowo» which sum built-in (C:\Program Files\MATLAB\R5b\toolbo\matlab\datafun\@double\sum) 3. Tworzenie wektorów i macierzy oraz dostęp do ich elementów Tworzenie wektorów Wektor jest macierzą jednowymiarową zawierającą liczby zorganizowane w wiersz lub kolumnę. Utworzyć je można przez podanie wartości. W przypadku wektorów wierszowych poszczególne elementy oddziela się spacjami lub przecinkami, zaś kolumnowych średnikami. Przykładowo: a) wektor wierszowy: VW = [,, 3] VW = 3 b) wektor kolumnowy: VK = [ ; ; 3] VK = 3 W MATLABie możliwe jest generowanie wektorów, których sąsiednie elementy różnią się od siebie o stałą wartość. Do tego celu stosuje się notację dwukropkową (stosowanie nawiasów kwadratowych nie jest w tym przypadku konieczne): i:k:n generowanie wektora wierszowego o elementach [i i+k i+*k i+3*k i+m*k], gdzie m=fi((n-)/k, i:n generowanie wektora wierszowego o elementach [i i+ i+ k+3 i+m ], gdzie m=fi(n) Przykładowo >> V = :: V = 6
4 6 8 >> V = :5.5 V = 3 4 5 Wektor n elementowy z równomiernie rozłożonymi elementami w zakresie od min do ma można wygenerować za pomocą funkcji linspace(min, ma, n). >> V=linspace(,,5) V =.5 5. 7.5. Tworzenie macierzy Elementy macierzy należy podawać w nawiasach kwadratowych. Poszczególne elementy muszą być rozdzielone spacjami, a wiersze - średnikami, np. A = [ 3; ; ] Jeżeli wiersze nie są rozdzielone średnikami, to muszą być pisane w oddzielnych liniach A = [ 3 ] Elementami macierzy mogą być także zmienne reprezentujące skalary, wektory jak i inne macierze. Przykładowo dla macierzy A=[ ; 3 4]; B=[3 4; 5 6]; mamy >> C=[A;B] C = 3 4 3 4 5 6 >> D=[A,B] D = 3 4 3 4 5 6 Należy pamiętać, aby liczba elementów we wszystkich wierszach (kolumnach) była jednakowa. Przykładowo, polecenie >> A=[ 3; 3 4] Spowoduje wyświetlenie komunikatu o niespójności wymiarów macierzy: Dimensions of matrices being concatenated are not consistent. Szczególnym przypadkiem macierzy jest macierz pusta, tj. macierz nie zawierająca żadnych elementów: A = [ ] Często przydatna jest możliwość utworzenia macierzy o określonych rozmiarach w celu przydzielenia pamięci lub też macierzy o szczególnych cechach, np. macierze Pascala, Toeplitza. MATLAB posiada wiele tego typu funkcji. Jednymi z najczęściej stosowanych są następujące funkcje: zeros(n,m) Macierz o n wierszach i m kolumnach wypełniona zerami, >> mac = zeros(,3) mac = 7
ones(n,m) Macierz o n wierszach i m kolumnach wypełniona jedynkami >> mac=ones(,3) mac = eye(n,m) Macierz o n wierszach i m kolumnach z jedynkami na głównej przekątnej i pozostałymi elementami równymi zero: >> mac=eye(,3) mac = W przypadku, gdy powyższe funkcje są wywoływane z jednym parametrem, tj. zeros(n), ones(n) i eye(n), wtedy generowana jest macierz kwadratowa o wymiarze n n. >> mac=eye(3) mac = Inne, częściej wykorzystywane funkcje biblioteczne to tworzenia macierzy przedstawia tab. 5. Funkcja rand(n) randn(n) diag() repmat(a, n, m) reshape(a, n, m) Tab. 5. Wybrane funkcje tworzenia macierzy Opis macierz o wymiarze n n wypełniona liczbami pseudolosowymi z przedziału <,> o rozkładzie jednostajnym macierz o wymiarze n n wypełniona liczbami pseudolosowymi o rozkładzie normalnym ze średnią i wariancją macierz diagonalna ze składnikami wektora na głównej przekątnej (pozostałe elementy są równe zeru) macierz powstała przez powielenie podmacierzy A m razy w poziomie i n razy w pionie macierz o n wierszach i m kolumnach z elementów branych kolejno kolumnami z macierzy A Organizacja i dostęp do elementów macierzy Należy pamiętać, że macierz w pamięci operacyjnej komputera jest pamiętana kolejno kolumnami, od pierwszej do ostatniej. W przypadku macierzy A=[ 6 9; 4 8; 3 5 ]; polecenie A(:) pozwala zobrazować rozmieszczenie elementów macierzy w pamięci. >> A(:) ans = i=,j= k= 4 i=,j= k= 3 i=3,j= k=3 6 i=,j= k=4 i=,j= k=5 5 i=3,j= k=6 9 i=,j=3 k=7 8 i=,j=3 k=8 i=3,j=3 k=9 Element w 3-im wierszu i -iej kolumnie może być zidentyfikowany na dwa sposoby a3=a(3,) a3 = 5 8
lub a3=a(6) a3 = 5 Numer k w pamięci elementu a ij należącego do macierzy o m-wierszach oraz n-kolumnach jest obliczany w następujący sposób k = (j-)*m + i = (-)*3 + 3 = 6 Należy zwrócić uwagę, że w MATLABie indeksy tablic mogą być jedynie niezerowymi liczbami naturalnymi. Do wybierania wierszy, kolumn oraz podmacierzy można użyć notacji dwukropkowej. Podstawowe zasady jej stosowania przedstawia tab. 6. Zapis A(:, n) A(n, :) A(:, m:n) A(m:n, :) A(m:n, p:q) Tab. 6. Notacja dwukropkowa w wybieraniu elementów macierzy Elementy macierzy do których odnosi się zapis Wszystkie wiersze kolumny n Wszystkie kolumny wiersza n Wszystkie wiersze w kolumnach od m do n Wszystkie kolumny w wierszach od m do n Elementy w wierszach od m do n i kolumnach od p do q Przykładowo: -ga kolumna macierzy A zostaje przypisana do zmiennej B >> B=A(:,) B = 6 5 3-ci wiersz macierzy A >> C=A(3,:) C = 3 5 podmacierz >> D=A(:3,:) D = 4 3 5 Na oznaczenie ostatniego wiersza lub kolumny używa się słowa kluczowego end: >> C=A(end,:) C = 3 5 Określenie wymiarów macierzy Aktualną liczbę elementów wektora zwraca funkcja length: >> =:5; >> n= length(). n = 5 W przypadku konieczności ustalenia aktualnej liczby wierszy i kolumn macierzy należy zastosować funkcję size. Wywołanie [m,n] = size(a); spowoduje, że w zmiennej m znajdzie się liczba wierszy a w n liczba kolumn macierzy A. Przykładowo: >> A=[ 3; 4 5 6]; >> [m,n] = size(a) m = n = 3 9
Ćwiczenie laboratoryjne Sprawdzić w trakcie pracy z programem działanie poleceń opisanych we Wprowadzeniu. Zadania laboratoryjne. Obliczyć wartość całki oznaczonej b a d Dla zadanych granic całkowania, np. a= i b=. Całka nieoznaczona wyrażenia podcałkowego jest równa (C stała całkowania): C d arctg ln. Używając funkcji zeros, ones i eye i rand za pomocą jednej instrukcji utworzyć w pamięci roboczej macierze ( - liczby losowe o rozkładzie równomiernym z zakresu (, )):, B A 3. Dla macierzy 4 7 3 5 8 4 3 6 9 5 Y, znaleźć bez użycia komputera macierze A, B i C, przy czym: A = Y(:3, :4) B = Y(:, :end) C = Y([ ], [3 4]) Sprawdzić uzyskane wyniki z wykorzystaniem MATLABa.