1 Wykład 2 Dr Aneta Polewko-Klim https://play.google.com
2 Darmowe odpowiedniki MATLABA: Octave i Scilab
3
4 26. Skrypty -Skrypt to plik tekstowy o rozszerzeniu.m zawierający instrukcje; -Skrypty nie pobierają żadnych argumentów ani żadnych nie zwracają, operują tylko na zmiennych dostępnych w przestrzeni, są tam zapisywane wszystkie zmienne utworzone w skryptach; -Skrypt można utworzyć za pomocą dowolnego edytora tekstowego lub bezpośrednio w pakiecie Matlab; -Skrypt uruchamiamy podając jego nazwę w wierszu poleceń. Podczas wykonywania skryptu można wpisywać dane z klawiatury oraz wyświetlać wyniki w oknie poleceń. -Skrypt można wywołać w innym skrypcie podając jego nazwę. Skrypt Konsola - przykład wykres
5 19. Formaty i wyświetlanie liczb. Obliczenia w Matlabie są wykonywane z podwójną precyzją, ale format wyświetlania liczb można zmienić za pomocą: liczb można zmienić za pomocą: format parametr_formatowania Parametr formatowania Reprezentacja short short e long long e hex + bank compact loose rat 1.3333 0.0000 1.3333e+000 1.2345e-006 1.33333333333333 0.00000123450000 1.333333333333333e+000 1.234500000000000e-006 3ff5555555555555 3eb4b6231abfd271 Znak + jest wyświetlany dla liczb dodatnich 1.33 0.00 Wyłącza dodawanie dodatkowych pustych wierszy Włącza dodawanie dodatkowych pustych wierszy 4/3 1/810045 dokładość numeryczna MALAB-a >>eps >> 2.2204e-16
6 short – reprezentacja stałoprzecinkowa pięciocyfrowa short e – reprezentacja zmiennoprzecinkowa pięciocyfrowa long – reprezentacja stałoprzecinkowa piętnastocyfrowa long e – reprezentacja zmiennoprzecinkowa piętnastocyfrowa hex – szesnastkowe wyświetlanie zawartości komórek zawierających daną liczbę + – znak + jest wyświetlany dla liczb dodatnich bank – format walutowy, pełna część całkowita, do dwóch miejsc po przecinku compact – wyłącza dodawanie dodatkowych pustych wierszy loose – włącza dodawanie dodatkowych pustych wierszy rat – przedstawia ułamki dziesiętne za pomocą ilorazu małych liczb całkowitych Konsola - przykład short vs long
7 20. Przydatne Funkcje Statystyczne dostępne po wpisaniu >>help datafun
8 20. Wyświetlanie macierzy i ich rozmiarów. FunkcjaOpis disp(A)wyświetla zawartość macierzy A w oknie poleceń size(A)wyświetla rozmiar dwuwymiarowej macierzy A (liczbę wierszy i kolumn) w postaci dwuelementowego wektora wierszowego s=size(A) s=[n m] zmiennej s przypisuje zmiennej n liczbę wierszy, a zmiennej m liczbę kolumn n=size(A,1) przypisuje zmiennej n liczbę wierszy m=size(A,2) przypisuje zmiennej m liczbę kolumn length(x)zwraca długość wektora x lub dłuższy z wymiarów macierzy
9 Przykład Przykład: >> K=[1 2 3; 4 5 6; 7 8 9; 10 11 12] >> size(K) >> 4 3 >> 4 3 Wyświetlanie zawartości macierzy A w oknie poleceń: >> disp(K) 1 2 3 1 2 3 4 5 6 4 5 6 7 8 9 7 8 9 10 11 12 10 11 12 Pytanie: Co wyświetli się na ekranie gdy wpiszemy: size(K,1)? size(K,2)? length(K)?
10 21. Arytmetyka macierzowa i tablicowa. A=[1 -1; -2 3]; B=[1 1; 0 -2]; Dodawanie i odejmowanie macierzowe i tablicowe jest identyczne, tj. odbywa się element po elemencie: A + B = [2 0; -2 1] A – B = [0 –2; -2 5] Mnożenie macierzowe oznaczamy *, natomiast mnożenie tablicowe.* Podczas mnożenia macierzowego należy pamiętać, aby liczba wierszy pierwszej macierzy była równa liczbie kolumn macierzy drugiej. Ponadto w mnożeniu jak i w dzieleniu macierzowym nie jest spełnione prawo przemienności, A*B to nie to samo co B*A. A * B = [1 3; -2 –8] B * A = [-1 2; 4 –6] A.* B = B.* A = [1 –1; 0 –6]
11 nie jest przemienne, ponadto występuje tu dzielenie lewostronne i prawostronne. Dzielenie macierzowe nie jest przemienne, ponadto występuje tu dzielenie lewostronne i prawostronne. macierz stojąca po prawej stronie jest dzielona przez macierz stojącą po lewej stronie. Ogólnie służy on do rozwiązywania równań liniowych postaci: Operator lewostronny – macierz stojąca po prawej stronie jest dzielona przez macierz stojącą po lewej stronie. Ogólnie służy on do rozwiązywania równań liniowych postaci: wtedy: A * x = b wtedy: x = A\b w tym wypadku wektor b jest dzielony przez macierz A. macierz stojąca po lewej stronie operatora jest dzielona przez macierz stojącą po jego prawej stronie: Operator prawostronny – macierz stojąca po lewej stronie operatora jest dzielona przez macierz stojącą po jego prawej stronie: A B A / B mamy także dwa operatory, a ponieważ przemienność w tym wypadku obowiązuje, gdyż operacje wykonujemy na poszczególnych elementach tablicy, mamy tylko dwa różne wyniki dzielenia: Dzielenie tablicowe: mamy także dwa operatory, a ponieważ przemienność w tym wypadku obowiązuje, gdyż operacje wykonujemy na poszczególnych elementach tablicy, mamy tylko dwa różne wyniki dzielenia: A.\B = B./A A./B = B.\A
12 Przykład >>A=[2 -3; 3 -2]; >>B=[-3 2]; >>wektor_wynikowy=A\B >>wektor_wynikowy >> 0.24 0.26 Rozwiąż układ równań
13 Potęgowanie: A.^3 = A.*A.*A A^(.3) 4^B Transpozycja macierzy jest to zamiana wierszy macierzy z kolumnami. Jeżeli mamy macierz o składnikach rzeczywistych to transpozycja macierzowa i tablicowa daje taki sam wynik, natomiast różni się gdy składnikami macierzy są liczby zespolone. W tym przypadku transpozycja tablicowa zamienia tylko wiersze z kolumnami, natomiast transpozycja macierzowa zwraca macierz o elementach sprzężonych. 1 2 3 1 2 3 4 5 6 4 5 6 7 8 9 7 8 9 10 11 12 10 11 12 1 4 7 10 1 4 7 10 2 5 8 11 2 5 8 11 3 6 9 12 3 6 9 12
14 Przykład
15 22. Funkcje matematyczne. Matlab udostępnia wiele standardowych funkcji matematycznych. Argumentem każdej z nich może być macierz to wówczas operacja wykonywana jest osobno na każdym jej elemencie FunkcjaOpis sin(z), cos(z), tan(z), cot(z) funkcje trygonometryczne, argument w radianach sqrt(z)pierwiastek kwadratowy (jeśli z
16 23. Operatory porównania i logiczne NazwaOperatorFunkcjaRelacja równe a == b eq(a,b)a = b różne a ~= b ne(a,b) a b mniejsze a < b lt(a,b)a < b większe a > b le(a,b)a > b mniejsze równe a = b ge(a,b) a b NazwaOperatorFunkcjaRelacja alternatywa a b or(a,b)a lub b koniunkcja a & b and(a,b)a i b negacja ~ a not(a)nie a
17 24. Instrukcje sterujące Instrukcja warunkowa if Wykonywana jeśli wyrażenie jest prawdziwe. w W oknie poleceń tą instrukcję należy wprowadzać linijka po linijce. if warunek (wyrażenie_logiczne) instrukcje end if warunek 1 instrukcje elseif warunek 2 instrukcje elseif warunek 3 instrukcje else instrukcje end
18 Przykład >> if x>3 >> f=x.*x-6; >>elseif x>=-1 & x> f=x; >>else >> f=x.*x-2; >>end Oblicz wartość funkcji f(x) :
19 Instrukcja warunkowa switch Wyrażenie może być liczbą lub łańcuchem znakowym. Wartość wyrażenia jest porównywana z wartościami kontrolnymi kolejnych przypadków case i wykonywane są instrukcje przy tej wartości case, która jest równa wyrażeniu. Jeżeli żadna z wartości kontrolnych nie odpowiada wyrażeniu wykonywane są instrukcje po opcjonalnym słowie otherwise. switch wyrażenie case wartość 1 wyrażenia instrukcje case wartość 2 wyrażenia instrukcje... otherwise instrukcje end
20 Przykład liczba=round(10*rand(1)); switch liczba case 1 wynik=sin(liczba) case 2 wynik=cos(liczba)otherwisewynik=tan(liczba)end wynik = -0.4161 -0.4161
21 Przykład w praktyce kliknij https://www.youtube.com/watch?v=A6cYmr3RBnI
22 Instrukcja for Podczas wykonywania instrukcji for kolumny macierzy_wartości przyporządkowywane są kolejno iterowanej zmiennej. W praktyce macierz_wartości ma postać min : max min : krok : max krok może być dodatni, ujemny, jak i ułamkowy. for zmienna=macierz_wartości instrukcje end
23 Przykład >> for i=1:5, >> for j=1:4, >> A(i,j)=(i+j)/(i+j+1); >> end Utwórz macierz A o rozmiarze 5x4, o wyrazach: o wyrazach:
24 Instrukcja while Instrukcje są powtarzane dopóki część rzeczywista wyrażenia ma wszystkie elementy różne od zera. Postać wyrażenia jest taka jak w instrukcji if czyli jest to wyrażenie logiczne. i=1; while wyrażenie_logiczne instrukcje i=i+1; end
25 Przykład Oblicz wartość setnego elementu ciągu Fibonacciego danego wzorem: >> u1=1; u2=1; i=2; n=100; >>while i>u3=u1+u2; >>u1=u2; >>u2=u3; >>i=i+1; >>end >>u3 wynik 3.5422e+020
26 Przykład w praktyce kliknij https://www.youtube.com/watch?v=PZVizaSaaK8
27 W domu samodzielnie zaproponuj algorytm, który zrealizuje kliknij www.swiatlonawymiar.pl
28 Przykłady instrukcji sterujących http://www.youtube.com/watch?v=-aULVtlzbN8
29 Instrukcja break i return Polecenie break kończy wykonywanie pętli wcześniej niż wynikałoby to z warunków stopu dla pętli while lub przed skończeniem pętli for, wychodząc o jeden poziom zagłębienia na zewnątrz. Instrukcja return powoduje natomiast bezwarunkowe przerwanie skryptu lub funkcji i powrót do miejsca wywołania. while wyrażenie_logiczne i=i+1; if i>=imax break end instrukcje end
30 25. Łańcuchy >>s=’Matlab’ Łańcuchy znakowe są wektorami składającymi się ze znaków. Łańcuch taki definiuje się za pomocą apostrofów np. >>s=’Matlab’ ; >>a=double(s); konwersji łańcucha na wektor kodów ASCII można dokonać poleceniem: >>a=double(s); >>char(a) konwersja odwrotna: >>char(a) Łańcuch jest wektorem, dlatego można na nim wykonywać operacje jak na zwykłych wektorach np. transpozycja łańcucha powodująca, że jego litery będą wypisywane jedna pod drugą. >>s’ Istnieje możliwość tworzenia macierzy, której wierszami są łańcuchy, w tym celu należy posłużyć się funkcją str2mat : >> S=str2mat('Matlab','procedury') S = S = Matlab Matlab procedury procedury
31 Łańcuchy >>s=’Matlab’ Łańcuchy znakowe są wektorami składającymi się ze znaków. Łańcuch taki definiuje się za pomocą apostrofów np. >>s=’Matlab’ ; >>a=double(s); konwersji łańcucha na wektor kodów ASCII można dokonać poleceniem: >>a=double(s); >>char(a) konwersja odwrotna: >>char(a) Łańcuch jest wektorem, dlatego można na nim wykonywać operacje jak na zwykłych wektorach np. transpozycja łańcucha powodująca, że jego litery będą wypisywane jedna pod drugą. >>s’ Istnieje możliwość tworzenia macierzy, której wierszami są łańcuchy, w tym celu należy posłużyć się funkcją str2mat : >> S=str2mat('Matlab','procedury') S = S = Matlab Matlab procedury procedury
32 26. Funkcje wejścia i wyjścia FunkcjaOpis x = input(tekst) wyświetla łańcuch tekst, oczekuje na wpisanie przez użytkownika danej liczbowej i przypisuje ją zmiennej liczbowej x; zamiast danej liczbowej można wpisać wyrażenie Matlaba, które funkcja obliczy x = input(tekst,’s’) wyświetla łańcuch tekst, oczekuje na wpisanie przez użytkownika łańcucha znakowego i przypisuje go zmiennej x pausezatrzymuje wykonywanie skryptu do chwili naciśnięcia przez użytkownika dowolnego klawisza pause(n)zatrzymuje wykonywanie skryptu na n sekund
33 Zadanie do wykonania : Oblicz pierwiastki dowolnego równania kwadratowego
34 a=input(`a=`); b=input(`b=`); c=input(`c=`); delta=b.*b-4*a.*c; if delta>0 x1=(-b-sqrt(delta))./(2*a); x2=(-b+sqrt(delta))./(2*a); disp(['x1= ',num2str(x1)]); disp(['x2= ',num2str(x2)]); elseif delta==0 x3=-b./(4*a); disp(['x1=x2= ',num2str(x3)]); else disp('rownanie nie ma pierwiastków rzeczywistych'); end
35 27. Uproszczony odczyt i zapis danych FunkcjaOpissavezapisuje binarnie wszystkie zmienne w pliku o nazwie matlab.mat save plik zapisuje binarnie wszystkie zmienne w pliku o nazwie plik.mat save plik lista zapisuje binarnie w pliku o nazwie matlab.mat tylko zmienne wymienione jako lista loadwczytuje zmienne zapisane w pliku matlab.mat load plik wczytuje zmienne zapisane w pliku plik.mat
36 Przykład Wczytaj 1 i 2 kolumnę z pliku o nazwie staredane.mat, następnie wymnóż dwie kolumny przez siebie i zapisz wynik jako 3 kolumnę do pliku o nazwie nowedane.mat, gdzie 1 i 2 kolumnę stanowią wcześniejsze dane wejściowe load staredane.mat -ascii x1=staredane(); x2=staredane(); x3= K=[]; save nowedane.mat K -ascii
37 28. Funkcje. Występują dwa rodzaje funkcji: a) funkcje wbudowane jak np. sqrt b) funkcje przechowywane w m-plikach (właśnie te m-pliki funkcyjne możemy tworzyć samodzielnie. - pierwszy wiersz m-pliku musi zawierać definicję nowej function funkcji: słowo kluczowe function - nazwę funkcji – musi być taka sama jak nazwa pliku (bez rozszerzenia) listę argumentów wyjściowych Jak to zrobić?
38 Definicja funkcji function [wart_fun1, wart_fun2,...]=nazwa_funkcji(parametr1, parametr2,...) % ewentualny opis funkcji w formie komentarza wart_fun1=wynik1; wart_fun2=wynik2;... function [y]=radst(x) %przelicza radiany na stopnie x – ilość radianów y=(x.*180)/pi; Ważne !!!: Ważne !!!: zmienne utworzone podczas działania funkcji są usuwane z chwilą zakończenia wykonywania funkcji i nie są widoczne poza nią, podobnie zmienne utworzone poza funkcją nie są widoczne w jej wnętrzu. Funkcja operuje więc na zmiennych lokalnych. global A B C Aby zmienna z przestrzeni roboczej Matlaba była widoczna w ciele funkcji należy zadeklarować ją jako globalną i deklarację tą powtórzyć w ciele funkcji global A B C
39 Szczegóły 1. Jeśli funkcja posiada kilka argumentów wyjściowych, oddzielamy je przecinkiem, a wszystkie umieszczamy w nawiasach kwadratowych np: function [e,cnt] = normest(S,tol) 2. Jeśli funkcja ma tylko jeden argument wyjściowy, nawiasy możemy pominąć: function r = roots(c) 3. Jeżeli nie zwraca argumentów wyjściowych, może być zapisana w postaci: function nazwa_funkcji(arg_wej) 4. Nazwy funkcji muszą się rozpoczynać literą, a pozostała część może być kombinacją liter, cyfr i znaku podkreślenia. Jeżeli nazwa pliku różni się od nazwy funkcji, to zwycięża nazwa pliku, dlatego powinno się stosować identyczne nazwy funkcji i pliku. 5. Kolejne linie po słowie function zaczynające się od % stanowią help
40 Dla zaawansowanych: pętle równoległe parfor, praca na kilku rdzeniach matlabpool http://www.youtube.com/watch?v=TXMhpKLi9hA