Funkcje w Matlabie

Transkrypt

Funkcje w Matlabie
LABORATORIUM 7
ALGORYTMY OBLICZENIOWE W ELEKTRONICE I TELEKOMUNIKACJI
Funkcje w Matlabie
W Matlabie istnieje wiele zdefiniowanych funkcji, takich jak sqrt czy sin. Funkcje w Matlabie
są podobne do skryptów, również tworzone są w postaci M-plików, jednak charakteryzują się
pewnymi szczególnymi cechami.
1. Definicja funkcji
Definicja funkcji zawarta w M-pliku musi zawierać zawsze słowo kluczowe function, nazwę
funkcji, i listę argumentów wejściowych i wyjściowych, np:
function [y1, y2] = nazwa(x1, x2)
%komentarz wyświetlany po wpisaniu polecenia help
.
.
.
y1=...;
y2=...;
Argumenty wejściowe i wyjściowe służą tylko do tylko do określenia sposobu komunikacji
kodu zawartego w funkcji z danymi z przestrzeni roboczej (workspace). Dlatego przy
wywołaniu funkcji jako jej argumentów używa się zmiennych z przestrzeni roboczej, które są
jakby „kopiowane” do zmiennych określonych w definicji funkcji.
Jeśli używany jest więcej niż jeden argument wyjściowy, lista argumentów wyjściowych musi
być zawarta w nawiasach kwadratowych, a poszczególne argumenty muszą być oddzielone
przecinkami.
2. Zmienne w funkcjach
Wszystkie zmienne zdefiniowane wewnątrz funkcji mają charakter lokalny, tzn. nie ma do
nich dostępu poza funkcją, a funkcja posiada swoją własną przestrzeń roboczą. W związku z
tym jest możliwe użycie takich samych nazw zmiennych wewnątrz funkcji i w przestrzeni
roboczej bez nadpisywania ich wartości.
W funkcjach nie ma normalnie dostępu do zmiennych zdefiniowanych w przestrzeni roboczej
użytkownika, chyba że zostaną zadeklarowane jako zmienne globalne przez użycie słowa
kluczowego global:
global ZMIENNA
Zgodnie z zaleceniami Matlaba nazwy zmiennych globalych powinny być pisane dużymi
literami.
Zmienne w funkcjach mogą być określone jako trwałe przy użyciu słowa kluczowego
persistent:
persistent ZMIENNA
Takie zmienne nie są usuwane przy zakończeniu wykonywania funkcji i są dostępne przy
kolejnych jej wywołaniach. Zmienne trwałe są usuwane podczas procesu czyszczena m-pliku
(clear m-file).
3. Procedury (funkcje nie zwracające argumentów)
W Matlabie można zdefiniować funkcje, które nie zwracają argumentów, nazywane
procedurami. Definicja procedury ma postać:
function nazwa(x1, x2)
%komentarz wyświetlany po wpisaniu polecenia help
.
.
.
4. Argumenty funkcji
Argumenty funkcji mogą być wektorami lub macierzami. W takim przypadku inicjalizacja
wektora/macierzy odbywa się przy każdym wywołaniu funkcji.
Jeśli wartość jakiegoś z przekazywanych do funkcji argumentów zostaje zmieniona wewnątrz
funkcji, zmiana ta nie zostaje zapisana w przestrzeni roboczej po zakończeniu wykonywania
funkcji.
Zapisanie zmian wartości przekazywanego do funkcji argumentu można wymusić przez
przekazywanie zmiennych przez referencję. W Matlabie odbywa się to przez podanie tej
samej zmiennej jako argumentu wejściowego i wyjściowego funkcji, np.:
x = sqrt(x);
Funkcja może być wywoływana z pełną listą argumentów, jej częścią lub bez argumentów (w
tym przypadku pomija się nawiasy przy wywołaniu funkcji). Jednak nie można wywołać
funkcji z większą ilością argumentów niż zostało to zadeklarowane.
W przypadku gdy wewnątrz funkcji potrzebna jest informacja o ilości podanych argumentów
wejściowych/wyjściowych można skorzystać odpowiednio z poleceń nargin i nargout.
5. Podfunkcje (subfunctions)
M-plik z definicją funkcji może zawierać kod programu z większą ilością funkcji. W tym
przypadku pierwsza definicja funkcji w pliku jest traktowana jako funkcja główna, która jest
wykonywana po wywołaniu nazwy M-pliku, natomiast pozostałe definicje funkcji są
podfunkcjami, tzn. są one „widoczne” tylko dla funkcji zdefiniowanych w danym M-pliku
(funkcji głównej i pozostałych podfunkcji).