Cwiczenie 1.
Wprowadzenie
do MATLABA
MATLAB (Matrix Laboratory) jest
interaktywnym oprogramowaniem wysokiego poziomu wydajnie wspierającym pracę przy
projektowaniu i analizie układów sterowania.
Matlab składa się z następujących
elementów:
-
interpretator języka
programowania
-
biblioteki standardowych
(podstawowych) procedur
-
biblioteki dodatkowe (ang. Toolbox) np. Control Toolbox, Opt. Toolbox .
-
nakładki : np. Simulink
Podstawową jednostką obliczeniową jest
macierz. Wektory i skalary mogą być tutaj rozpatrywane jako specjalne typy macierzy.
Typowe wyrażenie macierzowe zawarte jest w nawiasach prostokątnych []·.
Elementy prostokątnych kolumnach odseparowane są od siebie
spacjami lub przecinkami, wiersze natomiast średnikami lub wciśnięciem klawisza
Enter.
1.
PODSTAWOWE
OPERACJE NA MACIERZACH
Przypuśćmy, że
należy zapisać w MATLABIE następującą
macierz A:
Wprowadzanie macierzy A odbędzie się
w oknie komend MATLABA:
>>A=[1, 2 ; 3 4]
Pierwsza
linia rozpoczyna się znakiem >> który pojawia
się w oknie komend MATLABA i informuje o tym, że w tym miejscu zaczyna się
wprowadzana linia z danymi, komendami lub funkcjami. Najpierw wpisana została
nazwa macierzy (A), następnie znak równości (=). Cała wpisywana macierz
zawarta zosta a w nawiasie klamrowym ([...]). W pierwszej linii wpisane zostały
dwa pierwsze wiersze macierzy A, pierwszy wiersz został zakończony średnikiem natomiast
jego elementy zostały oddzielone od siebie przecinkiem, elementy drugiego
wiersza oddzielone zostały
od siebie spacjami. Po wykonaniu powyższego polecenia (wciśnięcie Enter) na ekranie pojawi się wynik działania:
A=
1 2
3 4
Gdyby po nawiasie kończącym wpisywanie macierzy ( ] )
został wpisany średnik to MATLAB nie wyświetliłby na ekranie
wyniku operacji. Taka
praktyka jest najbardziej użyteczna przy wprowadzaniu np. bardzo dużych
macierzy.
Ważnymi podstawowymi operacjami na macierzach są dodawanie, odejmowanie, mnożenie, transpozycja, potęgowanie i tak zwane operacje na macierzach, które dotycz manipulacji na elementach macierzy. Operacje matematyczne mające zastosowanie do macierzy, zebrane zostały w poniższej tabeli:
Dodawanie |
Odejmowanie |
Mnożenie |
Dzielenie |
Potęgowanie |
+ |
- |
* |
/ |
^ |
Operacje na macierzach wymagają, aby ich rozmiary były
kompatybilne. Dla operacji dodawania i odejmowania oznacza to, że macierze te
mają być tych samych rozmiarów. Jeśli macierz A ma rozmiar n × m
a macierz B rozmiar r × p to
działanie A ± B to zostanie wykonane w MATLABIE tylko wówczas gdy
n = p oraz m = r.
Mnożenie tych macierzy A*B będzie możliwe jeśli m = p. Mnożenie macierzy przez wektor jest
specjalnym przypadkiem mnożenia macierzy. Przypuśćmy, że b jest wektorem
o długości p. Mnożenie macierzy A o
rozmiarze n × m przez wektor b będzie możliwe tylko
wówczas jeżeli m = p. W wyniku
tego mnożenia y = A*b uzyskany zostanie wektor o rozmiarze 1 ×
n .
Wprowadźmy macierze na których
wykonywane będą operacje
macierzowe.
>> A=[1 3; 5 9]; B=[4 -7; 10 0];
Dodawanie
wprowadzonych macierzy:
>> A+B
ans =
5 -4
15 9
Odejmowanie
>> A-B
ans =
-3 10
-5 9
Mnożenie
>> A*B
ans =
34 -7
110 -35
Transpozycja macierzy
>> A'
ans =
1 5
3 9
Macierz odwrotna:
>> A^(-1) lub
>> inv(A)
Operacje, których zapis poprzedzony jest znakiem(.) nazywane są operacjami tablicowymi (patrz tabela):
Mnożenie |
Dzielenie |
Potęgowanie |
.* |
./ |
.^ |
Dane są dwie macierze o rozmiarach 2 x 2:
A = , B =
Użycie operatora tablicowego mnożenia spowoduje utworzenie nowej macierzy, której elementy będą następujące:
A .* B =
Wykonanie tej operacji w matlabie:
>> A=[1 2; 3 4]; B=[5 4.32; 6 2.51)];
>> A.*B
ans =
5.00 8.64
18.00 10.04
Inna operacja macierzowa, potęgowanie
>> A.^2
ans =
1 4
9 16
W
MATLABIE istnieje możliwość wygenerowania wektora wierszowego zawierającego pewną
liczbę elementów począwszy od pewnej zadanej wartości początkowej xp, do wartości końcowej xk z zadanym krokiem
zwiększania, dx
x = [xp : dx : xk].
Wygenerować dane
do wykresu funkcji y = 2x dla
x = 0, 0.1, 0.2,....1.0.
Najpierw należy wygenerować tablicę z
danymi x y. Wykonanie tej operacji
w MATLABIE:
>> x=[0:0.1:1]'; y=2*x;
>> XY = [x y]
XY =
0 0
0.1000 0.2000
0.2000 0.4000
0.3000 0.6000
0.4000 0.8000
0.5000 1.0000
0.6000 1.2000
0.7000 1.4000
0.8000 1.6000
0.9000 1.8000
1.0000 2.0000
Element
w i-tym wierszu i j-tej kolumnie
macierzy A oznaczany jest przez A(i,j). Dla
przykładu, A(4,2) jest liczbą w czwartym wierszu i drugiej kolumnie. Dla powyższej
macierzy element XY(4,2) jest równy 0.8.
W celu otrzymania rozmiaru macierzy A należy użyć
następującego polecenia:
>> [w,k]= size(A);
gdzie pod zmienna w zapisana zostanie liczba wierszy, a zmienna k zawierać będzie liczbę kolumn.
Aby otrzymać liczbę wszystkich elementów (długość) danej
macierzy lub wektora należy następującego polecenia:
>> length(A)
ans =
4
MATLAB
dostarcza cztery funkcje pozwalające na wygenerowanie podstawowych macierzy,
zoros |
Wszystkie elementy są zerami |
ones |
Wszystkie elementy są jedynkami |
rand |
Przypadkowe wartości z zakresu 0..1 |
randn |
Przypadkowe wartości według rozkładu normalnego |
których parametrami wywołania są liczba wierszy i kolumn.
Kilka przykładów:
>> Z = zeros(2,4)
Z =
0 0 0 0
0 0 0 0
>> F = 5*ones(3,3)
F =
5 5 5
5 5 5
5 5 5
>> R = randn(4,4)
R =
1.0668 0.2944 -0.6918 -1.4410
0.0593 -1.3362
0.8580 0.5711
-0.0956 0.7143 1.2540
-0.3999
-0.8323 1.6236 -1.5937 0.6900
2.
STANDARDOWE
FUNKCJE ARYTMETYCZNE
sum(x) – suma elementów
wektora x
prod(x) – iloczyn
elementów wektora x
max(x) i min(x) – max.
(największa) i min. (najmniejsza) wartość w wektorze x
abs(x) – wartość
bezwzględna liczby x (moduł z liczby zespolonej)
sqrt(x) – pierwiastek z liczby
x
log(x) – logarytm
naturalny z liczby x
log10(x) - logarytm dziesiętny z liczby x
sin(x), cos(x), tan(x) – funkcje trygonometryczne
Kilka
specjalnych funkcji dostarczających użyteczne wartości i stałe:
pi |
3.14159265... |
i |
Jednostka urojona, |
j |
To samo co i |
eps |
Względna
dokładność zmienno przecinkowa
2-52 |
realmin |
Najmniejsza liczba zmienno przecinkowa 2-1022 |
realmax |
Największa liczba zmienno przecinkowa 21023 |
inf |
Nieskończoność |
NaN |
Brak liczby |
Kilka
przykładów wyrażeń MATLABA:
>>r = (1+sqrt(5))/2
r =
1.6180
>> a = abs(3+4i)
a =
5
3.
PODSTAWOWE INSTRUKCJE OKNA POLECEŃ
help – instrukcja wywołania pomocy programu
help instrukcja – wyświetlenie
informacji na temat działania instrukcji (funkcji)
who – wyswietlenie wszystkich zmiennych w pamięci
clear – kasowanie
wszystkich zmiennych w pamięci
clear a,b – kasowanie zmiennych a i b
clc – wymazanie
okna poleceń
pwd – wyświetlenie
ścieżki do katalogu roboczego
cd ścieżka – zmiana katalogu
roboczego na podany
% - tym znakiem oznaczamy komentarz w Matlabie. Tekst znajujący się za tym znakiem nie jest on brany pod uwagę.
4.
SKRYPTY
Po uruchomieniu skryptu, MATLAB wykonuje instrukcje
znalezione w pliku. Skrypty mogą operować na danych istniejących w przestrzeni
pamięci roboczej (workspace) lub mogą tworzyć nowe dane na których wykonywane będą operacje. Chociaż skrypt nie
zwraca argumentów wyjściowych, pewne zmienne, które są tam tworzone pozostają w
pamięci roboczej MATLABA i mogą być używane w dalszych obliczeniach.
Aby utworzyć nowy skrypt należy wybierać z menu:
>File>New>mFile
wypełnić dowolnymi poleceniami MATLABA i zapisać z rozszerzeniem: .m
Utwórzmy skrypt o nazwie proba.m, wypełniając go następującymi poleceniami:
A=[1:2:10]
B=2*A
Skrypt uruchamiamy wpisując nazwę skryptu (proba) w oknie
poleceń MATLABA.
5.
FUNKCJE
Funkcje są M-plikami przyjmujacymi
argumenty wejściowe i zwracającymi argumenty wyjściowe. Nazwa M-pliku oraz
nazwa funkcji powinny być takie same. Funkcje operują na zmiennych znajdujących
się w ich własnych przestrzeniach pamięci roboczej, innych aniżeli te, do
których ma się dostęp z okna komend MATLABA. Pierwsza linia funkcji M-pliku
rozpoczyna się od słowa kluczowego function. Następnie zawarta jest tam również nazwa funkcji
oraz argumenty.
function [wartość1,wart.2,...]=nazwa_funkcji(parametr1,par.2,...)
Pod deklaracją funkcji należy napisać polecenia
jakie mają być wykonywane przez naszą funkcję. Funkcja powinna zostać
zapisana w M-pliku o nazwie identycznej jak w deklaracji nazwa_funkcji .m
Przykład 1
Napisać funkcję obliczającą kwadrat z dowolnej liczby.
f_kw.m
function a=f_kw(x)
a=x.^2
>> y=f_kw(10)
y=
100
Przykład 2
Napisać funkcję obliczającą średnią arytmetyczną i
geometryczną ciągu zapisanego w wektorze: a=[a1 a2 ... an]
srednia.m
function [sa,sg]=srednia(a)
n=length(a);
sa=sum(a)/n;
sg=(prod(a))^(1/n);
Możemy sprawdzić działanie tej funkcji
>> [a,g]=średnia([1:2:11])
gdzie wynikiem będzie liczba a (średnia arytmetyczna) i g (średnia geometryczna).
6.
ZMIENNE GLOBALNE
Jeśli ta sama zmienna ma być używana w kilku funkcjach, wówczas musi zostać zadeklarowana jako zmienna globalna w programie głównym i w funkcjach:
global A B C
Deklaracja zmiennej globalnej musi pojawić się wcześniej
niż ta zmienna zostanie użyta w funkcji. Dla przykładu utwórz M-plik o nazwie funkcja.m:
function y = funkcja(x) global b a=x+2; b=x; y=b |
global a a=100 b=100 y=funkcja(10) disp(a); disp(b); |
7.
OPERATORY RELACJI. INSTRUKCJE WARUNKOWE I ITERACYJNE
W Matlabie zaimplementowane
zostały następujące operatory relacji:
< , <= ,
> , >=, == , ~=
Instrukcja
warunkowa if
dokonuje oceny wyrażenia logicznego i wykonywana jest ta grupa linii programu,
kiedy wyrażenie jest prawdą. Opcjonalne słowa kluczowe elseif oraz else pozwalają na wykonywanie
alternatywnych grup programu. Słowo kluczowe end kończy instrukcję warunkową if.
Przykłady użycia:
if warunek1 instrukcja 1; .... instrukcja n; end |
if warunek1 instrukcja 1; .... instrukcja n; else instrukcje; end |
if warunek1 instrukcja 1; .... instrukcja n; elseif warunek2 instrukcje; else instrukcje; end |
Poniższy przykład ilustruje sposób użycia instrukcji
warunkowej if obejmującej trzy różne przypadki. Kiedy
przypadkowo wygenerowana liczba t (z zakresu 0..1)
jest większa od 0.75, wówczas należy podstawić
pod zmienną s wartość równą 0. Jeśli, natomiast liczba t jest
mniejsza od wartości 0.25, wówczas s = 1, w
pozostałym przypadku zmienna s przyjmuje wartość wyznaczoną z
zależności:1-2*(t0.25). Kod programu realizujący to zadanie jest następujący:
t = rand(1);
if t > 0.75
s =
0;
elseif t < 0.25
s
= 1;
else
s
= 1-2*(t-0.25);
end
Pętla
while
powtarza pewną grupę linii kodu, dopóty, aż spełniony zostanie logiczny warunek
sterujący. Blok instrukcji
wykonywanych w pętli musi zostać zakończony słowem kluczowym end.
Przykład użycia:
while (i>=10 & k > 5)
Instrukcje;
end
Instrukcja iteracyjna (pętla) for pozwala na wielokrotne wykonanie pewnej grupy linii kodu. Ilość
powtórzeń jest dokładnie określona. Wykonywana grupa linii kodu musi zostać zakończona
słowem kluczowym end.
Przykład użycia:
for i=1:1:10 % od1 ze skokiem 1 do10
Instrukcje;
end
Poniższy przykład ilustruje praktyczny sposób użycia pętli for w funkcji obliczającej wartości funkcji kwadratowej y=x2 gdy zmienną wejściową jest wektor argumentów dla tej funkcji.
kwadrat.m
function y=kwadrat (x)
for i=1:1:length(x)
y(i)=x(i)^2;
end
Funkcję tę następnie możemy wykreślić poleceniem : plot(x,y)
8. GRAFIKA W MATLABIE
MATLAB
ma rozszerzone własności wyświetlania wektorów i macierzy w postaci wykresów,
jak również opisywania i drukowania tych wykresów.
Tworzenie wykresów
Funkcja plot
daje różne postacie wykresów zależne od argumentów wejściowych. Jeśli y jest
wektorem, wówczas komenda plot(y) pozwala na uzyskanie kawałkami liniowego
wykresu elementów y w funkcji indeksów elementów tego
wektora y. Jeśli natomiast określone zostaną dwa wektory argumentów, wówczas
komenda plot(x,y) daje wykresy y w funkcji x.
Dla przykładu, w poniższych liniach kodu utworzono wektor x
zawierający wartości od 0 do 2, następnie wyznaczony został sinus tych wartości
i wykreślone zostały uzyskane wyniki.
x = 0:pi/100:2*pi;
y = sin(x);
plot(x,y)
Teraz dodane zostaną opisy osi i tytuł. Znaki ’\pi’ tworzą symbol π.
xlabel('x
= 0:2\pi')
ylabel('Sin(x)')
title('Wykres
funkcji Sinus')
Kilka par argumentów x-y tworzy
kilka krzywych na pojedynczym wykresie przy użyciu pojedynczej funkcji plot.
MATLAB automatycznie ustala automatycznie kolor krzywej na podstawie predefiniowanej
listy kolorów co pozwala na odróżnienie każdego zbioru
danych. Dla przykładu, te linie kodu pozwalają na wykreślenie trzech wykresów w
funkcji argumentu x, każda krzywa zaznaczona została innym kolorem.
y2 = sin(x-.25);
y3 = sin(x-.5);
plot(x,y,x,y2,x,y3)
Polecenie legend pozwala w łatwy sposób zidentyfikować pojedyncze wykresy.
legend('sin(x)','sin(x-.25)','sin(x-.5)')
Możliwe jest przy wykreślaniu danych przy użyciu polecenia plot określenie koloru, rodzajów linii
i znaczników (takich jak znaki plusa lub okręgi).
plot(x,y,'kolor_typ_linii_znacznik')
kolor_typ_linii_znacznik jest łańcuchem znaków zawierającym od jednego do czterech znaków
(zawartych w pojedynczych cydzysłowach)
skonstruowanych z koloru, typu linii i znacznika:
- Łańcuchami kolorów są 'c', 'm', 'y', 'r',
'g', 'b', 'w', oraz 'k'. Odpowiadają takim kolorom jak siny (cyan), karmazynowy (magenta),
żółty (yellow), czerwony (red), zielony (green), niebieski (blue), biały (white) oraz czarny (black).
- Typami
linii są '-' dla linii ciągłej, '--' dla linii kreskowanej, ':' dla linii
przerywanej, '-.' dla linii kreska-kropka.
- Rodzajami znaczników są '+', 'o', '*' i 'x' oraz 's' dla
kwadratu, 'd' dla diamentu, '^' dla trójkąta odwróconego do góry podstawą, 'v'
dla trójkąta podstawą do dołu, '>' dla trójkąta odwróconego podstawą w prawą
stronę, '<' dla trójkąta odwróconego podstawą w lewą stronę, 'p' dla
pentagramu, 'h' dla heksagramu. Brak jednego z tych
symboli oznacza, że ma nie być znacznika.
Jeśli określony zostanie typ znacznika bez określenia typu
linii, wówczas MATLAB wykreśli tylko same znaczniki. Dla przykładu:
plot(x,y,'ks')
wykreśla czarne kwadraty w każdym punkcie danych, lecz nie łączy
tych znaczków linią.
Linia kodu
plot(x,y,'r:+')
powoduje wykreślenie czerwonej linii przerywanej z umieszczonymi
znakami plusa w każdym punkcie danych. Można również użyć mniejszej ilości
punktów z danymi do wykreślenia znaczników niż do wykreślenia linii. W
poniższym przykładzie wykreślane są dane z użyciem dwóch różnych liczb punktów
dla linii przerywanej i wykreślenia znaczników.
x1 = 0:pi/100:2*pi;
x2 = 0:pi/10:2*pi;
plot(x1,sin(x1),'r:',x2,sin(x2),'r+')
Polecenie hold pozwala na dodanie krzywych do istniejącego wykresu. Kiedy wpisane zostanie polecenie
hold on
MATLAB nie pozwoli na zastąpienie istniejącego wykresu,
kiedy wprowadzone zostanie inne
polecenie dotyczące wykreślania to wówczas dodana zostanie ta nowa
zmienna do istniejącego wykresu, przeskalowując osie,
jeśli jest to konieczne. Aby możliwe było
zastępowanie istniejącego wykresu należy wpisać polecenie:
hold
off
Polecenie subplot pozwala na wyświetlenie kilku wykresów w tym samym
oknie. Wpisując:
subplot(m, n, p)
dzieli się okienko graficzne na macierz o rozmiarze m-na-n małych wykresów i wybiera się p-ty
wykres jako aktywny wykres. Wykresy są numerowane począwszy od pierwszego
górnego wiersza okna graficznego, następnie drugi wiersz i tak dalej. Dla
przykładu poniższy kod pozwala na wykreślenie czterech różnych wykresów w oknie
graficznym.
t
= 0:pi/10:2*pi;
[X,Y,Z]
= cylinder(4*cos(t));
subplot(2,2,1); mesh(X)
subplot(2,2,2); mesh(Y)
subplot(2,2,3); mesh(Z)
subplot(2,2,4); mesh(X,Y,Z)
Domyślnie MATLAB znajduje maksima i minima danych umieszczanych na wykresie i odpowiednio do tego dostosowuje zakresy osi. Polecenie axis pozwala na ustalenie własnych zakresów osi
axis([xmin
xmax ymin ymax])
Użycie
polecenia
axis auto
pozwala na przywrócenie automatycznego wyboru zakresów.
9. WPROWADZANIE DANYCH
a=
input(‘podaj
wartość a= ‘) – wprowadzanie
zmiennej do programu
disp(‘dowolny
tekst lub nazwa zmiennej’) – wyświetla tekst lub wartość zmiennej
Przykład wykorzystania:
a= input(‘podaj
wartość a= ‘);
disp(‘podano
wartość a);
disp(a);