Elementy programowania w MATLABIE Opracował Dr inż. Mirosław Kwiesielewicz Wydział Elektrotechniki i Automatyki Politechnika Gdańska email: mkwies@ely.pg.gda.pl url: http://www.ely.pg.gda.pl/~mkwies/
M. Kwiesielewicz. Elementy programowania w MATLABIE Wprowadzenie Pliki zawierające kod języka programowania MATLABA nazywają się M-plikami: funkcje, które na podstawie wprowadzonych argumentów zwracają wynik, skrypty, wykonujące sekwencje komend MATLABA; M-pliki tworzy się za pomocą edytora tekstowego Wykonanie M-pliku poprzez wywołanie go z poziomu poleceń MATLABA 2017-04-17 M. Kwiesielewicz. Elementy programowania w MATLABIE
Charakterystyka M-plików Skrypty Nie posiadają argumentów wejściowych, ani wyjściowych Operują na danych w przestrzeni roboczej Wygodne, kiedy często należy wykonać sekwencję tych samych poleceń Funkcje Mogą posiadać argumenty wejściowe i wyjściowe Wewnętrzne zmienne są lokalne dla funkcji Wygodne do rozszerzenia MATLABA o własne aplikacje 2017-04-17 M. Kwiesielewicz. Elementy programowania w MATLABIE
M. Kwiesielewicz. Elementy programowania w MATLABIE Struktura funkcji function f = fact(n) % FACT Factorial % FACT(N) return ... % Put simply, FACT(N).... f=prod(1:n); Linia definicji. Nazwa funkcji oraz argumenty wejściowe i wyjściowe Linia H1. Wykorzystywana przez polecenie lookfor Tekst pomocy. Wyświetlany przy pomocy polecenia help, łącznie z linią H1. Ciało funkcji. Kod obliczeniowy 2017-04-17 M. Kwiesielewicz. Elementy programowania w MATLABIE
M. Kwiesielewicz. Elementy programowania w MATLABIE Skrypty Skrypty są najprostszym rodzajem M-plików. Nie posiadają ani argumentów wejścia, ani wyjścia Są wygodne do wielokrotnego wykonywania sekwencji komend Operują na danych z przestrzeni roboczej (WorkSpace) lub tworzą nowe dane Utworzone dane również pamiętane są w przestrzeni roboczej Po zakończeniu działania skryptu wszystkie dane pozostają w przestrzeni roboczej 2017-04-17 M. Kwiesielewicz. Elementy programowania w MATLABIE
M. Kwiesielewicz. Elementy programowania w MATLABIE Przykładowy skrypt % An M-file script ...... theta = -pi:0.01:pi; rho(1,:) = 2*sin(5*theta).^2; ... for i=1:4 polar(theta,rho(i,:)) pause end Linia komentarza Linie obliczeń Wyświetlanie wyników 2017-04-17 M. Kwiesielewicz. Elementy programowania w MATLABIE
M. Kwiesielewicz. Elementy programowania w MATLABIE Przykład funkcji function y = average(x) % AVERAGE Mean of vector elements. % AVERAGE(X), where X is a vector, is the mean of vector elements. % Non-vector input results in an error. [m,n] = size(x); if (~((m==1) | (n==1) | (m==1 & n==1))) error('Input must be a vector') end y = sum(x)/length(x); % Actual computation 2017-04-17 M. Kwiesielewicz. Elementy programowania w MATLABIE
M. Kwiesielewicz. Elementy programowania w MATLABIE Nazwy funkcji Nazwa funkcji musi się zaczynać litrą MATLAB wykorzystuje 31 pierwszych znaków Generalnie liczba znaków zależy od systemu operacyjnego Jeśli nazwa funkcji w linii definicji jest inna niż nazwa pliku, w którym funkcja jest zapamiętana, przyjmowana jest ta ostatnia Lepiej jednak używać tych samych nazw 2017-04-17 M. Kwiesielewicz. Elementy programowania w MATLABIE
Kolejność poszukiwania nazwy zmienne w przestrzeni roboczej zbiór podfunkcji zawartych w tym samym pliku co funkcja wywołująca zbiór funkcji w katalogu prywatnym katalogi ustawione w ścieżce dostępu Uwaga. Funkcja po wywołaniu przechowywana jest w pamięci w postaci pseudokodu. Do jej usunięcia komenda clear. 2017-04-17 M. Kwiesielewicz. Elementy programowania w MATLABIE
Tworzenie pseudokodu funkcji Pseudokod funkcji tworzy się przy użyciu polecenia pcode, np.: pcode average; Polecenie to tworzy Pseudokod funkcji w pliku average.p Polecenie jest użyteczne w przypadku wywoływania aplikacji graficznych oraz, gdy użytkownik chce ukryć kod napisanej funkcji 2017-04-17 M. Kwiesielewicz. Elementy programowania w MATLABIE
Przekazywanie argumentów funkcji MATLAB przekazuje te parametry funkcji przez wartość, które funkcja modyfikuje Jeśli funkcja nie zmienia argumentu, ale używa go tylko w obliczeniach, to MATLAB przekazuje argument przez odniesienie w celu optymalizacji wykorzystania pamieci 2017-04-17 M. Kwiesielewicz. Elementy programowania w MATLABIE
Przestrzeń robocza funkcji Każda M-funkcja posiada własny obszar pamięci, oddzielony od przestrzeni roboczej MATLABA Obszar ten zwany jest przestrzenią roboczą funkcji Każda funkcja posiada swój własny obszar roboczy W MATLABIE można zdefiniować zmienne globalne 2017-04-17 M. Kwiesielewicz. Elementy programowania w MATLABIE
Sprawdzenie liczby argumentów funkcji Funkcje nargin i nargout pozwalają na określenie z jaką liczbą argumentów wejściowych i wyjściowych funkcja jest wywoływana, n.p.: function c = testtarg1(a,b) if (nargin == 1) c = a.^2; eleseif (nargin == 2) c = a + b; end; 2017-04-17 M. Kwiesielewicz. Elementy programowania w MATLABIE
Przekazanie liczby zmiennych argumentów Funkcje varargin i varagout pozwalają na przekazanie liczby wejść i zwrócenie liczby wyjść. MATLAB przechowuje argumenty w specjalnej tablicy cell array. 2017-04-17 M. Kwiesielewicz. Elementy programowania w MATLABIE
Zmienne lokalne i globalne Każda funkcja, zdefiniowana w MATLABIE posiada swoje własne zmienne lokalne W celu dostępu do danej zmiennej z innej funkcji lub przestrzeni roboczej MATLABA należy tą zmienną zadeklarować jako globalną we wszystkich miejscach, gdzie ma dostępna, n.p.: global ALPHA BETA Zalecane jest użycie wielkich liter. 2017-04-17 M. Kwiesielewicz. Elementy programowania w MATLABIE
Zmienne i stałe specjalne ans - zawiera ostatnią zmienną, jeśli do wyrażenia nie przypisano żadnej zmiennej wyjściowej eps - dokładność operacji zmiennoprzecinkowych w MATLABIE realmax - największa liczba zmiennoprzecinkowa realmin - najmniejsza liczba zmiennoprzecinkowa pi - 3.141592... i,j - jednostki urojone inf, NaN, ver 2017-04-17 M. Kwiesielewicz. Elementy programowania w MATLABIE
M. Kwiesielewicz. Elementy programowania w MATLABIE Instrukcje sterujące Instrukcja warunkowa if, else i elseif Instrukcja wyboru switch z case i otherwise Pętla while Pętla for 2017-04-17 M. Kwiesielewicz. Elementy programowania w MATLABIE
Instrukcja warunkowa if, else i elseif Składnia if wyrażenie_logiczne instrukcje elseif wyrażenie_logiczne else end Przykład if n < 0 disp(‘musi byc >=0’); elseif rem(n,2)==0 a=n/2; else a=(n+1)/2; end 2017-04-17 M. Kwiesielewicz. Elementy programowania w MATLABIE
M. Kwiesielewicz. Elementy programowania w MATLABIE Instrukcja wyboru Składnia switch wyrażenie_logiczne case wartość1 instrukcje case wartość2 otherwise end Przykład switch input_num case -1 disp(‘negative one’); case 0 disp(‘zero’); case 1 disp(‘positive one’); otherwise disp(‘other value’); end 2017-04-17 M. Kwiesielewicz. Elementy programowania w MATLABIE
M. Kwiesielewicz. Elementy programowania w MATLABIE Pętla while Składnia while wyrażenie instrukcje end Pętla while wykonuje instrukcje tak długo dopóki wyrażenie jest prawdziwe W przypadku macierzy wszystkie jej elementy muszą być prawdziwe Można ją przerwać poleceniem break Przykład n=1; while prod(1:n) < 1e100 n=n+1; end Powyższa pętla znajduje pierwszą liczbę naturalną dla której n! jest liczbą 100 cyfrową 2017-04-17 M. Kwiesielewicz. Elementy programowania w MATLABIE
M. Kwiesielewicz. Elementy programowania w MATLABIE Pętla for Składnia for indeks=start:krok:koniec instrukcje end Domyślna wartość kroku wynosi 1 Dla ujemnego kroku koniec kiedy indeks < koniec Przykład min_value=a(1); for i=2:n if a(i)<min_value min_value=a(i); end 2017-04-17 M. Kwiesielewicz. Elementy programowania w MATLABIE
M. Kwiesielewicz. Elementy programowania w MATLABIE Podfunkcje function [avg, mec]=newstats(u) %NEWSTATS Find mean and ..... n=length(u); avg=mean(u,n); med=median(n,u); function a=mean(v,n) %Calculate average a=sum(v)/n; function m=median(v,n) %Calculate median ... end Funkcja główna Primary function Podfunkcja 1 Subfunction Podfunkcja 2 2017-04-17 M. Kwiesielewicz. Elementy programowania w MATLABIE
M. Kwiesielewicz. Elementy programowania w MATLABIE Funkcje prywatne Muszą być umieszczone w katalogu o specjalnej nazwie private i są widoczne tylko przez funkcje z katalogów wyższych Można w ten sposób definiować funkcje o takich samych nazwach jak oryginalne funkcje pakietu Należy utworzyć po prostu katalog private 2017-04-17 M. Kwiesielewicz. Elementy programowania w MATLABIE
Polecenia użyteczne przy tworzeniu własnych M-plików disp - wyświetlenie tekstu lub macierzy echo - wyświetlenie tekstu lub macierzy error - przerwanie wykonywania M-pliku input - wprowadzenie danej wejsciowej keybord - udostępnienie klawiatury menu - tworzenie listy wyboru pause - zatrzymanie wykonywania M-pliku return - powrót do funkcji wywołującej lub linii komend 2017-04-17 M. Kwiesielewicz. Elementy programowania w MATLABIE
Niestandardowe uruchamianie poleceń eval - uruchomienie polecenia podanego jako stała łańcuchowa feval - wywołanie i przekazanie parametrów funkcji 2017-04-17 M. Kwiesielewicz. Elementy programowania w MATLABIE
M. Kwiesielewicz. Elementy programowania w MATLABIE Funkcje pomocnicze clock - CLOCK = [year month day hour minute seconds] cputime - czas w sekundach od uruchomienia MATLABA etime - pomiar różnicy czasów flops - liczba wykonanych operacji zminnoprzecinkowych tic, toc - załączenie i wyłączenie stopera 2017-04-17 M. Kwiesielewicz. Elementy programowania w MATLABIE
Operacje wejścia wyjścia Otwieranie i zamykanie plików Operacje wejścia/wyjścia niesformatowane Operacje wejścia/wyjścia sformatowane Operacje wskaźnikowe 2017-04-17 M. Kwiesielewicz. Elementy programowania w MATLABIE
M. Kwiesielewicz. Elementy programowania w MATLABIE Polecenie input Przykład i=input(‘Czy liczyc dalej?(T/N)’,’s’); if isempty(i) i=‘Y’; end Składnia x=input(‘text’) x=input(‘text’,’s’) Opis Wyświetla tekst i zwraca zmienną wprowadzoną przez użytkownika 2017-04-17 M. Kwiesielewicz. Elementy programowania w MATLABIE
M. Kwiesielewicz. Elementy programowania w MATLABIE Polecenie disp Przykład disp(‘text’) Składnia disp(X) Opis Wyświetla macierz 2017-04-17 M. Kwiesielewicz. Elementy programowania w MATLABIE
M. Kwiesielewicz. Elementy programowania w MATLABIE Polecenie fprintf Składnia fprintf(łańcuch,lista) Opis Formatowane wyświetlanie wyniku - łańcuch oznacza format - lista listę zmiennych Przykłady elementów łańcucha %f %.3f %.3e Więcej szczegółów - opis języka C 2017-04-17 M. Kwiesielewicz. Elementy programowania w MATLABIE