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 ww1 p1 elseif ww2 p2 elseif ww3 p3 : else pn end wwi –

Download Report

Transcript 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 ww1 p1 elseif ww2 p2 elseif ww3 p3 : else pn end wwi –

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 ww1
p1
elseif ww2
p2
elseif ww3
p3
:
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
switch wyr
case s1
p1
case s2
p2
:
otherwise
pn
end
wyr – wyrażenie dające w wyniku skalar lub łańcuch
si – stała lub lista stałych
Część otherwise nie jest obowiązkowa
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
Jeśli wybór odbywa się na podstawie zawartości
łańcucha – lepiej stosować instrukcję switch niż
if ... elseif ... else ...
Instrukcja for
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
while ww
p
ww – wyrażenie warunkowe
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
catch
pc
end
pt, pc – ciągi poleceń
Jeśli wykonanie któregoś z poleceń ciągu pt zakończy
się niepowodzeniem, wykonywany jest ciąg poleceń pc
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] = func1(a,b,c)
function [] = func2(a)
function func2(a)
function [x,y] = func3()
function [x,y] = func3
- 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
>> func1
nargin nargout
0
0
>> 1 + func1
0
1
>> k = func1(1,2)
2
1
>> [k,l] = func1(1,2,3)
3
2
- funkcja może wykonywać operacje na tych zmiennych z przestrzeni
roboczej, które zostaną zadeklarowane jako globalne:
global z1 z2 ...
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;
for k = 2:n
s = s + 1/k;
end
% blok 3
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)
B(x, y);
D(y);
% funkcja podstawowa
function B(x, y)
C(x);
D(y);
% zagnieżdżona w A
function C(x)
D(x);
end
end
% zagnieżdżona w B
function D(x)
E(x);
% zagnieżdżona w A
function E(x)
...
end
end
end
% zagnieżdżona w D
- 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.