Wykład 9 MATLAB cd INFORMATYKA MPDI2
Jan 12, 2016
Wykład 9
MATLAB cd
INFORMATYKA
MPDI2
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
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
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!
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
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
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
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
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]
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:
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
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
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;
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):
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
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):
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):
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
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
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)
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
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
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
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:
25
Przykładowe funkcje rysujące standardowe wykresy powierzchniowe 3D
peaks
cylider (średnica)
sphere (precyzja)
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
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
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
29
96 12 22 76 64 23 74 11
9622 76 64 23 74 1112
2 PRZEBIEG
1 PRZEBIEG
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"
Symbolic ToolBox
Dodatkowy zestaw narzędziowy do Matlaba
Wymaga odrębnej licencji
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
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:
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
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
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])
37
syms x df=diff(x^2) df =
2*x
Przykład:
Obliczenie pochodnej funkcjif(x)=x2
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
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))
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
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
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
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)
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)
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