Podstawowe techniki programowania w systemie MATLAB
Transkrypt
Podstawowe techniki programowania w systemie MATLAB
% Podstawy środowiska Matlab % Orientacja macierzowa środowiska. A=[1,2,3;4,5,6;7,8,9] % Odwołania do elementu macierzy A(2,3) A=A(2,3) % Instrukcja podstawienia powoduje aktualizację rozmiaru obiektu B=(1:9) B=reshape(B,3,3)' % Możliwość dynamicznej zmiany rozmiaru bez konieczności deklaracji rozmiaru C=[B B] C=[B;B] A(4,5)=10 % Nie można się odwoływać do elementu spoza zakresu indeksów A(6,7) % pojawia się informacja o błędzie: ??? Index exceeds matrix dimensions. % Przydatne kreatory tablic A=zeros(5) C=ones(3,6) D=eye(4) E=rand(10,1) % Działania matematyczne A=B B=A.^2 A+B B-A A*B B*A A.*B B./A + - / * ./ .* % Układy równań A=[6,-1,-2;1,2,0;2,3,-2] b=[-2;5;2] x=A\b % Rozwiązanie układu A*x=b A*x-b % Sprawdzenie – jaki powinien być wynik, a jaki jest % Skrypty i funkcje % Skrypt - plik tekstowy tworzony w edytorze Matlaba zawierający komendy matlabowskie % poniższe linie napisać w edytorze i zapamiętać w pliku o nazwie skrypt1.m clear all ; close all f=@(x) 2*sin(x).*cos(x); % definicja funkcji anonimowej x=(-pi:pi/100:pi); y=f(x); plot(x,y);hold on plot(x,y,'xb'); fprintf('\nAby kontynuować, naciśnij klawisz\n') pause % program czeka na naciśnięcie dowolnego klawisza hold off plot(x,f(x),'or');grid on; zoom on % i wykonać skrypt pisząc w oknie komend Matlaba jego nazwę: skrypt1 % Funkcja - m-plik definiujący nową funkcję – tworzona w edytorze Matlaba, ogólna postać: % function [lista parametrów wyjściowych]=fname(lista parametrów wejściowych) % Np. funkcja pomiaru czasu działania dodawania macierzy dwiema metodami (plik sumamac.m) function [timel,timem]=addmatrix(a,b,max_iter) if all(size(a)==size(b)) c=zeros(size(a)); tic; for iter=1:max_iter for i=1:size(a,1) for j=1:size(a,2) c(i,j)=a(i,j)+b(i,j); end end end timel=toc/max_iter; tic; for iter=1:max_iter c=a+b; end timem=toc/max_iter; else disp('Błąd rozmiarów macierzy'); end; %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % sprawdzić poprawność funkcji wykonując ją w oknie komend Matlaba % pamiętać o parametrach wejściowych i wyjściowych,np.: [c1,c2]=addmatrix(rand(20),hilb(20),100) % Skrypt zawierający badania procedury dodawania macierzy w funkcji rozmiaru macierzy % oraz prezentację uzyskanych wyników (skrypt2.m) clear all, close all N=[10:10:150]; for i=1:size(N,2) a=rand(N(i)); b=hilb(N(i)); [czasl(i), czasm(i)]=addmatrix(a,b,100); end; figure(1);hold off; plot(N,czasl);hold on plot(N,czasm,'r'), legend('metoda pętlowa','metoda matlabowska'), grid on, zoom on % wykonać napisany skrypt i przeanalizować uzyskane wyniki %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Skrypt wyznaczający wpływ zaburzenia danych na wynik odejmowania wektorów % (ilustracja złego uwarunkowania numerycznego zadania) (skrypt3.m) clear all, close all a=rand(10,1); % Utworzenie losowego wektora a b=a+(rand(10,1)-0.5)*1e-8; % Utworzenie wektora b bliskiego a r=a-b; % Odejmowanie liczb bliskich sobie az=a.*(1+2*(rand(10,1)-0.5)*1e-4); % Zaburzanie multiplikatywne a na poziomie 0.01% bz=b+2*(rand(10,1)-0.5)*1e-3*max(b);% Zaburzanie addytywne b na poziomie 0.1% rz=az-bz; % Odejmowanie wektorów zaburzonych bb=rz-r; % Błąd bezwzględny odejmowania bw=(rz-r)./r; % Błąd względny odejmowania figure(1) hold off plot(bb) title('Błąd bezwzględny odejmowania') grid on, zoom on figure(2) hold off plot(bw*100) title('Procentowy błąd względny odejmowania') grid on; zoom on % wykonać napisany skrypt i przeanalizować uzyskane wyniki