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

Podobne dokumenty