Wykład 2 Instrukcje sterujące

Slides:



Advertisements
Podobne prezentacje
Funkcje matematyczne Microsoft Office 2003 Exel.
Advertisements

Tablice 1. Deklaracja tablicy
Funkcje w PHP ABK.
Metody numeryczne część 1. Rozwiązywanie układów równań liniowych.
Mgr inż.Marcin Borkowski Podstawy Java Krótkie wprowadzenie dla studentów Wyższej Szkoły Ekologii i Zarządzania
Kompilator: a) gcc [cc, g++]
Języki programowania C++
PROGRAMOWANIE STRUKTURALNE
PROJEKTOWANIE GRAFICZNE
ZŁOŻONOŚĆ OBLICZENIOWA
Materiały do zajęć z przedmiotu: Narzędzia i języki programowania Programowanie w języku PASCAL Część 7: Procedury i funkcje © Jan Kaczmarek.
Materiały do zajęć z przedmiotu: Narzędzia i języki programowania Programowanie w języku PASCAL Część 8: Wykorzystanie procedur i funkcji © Jan Kaczmarek.
Programowanie imperatywne i język C
Programowanie imperatywne i język C Copyright, 2004 © Jerzy R. Nawrocki Wprowadzenie.
1 Dygresja: cztery płyty główne…. 2 Dygresja: osobliwości C /* cos o nieistniejacym typie Boolean */ /* oraz o operatorze przecinkowym */ #include int.
Metody numeryczne © Jacek Śmietański, Kraków 2005.
AUTOMATYZACJA OBLICZEŃ INŻYNIERSKICH
Wyrażenia Wyrażenie w Fortranie jest poprawną syntaktycznie kombinacją zmiennych, stałych, operatorów i funkcji. Wyrażenia są jednozdaniowymi przepisami.
Instrukcja skoku GO TO etykieta Np. GO TO 100 ….. 100WRITE (*,*) Przeskok do instrukcji 100 Uwaga! NIE WOLNO skakać do wnętrzna złożonych instrukcji warunkowych.
Metody numeryczne w chemii
PASCAL Dr Anna Kwiatkowska.
Arkusz kalkulacyjny Excel
AWK Zastosowania Informatyki Wykład 1 Copyright, 2003 © Adam Czajka.
Podstawy programowania
SQL – podstawowe funkcje
Programowanie w języku Matlab
Wykład 2 Dr Aneta Polewko-Klim
© A. Jędryczkowski – 2006 r. © A. Jędryczkowski – 2006 r.
ETO w Inżynierii Chemicznej
Wyrażenia w Turbo Pascalu.
Programowanie w języku Matlab
PL/SQL Zajęcia nr II PL/SQL(2) M. Rakowski - WSISiZ.
Jerzy F. Kotowski1 Informatyka I Wykład 14 DEKLARATORY.
Podstawy informatyki 2013/2014
Liczby całkowite dodatnie BCN
Użytkowanie i programowanie Matlaba
Metody obliczeniowe i podstawy programowania
Programowanie Matlaba
Przekazywanie parametrów do funkcji oraz zmienne globalne i lokalne
Źródła błędów w obliczeniach numerycznych
MOiPP Matlab Sortowanie Obliczenia symboliczne - Symbolic ToolBox
MOiPP Wykład 3 Matlab Przykłady prostych metod obliczeniowych.
Wykład 10 typ zbiorowy rekurencja.
MOiPP Wykład 7 Matlab cd..
Algorytmika Iteracje autor: Tadeusz Lachawiec.
MOiPP Matlab Przykłady metod obliczeniowych Obliczenia symboliczne
MOiPP Matlab Aproksymacja Interpolacja Inne metody obliczeniowe
WYKŁAD 3 Temat: Arytmetyka binarna 1. Arytmetyka binarna 1.1. Nadmiar
PWSW Mechatronika Wykład 7 Matlab cd.
Programowanie proceduralne Podstawy Programowania dla geoinformatyków Wykład 3 Rafał Witkowski, 2015.
WYKŁAD 06 Programowanie dynamiczne Grażyna Mirkowska.
Wybrane aspekty programowania w C++ (i nie tylko)
Wprowadzenie do Matlaba
SciLab.
SciLab.
Wstęp do programowania Wykład 2 Dane, instrukcje, program.
Pakiety numeryczne Skrypty, funkcje Łukasz Sztangret Katedra Informatyki Stosowanej i Modelowania.
Informatyka Transport Matlab c.d. Macierze cd. Wykresy graficzne
 Formuła to wyrażenie algebraiczne (wzór) określające jakie operacje ma wykonać program na danych. Może ona zawierać liczby, łańcuchy znaków, funkcje,
Osoby prowadzące zajęcia z Informatyki (II część): Prof. Mirosław Czarnecki (W+L) Konsultacje:piątek (p. 302a)
Osoby prowadzące zajęcia z Informatyki (II część): Prof. Mirosław Czarnecki (W+L) Konsultacje:piątek (p. 302a)
Wykład 3 Dr Aneta Polewko-Klim
Informacje ogólne.
Technika Mikroprocesorowa 1
Podstawy Informatyki.
Wykład 2 Dr Aneta Polewko-Klim
Tomasz Adamowicz Anna Kostun
ETO w Inżynierii Chemicznej
Zapis prezentacji:

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

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

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;

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;

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;

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

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’)

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=[9 0 5 0 4 3 0]; index=find(X~=0); nowy=X(index) =>[9 5 4 3 ];

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

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) =>12.1229; –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 = @foo, feval(F,9.64)  foo(9.64)

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”.

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

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

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)

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”

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

   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).

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])

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).

· 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.

 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.

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))

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ń.

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

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

  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

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.  

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);

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);

Przykład – funkcja PEAKS

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);

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);

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

Ś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ń

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

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,0347826086957

15-cyfr.liczba zmiennopozycyjna; short g long e 15-cyfr.liczba zmiennopozycyjna; 4,347826086956522e-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,0434782608695652 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

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;

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 4.33333333333333

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

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

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

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

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

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);