Matlab Tablice i ich zastosowania Wykresy Iteracja

34
Matlab Tablice i ich zastosowania Wykresy Iteracja Wykład 2 MOiPP 1

description

MOiPP. Wykład 2. Matlab Tablice i ich zastosowania Wykresy Iteracja. TABLICE. Tworzenie tablicy wektor wierszowy M1=[ 1 2 3 4 5 ] lub M1=[1, 2, 3, 4, 5] wektor kolumnowy M2 =[ 1; 2; 3; 4; 5] tablica dwuwymiarowa M3 = [1 2 3; 2 1 1 ; 1 0 0 ]. - PowerPoint PPT Presentation

Transcript of Matlab Tablice i ich zastosowania Wykresy Iteracja

Page 1: Matlab Tablice i ich zastosowania Wykresy Iteracja

1

Matlab

• Tablice i ich zastosowania

• Wykresy

• Iteracja

Wykład 2

MOiPP

Page 2: Matlab Tablice i ich zastosowania Wykresy Iteracja

2

TABLICE

Tworzenie tablicy

wektor wierszowy

M1=[1 2 3 4 5] lub M1=[1, 2, 3, 4, 5]

wektor kolumnowy

M2=[1; 2; 3; 4; 5]

tablica dwuwymiarowa

M3 = [1 2 3; 2 1 1; 1 0 0]

Page 3: Matlab Tablice i ich zastosowania Wykresy Iteracja

3

x=0:2:10 %generowanie wektora od 0 do 10 co 2

% wart_pocz:krok:wart_koncowa

Metoda generowania tablicy o elementach ciągu arytmetycznego

x=0:10 %generowanie wektora od 0 do 10 co 1

% wart_pocz:wart_koncowa

0 2 4 6 8 10

0 1 2 3 4 5 6 7 8 9 10

x= 0:0.1:2 %dozwolona wartość dziesiętna kroku

Można pominąć krok:

Page 4: Matlab Tablice i ich zastosowania Wykresy Iteracja

M = [0:5 ; 10:15] %wartość początkowa: wartość końcowa (krok 1)

ale UWAGA!

M = [0:5; 10:17]

błąd

arguments dimensions are not consistent

0 1 2 3 4 5

10 11 12 13 14 15

4

Podobnie w tablicach wielowymiarowych

Page 5: Matlab Tablice i ich zastosowania Wykresy Iteracja

x= [0 : 0.1: 10] %wartość początkowa: krok: wartość końcowa

M=[x; sind(x)]

0 0.1000 0.2000 0.3000 0.4000 0.5000 0.6000 0.7000 0.8000 0.9000 1.00000 0.0017 0.0035 0.0052 0.0070 0.0087 0.0105 0.0122 0.0140 0.0157 0.0175

5

x= [1 :10]

M=[x; log(x)]

1.0000 2.0000 3.0000 4.0000 5.0000 6.0000 7.0000 8.0000 9.0000 10.00000 0.6931 1.0986 1.3863 1.6094 1.7918 1.9459 2.0794 2.1972 2.3026

Można wygenerować tablicę z wartościami funkcji:

Page 6: Matlab Tablice i ich zastosowania Wykresy Iteracja

M1=[ 1 3 5 -11 7]

disp(M1(3))wyświetlony zostanie trzeci element tablicy

Dostęp do elementu tablicy

Można elementy zdefiniowanej tablicy wykorzystać w wyrażeniach:

M2 = [1 2 3; 2 1 1.5; 1 0 0]

disp(M2(2,3))

y= M(2,2)^26

ale też M2(8)

1 4 7

2 5 8

3 6 9

Page 7: Matlab Tablice i ich zastosowania Wykresy Iteracja

7

m4=[1 2 34 6;6 8/2 4 -2; 2 -5 56 6; 6 72 0.2 12]

m4t = m4' %macierz sprzężona – transponowana

m4o = m4^-1 %macierz odwrotna (macierz kwadratowa!)

mo= inv(m) % także obliczenie macierzy odwrotnej!

s=m4*m4o %sprawdzenie - macierz jednostkowa

w=det(m4) %wyznacznik,uwaga:macierz kwadratowa!

Operacje na tablicach (macierzach)

Page 8: Matlab Tablice i ich zastosowania Wykresy Iteracja

8

jeśli A i B są tablicamiC=A*B

to iloczyn macierzowy – kiedy dozwolony? - gdy macierz A ma tyle kolumn ile macierz B wierszy

D=A.*B to iloczyn elementowy – każdy element macierzy D powstaje z iloczynu odpowiednich elementów macierzy A i B – dozwolony gdy A i B mają te same rozmiary

podobnie ./ .^ (dzielenie i potęgowanie elementowe)

A^2 % tożsame z A*A (uwaga:A musi być kwadratowa)

A.^2 % każdy element do kwadratu – A dowolne

Operatory "kropkowe" dla tablic

Page 9: Matlab Tablice i ich zastosowania Wykresy Iteracja

9

1 2

3 4

8

18

2

3

1 3

4 1

2 2

3 1

2 6

12 1

* = sumy iloczynów

.* =

1 3

4 1

2 2

16 1

0.5 1.5

0.25 1./ =

2 3

4 6

2 2

3 1

4 9

64 6.^ =

Proste przykłady operacji macierzowych:

Page 10: Matlab Tablice i ich zastosowania Wykresy Iteracja

10

2x + 3y – 4z = 5x + y – z = 3,5–2,5y – z = 2

Rozwiązanie w Matlabie (m-plik):A = [2 3 -4 ; 1 1 -1 ; 0 -2.5 -1]B = [ 5 ; 3.5 ; 2]X= A^(-1)*B %wektor rozwiązań (lub X=inv(A)*B)

A*X % wynikiem powinien być wektor wyrazów wolnych B

Rozwiązywanie układu równań liniowych

Wybrane metody wykorzystania tablic

Page 11: Matlab Tablice i ich zastosowania Wykresy Iteracja

11

…sprawdzenie rozwiązań:

s1=A(1,1)*X(1)+ A(1,2)*X(2)+A(1,3)*X(3)-B(1)

…. powinno dać wartość s1=0

podobnie:

s2=A(2,1)*X(1)+ A(2,2)*X(2)+A(2,3)*X(3)-B(2)

s3=A(3,1)*X(1)+ A(3,2)*X(2)+A(3,3)*X(3)-B(3)

Uwaga: rozwiązania istnieją jeśli równania układu nie są liniowo zależne

Page 12: Matlab Tablice i ich zastosowania Wykresy Iteracja

12

Wyznaczanie pierwiastków równania n-tego stopniafunkcja roots(M)

- gdzie M jest wektorem współczynników przy kolejnych potęgach

np. x3 + 3x2 –4=0

instrukcja:

R=roots ([1 3 0 -4])wyznacza pierwiastki równaniaR – będzie wektorem rozwiązań

- jeśli równanie rzędu N to mamy N rozwiązań

- rozwiązaniami mogą być liczby zespolone!

Page 13: Matlab Tablice i ich zastosowania Wykresy Iteracja

13

Użyteczne funkcje tablicowerand(n) - losowo generowana tablica kwadratowa nxn

rand(n,m) - losowo generowana tablica prostokątna nxm

sum (A) - wektor sum elementów w kolumnach macierzy A

sum(sum(A)) - suma wszystkich elementów macierzy 2-wymiarowej

max(A) - wektor elementów maksymalnych w kolumnach

max(max(A)) - element największy w macierzy dwuwymiarowej

min(A) - wektor elementów minimalnych w kolumnach macierzy A

min(min(A)) - element najmniejszy w macierzy dwuwymiarowej

ndims(A) - ile wymiarów macierzy

numel(A) - liczba elementów macierzy

reshape(A,n,m) - rekonfiguracja macierzy

size(A) - rozmiar macierzy

length(A) - największy rozmiar

Page 14: Matlab Tablice i ich zastosowania Wykresy Iteracja

sort (A, i, typ)

i: 1 - kolumny lub 2 - wiersze

typ: 'ascend' 'descend'

domyślne wartości: 1 i 'ascend'

m = 3 5 8 10 8 7 10 3 5 3 7 3 5 1 8 2 6 7 1 2 1 2 9 3 9sortowanie kolumnamim1 = 1 2 3 1 2 2 3 5 1 3 3 5 7 3 8 7 6 8 5 8 7 10 9 10 9sortowanie wierszamim2 = 3 5 8 8 10 3 3 5 7 10 1 3 5 7 8 1 2 2 6 7 1 2 3 9 9sortowanie wierszami malejącom2 = 10 8 8 5 3 10 7 5 3 3 8 7 5 3 1 7 6 2 2 1 9 9 3 2 1

clc

m=round(10*rand(5))

disp('sortowanie kolumnami')

m1=sort(m,1)

disp('sortowanie wierszami')

m2=sort(m,2)

disp('sortowanie wierszami malejąco')

m2=sort(m,2,'descend')

14

Sortowanie

Page 15: Matlab Tablice i ich zastosowania Wykresy Iteracja

>> M=rand(3)M = 0.3404 0.7513 0.6991 0.5853 0.2551 0.8909 0.2238 0.5060 0.9593>> size(M)ans = 3 3>>

Przykład

15

Page 16: Matlab Tablice i ich zastosowania Wykresy Iteracja

16

clear,clc

M=fix(rand(4)*10)

M2=M(2:3,2:3)

M = 2 1 5 5 6 4 2 6 6 9 7 8 1 3 2 9

M2 =

4 2 9 7

Wycinanie fragmentu tablicy

Page 17: Matlab Tablice i ich zastosowania Wykresy Iteracja

17

Możliwe jest także tworzenie tzw. tablic komórkowych (struktur)

>>A = {[1 8 5], 'Jakiś tekst'; 2+4i, 1:2:7}

Po co?

Umożliwiają umieszczenie różnych typów danych w komórkach (tablice heterogeniczne) – teksty, dane liczbowe, tablice

>> T= A{1} % pierwsza składowa tablicy AT = 1 8 5

A = [1x3 double] 'Jakiś tekst' [2.0000 + 4.0000i] [1x4 double]

Page 18: Matlab Tablice i ich zastosowania Wykresy Iteracja

WYKRESY 2-wymiarowe

x=0:10 %generowanie wektora co 1

% wart_pocz:wart_koncowa

y=[5.1 1.1 -2 -3 4.2 5.5 4.3 3.1 4.5 5.9 4.9]

z=[0 2 3 3 5 4 3 4 5 4 9] %trzeci wektor

title('wykres') %dodanie tytułu

plot(x,y) %rysowanie wykresu

plot(x,y,'r',x , z,'k') %r – red k- black

1 sposób: Funkcja plot

Wymaga utworzenia dwóch wektorów o tej samej liczbie elementów

18

Page 19: Matlab Tablice i ich zastosowania Wykresy Iteracja

19

x=0:90 %generowanie wektora co 1

y=sin(pi*x/180) %wektor y

plot(x,y) ,grid %wykres z siatką

Przykłady wykresów funkcji

x=0:pi/50:6*pi

y=cos(2*x)./sqrt(x+1)

plot(x,y)

x = - 9:1:9

z = x.^2

plot(x, z)

Uwaga: zapis kropkowy

elementowe dzielenie(mnożenie wektorów)

Page 20: Matlab Tablice i ich zastosowania Wykresy Iteracja

Wykres funkcji podanej jako parametr tekstowy

jedna krzywa:

fplot('sin(x*x)/x',[0 4*pi])punkt dzielenia przez 0 nie jest rysowany - ostrzeżenie

dwie krzywe:

fplot('[sin(x*x)/x cos(x)]',[0.01 4*pi])

Uwaga: zamiast x można użyć innej, dowolnej nazwy zmiennej niezależnej

2 sposób: Funkcja fplot

20

Page 21: Matlab Tablice i ich zastosowania Wykresy Iteracja

Sposoby rysowania wielu krzywych

fplot('[sin(x*x)/x cos(x)]',[0.01 4*pi])

fplot('sin(x*x)/x',[0.01 4*pi])

hold onfplot('cos(x)',[0.01 4*pi])

2 4 6 8 10 12-1

-0.8

-0.6

-0.4

-0.2

0

0.2

0.4

0.6

0.8

1

2 4 6 8 10 12-1

-0.8

-0.6

-0.4

-0.2

0

0.2

0.4

0.6

0.8

1

subplot(1,2,1)

fplot('sin(x*x)/x',[0.01 4*pi])subplot(1,2,2)fplot('cos(x)',[0.01 4*pi])

2 4 6 8 10 12-0.5

0

0.5

1

2 4 6 8 10 12-1

-0.5

0

0.5

1

Page 22: Matlab Tablice i ich zastosowania Wykresy Iteracja

22

Krzywe 3DWykorzystujemy funkcję plot3(y,z,x)

Przykładowo dla krzywej (helisy) danej równaniami:

y=sin(x) z=cos(x)

Tworzymy m-plik:

t = 0:pi/50:10*pi;plot3(sin(t),cos(t),t);

Wykresy 3D

-1-0.5

00.5

1

-1

-0.5

0

0.5

10

10

20

30

40

Page 23: Matlab Tablice i ich zastosowania Wykresy Iteracja

23

Piszemy m-plik:

clearx = (0:0.01:pi)' %wektor (kolumnowy!) xy = x' %wektor wierszowy yz=cos(3*x) * sin(y) %przeanalizować tablicę z mesh(x, y, z)

z=cos3x siny

Powierzchnie 3DKorzystamy z funkcji mesh(x,y,z)

Dla powierzchni podanej równaniem:

Page 24: Matlab Tablice i ich zastosowania Wykresy Iteracja

24

Przykładowe funkcje rysujące standardowe wykresy powierzchniowe 3D

peaks

cylider (średnica)

sphere (precyzja)

Page 25: Matlab Tablice i ich zastosowania Wykresy Iteracja

25

clearc = [8 6 4 2;4 -1 4 5]save ('mydata.dat', 'c','-ASCII')clearload ('mydata.dat') disp('Dane z pliku:');mydata

Zapis całej tablicy do pliku ASCII i odczyt z pliku

Obsługa plików

Page 26: Matlab Tablice i ich zastosowania Wykresy Iteracja

26

a=rand(3);b=6;save ('plik.mat', 'a', 'b');clear aclear bload ('plik.mat')disp(a)disp(b)

Zapis danych do pliku typu mat i odczyt z pliku

Page 27: Matlab Tablice i ich zastosowania Wykresy Iteracja

27

clear,clcx = 0: 0.1:1;y = [x; exp(x)]disp('Zapisujemy do pliku')fid = fopen('tab.txt','w');fprintf(fid,'%6.2f %10.8f \n', y); % y do plikufclose(fid);disp('Teraz odczytujemy z pliku')fid = fopen('tab.txt', 'r');a = fscanf(fid,'%f %f',[2 inf]) % z pliku do adisp(a(2,11))fclose(fid);

Można też tak zapisać tablicę w pliku i odczytać

nazwa pliku

typ:odczyt (read)

zamknięcie pliku

0.00 1.00000000 0.10 1.10517092 0.20 1.22140276 0.30 1.34985881 0.40 1.49182470 0.50 1.64872127 0.60 1.82211880 0.70 2.01375271 0.80 2.22554093 0.90 2.45960311 1.00 2.71828183 zawartość pliku tab.txt

typ:zapis (write)

y = 0 0.1000 0.2000 0.3000 0.4000 0.5000 0.6000 0.7000 0.8000 0.9000 1.0000

1.0000 1.1052 1.2214 1.3499 1.4918 1.6487 1.8221 2.0138 2.2255 2.4596 2.7183

Zapisujemy do pliku

Teraz odczytujemy z pliku

a =

0 0.1000 0.2000 0.3000 0.4000 0.5000 0.6000 0.7000 0.8000 0.9000 1.0000

1.0000 1.1052 1.2214 1.3499 1.4918 1.6487 1.8221 2.0138 2.2255 2.4596 2.7183

2.7183

Page 28: Matlab Tablice i ich zastosowania Wykresy Iteracja

28

Instrukcja iteracyjna („pętla liczona”)

for zmienna = wartość_pocz : krok: wartość_końcowa

instrukcja1

instrukcja2

….itd.

end

Schemat iteracji:

Jeśli pominięty krok to krok=1

Page 29: Matlab Tablice i ich zastosowania Wykresy Iteracja

29

clearfor i= 1:1:10,

a(i) = i; %element tablicy

disp(a)pause

end;

Przykłady prostych "pętli":

clcfor i= 1:10,

disp('jakiś tekst')end;

Page 30: Matlab Tablice i ich zastosowania Wykresy Iteracja

30

for i= 1:10,for j = 1:10,

a(i , j) = i*jend

end

Przykład ("zagnieżdżanie" iteracji):

Page 31: Matlab Tablice i ich zastosowania Wykresy Iteracja

31

for i= 1:5,

for j = 1:i,

a(i , j) = i*j;

end

end

disp(a)

Przykład (uzależnienie licznika "pętli wewnętrznej):

1 0 0 0 0

2 4 0 0 0

3 6 9 0 0

4 8 12 16 0

5 10 15 20 25

Page 32: Matlab Tablice i ich zastosowania Wykresy Iteracja

32

a=0;suma = 0;for i= 1:5, for j = 1:5, a(i , j) = 2*i - 4* j, pause, %zatrzymuje do naciśnięcia klawisza

suma=suma+a(i , j); endenddisp(suma)

Przykład (sumowanie elementów w tablicy dwuwymiarowej):

Page 33: Matlab Tablice i ich zastosowania Wykresy Iteracja

33

clear; clc

a=rand(5,5)-0.5 %tablica z elementami ujemnymi

iledod= 0;

for i= 1:1:5,

for j = 1:1:5,

if a(i , j)>0

iledod=iledod+1;

end

end

end

disp(iledod)

Przykład (zliczanie elementów dodatnich w tablicy dwuwymiarowej):

Page 34: Matlab Tablice i ich zastosowania Wykresy Iteracja

34

a=rand(5)disp('Oto 3-ci wiersz')for k= 1:1:5,

disp(a(3, k))enddisp('Oto przekątna')for k= 1:1:5,

disp(a(k, k))end

Przykład