Programowanie w jzyku Matlab Instrukcje sterujce Funkcje Instrukcje
Programowanie w języku Matlab Instrukcje sterujące Funkcje
Instrukcje sterujące – z reguły stosowane do sterowania wykonaniem podprogramów zapisanych w m-plikach • • if, switch, for, while, continue, break, try-catch, return.
Instrukcja if if ww 1 p 1 elseif ww 2 p 2 elseif ww 3 p 3 : else pn end wwi – wyrażenie warunkowe dające wynik typu logicznego pi – ciąg poleceń Części elseif i else nie są obowiązkowe
Wyrażenia warunkowe: - proste: count < limit, isreal(A) - złożone: (count < limit) && ((height - offset) >= 0) Jeżeli wynikiem wyrażenia jest: - skalar o wartości logicznej 1, - tablica ze wszystkimi elementami o wartości logicznej 1 wówczas warunek jest spełniony. Wykonywany jest ciąg poleceń odpowiadający pierwszemu spełnionemu warunkowi lub podany po słowie else, jeżeli żaden nie jest spełniony. Zapis niektórych wyrażeń można uprościć np. A ~= 0 jest równoważne A. Nie zawsze zachodzi potrzeba obliczania wartości wyrażeń prostych w wyrażeniach złożonych: - A && B – wartość B jest obliczana tylko wtedy, gdy A == 1, - A || B – wartość B jest obliczana tylko wtedy, gdy A == 0.
Instrukcja switch wyr – wyrażenie dające w wyniku skalar lub łańcuch case s 1 si – stała lub lista stałych p 1 Część otherwise nie jest obowiązkowa case s 2 Wykonywany jest ciąg poleceń odpowiadający stałej równej wartości wyrażenia lub podany po słowie otherwise przy braku zgodności p 2 : otherwise pn end Jeśli wybór odbywa się na podstawie zawartości łańcucha – lepiej stosować instrukcję switch niż if. . . else. . .
Instrukcja for zs = wyr zs – zmienna sterująca p wyr – wyrażenie end p – ciąg poleceń Liczba powtórzeń jest równa liczbie wartości, jakie może przyjąć zmienna sterująca. wyrażenie wartości przyjmowane przez zmienną sterującą 1: 0. 5: 3 1, 1. 5, 2, 2. 5, 3 4: -1: 1 4, 3, 2, 1 ’a’: ’e’ ’a’, ’b’, ’c’, ’d’, ’e’ [1, 5, 99, -3] 1, 5, 99, -3 ’abegxa’ ’a’, ’b’, ’e’, ’g’, ’x’, ’a’ [1 2 3; 4 5 6] [1; 4], [2; 5], [3; 6]
Instrukcja while ww ww – wyrażenie warunkowe p p – blok poleceń end Ciąg poleceń wykonywany jest tak długo, jak warunek jest spełniony.
Instrukcja continue Powoduje przerwanie bieżącego obiegu pętli i przejście do następnego. Instrukcja break Powoduje przerwanie pętli. Instrukcja try-catch try pt, pc – ciągi poleceń pt Jeśli wykonanie któregoś z poleceń ciągu pt zakończy się niepowodzeniem, wykonywany jest ciąg poleceń pc catch pc end
Instrukcja return Umożliwia przerwanie działania m-pliku w dowolnym miejscu.
M-pliki funkcyjne Struktura m-pliku funkcyjnego: function [zm. wyj. ] = nazwa(zm. wej. ) linia definicji % NAZWA przeznaczenie linia pomocy % Opis działania %. . . tekst pomocy %. . . . kod funkcji
- przykłady linii definicji: function [x, y, z] = func 1(a, b, c) function [] = func 2(a) function [x, y] = func 3() function [x, y] = func 3 - nazwy: funkcji i m-pliku powinny być takie same, - argumenty są przekazywane przez wartość, - zmienne tworzone w funkcji są zmiennymi lokalnymi, przechowywanymi w osobnej przestrzeni roboczej, - zmienne lokalne przestają istnieć po zakończeniu działania funkcji, chyba że zostały zadeklarowane jako trwałe (ang. persistent),
- funkcję można wywołać z mniejszą liczbą argumentów, - funkcja może zwrócić mniejsza liczbę wartości, wywołanie funkcji >> func 1 nargin nargout 0 0 >> 1 + func 1 0 1 >> k = func 1(1, 2) 2 1 >> [k, l] = func 1(1, 2, 3) 3 2 - funkcja może wykonywać operacje na tych zmiennych z przestrzeni roboczej, które zostaną zadeklarowane jako globalne: global z 1 z 2. . . Deklarację taką trzeba podać w wierszu poleceń oraz w treści funkcji.
function s = suman(n) % SUMAN suma n wyrazów ciągu % Funkcja oblicza sumę n wyrazów ciągu % 1 + 1/2 + 1/3 +. . + 1/n % Argument n powinien być skalarem. if nargin < 1 % blok 1 error('Błąd - wymagany jeden argument'); end if prod(size(n)) ~= 1 % blok 2 error('Błąd - argument powinien być skalarem'); end s = 1; % blok 3 for k = 2: n s = s + 1/k; end
Funkcje o dowolnej liczbie argumentów i wartości - standardowe tablice komórkowe: varargin i varargout, - zmienne te należy wymieniać na końcach list. Podfunkcje - m-plik może zawierać wiele funkcji o różnych nazwach, - pierwsza funkcja to funkcja podstawowa, pozostałe to podfunkcje, - podfunkcje mogą być wywoływane tylko przez funkcję podstawową, - podfunkcja nie ma dostępu do zmiennych lokalnych funkcji podstawowej i innych podfunkcji.
Funkcje zagnieżdżone - są to funkcje definiowane w treści innych funkcji, - treść funkcji zagnieżdżonych, jak również treści pozostałych funkcji w m-pliku, musi być zakończona słowem end.
function A(x, y) % funkcja podstawowa B(x, y); D(y); function B(x, y) % zagnieżdżona w A C(x); D(y); function C(x) % zagnieżdżona w B D(x); end function D(x) % zagnieżdżona w A E(x); function E(x) % zagnieżdżona w D . . . end end
- funkcję zagnieżdżoną może wywołać funkcja: z sąsiedniego wyższego poziomu zagnieżdżenia (tutaj A może wywołać: B i D, nie może wywołać: C oraz E), z tego poziomu zagnieżdżenia (B może wywołać D i na odwrót), z dowolnego niższego poziomu zagnieżdżenia (C może wywołać: B i D, nie może wywołać E), - funkcje z dowolnego poziomu zagnieżdżenia mogą wywoływać podfunkcje, - do zmiennych lokalnych funkcji zagnieżdżonej mogą się odwoływać funkcje z wyższych poziomów zagnieżdżenia, - funkcja zagnieżdżona ma dostęp do zmiennych lokalnych funkcji z wyższych poziomów zagnieżdżenia, - interpretacja odwołań zmiennych: varargin i varargout – zależy od tego, czy występują one w definicji funkcji czy nie.
Funkcje prywatne - zapisywane w m-plikach w podkatalogach o nazwie private, - dostępne tylko dla funkcji i skryptów z katalogu nadrzędnego, - podkatalogów z funkcjami prywatnymi nie należy dołączać do listy katalogów przeszukiwanych Funkcje przeciążone - stosowane wówczas, gdy sposób przetwarzania danej zależy od jej typu, - funkcje te mają takie same nazwy, - są one przechowywane w podkatalogach o nazwach @nazwa_typu.
Definiowane funkcji w wierszu poleceń Funkcje anonimowe: - zawierają jedno wyrażenie, - postać definicji zmienna = @(lista argumentów) wyrażenie - argumenty oddziela się przecinkami, lista może być pusta. - operator @ tworzy tzw. uchwyt funkcji, - wywołanie funkcji anonimowej zmienna(argumenty) zmienna() - w wyrażeniu mogą wystąpić zmienne z przestrzeni roboczej, ale funkcja będzie używać wartości, które zmienne miały w chwili definicji funkcji, - można tworzyć komórkowe tablice z uchwytami.
Funkcje definiowane przy użyciu funkcji inline: - zawierają jedno wyrażenie, - postać definicji zmienna = inline(’wyrażenie’) zmienna = inline(’wyrażenie’, ’argument 1’, . . . ) W pierwszym przypadku funkcja inline sama określi argumenty wyrażenia.
Uchwyty do funkcji - można tworzyć uchwyty również do funkcji zapisanych w m-plikach, - uchwyt do funkcji jest argumentem niektórych standardowych funkcji Matlaba np. fzero.
- Slides: 21