Strona główna » Poradniki » MATLAB » Własne funkcje
f( )x

Własne funkcje

Wstęp

Program MATLAB to nie tylko zestaw przygotowanych funkcji, które pozwalają przeprowadzić obliczenia. To także program w którym możemy definiować własne funkcje. W ten sposób możemy przechować różnego rodzaju wzory i je przechowywać. Nowo przygotowane funkcje możemy także wyeksportować do pliku i przenieść w inne miejsce.

Przygotowanie

Edytor funkcji można otworzyć na dwa sposoby. W zakładce Home należy znaleźć przycisk New i z nowego menu kontekstowego wybrać Function:

Tworzenie funkcji

Drugim sposobem jest wpisanie w konsoli edit i zatwierdzić enterem. W ten sposób pojawi się nam nowy obszar Editor z gotowym szkieletem funkcji:

  1. function [ output_args ] = Untitled( input_args )
  2. %UNTITLED Summary of this function goes here
  3. % Detailed explanation goes here
  4.  
  5.  
  6. end

Deklarację funkcji rozpoczynamy słowem function i określamy jakie zwracamy wartości. W miejsce [output_args] możemy wpisać pojedynczą zmienną, albo listę zmiennych. Pisząc własną funkcję należy pamiętać, że nazwa funkcji musi być unikalna - chcąc się odwołać do funkcji program ma wywołać konkretną funkcję, a nie wybierać losową o podanej nazwie. Wpisujemy ją zamiast słowa Untitled. W nawiasach okrągłych możemy zastąpić input_args zmiennymi, które ma otrzymać funkcja. Wszystkie wykonywane operacje muszą się kończyć przed słowem end. Wynik ustalamy zmieniając wartości zmiennych podanych na miejscu [output_args].

Pierwsza funkcja

Napiszemy teraz funkcję, która zsumuje podane liczby. Funkcję nazwiemy suma. Będzie przyjmować dwa argumenty a i b. Na koniec zwrócimy wartość w, gdzie w = a + b:

  1. function w = suma(a, b)
  2.  w = a + b;
  3. end

(1.) W pierwszej linijce rozpoczynamy deklarację funkcji (function). Następnie wpisujemy co będziemy zwracać. W tym przypadku to pojedyncza liczba, więc możemy nie używać nawiasów kwadratowych. Dopisujemy operator przypisania (=). Wpisujemy nazwę funkcji suma. W nawiasach okrągłych określamy, że przyjmujemy dwie zmienne. Rozdzielamy je przecinkiem. (2.) W drugiej linijce wykonujemy operację przypisania. Ustalamy wartość zmiennej w na sumę a i b. (3.) Kończymy deklarację funkcji (end).

Nasza funkcja jest już gotowa. Jednak nie możemy jej jeszcze wywołać z poziomu konsoli. Zanim to zrobimy musimy zapisać naszą funkcję do pliku. Nazwa pliku jest bardzo ważna. Musi składać się z nazwy funkcji i musi mieć rozszerzenie .m. Innymi słowy naszą funkcję zapisujemy do pliku suma.m. Kiedy już to zrobimy możemy wywołać funkcję z poziomu konsoli:

  1. >> suma(4, 5)

  2. ans =

        9

Funkcja kwadratowa

Napiszemy teraz funkcję, która obliczy pierwiastki dla podanych współczynników a, b, c:

  1. function [x1, x2] = fkwadratowa(a, b, c)
  2.  delta = b^2 - 4*a*c;
  3.  x1 = (-b-sqrt(delta))/2*a;
  4.  x2 = (-b+sqrt(delta))/2*a;
  5. end

Tym razem nasza funkcja zwraca dwie wartości, więc musimy umieścić je w nawiasie kwadratowym. Innymi słowy wynikiem funkcji będzie dwuelementowa lista o wartościach zmiennych x1, x2. Nasza funkcja nazywa się fkwadratowa i przyjmuje trzy argumenty a, b, c. (2.) Obliczamy deltę wyrażenia. Tutaj należy pamiętać, że prawidłowo piszemy 4*a*c, ale nie 4ac. (3., 4.) Ustalamy odpowiednio pierwiastki równania i (5.) kończymy deklarację.

Zapisujemy funkcję do pliku fkwadratowa.m i sprawdzamy działanie funkcji z poziomu konsoli:

  1. >> fkwadratowa(1,2,3)

  2. ans =

    -1.0000 - 1.4142i

  3. >> [x1, x2] = fkwadratowa(1,2,3) %przypisujemy pierwiastki zmiennym x1 i x2

  4. x1 =

     -1.0000 - 1.4142i

  5. x2 =

     -1.0000 + 1.4142i

Istnieje możliwość, aby nie deklarować od razu, że zwracamy listę. Wystarczy, aby wpisać, że zwrócimy jakąś zmienną np. w i do niej należy przypisać listę:

  1. function w = fkwadratowa(a, b, c)
  2.  delta = b^2 - 4*a*c;
  3.  w = [(-b-sqrt(delta))/2*a (-b+sqrt(delta))/2*a];
  4. end

Teraz funkcja zwróci listę jako zmienną w. W ten sposób, aby uzyskać oba pierwiastki nie musimy używać [x1, x2] =. Wystarczy pojedyncza zmienna:

  1. >> fkwadratowa(1,-8,5)

  2. ans =

      0.6834   7.3166

Drugi styl pisania funkcji jest mniej poprawny, ponieważ pierwiastki to dwie pojedyncze wartości, a nie lista wartości. Jednak na własny użytek można używać tego stylu, ponieważ dla niektórych może wygodniejszy. Niemniej w przypadku pisania własnego zestawu funkcji trzeba by dodać dokumentację, która wyjaśniałaby użycie funkcji.

Dodatkowe wskazówki

Średniki

Wszystkie wyliczenia prowadzone wewnątrz funkcji są intepretowane w ten sam sposób jakby zostały wpisane do konsoli. Z tego powodu należy pamiętać, aby stawiać średniki. Dzięki temu na konsolę nie są wypisywane wyniki każdej kolejnej wykonywanej operacji. Oczywiście dopóki nie jesteśmy pewni działania funkcji brak średników pozwoli na przeanalizowanie działania funkcji i tym samym wyłapanie błędów w obliczeniach.

Białe znaki

W większości przypadków biały znaki są ignorowane przez program, dlatego dodatkowe spacje, tabulatory na początku czy końcu linijki nie wpływają na działanie funkcji. Jednak nie można się ich całkowicie pozbyć. Spacje pomiędzy nazwami zmiennych czy pomiędzy zmienną, a słowem kluczowym (function, end) muszą pozostać. Nie można też usunąć znaków nowej linii. Jest spowodowane sposobem interpretacji programu - jedna linijka to jedna instrukcja, dlatego nawet łącząc linijki należy pamiętać o rozdzieleniu ich przecinkiem.

Deklaracja funkcji z poziomu konsoli

Jeśli ktoś chciał zadeklarować funkcję bezpośrednio w konsoli to niestety napotka problemy. Deklarowanie funkcji nie może odbywać się z poziomu konsoli, a tylko z poziomu edytora. W przypadku próby program nas o tym powiadomi:

  1. >> function w = suma(a, b)
    w = a + b;
    end
  2.  function w = suma(a, b)
     ↑
    Error: Function definitions are not permitted in this context.

Komentarze

W napisanej funkcji można używać komentarzy. Można je dopisać na końcu każdej linijki, a także pomiędzy linijkami:

  1. function w = suma(a, b) %deklaracja
  2. % tu idzie główna część funkcji
  3. w = a + b; %przypisanie wartości
  4. end %koniec deklaracji

W przypadku komentarza w linijce (2.) będzie to komentarz pokazywany jako opis funkcji w podsumowaniu pliku. Innymi słowy warto dodać w tym miejscu opis funkcji.

Zadania

Zalecam wykonanie poleceń bez zaglądania do artykułu. Wskazówka: Każdy podpunkt odpowiada dokładnie jednemu poleceniu!

Zadanie 1

Napisz funkcję potega, która podniesie a do b, tj. zwróci wartość .

Zadanie 2

Napisz funkcję heron, która obliczy Pole trójkąta na podstawie wzoru Herona, gdzie:
, a

  • Napisz funkcję szescian, która dla podanej krawędzi sześcianu a zwróci jego Pole powierzchni bocznej oraz Objętość.

    Zadanie 3

    * Napisz funkcję sortuj, która posortuje dwie liczby