Funkcje w Matlabie - cygnus.et.put.poznan.plcygnus.et.put.poznan.pl/~psroka/alg/lab2.pdf · 3....

2

Click here to load reader

Transcript of Funkcje w Matlabie - cygnus.et.put.poznan.plcygnus.et.put.poznan.pl/~psroka/alg/lab2.pdf · 3....

Page 1: Funkcje w Matlabie - cygnus.et.put.poznan.plcygnus.et.put.poznan.pl/~psroka/alg/lab2.pdf · 3. Procedury (funkcje nie zwracaj ące argumentów) W Matlabie mo żna zdefiniowa ć funkcje,

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

Page 2: Funkcje w Matlabie - cygnus.et.put.poznan.plcygnus.et.put.poznan.pl/~psroka/alg/lab2.pdf · 3. Procedury (funkcje nie zwracaj ące argumentów) W Matlabie mo żna zdefiniowa ć funkcje,

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