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

helpinstrukcja wywołania pomocy programu

            help instrukcja – wyświetlenie informacji na temat działania instrukcji (funkcji)

whowyswietlenie wszystkich zmiennych w pamięci

clearkasowanie wszystkich zmiennych w pamięci

            clear a,bkasowanie zmiennych a i b

clcwymazanie okna poleceń

pwdwyświetlenie ścieżki do katalogu roboczego

cd ścieżkazmiana 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=x­2 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);