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/
2007-10-08
M. Kwiesielewicz. Elementy programowania w MATLABIE
2
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
2007-10-08
M. Kwiesielewicz. Elementy programowania w MATLABIE
3
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
2007-10-08
M. Kwiesielewicz. Elementy programowania w MATLABIE
4
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
2007-10-08
M. Kwiesielewicz. Elementy programowania w MATLABIE
5
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
2007-10-08
M. Kwiesielewicz. Elementy programowania w MATLABIE
6
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
2007-10-08
M. Kwiesielewicz. Elementy programowania w MATLABIE
7
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
2007-10-08
M. Kwiesielewicz. Elementy programowania w MATLABIE
8
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
2007-10-08
M. Kwiesielewicz. Elementy programowania w MATLABIE
9
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.
2007-10-08
M. Kwiesielewicz. Elementy programowania w MATLABIE
10
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
2007-10-08
M. Kwiesielewicz. Elementy programowania w MATLABIE
11
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
2007-10-08
M. Kwiesielewicz. Elementy programowania w MATLABIE
12
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
2007-10-08
M. Kwiesielewicz. Elementy programowania w MATLABIE
13
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;
2007-10-08
M. Kwiesielewicz. Elementy programowania w MATLABIE
14
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.
2007-10-08
M. Kwiesielewicz. Elementy programowania w MATLABIE
15
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.
2007-10-08
M. Kwiesielewicz. Elementy programowania w MATLABIE
16
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
2007-10-08
M. Kwiesielewicz. Elementy programowania w MATLABIE
17
Instrukcje sterujące
Instrukcja warunkowa if, else i elseif
Instrukcja wyboru switch z case i otherwise
Pętla while
Pętla for
2007-10-08
M. Kwiesielewicz. Elementy programowania w MATLABIE
18
Instrukcja warunkowa if, else i
elseif
Składnia
if wyra
ż
enie_logiczne
instrukcje
elseif wyra
ż
enie_logiczne
instrukcje
else
instrukcje
end
Przykład
if n < 0
disp(‘musi byc >=0’);
elseif rem(n,2)==0
a=n/2;
else
a=(n+1)/2;
end
2007-10-08
M. Kwiesielewicz. Elementy programowania w MATLABIE
19
Instrukcja wyboru
Składnia
switch wyra
ż
enie_logiczne
case warto
ść
1
instrukcje
case warto
ść
2
instrukcje
otherwise
instrukcje
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
2007-10-08
M. Kwiesielewicz. Elementy programowania w MATLABIE
20
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ą
2007-10-08
M. Kwiesielewicz. Elementy programowania w MATLABIE
21
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
end
2007-10-08
M. Kwiesielewicz. Elementy programowania w MATLABIE
22
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
Subfunction
2007-10-08
M. Kwiesielewicz. Elementy programowania w MATLABIE
23
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
2007-10-08
M. Kwiesielewicz. Elementy programowania w MATLABIE
24
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
2007-10-08
M. Kwiesielewicz. Elementy programowania w MATLABIE
25
Niestandardowe uruchamianie
poleceń
eval - uruchomienie polecenia podanego jako stała
łańcuchowa
feval - wywołanie i przekazanie parametrów funkcji
2007-10-08
M. Kwiesielewicz. Elementy programowania w MATLABIE
26
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
2007-10-08
M. Kwiesielewicz. Elementy programowania w MATLABIE
27
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
2007-10-08
M. Kwiesielewicz. Elementy programowania w MATLABIE
28
Polecenie input
Składnia
x=input(‘text’)
x=input(‘text’,’s’)
Opis
Wyświetla tekst i zwraca
zmienną wprowadzoną
przez użytkownika
Przykład
i=input(‘Czy liczyc dalej?(T/N)’,’s’);
if isempty(i)
i=‘Y’;
end
2007-10-08
M. Kwiesielewicz. Elementy programowania w MATLABIE
29
Polecenie disp
Składnia
disp(X)
Opis
Wyświetla macierz
Przykład
disp(‘text’)
2007-10-08
M. Kwiesielewicz. Elementy programowania w MATLABIE
30
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