Wyk ł ad 9

45
Wykład 9 MATLAB cd INFORMATYKA MPDI2

description

Informatyka 2 MPDI. Wyk ł ad 9. Delphi tablice, rekordy. Typ tablicowy ( array ). Pojęcie : - skończony zbiór elementów tego samego typu składowego (homogeniczne) - o położeniu ( selekcji ) określanym przez indeks(-y) ( numery) składowej. Opis :. - PowerPoint PPT Presentation

Transcript of Wyk ł ad 9

Page 1: Wyk ł ad  9

Wykład 9

MATLAB cd

INFORMATYKA

MPDI2

Page 2: Wyk ł ad  9

2

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 macierzy

Page 3: Wyk ł ad  9

3

…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 4: Wyk ł ad  9

4

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 5: Wyk ł ad  9

5

Użyteczne wbudowane 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 6: Wyk ł ad  9

Macierze specjalne

ones(n,m) - macierz nxm wypełniona jedynkami

zeros(n,m) - macierz nxm wypełniona zeramimagic(n) - wektor sum elementów w kolumnach macierzy A

x=magic(4)y1=sum(x)y2=sum(x')

x =

16 2 3 13

5 11 10 8

9 7 6 12

4 14 15 1

y1 =

34 34 34 34

y2 =

34 34 34 34

także przekątne mają sumę=34

Page 7: Wyk ł ad  9

M=round(10*rand(3))w=size(M)M2=reshape(M,1, 9)M2=reshape(M',1, 9)

Przykład

7

M = 2 2 5 9 3 4 3 6 8w = 3 3M2= 2 9 3 2 3 6 5 4 8M3 = 2 2 5 9 3 4 3 6 8

Page 8: Wyk ł ad  9

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')

8

Sortowanie

Page 9: Wyk ł ad  9

9

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

>>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

>> s1= A{1} % pierwsza składowa tablicy As1 = 1 8 5

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

Page 10: Wyk ł ad  9

A(2:5) fragment wektora (elementy od 2-go do 5-go)

A(2:end) od 2-go do końca

A(1:2:end) co drugi elemet począwszy od pierwszego

A(3,:) cały trzeci wiersz macierzy A

A(3,2:5) trzeci wiersz macierzy A o kolumnach od drugiej do piątej

A(:,2) druga kolumna macierzy A

diag(A) główna przekątna macierzy A

Fragmenty wektorów i macierzy dwuwymiarowych:

Page 11: Wyk ł ad  9

11

clear,clcM=fix(rand(4)*10)M2=M(2:3,2:3)M3=M(2:end;1:end)

M = 7 6 9 7 7 1 3 2 2 1 5 5 6 4 2 6M2 = 1 3 1 5M3 =

7 1 3 2 2 1 5 5 6 4 2 6

Przykład

Page 12: Wyk ł ad  9

12

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 13: Wyk ł ad  9

13

clearfor i= 1:1:10,

a(i) = i; %generowanie kolejnych elementów wektora

disp(a)pause

end;

Przykłady prostych "pętli":clc

for i= 1:10,

disp('jakiś tekst')

end;

Page 14: Wyk ł ad  9

14

%generowanie kolejnych elementów wektorafor wiersz= 1:10,

for kolumna = 1:10,a(wiersz , kolumna) = wiersz*kolumnapause

endend

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

Page 15: Wyk ł ad  9

15

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 16: Wyk ł ad  9

16

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 17: Wyk ł ad  9

17

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 warunkowe - elementów dodatnich w tablicy dwuwymiarowej):

Page 18: Wyk ł ad  9

18

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

Page 19: Wyk ł ad  9

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

19

Page 20: Wyk ł ad  9

20

x=0:90 %generowanie wektora co 1

y=sind(x) %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 21: Wyk ł ad  9

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

21

Page 22: Wyk ł ad  9

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 23: Wyk ł ad  9

23

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 24: Wyk ł ad  9

24

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 25: Wyk ł ad  9

25

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

peaks

cylider (średnica)

sphere (precyzja)

Page 26: Wyk ł ad  9

26

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 27: Wyk ł ad  9

27

a=rand(3);b=6;save ('plik.mat', 'a', 'b');clear %czyścimy workspace load ('plik.mat')whos %pokazuje nazwy zmiennychdisp(a)disp(b)

Zapis danych do pliku typu mat i odczyt z pliku

Page 28: Wyk ł ad  9

Porównywanie kolejnych par elementów sąsiadujących i zamiana miejscami w przypadku niewłaściwej kolejności

Sortowanie bąbelkowe

1 2 3 4 ..... N

N-1 porównań Wykonujemy N przebiegów

Sortowanie bąbelkowe skróconePrzebiegów wykonujemy N-1

W każdym kolejnym przebiegu liczba analizowanych par jest zmniejszana o 1, a

Page 29: Wyk ł ad  9

29

96 12 22 76 64 23 74 11

9622 76 64 23 74 1112

2 PRZEBIEG

1 PRZEBIEG

Page 30: Wyk ł ad  9

30

clcclearN=5;G=rand(1,N)%stadardowa funkcja sortującaG1=sort(G)%sortowanie bąbelkowefor k=1:N-1 for m=1:N-k if G(m)>G(m+1) pom=G(m); G(m)=G(m+1); G(m+1)=pom; end end disp(G) %pokazuje kolejne wypływające "bąbelki"end%ostatecznie po posortowaniudisp(G)

zamiana miejscami gdy elementy w niewłaściwej kolejności

M-plik - sortowanie "bąbelkowe"

Page 31: Wyk ł ad  9

Symbolic ToolBox

Dodatkowy zestaw narzędziowy do Matlaba

Wymaga odrębnej licencji

Page 32: Wyk ł ad  9

32

wymagają zadeklarowania zmiennych symbolicznych – abstrakcyjnych zmiennych nie posiadających wartości.

syms zmienna1 zmienna2 itd

Służy do tego polecenie syms:

Obliczenia symboliczne

Page 33: Wyk ł ad  9

33

Symboliczne rozwiązywanie równań – funkcja solve()

syms x af=a - x^2 f =

a - x^2r=solve(f, x) r= a^(1/2) -a^(1/2)

Przykład:

Page 34: Wyk ł ad  9

syms a b c d

A=[a b; c d]

A =

[ a, b]

[ c, d]

B=[e f ; g h]

B =

[ e, f]

[ g, h]

Symboliczne operacje macierzowe

il_m=A*B

il_m =

[ a*e+b*g, a*f+b*h]

[ c*e+d*g, c*f+d*h]

il_e=A.*B

il_e =

[ a*e, b*f]

[ c*g, d*h]

ilustracja iloczynów macierzy kwadratowych

macierzowy Cauchy'ego

elementowy Hadamarda

(po współrzędnych)

34

Page 35: Wyk ł ad  9

Podstawienie wartości do wyrażenia symbolicznego

Przykład:

syms a b c x % definicja 4 zmiennych symbolicznych

y = solve(a*x^2+b*x+c) % rozwiązanie równania względem x

y =

-1/2*(b-(b^2-4*a*c)^(1/2))/a

-1/2*(b+(b^2-4*a*c)^(1/2))/a

a=3; b=4; c=1; % Przypisanie wartości liczbowych a b c

w = subs(y) % Obliczenie wartości liczbowej dla y

w =

-0.3333

-1.0000

Obliczenia na wyrażeniach symbolicznych - funkcja subs( )

35

Page 36: Wyk ł ad  9

36

Argumentami funkcji są:

• funkcja, której pochodna będzie liczona,

• zmienna, względem której pochodna jest liczona (opcjonalnie)

• rząd pochodnej (opcjonalnie)

Obliczanie pochodnych funkcji - funkcja diff( )

diff (F,[zmienna],[N])

Page 37: Wyk ł ad  9

37

syms x df=diff(x^2) df =

2*x

Przykład:

Obliczenie pochodnej funkcjif(x)=x2

Page 38: Wyk ł ad  9

syms x y z

f=(x*y*z)^x+(1/(x*y))^2

dfx=diff(f)

dfx =

(x*y*z)^x*(log(x*y*z)+1)-2/x^3/y^2

dfx=diff(f,x)

dfx =

(x*y*z)^x*(log(x*y*z)+1)-2/x^3/y^2

dfy=diff(f,y)

dfy =

(x*y*z)^x*x/y-2/x^2/y^3

dfz=diff(f,z)

dfz =

(x*y*z)^x*x/z

Obliczenie pochodnej funkcji f(x, y, z)

według każdej zmiennej (pochodne cząstkowe):

Przykład:

38

Page 39: Wyk ł ad  9

u= (x*y*z)^x*(log(x*y*z)+1)^2+(x*y*z)^x/x+6/x^4/y^2

Obliczenie drugiej pochodnej funkcji:

Przykład:

f (x, y, z)

syms x y z

f=(x*y*z)^x+(1/(x*y))^2

u=diff(f,x,2)

39

Można też tak: u=diff(diff(f,x))

Page 40: Wyk ł ad  9

40

Całkowanie funkcji - funkcja

int( )

Jej argumentem jest funkcja symboliczna

opcjonalnie także zmienna całkowania oraz granice całkowania (dla całek oznaczonych).

int(F,[zmienna], {a , b})

Uwaga: domyślnie zmienną symboliczną jest x

opcjonalnie

Page 41: Wyk ł ad  9

41

syms a x c=int(a+x) % domyślna zmienna to x

c = a*x+1/2*x^2

c=int(a+x, a) % teraz zmienna to acs =

1/2*a^2+a*x

Sprawdzenie:s=diff(f)

s = a+x

Przykład: Obliczenie całki nieoznaczonej funkcji f(a,b)=a+b

Page 42: Wyk ł ad  9

42

Obliczenie całki oznaczonej:

syms x

c=int(x^2,1,3)

syms xc=int(sin(x),0,pi)

Obliczenie całki oznaczonej funkcji sin(x) w przedziale (0, π)

c= 26/3

c = 2

Page 43: Wyk ł ad  9

43

Wykresy funkcji symbolicznych

ezplot( f, [xmin xmax ymin ymax])

clc

syms x

f=x^2

ezplot(f,[-10 10])

hold on

df=diff(f)

ezplot(df,[-10 10])

hold on

f0=0*x

ezplot(f0,[-10 10])

-10 -5 0 5 10

-20

-15

-10

-5

0

5

10

15

20

x

0

f(x)

, d

f(x)

Page 44: Wyk ł ad  9

44

ezplot( f )

Domyślne przedziały: x (-2, 2), y (-2, 2)

ezplot( 'x-y', [ -5 5 -5 5] )

Mogą być też funkcje uwikłane dwóch zmiennych:

-5 0 5-5

-4

-3

-2

-1

0

1

2

3

4

5

x

y

x-y = 0

ezplot( 'x-y ')

-6 -4 -2 0 2 4 6-6

-4

-2

0

2

4

6

x

y

x-y = 0

domyślny przedział: x (-2, 2)

Page 45: Wyk ł ad  9

45

clc

syms x y

f=y-sin(x)

df=y-diff (f)

ezplot (f,[0 2*pi -1 1])

hold on

ezplot (df,[0 2*pi -1 1])

Przykład

0 1 2 3 4 5 6-1

-0.8

-0.6

-0.4

-0.2

0

0.2

0.4

0.6

0.8

1

x

y

y-cos(x) = 0