Wprowadzenie do MATLABa

Transkrypt

Wprowadzenie do MATLABa
Wprowadzenie
do MATLABa
programowanie
WYKŁAD © Piotr Ciskowski
instrukcje sterujące
• instrukcja warunkowa:
if
• instrukcja wyboru:
switch
• instrukcje iteracyjne:
for , while
• instrukcje przerwania:
continue , break , return
• obsługa błędów:
try , catch
instrukcja warunkowa
if wyrażenie1 ,
polecenia
elseif wyrażenie2 ,
polecenia
else
polecenia
end
instrukcja warunkowa
• wyrażenia logiczne:
wyrażenie
• operatory logiczne:
< <=
> >=
==
~=
all
wszystkie elementy niezerowe
any
jakikolwiek element niezerowy
isfinite
isinf
isnan
element nieokreślony (NaN)
isempty
argument jest macierzą pustą
• funkcje logiczne:
»
»
if
if
A > 5 , ...
all ( A > 5 ) , ...
operator
if any ( A > 5 ) , ...
wyrażenie
instrukcja wyboru
switch wyrażenie ,
case wartość1 , polecenia
case wartość2 , polecenia
...
otherwise
, polecenia
end
pętla
for zmienna-iterowana = macierz-wartości ,
polecenia
end
•
for
i = 1 : 10 ,
•
for
i = 50 : -2 : 0 ,
•
for
i = [ ’a’ , ’b’ , ’c’ ] ,
•
for
i = [
5
8
3
6
-3.4
78
-345
] ,
pętla
while wyrażenie ,
polecenia
end
»
»
s = 0 ;
while s ~= 100 ,
s = s + 0.01 ;
end
• przerwanie zapętlonego:
Ctrl+C
^C
programy w MATLABie
skrypty
m-pliki
plik.m
funkcje
w m-pliku o tej samej nazwie
programy w MATLABie
• instrukcje przydatne w m-plikach:
– input
– keyboard
– menu
– pause
– disp
programy w MATLABie
• komentarze:
% w MATLABie mamy tylko jeden rodzaj komentarza
% taki jak ten
% on się ciągnie do końca linii
programy w MATLABie
• komentarze:
np. skrypt w pliku sincos.m
%
%
%
%
przykładowy skrypt: sincos
generuje wektor liczb rzeczywistych t
i oblicza dla kolejnych wartości z tego wektora
wartości funkcji x=sin(t)+cos(t)
%
t
x
%
tego komentarza nie zobaczysz w helpie
= [ 1 : 0.05 ; 4 * pi ] ;
= sin ( t ) + cos ( t) ;
koniec
programy w MATLABie
• komentarze:
np. skrypt w pliku sincos.m
» help sincos
przykładowy skrypt: sincos
generuje wektor liczb rzeczywistych t
i oblicza dla kolejnych wartości z tego wektora
wartości funkcji x=sin(t)+cos(t)
»
programy w MATLABie
• komentarze:
np. skrypt w pliku funkcja.m
function [x,y,z]=funkcja(a,b,c,d)
% funkcja coś licząca: [x,y,z]=funkcja(a,b,c,d)
% obszerny komentarz ...
for i=1:5, ...
» help funkcja
funkcja coś licząca: [x,y,z]=funkcja(a,b,c,d)
obszerny komentarz ...
»
programy w MATLABie
• nagłówek funkcji
function
[ x , y , z ] = funkcja ( a , b , c , d )
• zmienne w skrypcie są globalne
• zmienne w funkcji są lokalne
• zmienne globalne w funkcji:
function h = falling ( t )
global GRAVITY
h = 1/2 * GRAVITY * t.^2 ;
• parametry nie mają określonych typów
zasady poprawnego programowania w MATLABie
• wektoryzacja
–
–
–
–
MATLAB jest zoptymalizowany pod kątem obliczeń macierzowych
wszystko, co się da, starajmy się zapisywać macierzowo
czasem trzeba nad tym trochę pomyśleć
dobry program w MATLABie to dużo operacji macierzowych i mało pętli for
zasady poprawnego programowania w MATLABie
• prealokacja
–
jeśli wynik obliczeń ma być przechowywany w macierzy
i potrafimy z góry określić jej spodziewaną wielkość,
to lepiej przed rozpoczęciem obliczeń
zadeklarować macierz zer
i potem tylko ją wypełniać wynikami
zasady poprawnego programowania w MATLABie
• pozostałe zasady:
–
MATLAB rozróżnia duże i małe litery w nazwach zmiennych
–
stosuj nazwy zmiennych, które mówią cos o sobie
–
w funkcji zmienne są lokalne
– nie zaśmiecamy przestrzeni roboczej zmiennymi roboczymi
- trudniej o pomyłkę
–
stosuj wcięcia
–
stosuj komentarze
–
pisz takie funkcje, które będą działać na macierzach
i rozpoznawać parametry
zasady poprawnego programowania w MATLABie
• przykład:
%
%
%
%
%
porównanie efektywności obliczeń w pętli z obliczeniami macierzowymi
obliczanie wartości funkcji cosinus – od -10 do +10 co 0.001
1. w pętli ze zwiększaniem macierzy wyników w każdym przebiegu
2. w pętli z wcześniejszą rezerwacją macierzy na wynik
3. macierzowo
zasady poprawnego programowania w MATLABie
• przykład:
clear all ;
t = -10 : 0.001 : 10 ;
[ wierszy , kolumn ] = size ( t ) ;
% w pętli z powiększaniem wektora wyników
i = 0;
t0 = clock ;
for x = t ,
i = i + 1 ;
y ( i ) = cos ( x ) ;
end
t1 = etime ( clock , t0 ) ;
zasady poprawnego programowania w MATLABie
• przykład:
clear all ;
t = -10 : 0.001 : 10 ;
[ wierszy , kolumn ] = size ( t ) ;
% z utworzonym najsampierw wektorem wyników
i = 0 ;
y = zeros ( wierszy , kolumn ) ;
t0 = clock ;
for x = t ,
i = i + 1 ;
y ( i ) = cos ( x ) ;
end
t2 = etime ( clock , t0 ) ;
zasady poprawnego programowania w MATLABie
• przykład:
clear all ;
t = -10 : 0.001 : 10 ;
[ wierszy , kolumn ] = size ( t ) ;
% macierzowo
t0 = clock ;
y = cos ( t ) ;
t3 = etime ( clock , t0 ) ;
zasady poprawnego programowania w MATLABie
• przykład:
clear all ;
t = -10 : 0.001 : 10 ;
[ n , m ] = size ( t ) ;
% porównanie czasów - sekundy
[
t1
t2
t3
]