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).