matlab intro

background image

% AISDT : podstawy programowania w rodowisku MATLAB

% Rozpocz cie ( MATLAB, cd) i zako czenie pracy w MATLABie (exit);

% Okna: komend, historii, przestrzeni roboczej, katalogu bie cego

% Szukanie informacji o programie i jego funkcjach: help, lookfor, okno MATLAB Help

% Edytor : wbudowany do MATLABa (uruchamianie: komenda edit lub File->New-> M-File)

% Orientacja macierzowa rodowiska (przy czym UWAGA:

macierze indeksowane s od 1, nie od zera

!)

% Elementami macierzy mog by liczby lub struktury

A=[1,2,3;4,5,6] % macierz 2 wiersze x 3 kolumny ; elementy wiersza rozdzielone przecinkami lub spacjami , rednik

oznacza koniec wiersza

size(A) % rozmiar A; wynik : ans 2 3 ; ans - nazwa zmiennej zawieraj cej wynik ostatniej operacji .

clear(A) % usuwanie z pami ci zmiennej A; clear bez parametrów usuwa wszystkie zmienne (i funkcje).

s1= struct('pole1',[],'pole2',2,'pole3',rand(5)); % inicjalizacja struktury o 3 polach. Warto ka dego pola jest macierz ;

mo e by równie macierz pust - warto niezdefiniowana, albo macierz o wymiarach 1x1- skalar.

% Odwołania do elementu macierzy

a=A(2,3) % Przy odwołaniu do elementu macierzy u ywane s

nawiasy okr głe!

Rozró niane s małe i du e litery.

a1=A(1,:)

% do zmiennej a1 zapisany pierwszy wiersz macierzy A

a2=A(:,2)

% zmienna a2 - druga kolumna macierzy A

b=s1.pole2

% do zmiennej b przypisana zostaje warto 'pole2' struktury s1 (tu: b=2).

A=A(2,3) % Instrukcja podstawienia powoduje aktualizacj rozmiaru obiektu (tu: zmniejszenie A do wymiaru 1x1)

% Mo liwo dynamicznej zmiany rozmiarów macierzy bez konieczno ci wcze niejszej deklaracji (np. przez

podstawienie nieistniej cego elementu)

A(4,5)=10 % Takie podstawienie powoduje zwi kszenie rozmiarów A (i wyzerowanie niezdefiniowanych elementów)

S(5)=struct('key',5,'value',[0:4]) % S5 - tablica struktur. Je li ju istniała to musiała mie zdefiniowane pola 'key' i 'value',

je li nie istniała to zostaje utworzona 5-elementowa tablica struktur zawieraj cych takie pola, przy czym: dla i=1...4

s(i).key i s(i).value nie maj przypisanych warto ci, s(5).key=5 s(5).value= [0 1 2 3 4]

S=[S,s1] - powi kszenie tablicy struktur S o jedn pozycj zwieraj c struktur s1 (s1 dopisane na ko cu S)

% Nie mo na si odwoła do elementu spoza aktualnego zakresu indeksów macierzy

a=A(6,7) % pojawia si informacja o bł dzie: ??? Index exceeds matrix dimensions.

% Przydatne kreatory tablic

A=zeros(3);

% Macierz 3x3 z zerami; rednik na ko cu blokuje wy wietlanie wyniku operacji na ekranie

B=rand(3)

% Macierz 3x3 z liczbami pseudolosowymi z przedziału (0.0,1.0),wektor tworzy si przez: rand(n,1)

C=ones(10,1)

% Macierz 10x1 z jedynkami

N=linspace(0,1,11) % wektor wierszowy (1x11) liczb równo rozło onych w przedziale <0.0,1.0> tzn. : 0 0.1 0.2 .... 0.9 1

M=0:0.1:1

% wektor wierszowy (tu: M=N) utworzony z ci gu liczb od 0 do 1 z krokiem 0.1: 0 0.1 0.2 0.3 ... 0.9 1

% Działania matematyczne + - * / * .* ./ .* ‘ ^

A=[ 1, 2; 3, 4 ]; B=[1,2; 2,1];

A+B

B-A

A*B

B*A

A^2

% mno enie macierzowe A*A

A.*B, A.^2

% mno enie element po elemencie

B./A

% dzielenie element po elemencie

AT=A’ % transpozycja macierzy A

% Układy równa A*x=b (lewe dzielenie \)

b=sum(A,2)

% Wektor b tworzony jest z sum wierszy macierzy A

x=A\b

% Rozwi zanie układu A*x=B

format long; x % wy wietla x z dok. 15 cyfr, powrót do 5 cyfr: format short

% Proste wykresy (patrz help do funkcji: plot, semilogx, semilogy, loglog)

x=linspace(-2,2,21); y1=x; y2=x.^2; y3=x.^3; y4=x.^4;

plot(x,y1,’b-o’,x,y2,’r-x’); xlabel(‘x’); ylabel('warto ci funkcji'); title(‘Pierwsze wykresy’);

pause % zatrzymanie programu (potrzebne przy pracy z m-plikiem), dalsze dział. po wci ni ciu dowolnego klawisza

hold on

% wł czenie dodawania nowych wykresów do bie cego okna wykresów

plot(x,y3,’-v’,x,y4,’-s’); hold off % po hold off nowy wykres b dzie rysowany w uprzednio wyczyszczonym oknie

legend(‘y=x’,’y=x^2’,’y=x^3’,’y=x^4’)

% opis wykresów

grid on % dodanie siatki, grid off -usuni cie siatki

figure % dodanie nowego okna wykresów o kolejnym (pierwszym wolnym) numerze

% Skrypty i funkcje

Skrypty

, to pliki tekstowe o rozszerzeniu m b d M, zawieraj ce polecenia i instrukcje MATLABa. Skrypty nie pobieraj

adnych argumentów wej ciowych, ani nie zwracaj argumentów wyj ciowych; działaj na zmiennych głównej przestrzeni

roboczej (workspace). Skrypt uruchamia si podaj c jego nazw (bez rozszerzenia) w wierszu polece MATLABa b d w

innym skrypcie. Uruchamiany skrypt musi by w bie cym katalogu lub na cie ce poszukiwa interpretera (path).

Funkcja

- m-plik o postaci:

function [ lista_parametrów_wyj ciowych ]=nazwa_funkcji( lista_parametrów_wej ciowych )

% NAZWA_FUNKCJI - krótka instrukcja u ycia (dla polecenia help nazwa_funkcji)

Ciało funkcji

=

4

3

2

1

A

,

=

1

2

2

1

B

,

=

10

11

4

5

B

A

,

=

4

6

4

1

.

B

A

,

=

4

/

1

3

/

2

1

1

/

.

A

B

,

=

4

2

3

1

AT

=

4

3

2

1

A

=

7

3

b

=

0000

.

1

0000

.

1

x

background image

Funkcje akceptuj parametry wej ciowe. W trakcie oblicze działaj na parametrach wej ciowych i zmiennych

utworzonych we własnej przestrzeni roboczej, niedost pnej z wiersza polece . Funkcja mo e wyznacza warto ci

parametrów wyj ciowych – zwracanych do nadrz dnej przestrzeni roboczej (w której kontek cie wywołano funkcj ).

Uwaga: zmienne w funkcji s z definicji lokalne. Dost p do tych zmiennych z przestrzeni roboczej zapewnia deklaracja

global (trzeba jej u y w 2 miejscach: zarówno w funkcji, jak i w wołaj cym funkcj skrypcie)

Przykład 1: skrypt mno cy dwie kwadratowe macierze

losowe o zadanym rozmiarze zwracaj cy ilo mno e i

dodawa

%%%%%% plik

mul_check.m

- to jest skrypt %%%%%

n=5;

[a, m] =

mul_fun

(n);

fprintf(1,'liczba_dodawa =%g, liczba mno e =%g',a,m);

% formatowany komunikat na ekranie

%%%%% plik

mul_fun.m

- to jest funkcja %%%%%%

function [t1, t2] =

mul_fun

(n)

A=rand(n); B=rand(n);

N_add=0; N_mul=0; % warto ci pocz tkowe

for k1=1:n

for k2=1:n

s=0.0;

for k3=1:n

s=s+A(k1,k3)*B(k3,k2);

N_add=N_add+1;N_mul=N_mul+1;

end

D(k1,k2)=s;

end

end

Przykład 2: badanie zło ono ci obliczeniowej mno enia

macierzy (same mno enia lub mno enia i dodawania

ł cznie)

%%%%%% plik

mul_test.m

- (skrypt) %%%%%

clear;

N=5:5:50; % lub: N=linspace(5,50,10);

% p tla dla ró nych wymiarów macierzy

for i=1:size(N,2)

[a(i), am(i) ]= mul_fun(N(i));

end;

% Wykresy

figure(1); hold off;

plot(N,a,'g-o',N,a+am,'m--*'); legend ('dodawania', 'ł cznie');

xlabel('rozmiar macierzy'); ylabel('liczba oper. domin.');

title('Zło ono obliczeniowa mno enia macierzy'); grid on

figure(2); hold off; % ten sam rys. w skali logarytmicznej

loglog(N,a,'g-o',N,a+am,'m--*'); legend ('dodawania',

'ł cznie');

xlabel('rozmiar macierzy'); ylabel('liczba oper. domin.');

title('Zło ono obliczeniowa mno enia macierzy')

%% WYNIKI poni ej

%% PROSZ wiadomie obejrze wykres funkcji pot gowej

w skali logarytmicznej !

Uwaga! Prosz zwróci uwag na sposób wywołania funkcji zwracaj cej wi cej ni 1 par. wyj ciowy. Aby uzyska

warto ci wszystkich parametrów zwracanych przez funkcj , KONIECZNIE przed znakiem '=' musi wyst pi nawias

kwadratowy z list zmiennych, do których podstawione zostan obliczone warto ci.

Uwaga do uwagi - oczywi cie zmienna oznacza macierz, nawet bardzo długi wektor jest jedn zmienn !

Kilka praktycznie u ytecznych uwag o programowaniu w MATLABie

1. Operatory MATLABa (help ops): porównania ( == , ~= , < , > , <= , >= ), logiczne ( |, &, ~ ), arytmetyczne

(standardowe oraz specyficzne dla MATLABA \, .* , .^, ./)

2. Ka da instrukcja warunkowe (if , switch) i tworz ca p tle (for, while,) musi by zako czona przez end

3.

rednik na ko cu linijki nie jest obowi zkowy, je li wyst puje, to wynik operacji nie jest wy wietlany na ekranie

4. Działaj cy program mo na przerwa przez ^C

5. W przypadku bł du programu nale y czyta komunikaty na ekranie!

6. Nale y u ywa funkcji, zwłaszcza wbudowanych, gdy tylko to jest mo liwe (istotnie przy piesza działanie programu!)

- w szczególno ci min, max, (mog zwraca równie indeks ekstremum), sum, linspace

7. Uruchamianiu programu sprzyja testowanie go etapami, w szczególno ci:

a) dobrze jest sprawdzi działanie funkcji jako skryptu (z wykomentowan 1-sz linijk ) - zapewnia to łatwy

dost p do wszystkich (w skrypcie globalnych) zmiennych

b) do testowania nale y u ywa danych o małych rozmiarach, dla których znane jest prawidłowe rozwi zanie

8. Je eli w zadaniu wymagany jest wykres, to najpierw nale y (najcz ciej w p tli w której zmienia si rozmiar zadania)

wygenerowa potrzebne dane, a potem zaj si grafik . Je li wyniki s zapisane nie po kolei - np. znajduj si w

wektorze res na pozycjach 2,4,6 9 (czyli res=[0 d1 0 d2 0 d3 0 0 d4] ), to te łatwo je wykre li :

a) albo wprost wypisuj c indeksy: plot( [2,4,6,9] , res( [2,4,6,9] ) )

b) albo definiuj c wektor pomocniczy: nx=[2,4,6,9]; plot(nx , res(nx) )

10

0

10

1

10

2

10

2

10

3

10

4

10

5

10

6

rozmiar macierzy

lic

zb

a

o

p

e

ra

cj

i d

o

m

in

uj

cy

ch

zło ono

obliczeniowa mno enia macierzy

dodawania
dodawania i mno enia ł cznie

0

10

20

30

40

50

0

0.5

1

1.5

2

2.5

x 10

5

rozmiar macierzy

lic

zb

a

o

p

e

ra

cj

i d

o

m

in

uj

cy

ch

Zło ono obliczeniowa mno enia macierzy

dodawania
dodawania i mno enia ł cznie


Wyszukiwarka

Podobne podstrony:
Matlab intro id 287680 Nieznany
matlab intro 2
Matlab cw1 2 zaoczni
cz 1, Matlab moj
Image Processing with Matlab 33
196 Capital structure Intro lecture 1id 18514 ppt
intro 12(Kant A)
O Intro Wstęp
WI 1 intro
MATLAB graf(1)

więcej podobnych podstron