Pobieranie prezentacji. Proszę czekać

Pobieranie prezentacji. Proszę czekać

Wykład 2 1.Instrukcje sterujące 2.M-pliki: skrypty i funkcje. Przykłady skryptów. Globalność zmiennych. Metody debuggowania. 3.Funkcje a.Struktura funkcji.

Podobne prezentacje


Prezentacja na temat: "Wykład 2 1.Instrukcje sterujące 2.M-pliki: skrypty i funkcje. Przykłady skryptów. Globalność zmiennych. Metody debuggowania. 3.Funkcje a.Struktura funkcji."— Zapis prezentacji:

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

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

3 PODSTAWOWE FUNKCJE I STAŁE MATEMATYCZNE Funkcjaopis 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) e z log(z) ln(z); z<0 – wynik zespolony; log2(z) log 2 z; 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) 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 Matlaba 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: s 3 -6s 2 -72s-27 p=[1 –6 –72 –27]; r=roots(p) => ; –5.7345; – 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 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 …….. (instrukcje) else …….. (instrukcje) end

13 Relacje i wyrażenia logiczne Operatory porównania (przy instrukcji if..): A= =B A~ =B AB 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 end !!! przykład nieefektywnego programowania zeros(1:n)

15 SWITCH: SWITCH zmienna CASE wartość zmiennej, polecenia CASE {wartość1, wartość2,…} polecenia... OTHERWISE, polecenia 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(x 2 )/(x 2 -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ą. 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) global a; 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 Matlaba. 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 Matlaba 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 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 else x = arg1; y = arg2; end z = 3*(1-x).^2.*exp(-(x.^2) - (y+1).^2) - 10*(x/5 - x.^3 - y.^5).*exp(-x.^2-y.^2) /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(' - 10*(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ń. 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+Cprzerwanie obliczeń

35 echo on/echo off 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 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 FormatOpisWynik 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 long e15-cyfr.liczba zmiennopozycyjna; 4, e-002 short g5 znaczących cyfr liczby stało- lub zmiennopozycyjnej; 0, long g15 znaczących cyfr liczby stało- lub zmiennopozycyjnej; 0, hex liczba szestnastkowa; 3fa642c8590b 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 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 = format long a 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 = 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 1.Instrukcje sterujące 2.M-pliki: skrypty i funkcje. Przykłady skryptów. Globalność zmiennych. Metody debuggowania. 3.Funkcje a.Struktura funkcji."

Podobne prezentacje


Reklamy Google