Pobieranie prezentacji. Proszę czekać

Pobieranie prezentacji. Proszę czekać

Wykład 2 Instrukcje sterujące

Podobne prezentacje


Prezentacja na temat: "Wykład 2 Instrukcje sterujące"— Zapis prezentacji:

1 Wykład 2 Instrukcje sterujące M-pliki: skrypty i funkcje. Przykłady skryptów. Globalność zmiennych. Metody debuggowania. Funkcje Struktura funkcji Zmienne nargin, nargout, zmienne lokalne, zmienne globalne Subfunkcje i funkcje prywatne. Pseudokompilacje funkcji, usuwanie funkcji z pamięci Przykłady funkcji Kolejne funkcje własne Matlab’a

2 Przykład 1- life C:\Matlab\toolbox\matlab\demos

3 PODSTAWOWE FUNKCJE I STAŁE MATEMATYCZNE
Funkcja opis sin(z), cos(z), tan(z), cot(z) Sinus, cosinus, tangens, cotangens; argument funkcji w radianach; asin(z), acos(z), atan(z), acot(z) Funkcje cyklometryczne; wynik w radianach; sinh(z), cosh(z), tanh(z), coth(z) Funkcje hiperboliczne; argument w radianach; sqrt(z) Pierwiastek z ; z<0 – wynik zespolony;

4 exp(z) log(z) log2(z) abs(z) angle(z) real(z), imag(z) conj(z) ez
ln(z); z<0 – wynik zespolony; log2(z) log2z; z<0 – j.w. abs(z) wartość bezwzględna lub moduł liczby zespolonej; angle(z) argument liczby zespolonej; real(z), imag(z) część rzeczywista i urojona liczby z conj(z) liczba zespolona sprzężona;

5 complex(x,y) ceil(z) floor(z) fix(z) round(z) rem(x,y); mod(x,y)
utworzenie liczby zespolonej; ceil(z) zaokrąglenie liczby w górę; floor(z) zaokrąglenie liczby w dół; fix(z) zaokrąglenie liczby dodatniej w dół, ujemnej w górę; round(z) zaokrąglenie do najbliższej liczby całkowitej; rem(x,y); mod(x,y) reszta z dzielenia x przez y; sign(x) funkcja signum;

6 FUNKCE OPERUJĄCE NA WEKTORACH (na MACIERZACH podane wcześniej)
max(x) największy element wektora x; min(x) najmniejszy element wektora x; sum(x) sumę elementów wektora x; prod(x) iloczyn elementów wektora x; mean(x) średnia arytmetyczna elementów wektora x; length(x) długość wektora

7 1.     Kolejne funkcje własne Matlab’a
type – type mój %wyświetla zawartość skryptu moj disp – wyświetla zmienną bez jej nazwy, num2str – numeryczna -> string disp(z), disp(‘obliczenia zakończone a=’); disp (a), greckie litery nie działają. pause – zatrzymuje wykonywanie m-pliku do wciśnięcia klawisza, pause(n)- na n sekund, pause on, pause off, umożliwia lub uniemożliwia ponowne wykorzystanie tej funkcji input – podanie zmiennej input(‘podaj a, a=’) lub a= input(‘podaj a, a=’) error – komunikat błędu wewnątrz funkcji, przerwanie f-cji i przekazanie sterowania do okna poleceń ... error(‘za mało argumentów’)

8 menu – zwraca numer wyboru:
K = menu('Choose a color','Red','Blue','Green') (uwaga: istnieje również funkcja uimenu w GUI) keyboard – przerywa wykonywanie funkcji i wraca do okna poleceń „>>K”. Po wpisaniu „return” wraca do funkcji. plot - wykresy: plot (x,y) - najprostsze zastosowanie, gdzie np. x=[…], y=funkcja([x]) clock – zwraca 6-elementowy wektor zawierający obecną datę i czas w formie dziesiętnej c=clock => c=[rok, miesiąc, dzień, godzina, minuty, sekundy] find – znajduje indeksy elementów spełniających podany warunek X=[ find(X~=0); Przykład: Usuwanie elementów zerowych X=[ ]; index=find(X~=0); nowy=X(index) =>[ ];

9 size – rozmiar macierzy
all – czy wszystkie elementy wektora są niezerowe lub w kolumnie macierzy, isnan – czy liczba jest NaN => 0 lub 1 (0/0=>NaN) isinf– czy liczba jest Inf => 0 lub 1 finite– czy liczba jest skończona rem – reszta z dzielenia rem(6,4)=>2

10 roots – oblicza miejsca zerowe wielomianu.
Algorytm w oparciu o obliczenie wartości własnych macierzy współczynników (patrz help) przykład: s3-6s2-72s-27 p=[1 –6 –72 –27]; r=roots(p) => ; –5.7345; –0.3884 prod – mnożenie elementów wektora lub elementów kolumn macierzy cross – cross(A x B) – iloczyn wektorowy dot – iloczyn skalarny eval , feval (przy łańcuchach znaków) !!!!! >> R=input(‘co robic’,'s'); eval(R) >> F feval(F,9.64)  foo(9.64)

11 try wyrażenie catch zrób_gdy_wyrażenie_niegramatyczne end
INSTRUKCJE POMOCNICZE error(‘tekst’) – opuszczenie programu lasterr – zwraca ostatni komunikat o błędzie, często używana z funkcją eval try wyrażenie catch zrób_gdy_wyrażenie_niegramatyczne end - Obsługa błędu składni return- opuszczenie danego skryptu lub funkcji, a następnie powrót do wywołującego ją programu warning (‘tekst’)- wyświetla tekst podobnie jak disp, ale może tego uniknąć poprzez polecenie Warning off (Warning on). Warning backtrace – wyświetla tekst podając dodatkowo ścieżkę i nazwę pliku, skąd jest „warning”.

12 Instrukcje sterujące IF if n>0 …….. (instrukcje) elseif n = = 0
IF if n>0 …….. (instrukcje) elseif n = = 0 else end

13 Relacje i wyrażenia logiczne
Operatory porównania (przy instrukcji if ..): A= =B A~ =B A<B A<=B A>B A>=B

14 WHILE while prod(1:n)<10^100 n=n+1 end FOR for i=1:n % i=[1:n] x(i)=0 !!! przykład nieefektywnego programowania  zeros(1:n)

15 SWITCH: SWITCH zmienna CASE wartość zmiennej, polecenia CASE {wartość1, wartość2,…} ... OTHERWISE, END Uwaga: W przeciwieństwie do języka C Matlab wykonuje tylko pierwszy pasujący przypadek i nie sprawdza pozostałych. Dlatego nie jest używana instrukcja „break”

16 Przykład: w=4; s=0.5; operator=’*’; switch operator case ‘+’ w=w+s; case ‘{‘*’,’.*’} w=w*s; case ‘/’ w=w/s otherwise w=w-s; end

17    Skrypty Wywołanie skryptu poprzez nazwę. Zmienne skryptu są przechowywane w pamięci jako zmienne globalne. Debuggowanie – menu edytora Debug lub Breakpoints. Ewentualne wyświetlanie wartości zmiennych (brak średnika).

18 Funkcja Ciało funkcji: function b=oblicz(x)
% pomoc (help) do uzyskania po poleceniu „help oblicz” % j.w (wolna linia) % komentarz programisty % chcemy uzyskać funkcję f(x)=sin(x2)/(x2-x) b=sin(x.^2)./(x.^2-x); % średnik zapobiega podwójnemu wyświetleniu wyniku wywołanie: >> oblicz(3) >> u=oblicz([1,3,8,7])

19 Uwagi: ·        a) Bardzo ważna jest nazwa pliku, a nie nazwa f-cji zadeklarowana wewnątrz pliku (nazwa funkcji do 31 znaków). ·       b) Funkcja lookfor rozpoznaje słowa tylko z I linii. ·      c)  Wszystkie zmienne w funkcji są lokalne (zapominane po wyjściu – sprawdzić na ćw.). ·       d) Nie można wewnątrz funkcji odwoływać się do zmiennych zewnętrznych. Z (c) i (d) wynika, że można dublować nazwy zmiennych e) Funkcję można wywoływać rekurencyjnie, ale patrz (c).

20 · Można zmienną zmienić na globalną
·        Można zmienną zmienić na globalną. Należy wewnątrz funkcji zadeklarować global nazwa_zmiennej. Wówczas zmienna jest pamiętana w kolejnych wywołaniach funkcji, ale nie jest pamiętana w przestrzeni roboczej i innych funkcjach lub skryptach. Można to uzyskać deklarując global nazwa_zmiennej również tam. Wówczas jest to sama zmienna. ·        clear global – usuwa wszystkie zmienne globalne. ·        Funkcja może mieć kilka argumentów wejściowych (input arguments) ·        Ilość argumentów wejściowych może być zmienna ·        Funkcja może zwracać kilka argumentów wyjściowych (output arguments) przykład: [X,Y]=fun2(3), gdzie X i Y mogą być macierzami o innych wymiarach.

21  Funkcja ze zmienną globalną:
function nasza1(x) global a; b=a+x;  function nasza2(x) b=a-x; >> global a; a=7; >>nasza1(4)*nasza2(3) =>11*4=44 Można teraz zmieniać zmienną a bezpośrednio z przestrzeni roboczej bez konieczności edycji obu funkcji.

22 Funkcja zwracająca 2 wartości:
function [mean,stdev]=stat(x) [m,n]=size(x) if m= =1 m=n end mean=sum(x)/m stdev=sqrt(sum(x.^2)/(m-mean) wywołanie: >> [M,S]=stat(rand(10,1000))

23 Funkcje o zmiennej ilości argumentów wej/wyjściowych
nargin (number of input arguments) nargout (number of output arguments)  Przykład: function y=wiele(x1,x2) if nargin= = 1 x2=10; end y=sin(x1*x2);  >> wiele(pi,2) =>sin(2 pi)=0 >> wiele(pi/20) =>sin(pi/2)=1  nargout dotyczy sposobu wywołania funkcji w innej funkcji lub oknie poleceń.

24 W przypadku kiedy w deklaracji funkcji nie chcemy określić maksymalnej liczby argumentów wejściowych lub wyjściowych można użyć funkcji: varargin varargaout Przykład: function wynik=zmienna2(varargin) a=1; z=varargin{2}; wynik=a+z; >> zmienna2(2,6,11) =>7

25 Przestrzeń robocza funkcji:
Każda funkcja ma przydzieloną pamięć odseparowana od przestrzeni roboczej Matlab’a. Dlatego funkcje operuja na zmiennych lokalnych. Po wywołaniu funkcji Matlab przekształca funkcję w pseudokod i zapamiętuje go, co przyspiesz wykonywanie funkcji. Pseudokod można usunąć z pamięci komputera poleceniem: clear nazwa_funkcji clear functions – usuwa wszystkie funkcje clear all – usuwa wszystkie funkcje i zmienne

26 Pseudokompilacja funkcji Do przyspieszenia działania dużych programów z rozbudowanym GUI (lub ukrycia kodu). Uruchomienie funkcji z Matlab’a t.j m-plik, ale nie można po kompilacji zmieniać nazwy pliku zewnętrznie. pcode nazwa_funkcji => p-plik Powstaje plik nazwa_funkcji.p

27 Subfunkcje ·        M-pliki mogą zawierać kody więcej niż jednej funkcji. Funkcja zapisana jako pierwsza jest funkcją główna i jej nazwa pokrywa się z nazwą m-pliku. ·        Zmienne wszystkich funkcji z tego samego m-pliku są nadal lokalne dla tych funkcji. ·        Subfunkcje mogą być wywołwane tylko przez funkcje z tego samego m-pliku.

28 Przykład (Higham): function max_err=poly1err(n)
% POLY1ERR(N) Błąd w interpolacji liniowej dowolnej funkcji (p=a*x+c; a=(f1-f0)/(1-0); c=f0) max_err=0; f0=f(0); f1=f(1); for x=linspace(0,1,n); p=x*f1+(1-x)*f0; err=abs(f(x)-p); max_err=max(max_err,err); end; % Subfunkcja function y=f(x) % Function to be interpolated, F(x) y=sin(x);

29 Ta sama funkcja z optymalnym wykorzystaniem operacji wektorowych:
 function max_err=poly2err(n) f0=f(0); f1=f(1); x=linspace(0,1,n); p=x*f1-(x-1)*f0; err=abs(f(x)-p); max_err=max(err); % Subfunkcja function y=f(x) % Function to be interpolated, F(x) y=sin(x);

30 Przykład – funkcja PEAKS

31 Przykład – funkcja PEAKS
function [xz,y,z] = peaks(arg1,arg2); %PEAKS A sample function of two variables. % PEAKS is a function of two variables, obtained by translating and % scaling Gaussian distributions, which is useful for demonstrating % MESH, SURF, PCOLOR, CONTOUR, etc. % There are several variants of the calling sequence: % % Z = PEAKS; Z = PEAKS(N); Z = PEAKS(V); % Z = PEAKS(X,Y); PEAKS; PEAKS(N); % PEAKS(V); PEAKS(X,Y); [X,Y,Z] = PEAKS; % [X,Y,Z] = PEAKS(N); [X,Y,Z] = PEAKS(V);

32 function [xz,y,z] = peaks(arg1,arg2);
if nargin = = 0 [x,y] = meshgrid(-3:dx:3); elseif nargin = = 1 if length(arg1) = = 1 [x,y] = meshgrid(-3:6/(arg1-1):3); % grafika3D else [x,y] = meshgrid(arg1,arg1); % grafika3D end x = arg1; y = arg2; z = 3*(1-x).^2.*exp(-(x.^2) - (y+1).^2) - 10*(x/5 - x.^3 - y.^5).*exp(-x.^2-y.^2) ... - 1/3*exp(-(x+1).^2 - y.^2);

33 if nargout > 1 xz = x; elseif nargout = = 1 xz = z; else % Self demonstration disp('z = 3*(1-x).^2.*exp(-(x.^2) - (y+1).^2) ... ') disp(' *(x/5 - x.^3 - y.^5).*exp(-x.^2-y.^2) ... ') disp(' - 1/3*exp(-(x+1).^2 - y.^2) ') surf(x,y,z) % grafika3D axis([min(min(x)) max(max(x)) min(min(y)) max(max(y)) ... min(min(z)) max(max(z))]) xlabel('x'), ylabel('y'), title('Peaks') end

34 ŚRODOWISKO MATLABA Okno poleceń. Funkcje obsługujące okno poleceń. clc
lit Powtórzenie ostatniego polecenia lub ostatniego polecenia zaczynającego się od „lit” clc wyczyszczenie okna poleceń i umieszczenie kursora w jego lewym górnym rogu; home umieszczenie wiersza poleceń i kursora w lewym górnym rogu okna poleceń; Ctrl+C przerwanie obliczeń

35 echo on/echo off more on/more off diary plik diary off/on
włącza/wyłącza wysyłanie na ekran treści wykonywanych poleceń; more on/more off włącza/wyłącza stronicowanie tekstów wysyłanych na ekran; diary plik polecenia i teksty (bez grafiki) wysyłane na ekran będą zapisywane w pliku o podanej nazwie; diary off/on przełącznik funkcji diary loose/compact zmiana interlinii w wyświetlanym tekście

36 Format Opis Wynik dla 1/23 short 0,0435 short e 4,3478e-002 long
Formaty liczb. Do określenia sposobu wyświetlania liczb rzeczywistych w oknie służy funkcja format. Użycie funkcji nie ma wpływu na dokładność wykonywanych obliczeń, a tylko na widok liczby na ekranie. UWAGA: Przed każdym poleceniem dopisać format Format Opis Wynik dla 1/23 short 5-cyfr.liczba stałopozycyjna (format domyślny); 0,0435 short e 5-cyfr.liczba zmiennopozycyjna; 4,3478e-002 long 15-cyfr.liczba stałopozycyjna; 0,

37 15-cyfr.liczba zmiennopozycyjna; short g
long e 15-cyfr.liczba zmiennopozycyjna; 4, e-002 short g 5 znaczących cyfr liczby stało- lub zmiennopozycyjnej; 0,043478 long g 15 znaczących cyfr liczby stało- lub zmiennopozycyjnej; 0, hex liczba szestnastkowa; 3fa642c8590b2164 + drukuje znak + dla liczb dodatnich,- dla ujemnych, spację dla zera; bank format walutowy 0,04 rat przybliża liczbę ułamkami małych liczb całkowitych; 1/23

38 pierwiastek z liczby –1; Inf lub inf
STAŁE MATEMATYCZNE stałe opis pi przybliżenie wartości eps względna dokładność zmiennoprzecinkowa; i lub j pierwiastek z liczby –1; Inf lub inf nieskończoność (ang. Infinity); jest rezultatem operacji, która przekracza zakres arytmetyki komputera, np.dzielenie przez 0; NaN lub nan nie liczba; jest wynikiem matematycznie niezdefiniowanych operacji;

39 Reprezentacja zmiennych i format wyświetlania
 zmienne typu "double precision", domyślnie wyświetla 4 miejsca po przecinku.  Zmiana formatu wyświetlania – "format" a=13/3  a = 4.3333  format long a

40 format short – 4 miejsc (stało-przecinkowa) – domyślny
format – powrót do domyślnego long – 15 (stało) short e – 5 (zmienno-przecinkowa) long e – 15 (zmienno) rat – w postaci ułamka format rat a  a = 13/3

41 format a  a = 4.3333 compact – pomijanie pustych linii przy wyświetlaniu loose – wprowadzenie pustych linii przy wyświetlaniu  UWAGA NA NAZWY: Zmienne specjalne i stałe  realmax  realmin – najmniejsza liczba, która można dodać do 1 I otrzymać większa od 1)  realmin

42 0/0  NaN  9/0  Inf ans beep pi eps  i lub j

43 nargin (ile we argumentów funkcji)
nargout (ile wy wartości funkcji) Największa użytkowa dodatnia liczba całkowita bitmax varargin – zmienna ilość arg. we funkcji varargout – zmienna ilość wartości wy funkcji

44 Przykład 1- life C:\Matlab\toolbox\matlab\demos

45

46 n = [m 1:m-1]; e = [2:m 1]; s = [2:m 1]; w = [m 1:m-1]; while get(axHndl,'UserData')==play, % How many of eight neighbors are alive. N = X(n,:) + X(s,:) + X(:,e) + X(:,w) + ... X(n,e) + X(n,w) + X(s,e) + X(s,w);


Pobierz ppt "Wykład 2 Instrukcje sterujące"

Podobne prezentacje


Reklamy Google