1. Programowanie w języku Matlab
Transkrypt
1. Programowanie w języku Matlab
Programowanie w języku Matlab D. Caban, P. Skurowski Wykład 1. Składnia języka, podstawowe struktury i operacje Matlab Nazwa pochodzi od MATrix LAboratory Środowisko obliczeń numerycznych i symbolicznych posiadające swój język programowania wysokiego poziomu Język matlaba – interpretowany, dosyć wolny Matlab jest interfejsem napisanym w języku Java do szybkich bibliotek numerycznych (blas, fftw) Zalety Prosty język wysokiego poziomu DuŜa liczba dedykowanych bibliotek tematycznych (tzw toolboxy) Dedykowane środowiska graficzne: simulink, simbiology, simevent, system identification… Interpreter zleceń „on-line” MoŜliwość korzystania z kodu w C i Fortran Dostęne darmowe klony: SCIlab, Octave 1 Wady Wolne operacje interpretowane Konieczność przestawienia się na wektorową koncepcję wykonania programu DuŜe wymagania pamięciowe Dosyć drogi Konsola Matlaba workspace historia wiersz poleceń edytor macierzy edytor profiler I inne zaleŜnie od modułów Typy danych Macierze Single (float), double int8, int16, int32, int64 uint8, uint16, uint32, uint64 logical Macierze komórek (cell arrays) Macierze rzadkie Wartości specjalne: NaN, Inf, -Inf Struktury Obiekty Obiekty Java 2 Podstawienie >> a=1 a = 1 >> a=1; >> a=i %lub a=j a = 0 + 1.0000i >> b=-5:5 % zadeklarowanie wektora przez przedział b = -5 -4 -3 -2 -1 0 1 2 3 4 5 >>c=abs(b) c = 5 4 3 2 1 0 1 2 3 4 5 >>d=[1,2,3,4]; %wiersz d=[1 2 3 4] d = 1 2 3 4 >>d=[1;2;3;4]; %kolumna d = 1 2 3 4 >> e=0:0.2:1 % zadeklarowanie wektora przez przedział z zadanym krokiem e = 0 0.2 0.4 0.6 0.8 1 Podstawienie c.d. >> a=[1 2; 3 4] % tablica dwuwymiarowa a = 1 2 3 4 >> a(:,:)=7 a = 7 7 7 7 >> a=1; b=2; c=3; d=4; >> e=[a, b; c, d]; % podstawienie zmiennych do macierzy >> a = [1;2]; b=[3;4]; >> c = [a, b] c = 1 3 2 4 >> d = [1,2;3] % dane niespójne ??? Error using ==> vertcat CAT arguments dimensions are not consistent. >> A = [5 7 8; 0 1 9; 4 3 6]; % macierz wielowymiarowa >>A(:,:,2) = [1 0 4; 3 5 6; 9 8 7]; Tworzenie macierzy a=ones(m,n); – macierz z jedynek rozmiaru (m x n) a=zeros(m,n); – macierz z zer rozmiaru (m x n) , zeros(n) a=eye(n); – macierz jednostkowa rozmiaru (n x n) , eye(2,3) a=diag([1 2 3],k); – macierz o zadanej k-tej diagonalnej, A=rand(m,n); – macierz o wartosciach losowych z (0; 1) A=hilb(n); – macierz Hilberta rozmiaru (n x n) , A=invhilb(n); – macierz odwrotna do m. Hilberta, A=magic(n); – kwadrat magiczny, n = 1, 3, . . . A=linspace(p,k, ile); - liniowy przedział od p do k A=logspace(p,k, ile); - log przedział od p do k [Y,X]=meshgrid(y,x); - tworzy „układ współrzednych” 3 Odwołania do elementów macierzy >> a= [1,2,3;4,5,6;7,8,9]; >> b= a(2:3,:) b = 4 5 7 8 Odwołanie normalne >> b= a(2,2) b = 5 6 9 >> A(2,2,2) ans = 5 Usuwanie elementów >> b=a; >> b(:,2)=[]; % Dostęp liniowy >> b=a(7) b = 3 >> b=a(:) b = 1 4 7 2 5 8 3 6 9 Indeksacja logiczna Podstawowe operacje macierzowe >>a=[1,2;3,4]; b=[5;6]; c=[7,8];d=[1,2;2,1]; dodawanie macierzy >>e= a + d; >>f= a + b; ??? Error using ==> plus Matrix dimensions must agree. MnoŜenie macierzy >>e=a*b; %wektor kolumnowy >>e=a*d; %macierz 2x2 >>e=c*d; %wektor wierszowy >>e=b*c; %macierz 2x2 >>f=c*b; %skalar MnoŜenie elementów macierzy >>g=a.*d; Dzielenie elementów macierzy Lewostronne - \ Prawostronne - / Po elementach ./ , .\ Potęgowanie >>g= a^2; %macierz kwadratowa >>h=a.^2; % po elementach Transpozycja >> b=a’; Podstawowe operacje macierzowe a=triu(A,k); – podmacierz trójkatna górna poczynajac od k-tej przekatnej, a=tril(A,k); – . . . dolna a=diag(A,k); – k-ta diagonalna utworzona jako kolumna, diag(A) a=rot90(A); – obrót macierzy o 90 st a=fliplr(A); – obrót macierzy wokół pionowej osi symetrii, a=flipud(A); – obrót macierzy wokół poziomej osi symetrii, a=reshape(A,m,n); – zamiana macierzy A na postać (m x n) A=ndims(A); - podaje liczbę wymiarów macierzy a=squeeze(A); – usuwa nadmiarowe wymiary y=det(A); – wyznacznik, a=inv(A); – macierz odwrotna, [m, n]=size(A); – m – liczba wierszy, n – liczba kolumn, n=length(A); – liczba kolumn, 4 Działanie funkcji na macierzach Działają na macierzach „element po elemencie” sin, cos, tan, cot, asin, acos, atan, acot, sinh, cosh, tanh, coth, asinh, acosh, atanh, acoth, exp, log, log10, abs,angle, real, imag, conj, sqrt, sign, rem, round, floor, fix, ceil, gcd, lcm Działają na macierzach jak na zbiorze wektorów (kolumnowych) max, min, sum, prod, sort, length, median, mean, std, any, all, cumprod, cumsum >> a= [1,2,3;4,5,6;7,8,9]; >> sum(a) ans = 12 15 18 Operacje logiczne na macierzach Macierz moŜe być potraktowana jako argument podczas operacji logicznych >>a= [1,2,3;4,5,6;7,8,9]; >>w=a>5 w= 0 0 0 0 0 1 1 1 1 >>w=a~=b; >>w=a==c; Operacje wykonywane dla kaŜdego elementu macierzy – odpowiedzią jest macierz typu logical Indeksacja logiczna Jest najwygodniejszą meodą dostępu warunkowego do elementów macierzy, Pozwala na unikanie pętli >>a=1:10 a= 1 2 3 4 5 6 7 8 9 10 >>w=mod(a,2)==0 0 1 0 1 0 1 0 1 0 1 >>a(w)=0 1 0 3 0 5 0 7 0 9 0 5 Testowanie i konwersja typów Szereg funkcji pozwalająch na: informowanie o zmiennych length, numel, ndims, size, exist testowanie własności zmiennych isinteger, isfloat, ischar, islogical iscellstr, isjava, isinf, isfinite ...(is*) konwersje typów double, single, int8..int64, uint8..uint64, int2str, num2str 6