% 1. Cviceni X33ROB - ponekud hlubsi uvod do matlabu % % pripraveno na motivy Help souboru Matlabu % Vychazi ze skriptu Vitka Zyky a Hynka Baksteina % % The MathWorks Inc. (http://www.mathworks.com/) % MATrix LABoratory % Obsah : % - Uvod do matlabu % - Zpusob prace a napoveda % - Matice, konstanty, jednoduche vypocty % - Indexovani matic % - Programove konstrukce % - Proc nepouzivat cyklus %%% Uvod-------------------------------------------------------------- % Matlab : % - numericke vypocty, analyzy; symbolicke vypocty % - uplny programovaci jazyk, casti v C/C++, Fortanu % - blokove simulace (Simulink) % - vizualizace 1D, 2D, 3D dat, obrazky, video, 3D objekty % - jednoducha GUI % Efektivita programovani : % + silna oborova podpora % (toolboxy: http://www.mathworks.com/products/products_by_category.jsp % real time, image processing, optimalizations, neural networks, % signal processing, splines, wavelet, statistics, mapping, % symbolic computations, video) % - interpretovany kod % + debugovani, profiler (html vystup) % + programovani v C/C++, Fortranu % -> +++ vyvoj, vyzkum; - aplikace cd C:\users\krsek\rob06l\Source cd('C:\users\krsek\rob06l\Source') %%% Zpusob prace ------------------------------------------------------ % M file - textovy soubor s prikazy (skript) % z neho kopiruji na prikazovou radku Matlabu diary test.m diary off diary on diary off edit %%% Jak ziskat napovedu ----------------------------------------------- help sum helpwin helpdesk lookfor fourier %%% Zapis jednoduchych matic ------------------------------------------ % Vsechny promenne jsou matice. % Vektory a skalary jsou matice specialnich rozmeru. % Vektory (rozlisuje mala a velka pismenka) F = [1,2,3] f = [1;2;3] % Matice (pro prehlednost dobre oddelovat carkou) k = [9, 8, 7; 6, 5, 4; 3, 2, 1; 0 -1 -2] l = [cos(0.5) - sin(0.5); sin(0.5) cos(0.5)] L = [cos(0.5), -sin(0.5); sin(0.5), cos(0.5)] K = [k k+100; k+200 k+300] % spojovani bloku % posloupnosti 1:6 1:2:6 .5:-.1:0 x = [1:5;2:6] %%% Indformace o promennych -------------------------------------------- size(k) size(k,2) length(k) whos exist('k') clear('K') %%% Generovani jednoduchych matic ------------------------------------- Z1 = zeros(2,5) Z2 = ones(1,7) Z3 = eye(3) Z4 = diag([1 2 3 4 5]) %%% Specialni konstanty ------------------------------------------------- ans % answer inf % 1/0 infinity nan % 0/0 not-a-number isfinite isnan pi i, j % nepouzivat jako promenne, do cyklu radeji k,l,m ... %%% Indexace matic, prevody --------------------------------------------- k k(1,2) % dva parametry -> (nespojite) souradnice (sub) k(2,[2 3]) k(2,[1 3]) k(2,[1:3]) k(2,1:3) k(2,1:end) k(2,:) k([1 4 5]) % jeden parametr -> fyzicka souradnice (ind) k([1;4;5]) k([1 2;3 4;8 9]) k([2, 3],[3, 2]) k(sub2ind(size(k),[2 3],[3 2])) ind2sub(size(k),[1 2;3 4;8 9]) kk = k; kk(:,2) = [] % index vlevo + vypusteni nekterych sloupcu k(:) % prevod matice -> vektor %%% Generovani nahodnych cisel --------------------------------------- r1 = rand(1,1000); r2 = randn(100,100); hist(r1) hist(r2(:)) %%% Jednoduche vypocty ----------------------------------------------- %transpozice L' % nasobeni skalarem p = 5 * k % nasobeni matic: s = k * k % operace po prvcich p .* k % .* .+ .- .^ ./ % deleni % A*x = y A = [2 -3; 3 1] y = [1; 7] x = A\y % deleni zleva x = pinv(A)*y xa = y'/A % deleni zprava xa = y'*pinv(A) xb = A/y' % deleni zprava xb = A*pinv(y') %inverze inv(L) L' % relace ki = k>5 % == ~= > < <= >= & | ~ % asociativni vyber prvku find([1 0 -5]) ind = find(k>5) [s u] = find(k>5) k(ind) kk = k; kk(kk>5) = NaN %%% Prace s maticemi ------------------------------------------------------- % 'magicka matice': soucty radku, sloupcu a diagonal maji byt stejne A = magic(4) sum(A) sum(A') min(A) [u v] = max(A) min(A(:)) %%% Programovaci konstrukce -------------------------------------------------- %for l = [1:5] for l = [1,3,5,2] l a(l) = l^2; end; % i=1:20; a= i.^2; % if a = [1 2]; if( any(a>1) ) disp('t') else disp('f') end % elseif any all if( any(a>1) ), disp('t'); else disp('f'); end pause % ceka na klavesu break % ukonci beh %%% Proc nepouzivat cyklus ------------------------------------------- tic x = [1:1000000]; toc tic for k = 1:1000000 if(x(k)>30) x(k)=0; end end toc tic; x(x>30)=0; toc % Priklad indexujiciho pole (ozn sloupcu) n = 10; x = ones(n,1)*[1:n] n = 1000; tic x = ones(n,1)*[1:n]; toc tic for k = 1:n, for l = 1:n, x(l,k) = k; end; end; toc % Ukol x(i,j) = max(i,j) tic for k = 1:n, for l = 1:n, x(l,k) = max(k,l); end; end; toc tic x = max(ones(n,1)*[1:n],[1:n]'*ones(1,n)); toc % Vyroba sachovnice (n rozmer) tic x = zeros(n,n); x(1:2:end,2:2:end) = 1; x(2:2:end,1:2:end) = 1; toc tic; x = mod(ones(n,1)*[1:n] + [1:n]'*ones(1,n),2); toc