PODSTAWY MATLABA:
Po uruchomieniu programu pojawiają się okna:
Command Window – służy do komunikacji programu z użytkownikiem. W tym oknie
wprowadzamy polecenia i w nim program wyświetla wyniki obliczeń.
Workspace – pokazuje zmienne aktualnie zadeklarowane w programie
Command History – zawiera ostatnio wprowadzane komendy
Current Directory – pokazuje zawartość bieżącego katalogu.
Obliczenia na liczbach prowadzimy wpisując konkretne działanie i naciskając ENTER.
Znak * oznacza mnożenia, znak / dzielenie, potęgowanie uzyskujemy wpisując przed
wykładnikiem potęgi znak ^. Separatorem dziesiętnym jest kropka, odpowiednikiem
mnożenia przez 10 do potęgi n jest dodanie na końcu wartości wyrażenia e. Jeśli chcemy
policzyć wartość dowolnej, znanej w programie funkcji, jej argumenty wprowadzamy
w nawiasie np:
sin(pi/2)
cos(5e-2)
1.
ZMIENNE W MATLABIE - MACIERZE
W Matlabie wszystkie używane zmienne są macierzami. Przez macierz rozumiemy
zbiór wartości numerycznych odpowiednio zorganizowanych w wierszach i kolumnach.
Liczba kolumn lub wierszy określana jest dowolną liczbą całkowitą, a jedynym
ograniczeniem jest rozmiar dostępnej pamięci.
Pierwszy rozmiar macierzy określa liczbę wierszy, a druga liczba służy do określenia liczby
kolumn. Przykładowo macierz o wymiarach 3 x 4 zawiera 3 wiersze i 4 kolumny, czyli
łącznie 12 elementów.
Skalar w Matlabie jest szczególnym przypadkiem macierzy o rozmiarze 1 x 1.
Wektor o n elementach jest definiowany jako macierz zawierająca 1 wiersz (n x 1) lub
macierz zawierająca 1 kolumnę (1 x n) – wektor kolumnowy.
Nazwa zmiennej w Matlabie może być ciągiem dowolnych cyfr i liter o długości nie
przekraczającej 19 znaków. Pierwszy znak nie może być cyfrą i nazwa nie może zawierać
spacji oraz niektórych znaków np. ‘ + – . Pamiętać należy, że w Matlabie rozróżniane są duże
i małe litery. Tak więc zmienne o nazwie c i C są dwiema różnymi zmiennymi ! Podobnie
MID i Mid to także dwie różne zmienne.
Poniżej przedstawiono kilka przykładów macierzy zdefiniowanych w Matlabie. Proszę
zwrócić uwagę na rolę nawiasów kwadratowych w definicji macierzy.
c = 5.66 or c = [5.66]
c –
definicja skalara czyli macierzy 1x1
x = [ 3.5, 33.22, 24.5 ]
x –
wektor wierszowy czyli macierz 1x3
x1 = [ 2;
x1 – wektor kolumnowy czyli macierz 4x1
5;
3;
-1]
A = [ 1 2 4;
A – macierz o rozmiarze 4x3
2 -2 2;
4 wiersze i 3 kolumny
0 3 5;
5 4 9 ]
Dostęp do poszczególnych elementów macierzy jest możliwy poprzez wywołanie typu A(i,j),
przykładowo zmiana wartości jednego z elementów macierzy może nastąpić za pomocą
komendy A(4,1)=5
Macierz wyświetlana jest w Matlabie z zachowaniem struktury macierzy.
Macierze mogą być definiowane w różny sposób:
Przykład
Macierz x o rozmiarze 1x3, o elementach: x(1)=2, x(2)=4 i x(3)=-1.
x = [ 2 4 -1 ] lub
x = [ 2,4,-1 ]
Wykonanie polecenia następuje po naciśnięciu Enter. Kolejne elementy macierzy mogą być
oddzielone spacjami lub przecinkami. Macierz y o rozmiarach 2x4 o elementach: y(1,1)=0,
y(1,2) = y(1,3) = 2, y(1,4) = 3, y(2,1) = 5, y(2,2) = -3, y(2,3) = 6, y(2,4) = 4 może zostać
zdefiniowana w następujący sposób:
y =
[ 0, 2, 2, 3;
5, -3, 6, 4 ]
lub
y =
[ 0, 2, 2, 3 ; 5, -3, 6, 4 ]
Ś
rednik ";" jest używany do do rozdzielenia wierszy definiowanej macierzy jeśli definicja
wprowadzana jest w jednej linii. Wartości macierzy zdefiniowane mogą być również za
pomocą wyrażenia, np.:
a = [ sin(pi/2) sqrt(2) 3+4 6/3 exp(2) ]
tworzy macierz
a = [ 1.0000 1.4142 7.0000 2.0000 7.3891 ]
Nowa macierz może zostać również utworzona przy wykorzystaniu wcześniej
zdefiniowanych macierzy. Przykładowo korzystając z poprzednio zdefiniowanej macierzy x
utworzono macierz x1:
Polecenie:
x1 = [ x 5 8 ]
generuje macierz:
x1 = [ 2 4 -1 5 8 ]
Wyrażenie
x(5) = 8
Powoduje dodanie nowego elementu macierzy x
x = [ 2 4 -1 0 8 ]
i dodatkowo automatycznie wstawiony zostaje element x(4) równy zero. Nowa macierz może
zostać utworzona również z innych macierzy. Polecenia:
c = [ 4 5 6 3 ]
z = [ y;c ]
dają w wyniku:
z = [ 0 2 2 3
5 -3 6 4
4 5 6 3 ]
Po każdej wykonanej komendzie (po naciśnięciu Enter) Matlab wyświetla rezultat
wykonywanej komendy. Efekt wyświetlania efektu działania komendy można zablokować
zakańczając linię polecenia średnikiem.
z = [ y ; c ] ;
Macierze mogą być również generowane za pomocą odpowiednich funkcji konstruujących,
przykładowo:
zeros
- tworzy macierz zerową
ones
- tworzy macierz jedynek
eye
- tworzy macierz z jedynkami na przekątnej
rand
- tworzy macierz z liczbami losowymi
Funkcje te wywołane z jednym parametrem tworzą macierz kwadratową o zadanym
wymiarze, z dwoma odpowiednią macierz prostokątną.
Kontynuacja linii polecenia
W niektórych przypadkach linia polecenia jest bardzo długa i nie mieści się w jednej linii
okna poleceń. Można w takim przypadku kontynuować linię polecenia w kolejnym wierszu
jeśli poprzednią linię zakończymy trzema kropkami "...".
Przykład
Polecenie:
4 + 5 + 3 ...
+ 1 + 10 + 2 ...
+ 5
daje w wyniku
ans = 30
W tym przypadku należy jeszcze zwrócić uwagę na to że w wyniku tej operacji nie powstała
nowa zmienna, a wynik przypisany został do zmiennej standardowej ans. Kolejna operacja
tego typu spowoduje redefinicję zmiennej ans.
Operator ‘:’
Operator ':' pozwala na wykonanie wielu operacji w Matlabie. Jeśli dwie liczby całkowite
rozdzielone są dwukropkiem to w wyniku wykonania takiego polecenia powstanie wektor
wierszowy składający się z liczb całkowitych.
Polecenie
a = 1:8
generuje wektor
a = [ 1 2 3 4 5 6 7 8 ].
Jeśli trzy liczby (całkowite lub rzeczywiste) rozdzielone są dwukropkami to powstanie wektor
zawierający ciąg liczb narastających monotonicznie począwszy od pierwszej a skonczywszy
na wartości określonej trzecią liczbą. Przyrost wartości pomiędzy kolejnymi liczbami równy
jest drugiej liczbie wymienionej w komendzie:
Przykładowo
b = 0.0 : .2 : 1.0
generuje wektor:
b = [ 0.0 .2 .4 .6 .8 1.0 ]
Dwukropek może być wykorzystany również do operacji wydzielania wektora lub macierzy z
innej macierzy.
Przykładowo jeśli
x = [ 2, 6, 8;
0, 1, 7;
-2, 5, -6 ]
To komenda
y = x(:,1)
Spowoduje utworzenie wektora kolumnowego:
y = [2
0
-2 ]
a komenda
yy = x(:,2)
tworzy:
yy = [ 6
1
5 ]
Polecenie
z = x(1,:)
generuje wektor wierszowy:
z = [ 2 6 8 ]
W wymienionych przypadkach ‘:’ oznaczał „wszystkie indeksy”. Inny przykład, definiujemy
macierz c
c = [ -1, 0, 0;
1, 1, 0;
1, -1, 0;
0, 0, 2 ]
a następnie wydajemy polecenie
d1 = c(:,2:3)
które tworzy macierz zawierającą kolumny od drugiej do trzeciej i wszystkie wiersze:
d1 = [ 0 0
1 0
-1 0
0 2 ]
Natomiast komenda
d2 = c(3:4,1:2)
tworzy macierz o wymiarach 2x2 powstałą z wiersza 3
ciego
i 4
tego
i kolumny 1
szej
i 2
giej
macierzy c.
d2 = [ 1 -1
0 0 ]
Do generowania wektorów służy również funkcja linspace(), w której jako agrumenty
podajemy wartość początkową, wartość kończową i liczbę wyrazów.
E = linspace(0,2,21)
spowoduje wygenerowanie wektora o długości 21 elementów zmieniających się o wartość 0.1
2. OPERACJE ARYTMETYCZNE
Ponieważ podstawową strukturą w Matlabie jest macierz to również operatory arytmetyczne
są zdefiniowane dla zmiennych macierzowych, co pozwala na dużą oszczędność i elegancję
składni.
Podstawowe operacje algebraiczne to
+
dodawanie
-
odejmowanie
*
mnożenie
‘
transpozycja ze sprzężeniem
\
dzielenie lewe (daje w rezultacie rozwiązanie równania a*x=b
/
dzielenie prawe ( a/b odpowiada (b’\a’)’ )
Użycie operatora w przypadku wielkości skalarnych powoduje, że wykonywane są operacje
algebraiczne w „tradycyjnym” ich rozumieniu.
Użycie operatora poprzedzonego kropką powoduje że operacje wykonane zostaną jak na
skalarach w odniesieniu do poszczególnych elementów zmiennych.
Przykładowo, zdefiniujmy macierze:
a = [1 2 3 ; 4 5 6 ; 7 8 10], b = [1 1 1]'
Macierz przemnożona (podzieloana) przez skalar daje w wyniku macierz o elementach
przemnożonych (podzielonych) przez skalar, przykładowo
2*a
a/4
Dodawanie skalara do macierzy powoduje, że do każdego elementu macierzy zostanie dodany
skalar.
b+2
Dodawanie macierzy działa tak jak normalana operacja dodawania macierzy
a + [b,b,b]
Mnożenie macierzy wymaga zgodności wymiarów i również odpowiada normalnej operacji
mnożenia macierzy
a*b, b*a
b'*a
a*a', a'*a
b'*b, b*b'
Jak wspomniano wcześniej, poprzedzenie operatora kropką powoduje, że operacje będą
wykonywane na poszczególnych elementach
a.^2
podnosi do kwadratu każdy element macierzy a
1 ./ a
oblicza odwrotność każdego elementu
a operacja
[1 2 3 4] .* [2 2 1 1]
daje wynik
[2 4 3 4]
Jeśli przyjmiemy, że macierz a zawiera współczynniki układu równań liniowych, x jest
wektorem kolumnowym zawierjącym niewiadome a wektor b jest wektorem kolumnowym
zawierającym wyrazy wolne to równanie
a x =b
przedstawia układ równań liniowych który w Matlabie może zostać rozwiązany poleceniem
x = a \ b
co oznacza wykonanie operacji x = a
-1
b. Rozwiązanie problemu x a = b (a i b są dane), można
uzyskać wykonując:
x = b / a
co oznacza wykonanie operacji x = ba
-1
Oprócz operacji podstawowych w Matlabie dostępnych jest cały szereg funkcji operujących
na macierzach.
Polecenie Clear
W Matlabie dostępna jest funkcja która pozwala na usunięcie z pamięci zbędnych zmiennych.
jest to polecenie clear, które użyte bez żadnego argumentu powoduje USUNIĘCIE
WSZYSTKICH ZMIENNYCH z pamięci. Jeśli chcemy usunąć tylko wybrane zmienne to
należy podać nazwy tych zmiennych jako argument tej funkcji, przykładowo
clear z MED A
Oprócz tej komendy wspomnieć należy w tym miejscu o komendzie clc, która pozwala na
wyczyszczenie okna poleceń.
Polecenia who, whos
Pozwalają na uzyskanie informacji o zmiennych znajdujących się w pamięci
Liczby zespolone
W Matlabie zmienne i oraz j automatycznie predefiniowane są jako sqrt(-1)
Zmiana precyzji wyświetlania wyników
Niezależnie od wybranej precyzji wyświetlania wyników wszystkie operacje w Matlabie
wykonywane są na zmiennych typu double. Zmianę precyzji wyświetlania można uzyskać
używając polecenia format:
a=sqrt(2)
format long, b=sqrt(2)
a-b
format short
Zapamiętywanie sesji i zmiennych na dysku
ś
eby zapisać wartości zmiennej "x" do pliku tekstowego o nazwie "var_x.txt" można użyć
polecenia
save var_x.txt x -ascii
ś
eby zapisać zmienną "x" do pliku w formacie Matlaba o nazwie "var_x.mat" można użyć
polecenia
save var_x x
ś
eby zapisać wszystkie zmienne do pliku w formacie Matlaba o nazwie "mysession.mat"
można użyć polecenia
save mysession
Wczytywanie sesji i zmiennych z pliku na dysku
Do wczytania zmiennej (lub sesji) z pliku w formacie Matlaba zastosuj polecenie load.
load mysession
Pomoc
Aby uzyskać pomoc na temat funkcji zastosuj polecenie help podając jako parametr nazwę
funkcji, przykładowo:
help sin
Można też skorzystać z systemu pomocy w formacie HTML. Przeszukiwanie plików pomocy
w celu odnalezienia informacji związanych z określonym terminem czy też funkcją można
uruchomić stosując polecenie lookfor, przykładowo:
lookfor sin
3. WIZUALIZACJA ROZKŁADÓW JEDNOWYMIAROWYCH
Matlab oferuje różne rodzaje wykresów:
0
1
2
3
4
5
6
7
8
-1
-0.8
-0.6
-0.4
-0.2
0
0.2
0.4
0.6
0.8
1
0
1
2
3
4
5
6
7
-1
-0.5
0
0.5
1
0
1
2
3
4
5
6
7
-0.1
-0.05
0
0.05
0.1
0
1
2
3
4
5
6
7
8
9
10
-1
-0.8
-0.6
-0.4
-0.2
0
0.2
0.4
0.6
0.8
1
x=0:0.05:8;
y1=sin(x.^2);
y2=sin(x);
plot(x,y1, x,y2);
% Tworzenie wykresu z dwiema %
osiami y z użyciem funkcji plot
t = 0:pi/20:2*pi;
y1 = sin(t);
y2 = 0.5*sin(t-1.5);
plotyy(t,y1,t,y2,'plot')
% Wykres schodkowy funkcji sin
x=0:0.25:10;
stairs(x,sin(x));
10
-1
10
0
10
1
10
2
10
0
10
10
10
20
10
30
10
40
10
50
-2.5
-2
-1.5
-1
-0.5
0
0.5
1
1.5
2
2.5
-1.5
-1
-0.5
0
0.5
1
1.5
0
0.5
1
1.5
2
2.5
3
3.5
4
-0.15
-0.1
-0.05
0
0.05
0.1
0.15
0.2
0.25
0.3
0.35
% Wykres logarytmiczny
x = logspace(-1,2);
loglog(x,exp(x),'-s');
grid on
% Wykres błędu
x=-2:0.1:2;
y=erf(x);
e = rand(size(x))/10;
errorbar(x,y,e);
% Stem plot
x = 0:0.1:4;
y = sin(x.^2).*exp(-x);
stem(x,y)
0
1
2
3
4
5
6
7
8
9
10
10
0
10
2
10
4
10
6
10
8
10
10
0.125
0.25
0.375
0.5
30
210
60
240
90
270
120
300
150
330
180
0
11%
33%
6%
28%
22%
% Wykres półlogarytmiczny(y-log)
x = 0:.1:10;
semilogy(x,10.^x)
% Wykres półlogarytmiczny(x-log)
x = 0:.1:10;
semilogx(10.^x,x)
% Wykres biegunowy
t=0:.01:2*pi;
polar(t,abs(sin(2*t).*cos(2*t)));
x = [1 3 0.5 2.5 2];
explode = [0 1 0 0 0];
pie(x,explode)
-3
-2
-1
0
1
2
3
0
0.1
0.2
0.3
0.4
0.5
0.6
0.7
0.8
0.9
1
1
2
3
4
5
0
5
10
15
20
25
0
5
10
15
20
25
1
2
3
4
5
% Wykres słupkowy funkcji
dzwonowej
x = -2.9:0.2:2.9;
bar(x,exp(-x.*x));
Y = round(rand(5,3)*10);
bar(Y,'stack')
Y = round(rand(5,3)*10);
barh(Y,'stack')
ĆWICZENIA
Ćwiczenie 1
Określić jakie macierze zostaną wygenerowane wyniku wykonania poniższych poleceń.
Sprawdzić swoje odpowiedzi wykonując polecenia w Matlabie. Do określenia rozmiaru
macierzy zastosować polecenie size np. size(z).
1. a = [1,0,0,0,0,1]
2. b = [2;4;6;10]
3. c = [5, 3, 5; 6, 2, -3]
4. 4. d= [3, 4;
5, 7;
9, 10 ]
5. e = [3, 5, 10, 0; 0, 0 ...
0, 3; 3, 9, 9, 8 ]
6. t = [4, 24, 9]
q = [t 0 t]
7. x = [ 3, 6 ]
y = [d;x]
z = [x;d]
8. r = [ c; x,5]
9. v = [ c(2,1); b ]
10.
a(2,1) = -3
Ćwiczenie 2
Wygenerować macierz g 5x4.
g = [ 0.6, 1.5, 2.3, -0.5;
8.2, 0.5, -0.1, -2.0;
5.7, 8.2, 9.0, 1.5;
0.5, 0.5, 2.4, 0.5;
1.2, -2.3, -4.5, 0.5 ]
Określić jakie macierze zostaną wygenerowane wyniku wykonania poniższych poleceń:
1. a = g(:,2)
2. b = g(4,:)
3. c = [10:15]
4. d = [4:9;1:6]
5. e = [-5,5]
6. f= [1.0:-.2:0.0]
7. t1 = g(4:5,1:3)
8. t2 = g(1:2:5,:)
Ćwiczenie 3
1. Obliczyć wartości funkcji: y(x), z(x), g(x) w zakresie x=<-5;5> z krokiem 0.1.
)
3
sin(
)
100
cos(
10
1
)
(
10
)
40
cos(
)
(
)
4
sin(
)
(
2
)
1
(
x
x
x
g
e
x
x
z
x
x
y
x
+
⋅
=
⋅
=
=
−
−
Ćwiczenie 4
Utworzyć wektor, w którym każdemu indeksowi parzystemu p będzie odpowiadać kwadrat, a
indeksowi nieparzystemu – sześcian p-tej liczby naturalnej.
Ćwiczenie 3
Mając dany wektor x, utworzyć tablicę a o n wierszach będących kopiami x.
x = 1: 6; n = 5;
PYTANIA:
1.
Jaką rolę pełni średnik na końcu wprowadzanego wyrażenia ?
2.
Co powodują i czym różnią się polecenia who i whos ?
3.
Kiedy stosujemy operator ”.” (kropka) ?
4.
Jaki jest rezultat opracji clear ?
5.
Do czego służy funkcja linspace() i jakie są jej parametry ?