background image

 

1

 
 
 

Temat: 

 

Środowisko Matlab 

 
 

Zagadnienia: 

 

Ogólne możliwości Matlaba 

 

okna Matlaba 

 

uruchamianie istniejących programów 

 

uruchamianie edytora programów Matlaba  
i zapis m-plików 

 

Wybór katalogów, pliki i ich rodzaje 

 

graficzny interfejs użytkownika- charakterystyka  

 

Praca z MATLAB w trybie konsoli  

 

Command Window –polecenia konfigurujące 

 

Workspace – polecenia operujące na danych  
i plikach 

 

Typy danych w Matlabie- funkcje konwersji 

 

Podstawowe funkcje i stałe matematyczne  

 

Definiowanie macierzy i wektorów  

Funkcje systemowe 

Operacje na macierzach i wektorach

 

 

Literatura 

 A. Kamińska, B. Pańczyk,  Matlab. Przykłady i zadania, Mikon 2002 
 B. Mrozek, Z. Mrozek,       Matlab i Simulink. Poradnik użytkownika, 

2004 

 B. Mrozek, Z. Mrozek,  Matlab.  Uniwersalne środowisko do obliczeń 

naukowo technicznych. 

 Matlab Help Printable documentation 
 R. Klempka, A. Stankiewicz, Programowanie z przykładami w języku 

Pascal i Matlab, 2002  

 B. Mrozek, Z. Mrozek,  MATLAB Leksykon kieszonkowy. Wyd. HELION 

 

 

background image

 

2

 Charakterystyka środowiska  Matlab 

            (MATrix LABoratory) 

Matlab  to  proste  w  użyciu  środowisko  łączące  obliczenia, 

wizualizację i  programowanie. Zastosowania pakietu to: 

•  obliczenia matematyczne, 
•  algorytmy numeryczne, 
•  modelowanie i symulacja, 
•  analiza danych i wizualizacja, 
•  grafika inżynierska, 
•  aplikacje z wykorzystaniem graficznych 

    interfejsów użytkownika GUI 

(Graphics User Interface

)

 

Matlab jest systemem interaktywnym, którego podstawową 

strukturę 

danych 

stanowi 

dwuwymiarowa 

tablica 

dynamiczna  o  nieokreślonej  z  góry  liczbie  elementów. 
Takie  podejście  pozwala  rozwiązywać  wiele  technicznych 
problemów,  w  szczególności  opisanych  za  pomocą 
macierzy  i  wektorów,  bez  definiowania  takich  struktur  (co 
nie jest możliwe w językach programowania np. typu C). 

Dodatkowe biblioteki Matlaba (ang. 

toolboxes

) umożliwiają 

stosowanie 

specjalistycznych 

technologii. 

Biblioteki 

składają  się  z  funkcji  Matlaba  (tzw. 

m-plików

),  które 

poszerzają 

standardowy 

zestaw 

funkcji 

pakietu 

możliwości rozwiązywania specyficznych problemów np.: 

Control System Toolbox- projektowanie układów  sterowania  

Optimization Toolbox - metody optymalizacji,  

Neural Network Toolbox - sieci neuronowe itp.). 

Integralną częścią  Matlaba jest 

Simulink 

- interaktywny 

system, umożliwiający graficzne modelowanie i symulację 

układów.  

Przykład budowy 

prostego układu i 
symulacji jego pracy 
przedstawiono na  
rysunku obok. 

background image

 

3

Pakiet Matlab składa się z 5 podstawowych elementów: 

1. 

język 

Matlab

 

-język 

wysokiego 

poziomu, 

umożliwiający tworzenie zarówno małych programów, jak i 
kompletnych  aplikacji,  udostępniający  funkcje,  obsługę 
wejścia/wyjścia i elementy programowania obiektowego; 

2. 

środowisko  robocze  Matlaba

  -  zestaw  narzędzi  do 

zarządzania  zmiennymi  w  przestrzeni  roboczej,  m-
plikami,  aplikacjami  Matlaba  oraz  do  importowania  i 
eksportowania danych; 

3. 

system  graficzny

  -  zawierający  funkcje  wysokiego 

poziomu  do  tworzenia  2D  i  3D  wykresów,  funkcje 
przetwarzania  obrazów  i  tworzenia  animacji  oraz  wiele 
niskopoziomowych  poleceń,  umożliwiających  kontrolę 
wyglądu tworzonych grafik i budowę graficznego interfejsu 
użytkownika; 

4. 

biblioteka  funkcji  matematycznych 

—  obejmuje 

zarówno  funkcje  podstawowe  (np.  sumowanie,  funkcje 
trygonometryczne, 

funkcje 

liczb 

zespolonych), 

macierzowe 

(np. 

obliczanie 

macierzy 

odwrotnych, 

wyznaczanie 

wartości 

własnych), 

jak 

wiele 

specjalistycznych  funkcji  matematycznych,  np.  funkcje 
Besse-la, FFT (Fast FourierTtransform); 

5. 

interfejs  API

  (application  program  interface)  ~ 

biblioteka  umożliwiająca  tworzenie  programów  w  językach 
C  i  Fortran,  współpracujących  z  rogramami  napisanymi  w 
Matlabie. 

 
Praca z pakietem Matlab może odbywać się na dwa 

sposoby: 

 

w trybie bezpośrednim

 - robocze prowadzenie dialogu 

pomiędzy  użytkownikiem  a  pakietem  na  zasadzie: 
pytanie - odpowiedź; 

 

w trybie pośrednim

 - umożliwia efektywne wykonanie 

obliczeń 

i prezentację 

wyników 

za 

pomocą 

uruchomienia  programu  napisanego  w  języku  pakietu 
Matlab, czyli tzw. 

skryptu 

 
Po uruchomieniu pakietu polecenia można wydawać 

bezpośrednio w oknie Matlaba. O gotowości świadczy 
 

znak zgłoszenia (») 

(w

 

wierszu poleceń)

 

background image

 

4

Matlab – po uruchomieniu 

 

 
 
 
 

Przykład własnego GUI  

do uzyskania wykresów funkcji: 

f(x) = b*x +Amp*sin(omega*x) 

 
 
 
 
 
 

Uruchamianie istniejącego programu Matlaba (file.m) 

 

Należy określić ścieżkę dostępu do programu wybierając: 

File

Open 

 
 
 
 
 
 
 
 
 
 
 
 
 

 

 

Katalog Matlaba z 
toolbox’ami 
w oknie 
Launch Pad 

>> -znak zachęty 

Okno 

Command 

Okno 

History 

Wybieramy katalog w 
którym jest program 

Wyświetlają się nazwy 

programów Matlaba 

(pliki z rozszerzeniem: 

 xxxx.m  lub  yyyy.fig 

Wybieramy ten który 
ma być uruchomiony 

background image

 

5

Tworzenie nowego programu dla Matlaba 
 

W celu napisania programu w języku Matlak należy użyć 
specjalnego edytora. Zastanie on otwarty po wyborze opcji: 
 

File

New

M-file

     

 

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Okno Command Window można czyścić np. wpisując po 
znaku zachęty << polecenie clc. Tak jak niżej: 
<<clc 
Polecenie to usuwa zawartość z wszystkich linii okna,  
a kursor zostaje umieszczone w górnym lewym rogu. 

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Wybór opcji M-file 
otworzy okno specjalnego 
edytora ułatwiającego  pisanie 
u uruchamianie programu w 
Matlabie 

Edytor pozwala wprowadzać 
polecenia Matlaba. 
Wyróżnia kolorem niektóre 
elementy składni. 
Po napisaniu programu należy go 
zapisać we wskazanym katalogu 
jako tzw.  M-plik (rozszerzenie .m) 
np.: 

/Matlab/work/równanie.m 

Zapis:

  

- File

Save as

  

{ i ustalamy ścieżkę dostępu do 

katalogu w którym chcemy 

zapisać program  } 

-

Nadajemy nazwę i potwierdzamy 

 całość OK.

 

background image

 

6

 

Tworzenie Graficznego Interfejsu Użytkownika w Matlabie 

 
Panel z elementami GUI otwiera polecenie: 

 

File

New

GUI 

 

 

 

 

Uwaga: 

1.  w trakcie budowy GUI powstaje automatycznie (w tle) program 

szkieletowy, 

2.  w odpowiednich miejscach szkieletu należy dopisać instrukcje 

Matlaba określające co ma być robione (np. po przeciągnięciu 
suwaka  do okienka ma zostać wprowadzona wartość 
bieżąca). 

Okno 

projektu 

GUI 

Obiekty 

GUI 

Projektujemy GUI przeciągając 
obiekty i rozciągając je do 
właściwych rozmiarów. 
 
Zapisujemy projekt: 

File

Save as

{ scieżka do katalogu} 

Nadajemy nazwę z rozszerzeniem: 
Np.: Projekt1

  

 

Po zapisie powstaną 2 piki: 
Projekt1.m   
Projekt1.fig` 

background image

 

7

Przykładowe aplikacje z wykorzystaniem  GUI 

 

Poniżej przedstawiono przykład GUI z suwakami i oknem 
graficznym. 

 

 

 

Poniżej przedstawiono przykład GUI (prosty kalkulator) 
z

 

okienkami do wprowadzania danych i wyświetlania wyników oraz 

z wykorzystaniem 2 rodzajów przycisków.  

 

Suwaki 
zmieniające  
pulsację i 
amplitudę 
sinusoidy 

background image

 

8

 Praca z MATLABEM w trybie konsoli 

Command Windows- w tym oknie wprowadzane są polecenia  
     Matlaba  oraz wyświetlane są wyniki (konsola). 
Workspace- w miarę powoływania (używania) zmiennych w oknie 
    Command Win.-  informacja  o nich jest w tym oknie. Może być 
    ono przełączane na  Current Directory.  
Command History- w  oknie tym pojawiają się kolejne wpisywane w 

Command  Windows polecenia (ale nie ma tu inf. np. o 
wyświetlanych zawartościach zmiennych. Okno pozwala np. na 
kopiowanie wcześniej zapisanych poleceń i użycie ich w czasie 
bieżących obliczeń. Okno pamięta historię z przed  wielu dni!  

 
 
 
 
 

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

My wpisujemy 
polecenia po 
znaku zachęty 

>>

 

Matlab natychmiast 
wykonuje polecenie 
i podaje wynik  

(gdy polecenie 
kończy „;” lub tylko 
pamięta wynik) 

Czyszczenie 

zawartości 

okien 

zapewniają 

opcje w 

Edit: 

-Clear Works.
-Clear Comm 
-Clear Hist. 

Pozwala określić jakie 

informacje wyswietlać

   

w

 Workspace  

(np. size- 

rozmiar zmiennej,  itp.)  

i w jakiej kolejności  

 (np.:  alfabetycznie, w 

kolejności definiowania) 

background image

 

9

 
Katalogi, pliki i ich rodzaje 

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

M- pliki

 (np. rownanie.m)- umożliwiają definiowanie własnych 

poleceń obliczeniowych i algorytmów.

FIG-pliki

-  zawierają 

polecenia realizacji interfejsu graficznego 

GUI

 (Graphics User 

Interface) tworzonego przez użytkownika. GUI jest budowany z 

gotowych komponentów, ale trzeba ręcznie zapewnić powiązania 

między obiektami GUI a własnym programem. Np. jeśli w GUI 

wprowadzimy przycisk OBLICZ to trzeba do niego dodać 

„instrukcje”co ma robić program po naciśnięciu przycisku przez 

użytkownika. 

MAT-pliki

 –i pliki ASCII- służą do wymiany danych 

między Matlab a innymi programami. MEX-pliki- skompilowane w C 

lub Fortranie programy do obliczeń lub sterowania urządzeniami. 

Toolbox-

y- 20 specjalizowanych pakietów (np. Neural Network). 

Wybór katalogów, 

programów itp. 

Simulink- łatwa 

symulacja 

układów np. 

regulacji automat. 

Czy też obliczeń 

matematycznych 

np. przy analizie 

background image

 

10

Praca w Matlabie w trybie konsoli 

Ogólny wygląd okien przy wpisywaniu poleceń w oknie 

Command Window 

Poniżej przedstawiono ciąg poleceń w Matlabie, pozwalający na 
obliczanie pierwiastków równania kwadratowego. Ciąg poleceń 
pozwala na: 

 wprowadzenie liczb do zmiennych a,b,c będących 

współczynnikami równania typu: ax*x  +b*x +c 

 sprawdzenie warunku istnienia pierwiastków rzeczywistych 

(delta > lub równa zero) 

 Jeśli  pierwiastki istnieją- to obliczenie ich i wyświetlenie w 

oknie Command Window, 

 Jeśli pierwiastki nie istnieją to wyświetlenie stosownego 

komunikatu, 

 
 

 

 
 

Zmienne pojawiają się w przestrzeni 
roboczej (

Workspace

) kolejno w trakcie 

wpisywania poleceń w 

Command Window

W oknie Historii (

Command History

) są pamiętane tylko 

polecenia. Przy ponownym pisaniu sekwencji poleceń w oknie 

Command Window  niektóre z nich mogą być „przeciągane”  – 

co przyspiesza proces realizacji obliczeń. 

Uwaga: 
Wyjaśnienie tego 
przykładu na 
następnej 
stronie! 

background image

 

11

Obliczenia w Matlabie w trybie konsoli - przykład 

Poniżej, dla lepszej przejrzystości  przedstawiono ciąg poleceń 
wpisywanych w oknie Command Window . Polecenia realizują  
obliczanie pierwiastków równania kwadratowego. 

 

Uwaga: kolory w tekście nadaje Matlab w trakcie pisania poleceń. 

To get started, select "MATLAB Help" from the Help menu. 
>> clc 
>> format compact 
>> a=input(

'a='

); 

a=2 
>> b=input(

'b='

); 

b=3 
>> c=input(

'c='

); 

c=-1 
>> delta=b.*b-4*a*c 
delta = 
    17 

% Obliczenia – to jest komentarz 

>> 

if 

delta>0 

 x1=(-b-sqrt(delta))/(2*a) 
 x2=(-b+sqrt(delta))/(2*a) 
disp(

'Pier1='

),disp(x1) 

disp(

'Pier2='

),disp(x2) 

elseif

 delta==0 

x1=-b/(4*a); disp(

'Pier1=Pier2='

), disp(x1); 

else 

disp(

'Brak pierw. rzeczywistych'

end 

 
 
 
x1 = 
   -1.7808 
x2 = 
    0.2808 
Pier1= 
   -1.7808 
Pier2= 
    0.2808 
>> 

>> a=input(

'a='

); 

a= 

Taki jak wyżej jest efekt wykonania 
polecenia. Matlab czeka na 
wprowadzenie wartości zmiennej  i 
potwierdzenie naciśnięciem Enter

  

 

Poniższe wyniki ukażą się dopiero po poprawnym zakończeniu 
powyższej sekwencji instrukcji i jej interpretacji przez Matlab   
Nastąpi to z chwilą wprowadzenia instrukcji 

end 

x1, x2- są zwracane bo 
instrukcje definiujące 
obliczanie x1 i x2  nie 
kończą się średnikiem ! 

Wyniki wyjściowe

x1, x2- są zwracane w wyniku 

wykonania instrukcji wyjścia typu 

disp(). Wartości poprzedzone są  

wydrukami tekstowymi  

(tu Pier1= oraz Pier2=) 

Po wpisaniu tej instrukcji i 
zakończeniu jej  wciśnięciem 
Enter nie wystąpią dalej znaki  
zachęty  <<  bo Matlab nie wie 
gdzie będzie koniec tej 
konstrukcji- czeka na end ! 

background image

 

12

Pisanie dłuższego ciągu poleceń na konsoli jest trudne, bo prawie 
nie sposób uniknąć błędów. Wygodniej jest: 

zapisać polecenia w pliku, 
Poleceniem:  

File

New

 wybrać M-file

 

Matlab udostępni okno edytora z domyślną nazwą pliku 
(programu) Untitled .  Przy pomocy edytora  należy wpisać 
polecenia (np. jak niżej w tabeli). W trakcie pisania edytor 
rozpoznaje pewne konstrukcje językowe i zmienia kolor tekstu. 

Po wpisaniu poleceń należy zapisać plik wybierając: 

File

Save As

  (można tu poda inną niż domyślna nazwę programu)  

Następnie program można uruchomić z okna edytora 
wybierając kolejno opcje:  

Debug

Run

 

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

 

 
 
Jeśli wpisane polecenia są poprawne to Matlab je wykona, a ich 
efekty będą widoczne w oknie Command np. jak niżej:  
Podaj a=-2 
Podaj b=5 
Podaj c=4 
Pier1= 
    3.1375 
Pier2= 
   -0.6375 
>> 

 
 

clc 
format compact 
a=input(

'Podaj a='

); 

b=input(

'Podaj b='

); 

c=input(

'Podaj c='

); 

% Wprowadzono dane teraz obliczenia – to 
jest komentarz 
delta=b*b-4*a*c; 

 if

 delta>0 

        x1=(-b-sqrt(delta))/(2*a); 
        x2=(-b+sqrt(delta))/(2*a); 
        disp(

'Pier1='

),disp(x1); 

        disp(

'Pier2='

),disp(x2); 

elseif

 delta==0 

        x1=-b/(4*a); disp(

'Pier1=Pier2='

), 

disp(x1); 

else 

        disp(

'Brak pierw. rzeczywistych'

); 

end 

background image

 

13

Środowisko Matlab- okno Command Window  

Środowisko 

Matlaba 

obejmuje 

zagadnienia: 

obsługi 

programu,  odczytu  i  zapisu  danych  w  plikach,  a  także 
zarządzania  pamięcią.  Przed  przystąpieniem  do  pracy  z 
pakietem 

można, 

ustawiając 

odpowiednie 

opcje, 

przygotować  środowisko  pracy.  Służą  do  tego  specjalne 
funkcje obsługujące okno poleceń(tzn Command Window): 

Funkcja 

Opis 

clc 

czyści okno  i umieszcza kursora w lewym górn. rogu 

home 

umieszcza wiersza poleceń i kursora w lewym g. r. okna  

echo on/echo off 

włącza/wyłącza wysyłanie na ekran treści wykonywanych 
poleceń 

more on/more off 

włącza/wyłącza stronicowanie tekstów wysyłanych na ekran 

diary plik_nazwa 

polecenia i teksty (bez grafiki) wysyłane na ekran będą 
zapisywane w pliku o podanej nazwie 

diary off/on 

przełącznik funkcji diary 

Sposób  wyświetlania  liczb  w  oknie  określa  funkcja  format. 
Nie  wpływa  ona  na  dokładność  obliczeń,  a  tylko  na  widok 
liczby  na  ekranie.  W  tabeli  przedstawiono  liczbę1/23  w 
różnych formatach. 

Format 

Opis 

Wynik dla liczby 1/23 

short 

5-cyfrowa liczba stałopozycyjna (format 

domyślny) 

0,0435 

short e 

5-cyfrowa liczba zmiennopozycyjna 

4,3478e-002 

long 

15-cyfrowa liczba stałopozycyjna 

0,04347826086957 

long e 

15-cyfrowa liczba zmiennopozycyjna 

4,347826086956522e-2 

short g 

5 znaczących cyfr liczby stało- lub zm. poz. 

0,043478 

long 

15 znaczących cyfr liczby stało- lub zm. 

poz. 

0,0434782608695652 

hex 

liczba szestnastkowa 

3fa642c8590b2164 

drukuje znak + dla liczb dodatnich, - dla  

ujemnych, spację dla zera 

bank 

format walutowy (część całkowita i do 

 dwóch miejsc po przecinku) 

0,04 

rat 

przybliża liczbę ułamkami małych liczb 

całkowitych 

1/23 

compact 

Wył. dodawanie dodatkowych pustych 

wierszy 

 

loose 

Wł. dodawanie dodatkowych pustych 

wierszy 

 

Odpowiedni format ustawia się poleceniem np.  

»       format  bank 

background image

 

14

Przykład  

 

Przygotuj środowisko pracy Matlaba. W tym celu: 

 
a)  rozpocznij zapisywanie wydawanych poleceń w pliku 

Matlab.txt, 

 

»       diary Rejestr.txt

 

 
b)  wyczyść okno poleceń, wyłącz opcję wysyłania na 

ekran treści wykonywanych poleceń oraz ustaw format 
wyświetlania danych na long e, 

 

»  clc, echo off, format long e 

c)  zdefiniuj x=12.34 oraz zakończ zapisywanie w pliku 

Rejestr.txt.

 

 

» x=12.3456,   diary off 

 
 
Po wykonaniu powyższych poleceń plik 

Rejestr.txt

 zawiera 

tekst: 

clc,   echo  off,   format   long e 
 x=12. 3 4 ,    diary  off  

x  = 

1.234000000000000e+001  

diary  off 
 

>>format short

background image

 

15

Przestrzeń robocza- Workspace 

Przestrzeń  robocza  (Workspace)  Matlaba  jest  to  obszar 

pamięci, w którym przechowywane są zmienne utworzone w oknie 
poleceń Command Window. W Matlabie są funkcje umożliwiające 
operacje na tych zmiennych . Są one przedstawione w tabeli:. 

 

Funkcja 

Opis 

who 

wyświetla listę wszystkich zmiennych znajdujących się  w 
pamięci 

whos 

wyświetla listę wszystkich zmiennych wraz z informacją na 

temat ich rozmiaru i rodzaju 

who global 
whos global 

wyświetlają informacje o zmiennych globalnych  

clear 

usuwa z pamięci wszystkie zmienne 

clear z 

usuwa z pamięci zmienną o nazwie 

z

 

clear zl z2 z3 

usuwa z pamięci wymienione zmienne 

clear global z 

usuwa z pamięci zmienną globalną o nazwie 

z

 

clear all 

usuwa z pamięci wszystkie zmienne i funkcje; pozostawia 

przestrzeń roboczą zupełnie pustą 

Ponieważ zmienne przechowywane są w pamięci tylko 

podczas  danej  sesji  pracy  z  pakietem  (lub  dopóki  nie 

zostaną usunięte), można zapisać całą aktualną zawartość 

przestrzeni  roboczej  w  pliku,  a  później  ją  odtworzyć  –

tabela 

 

Funkcja 

Opis 

save 

zapisuje binarnie wszystkie zmienne w pliku 

matlab.mat

 

save plik 

zapisuje binarnie wszystkie zmienne w pliku o nazwie 

plik.mat

 

save plik lista 

zapisuje binarnie w pliku o nazwie 

plik.mat

 tylko zmienne 

wymienione jako 

Lista

 

load 

wczytuje zmienne zapisane w pliku 

matlab.mat 

do

 

Workspace 

load plik 

wczytuje zmienne zapisane w pliku 

plik.mat

 

load plik.rozsz 

wczytuje zmienne zapisane w pliku tekstowym o podanej 
nazwie i dowolnym rozszerzeniu; dane muszą tworzyć 
tablicę prostokątną; wczytane dane zostaną zapisane w 
macierzy o nazwie 

plik

 

background image

 

16

Przykład  

 

Wykonaj następujące polecenia: 

 
a)  zdefiniuj zmienne (tablice:) 

>>A=randn(1,100); 
>>B=rand(1,100) 

Zostanie wygenerowana tablica A wierszowa 
zawierająca 100 losowych wartości z rozkładu 
normalnego N(0,1) oraz tablica B zawierająca 100 

Liczb z rozkładu równomiernego z przedziału [0:1.0]  

 

c)  zapisz zmienne A i B(tablice ) 

 

w pliku o nazwie 

Tablice

.mat,

 

 

 

»       save  Tablice A B

 

d)  skasuj tablicę z pamięci (workspace)  

 

»       clear all

 

e) 

zamknij Matlab i ponownie go uruchom 
odczytaj dane zapisane w pliku 

Tablice.mat. 

 

 

»       load Tablice  %odczyt rejestracji

 

 

W pamięci Workspace ponownie pojawi się tablica A i B 
zawierzające liczby losowe. 

Powyższe czynności pokazują jak zachowywać zmienne 
do dalszego wykorzystania (np. w innym programie, w 
innym czasie). 

 

background image

 

17

Typy danych 

Matlab  dopuszcza  użycie  sześciu  typów  danych: 

double,  char, 

cell i struct

. W praktyce najczęściej stosowane są dwa: 

• 

double

 - liczby podwójnej precyzji, 

• 

char 

- znaki i łańcuchy znaków. 

Liczby podwójnej precyzji 

Wszystkie  obliczenia  Matlaba  wykonywane  są  na  liczbach 

podwójnej  precyzji.  Tablica  liczb  podwójnej  precyzji  jest 
podstawową  zmienną  programu  i  wszystkie  formaty  liczb  w 
rzeczywistości  przechowywane  są  w  pamięci  jako  właśnie  taki  typ 
danych.  Zakres  typu    zależy  od  komputera  i  określony  przez  stałe 

realmin i realmax. 

Łańcuchy znakowe 

Łańcuchy  są  wektorami  składającymi  się  ze  znaków.  Łańcuch 

znakowy definiuje się za pomocą apostrofów, np. 

»      s='

Matlab

 

s  = 
Matlab 

Łańcuch  przechowywany  jest  w  pamięci  w  postaci  wektora  liczb 
całkowitych  reprezentujących  kody  ASCII  poszczególnych  znaków. 
Konwersji  łańcucha  na  wektor  kodów  ASCII  można  dokonać  za 
pomocą polecenia 

»      a  =  double( s )  

a   = 

77      97      116     108     97      98 

Konwersję odwrotną wykonuje polecenie 

char(a).

 

Z łańcuchów można budować macierze 

znakowe. Polecenie  

»      w=['Jezyk   '   s] 

połączy łańcuchy w poziomie w 12-elementowy wektor znakowy 

w:

 

w = 
Jezyk Matlab 

Z kolei polecenie 

»       M=['Jezyk   ';   s] 

połączy łańcuchy w pionie i zwróci macierz znakową M o rozmiarze 
2x6 

M = 
Jezyk Matlab 

Uwaga: Oba wiersze macierzy M muszą mieć jednakową długość. 

background image

 

18

Ponieważ łańcuch jest wektorem, można na nim wykonywać 
operacje, jak na zwykłych wektorach. Przykładowo polecenie 

»       length(s) 

zwróci liczbę 6 (liczba znaków w łańcuchu s). Z tego samego 
względu do wyświetlania łańcuchów można użyć funkcji 

disp, np

»      disp(w) 

Oprócz tego Matlab zawiera liczne funkcje operujące na 

łańcuchach. Niektóre z nich zostały przedstawione w tabeli: 

 

Funkcja 

Opis 

deblank(s) 

usuwa spacje z końca łańcucha, np. s=deblank(s) 

findstr(sl,s2) 

szuka krótszego z łańcuchów sl i s2 w dłuższym; zwraca 

wektor indeksów, od których zaczyna się krótszy łańcuch 

lower(s) 

zmienia wszystkie litery w łańcuchu na małe 

strcat(sl,s2,s3,...) 

łączy łańcuchy w poziomie z pominięciem spacji na 
końcu Polecenie 

strcat('Język ', s)

 zwróci 'JęzykMatlab' 

strcmp(sl,s2) 

porównuje dwa łańcuchy; jeśli są identyczne, zwraca 1, 

jeśli nie - 0; funkcja rozróżnia wielkość liter 

strcmpi(sl,s2) 

porównuje dwa łańcuchy bez rozróżniania wielkości liter 

strncmp(sl,s2,n) 

porównuje n pierwszych znaków w dwu łańcuchach 

strvcat(sl,s2,s3) 

łączy łańcuchy w pionie, dodając na końcu każdego z 
nich odpowiednią liczbę spacji; zwraca macierz 

upper(s) 

zmienia wszystkie litery w łańcuchu na duże 

WAŻNE: 

Czasem  zachodzi  konieczność  przekształcenia  danej  liczbowej  na 

tekst  (np.  podczas  wyświetlania  wartości  liczbowych  w  oknie  graficznym) 
lub odwrotnie. Służą do tego m.in. funkcje konwertujące liczby na łańcuchy  
Są one zestawione w poniższej tabeli. 

 

Funkcja 

Opis 

int2str(n) 

konwertuje liczbę całkowitą 

n

 na łańcuch (niecałkowita 

przed konwersją jest zaokrąglona); argum. może być mac. 

num2str(x) 

konwertuje wyrażenie Matlaba (liczbę, macierz lub polecenie) 
na łańcuch 

str2double(s) 

konwertuje łańcuch 

s

 na liczbę (rzeczywistą lub zespoloną); 

liczba w łańcuchu musi mieć prawidłowy format 

background image

 

19

 

Przykład  

 

Zdefiniuj zmienne: 

x=12.34, y=12.34e-5, s= program oraz  s1 = ’

56.78

'. 

» 

x=12.34, y=12.34e-5, s='program', sl='56.78'

 

x = 

12.3400 

y = 

1.2340e-004 

s = 

program  

sl = 

56.78 

Wykonaj poniższe polecenia: 

a) 

dokonaj konwersji wartości liczbowych x i y na łańcuchy 
znaków 

 

» s2=num2str(x), s3=int2str(x), s4=num2str(y) 

s2   = 

12.34 

s3   = 

12

 

(liczba rzeczywista została zaokrąglona) 

s4   = 0 . 0 0 0 1 2 3 4  

 

b) 

dokonaj konwersji łańcuchów s i s1 na liczby rzeczywiste

»  xl=str2double(s), x2=str2double(sl) 

xl  
   = NaN

        (bo nie ma możliwości konwersji stałej tekstowej na liczbę) 

x2    
       = 56.7800 

a) 

dokonaj konwersji wyrażenia

 

sin(2*pi*x)

 

na łańcuch znaków

 

»      num2str(sin(2*pi*x)) 

ans    
    = 0.84433

 

 

Matlab 
wyświetli taką 
zawartość 
zmiennych 

background image

 

20

Podstawowe funkcje i stałe matematyczne 

Najważniejsze  z  funkcji    zostały  przedstawione  w  tabeli.  Większość 
funkcji  dopuszcza  użycie  argumentów  zespolonych.  Ponieważ 
wszystkie 

zmienne 

Matlaba 

są 

traktowane 

jako 

macierze, 

argumentem każdej funkcji może też być macierz

. W takim wypadku 

odpowiednia  operacja  wykonywana  jest  na  każdym  elemencie 
macierzy z osobna. 

 

Funkcja 

Opis 

sin(z), cos(z), tan(z), cot(z) 

funkcje trygonometryczne: sinus, cosinus, tangens, 
cotangens; argument funkcji podawany jest w rad. 

asin(z), acos(z), atan(z), 
acot(z) 

funkcje cyklometryczne; wynik podawany jest w 
radian. 

sinh(z), cosh(z), tanh(z), 
coth(z) 

funkcje hiperboliczne- argument funkcji w 
radianach 

asinh(z), acosh(z), atanh(z) 

funkcje odwrotne do hiperbolicznych-wynik w 
rad. 

sqrt(z) 

√√√√

z (jeśli z<0, wynik jest zespolony) 

exp(z) 

e^z 

log(z) 

In z (jeśli z<0, wynik jest zespolony) 

log2(z) 

log

2

 z (jeśli z<0, wynik jest zespolony) 

logl0(z) 

log

]0

 z (jeśli z<0, wynik jest zespolony) 

abs(z) 

z lub moduł liczby zespolonej 

angle(z) 

argument liczby zespolonej 

real(z), imag(z) 

część rzeczywista i urojona liczby zespolonej 

conj(z) 

liczba zespolona sprzężona 

complex(x,y) 

utworzenie liczby zespolonej: 

complex(x,y)=x + y*i

 

ceil(z) 

zaokrąglenie liczby w górę 

floor(z) 

zaokrąglenie liczby w dół 

fix(z) 

zaokrąglenie liczby dodatniej w dół, ujemnej w górę 

round(z) 

zaokrąglenie liczby do najbliższej liczby całkowitej 

rem(x,y) 

reszta z dzielenia x przez y obliczona według 

wzoru: 

rem(x,y)=x-n*y

, gdzie n=fix(x/y) 

mod(x,y) 

Reszta z dzielenia x przez y : 

mod(x,y)=x-n*y 

gdzie: n=floor(x/y), mod(x,y)=rem(x,y) jeśli x,y- 

ten sam znak  

sign(x)  

Funkcja signum (1 dla x>0, 0 dla x=0, -1 dla x<0) 

background image

 

21

 
Funkcje matematyczne c.d. 

 

Jedna  z  grup  funkcji  matematycznych  Matlaba  (tabela 

niżej)  operuje  tylko  na  wektorach. 

Jeśli  argumentami  tych 

funkcji  są  macierze,  zwracają  one  wynik  w  postaci  wektora, 
obliczony oddzielnie dla każdej kolumny macierzy

 

Funkcja 

Opis 

max(x) 

zwraca największy element wektora x 

min(x) 

zwraca najmniejszy element wektora x 

sum(x) 

zwraca sumę elementów wektora x 

prod(x) 

zwraca iloczyn elementów wektora x 

mean(x) 

zwraca średnią arytmetyczną elementów wektora x 

W  Matlabie  zostały  też  zdefiniowane  niektóre  stałe 

matematyczne  (tabela  niżej).  Posługując  się  nimi,  należy 
jednak  pamiętać,  że  ich  nazwy  nie  są  zastrzeżone.  Przez 
nieuwagę  ich  wartość  może  ławo  zostać  zastąpiona  inną. 
Ustawienia domyślne wartości stałych przywraca funkcja 

clear

 

 

Stała 

Opis 

pi 

przybliżenie wartości π

πππ 

i lub j 

√√√√-1 

eps 

względna dokładność zmiennoprzecinkowa 

Inf lub inf 

nieskończoność (ang. 

infinity

); jest rezultatem operacji, która 

przekracza zakres arytmetyki komputera- np. dzielenie 
przez 0 

NaN lub nan 

nie liczba (ang. 

Not-a-Number

); jest wynikiem matematycznie 

niezdefiniowanych operacji - np. Inf/Inf lub 0/0; dzięki 
takiemu podejściu dzielenie przez zero nie prowadzi do 
przerwania operacji - wyświetlany jest odpowiedni 
komunikat, a zmiennej nadawana jest wartość specjalna 

 

background image

 

22

Pomiar czasu 

Do odmierzania upływu czasu (np. podczas wykonywania 

obliczeń) i określania aktualnej daty służą funkcje zestawione w 
tabeli . 

 

Funkcja 

Opis 

clock 
 

podaje aktualną datę i czas w postaci sześcioelementowego 
wektora [

rok  miesiąc   dzień   godzina   minuta   sekunda

date 

podaje aktualną datę w postaci łańcucha o formacie: 

'dd-mmm-rnr'

 

etime(t2, tl) 

podaje różnicę czasu, który upłynął między chwilami 

tl

 i 

t2

  

(gdzie: 

tl, t2

 - wektory o formacie, jak w poleceniu 

clock

tic 

zeruje odmierzanie czasu przed użyciem polecenia 

toc

 

toc 

podaje czas (w sekundach), który upłynął od momentu użycia 
polecenia 

tic

 

 

Przykład   

Wygeneruj wektor x= 1: 0.0001 : 1000 (taki zapis w matlabie tworzy 
wektor x którego pierwszym elementem jest liczba 1 następnie 
1.0001, 1.0002, 1.0003  itd.) i sprawdź, ile czasu zajęło jego 
utworzenie. 

»  tic, x=1:0.0001:1000; toc 

elapsed_time 

=  

0.1510 

Generacja wektora o większej liczbie elementów ( np. 
x=1:0.0001:10000) może zakończ się komunikatem o przekroczeniu 
pamięci (zależy to od komputera): 

 
??? Error using >: 
Out of memory. Type HELP MEMORY for yor options 
 

background image

 

23

Definiowanie macierzy i wektorów 

Definiowanie bezpośrednie 

Reguły: 

•  Elementy w wierszu muszą być oddzielone spacją lub 

przecinkiem, 

•  Średnik lub znak nowego wiersza (Enter) kończy wiersz 

macierzy i powoduje przejście do następnego, 

•  Lista elementów musi być ujęta w nawiasy kwadratowe, 
•  Ogólna struktura macierzy A jest następująca: 

 >> A=[.......elementy i separatory elementów i kolumn...........] 

>> A=[1 2 3 ; 4 5 6] 

A = 
     1     2     3 
     4     5     6 

>> size(A) 

ans =            % Matlab    podaje wartość, ale po przez ans bo size  
     2     3        % nie przyporządkowano żadnej zmiennej. 

>> A= [1, 2, 3  
      4, 5, 6 ]                

% inny sposób zdefiniowania A

 

>> X=[1 2 3 4]    

% definiowanie wektora z separatorem spacji 

X = 
     1     2     3     4 

>> X=[1, 2, 3, 4]  

% definiowanie wektora z użyciem separatora ‘ ,’ 

X = 
     1     2     3     4 

Budowa macierzy z podmacierzy: 

>> A=[1 2; 3 4] 

A = 

     1     2 
     3     4

 

>> B=[5 6 7] 

B = 
     5     6     7 

>> C=[8;9] 

C = 
     8 
     9 

>> D=[B; C A] 

D = 
     

5     6     7 

     

8

     

1     2 

     

9

     

3     4

 

background image

 

24

Wyświetlanie macierzy i ich rozmiarów 

Podane w poniższej tabeli  funkcje wyświetlają zawartość i rozmiar 

macierzy. 

 

Funkcja 

Opis 

disp(A) 

wyświetla zawartość macierzy 

w oknie poleceń 

size(A) 

wyświetla rozmiar dwuwymiarowej macierzy 

A

 (liczbę 

wierszy i kolumn) w postaci dwuelementowego wektora 
wierszowego  

[liczba wierszy liczba kolumn]

 

[n m]=size(A) 

przypisuje zmiennej 

n liczbę wierszy

, a zmiennej 

m - 

liczbę kolumn

 macierzy 

A

 

n=size(A,l) 

przypisuje zmiennej 

n liczbę wierszy

 macierzy 

A

 

m=size(A,2) 

przypisuje zmiennej 

m liczbę kolumn

 macierzy 

A

 

length(x) 

zwraca długość wektora 

lub dłuższy z wymiarów 

macierzy 

 

Funkcje generujące i przekształcające macierze 

 

W tabeli   przedstawiono funkcje Matlaba ułatwiające definiowanie 

niektórych macierzy specjalnych. 

 

Funkcja 

Opis 

eye(n) 

tworzy macierz jednostkową o rozmiarze nxn  z 

jedynkami

 na 

głównej przekątnej, 

reszta elementów równa zeru

),np.X=eye(3) 

ones(n) 
 

tworzy macierz o rozmiarze nxn o wszystkich elementach = 

1

 

zeros(n) 

tworzy macierz o rozmiarze nxn o wszystkich elementach = 

0

 

rand(n) 

tworzy macierz o rozmiarze nxn wypełnioną liczbami 
pseudolosowymi z 

przedziału <0,l>

 o rozkładzie jednostajnym 

randn(n) 

tworzy macierz o rozmiarze nxn wypełnioną liczbami 
pseudolosowymi o rozkładzie normalnym ze 

średnią 0 i war. =1

 

 
Uwaga: 
   Wszystkie funkcje przedstawione w tabeli 4 mogą generować  
macierze prostokątne o rozmiarze mxn. Odpowiednią funkcję 
należy wtedy wywołać z dwoma argumentami, np. rand(m,n). 
 

background image

 

25

W operacjach  macierzowych pomocne są funkcje przedstawione w 

poniższej tabeli:  

 

Funkcja 

Opis 

A=diag(x) 

utworzenie macierzy przekątniowej A ze składnikami 
wektora x na głównej przekątnej 

x=diag(A) 

utworzenie wektora x z elementów znajdujących się na 
głównej przekątnej macierzy A 

inv(A) 

utworzenie macierzy odwrotnej do A; inv(A)=A

^

(-l) 

repmat(A,n,m) 

utworzenie macierzy przez powielenie podmacierzy A m 
razy w poziomie i n razy w pionie 

reshape(A,n,m) 

utworzenie macierzy o n wierszach i m kolumnach z 
elementów branych kolejno kolumnami z macierzy A; 
jeśli A nie zawiera mxn elementów, to pojawi się 
komunikat o błędzie 

rot90(A) 

obrócenie macierzy A o 90° w kierunku przeciwnym do 
ruchu wskazówek zegara 

tril(A) 

utworzenie z macierzy A macierzy trójkątnej dolnej 
(wyzerowanie elementów leżących powyżej głównej 
przekątnej) 

triu(A) 

utworzenie z macierzy A macierzy trójkątnej górnej 
(wyzerowanie elementów leżących poniżej głównej 
przekątnej) 

 
 
 

background image

 

26

Użycie dwukropka w definicji macierzy: 

Dwukropek może być wykorzystywany na kilka sposobów np.: 

•  Wyrażenie min : max –generuje wektor wierszowy zawierający 

liczby całkowite od min do max, 

•  Wyrażenie min: krok: max pozwala generować wektor 

wierszowy zawierający ciąg liczb z dowolnym krokiem (także 
niecałkowitym lub ujemnym). 

 

>> X = 2 : 6       

% tu nie musimy używać nawiasów[ ], ale możemy 

X = 
     2     3     4     5     6 
 

>> X=2.0 :  6.0 

X = 
     2     3     4     5     6 
 

>> X=2.1 : 6.3 

 

X = 

    2.1000    3.1000    4.1000    5.1000    6.1000 

 

>> y=-2.0 :0.5 : 2    

% definiowanie elementów z zadanym krokiem 

y = 

   -2.000   -1.5000   -1.000   -0.500    0    0.500    1.000    1.500    2.000 

 

>> A=[1: 5 ;  6: 0.5: 8 ;   15 :19] 

 

A = 

    1.0000      2.0000    3.0000      4.0000     5.0000 

    

6.0000      6.5000    7.0000      7.5000     8.0000 

   15.0000   16.0000   17.0000   18.0000   19.0000 

 

Poniższa tabela zawiera zestawienie sposobów 

odwołania do fragmentów macierzy z użyciem 
dwukropka. 

 

 

Odwołan

ie 

Opis 

x(j:k) 

elementy wektora wierszowego 

o numerach od 

j do k

 

A(i, :) 

wszystkie elementy

 w wierszu

 i

 macierzy A 

A(i,j:l) 

wszystkie 

elementy

 w wierszu 

i

 macierzy A o numerach od 

j do l

 

A(i:k,j:l) 

wszystkie elementy w 

kolumnach od j do l

 

wierszy od i do k

 

macierzy A 

A(x,j:l) 

wszystkie elementy w 

kolumnach od j do l 

w wierszach mac. 

o numerach określonych przez elementy wektora 

x

 

A(:,:) 

cała dwuwymiarowa macierz 

A

 

A(:) 

cała macierz 

w postaci wektora kolumnowego 

 

background image

 

27

Dostęp do elementów macierzy 

Zdefiniujmy macierz: 

>> A=[1:5;  6:10;  11:15

A = 
     1       2      3      4     5 
     6       7      8      9    10 
    11    12    13    14    15 
 

>> y=A(3,2)

  % adres elementu (w,k)- tu używamy nawiasy typu ( ) 

y = 

    12 

 

>> x=A(6)

  

   % adres w tablicy A[

 elementy kol_1, elementy kol_2, itd.....

x = 

    12 

 

>> A(2,4)=99; 

>> A 

A = 

     1       2      3      4      5 

     6       7      8    99    10 

    11    12    13    14    15 

Odwołania do fragmentów macierzy (podmacierzy

 

>> A=[1:5;6:10;11:15]

     % definiujemy macierz 

A = 
     1       2      3      4      5 
     6       7      8      9    10 
    11    12    13    14    15 
 

>> A(2:3,  3:4)         

% dostęp do podmacierzy 

ans = 
          8       9 
         13    14 

Ale gdybyśmy nie użyli nawiasów: 
>> A=1:5;6:10;11:15 
ans = 
    11    12    13    14    15 
(błędna formuła- ale bez sygnalizacji 
błędu formalnego) 

Natomiast polecenie: 

A(2, :)=[ ]- usunie wiersz 

drugi z macierzy- czyli 
zmieni się wymiar A 

background image

 

28

Odwołania do fragmentów macierzy ze wskazaniem 
wierszy lub kolum  

Niech będzie zdefiniowana macierz: 

>> A=[1:5;6:10;11:15]

 

    % definicja 

A = 
     

1       2      3      4      5 

     6       7      

8      9    10

 

    11    12    

13    14    15

 

Chcemy wybrać fragment macierzy zaznaczony na zielono: 

>> 

x=

[2 3] 

% dostęp do elementów wierszy podanych w wektorze x 

>> 

A(

x

,  3:5) 

 

ans = 
     8      9     10 
    13    14    15 
 
Nr wierszy nie  muszą być kolejnymi np.: x=[1 3]. 
W podobny sposób posługując się innym wektorem np. y możemy 
wskazywać kolejne lub niekolejne kolumny macierzy z których 
chcemy wybrać elementy. 
 
>> 

x

=[3   1   5]; 

% tu zdefiniowano inną kolejność wyboru elementów 

>> 

B=A(2,  

x)

 

B = 
     8     6    10 

>> B=A(2,  :)

   % wszystkie elementy wskazanego wiersza (tu w=2) 

B = 
     6     7     8     9    10 
 

>>B= A(2,  3:5)

      % elementy z części kolumn  wiersza  

B=  
     8     9    10 
 

>> A(:,:)

             

% cała  macierz  

ans = 

     1     2        3      4      5 

     6     7        8      9    10 

    11    12    13    14    15 

>> B=A(:) 

% Zapis macierzy A(w,k) w postaci wektora kolumnowego 

ans = 
     1 
     6 
    11 
     2 
     7 
    ........ 

background image

 

29

Operacje na wektorach 
 

Przykład:  Dodawanie wektorów 

>> x=[1; 2; 3] 

x = 
     1 
     2 
     3 

>> y=[4; 5; 6] 

y = 
     4 
     5 
     6 

>> z= x+y 

z = 
     5 
     7 
     9 
Przykład:  Odejmowanie wektorów 

>> x=[1; 2; 3]; 

>> y=[4; 5; 6]; 

 

>> z=x-y 

z = 
    -3 
    -3 
    -3 
 

>> z=y-x 

z = 
     3 
     3 
     3 
Przykład:  Mnożenie wektorów przez stałą 

>> x=[1;2;3] 

x = 
     1 
     2 
     3 

>> c=5; 

>> z=c * x

           

%mnożenie lewostronne

 

z = 
     5 
    10 
    15 

>> z=x * c

           

%mnożenie prawostronne

 

z = 
     5 
    10 
    15 
 

• 

Powołujemy 

wektory kolumnowe 
x, y po przez ich 
zdefiniowanie 

• 

Definiujemy 

operację: 

          z=x+y 

background image

 

30

 
Przykład: Mnożenie wektorów 
 

>> x=[1, 2, 3]; 

>> y=[4, 5, 6]; 

>> z=x*y 

??? Error using ==> * 
Inner matrix dimensions must agree. 

>> x=[1, 2, 3]; 

>> y=[4, 5, 6]; 

 

>> z=x.*y

         

% stosujemy operator tablicowy

 

z = 
     4    10    18 
Przykład. Mnożenie wektorów- inna forma wprowadzania danych 

>> x=[1  2  3] 

x = 
     1     2     3 

>> y=[4; 5; 6] 

y = 
     4 
     5 
     6 

>> z=x*y 

z = 
    32 
Przykład.  Ten sam zapis bez wyświetlania wyników pośrednich  

>> x=[1, 2, 3]; 

>> y=[4; 5; 6];

  

% y- jest tu wektorem kolumnowym

 

>> z=x*y 

z = 
    32                  

% wynikiem jest liczba

 

Przykład: Wektory x i y kolumnowe 

>> x=[1; 2; 3] 

x = 
     1 
     2 
     3 

>> y=[4; 5; 6] 

y = 
     4 
     5 
     6 

>> z=x*y 

??? Error using ==> * 
Inner matrix dimensions must agree.

 

Taka operacja jest 
niepoprawna! 

Taka operacja jest 
niepoprawna! 

background image

 

31

Przykład: Wektory kolumnowe – Mnożenie z wykorzystaniem oper. 
tablicowego. 

>> x=[1; 2; 3] 

x = 
     1 
     2 
     3 

>> y=[4;5;6] 

y = 
     4 
     5 
     6 

>> z=x.*y 

z = 
     4 
    10 
    18 
Przykład:  Dzielenie wektorów wierszowych   

>> x=[1  2  3] 

x = 
     1     2     3 

>> y=[4  5  6] 

y = 
     4     5     6 
>> z=x/y 
z = 
    0.4156 
>> z=y/x 
z = 
    2.2857 
Powyższe operacje są realizowane, ale nie są poprawne!!!. 
Przykład  Dzielenie wektorów kolumnowych 

>> x=[1; 2; 3]; 
>> y=[4; 5; 6]; 

>> z=x/y 

z = 
         0         0    0.1667 
         0         0    0.3333 
         0         0    0.5000 

>> z=y/x 

z = 
         0         0    1.3333 
         0         0    1.6667 
         0         0    2.0000 

Operator tablicowy: 
>> x=[1; 2; 3]; 
>> y=[4; 5; 6]; 
>> z=x./y 
z = 
    0.2500 
    0.4000 
    0.5000 

Dla operatora tablicowego 
operacja jest poprawna: 
 
>> x=[1  2  3]; 
>> y=[4  5  6]; 
>> z=x./y 
z = 
    0.2500    0.4000    0.5000 

background image

 

32

Macierze   

Arytmetyka macierzowa i tablicowa 

Definiujemy dwie macierze A i B: 

>> A=[1 -1;-2 3]

                           

>> B=[1 1;0 -2] 

A =                                                   B = 

       1    -1                                                  1     1 
      -2     3                                                  0    -2 

>> A+B 

         

% dodawanie macierzy

 

ans = 
     2     0 
    -2     1 
 

>> A - B

             % odejmowanie macierzy 

ans = 
     0    -2 
    -2     5 
 
>> A.+B 

??? A.+B.         
                         Error: "identifier" expected, "+" found. 

W dodawaniu i odejmowaniu operator tablicowy nie jest 
akceptowany. 
Dodawanie macierzowe = dodawaniu tablic czyli wynik jest ten sam. 
Wymiary macierzy muszą być takie same. 

 

>> A * B

      % mnożenie macierzy 

ans = 
     1     3 
    -2    -8 

>> B * A

     % mnożenie macierzy 

ans = 
    -1     2 
     4    -6 

                      Uwaga: Mnożenie nie jest przemienne 
>> A. * B

        

% Mnożenie tablicowe 

ans = 
     1    -1 
     0    -6 

>> B.* A 

ans = 
     1    -1 
     0    -6 

Uwaga: Mnożenie z operatorem 
tablicowym  jest przemienne 

background image

 

33

Definiujemy do dalszego użycia macierze A i B: 

 

>> A=[1 -1;-2 3]                       >> B=[1 1;0 -2] 

A =                                                   B = 

       1    -1                                         1     1 
      -2     3                                         0    -2 

 
>> C=B/A

    

dzielenie prawostronne

 B=C*A 

 
C = 
     5     2 
    -4    -2 
 

>> C=A\B

      

dzielenie lewostronne

 B=A*C 

 
C = 
     3     1 
     2     0 
 

>> A^2

          

% potęgowanie             

>> A*A

          

% A*A=A^2 

ans =                                                       ans = 
     3    -4                                                            3    -4 
    -8    11                                                          -8    11 
 

>> A.^2

            

% potęgowanie tablicy

 

ans = 
     1     1 
     4     9 
 

>> A'             

 % transponowanie – zamiana wierszy na kolumny 

 
ans = 
 
     1    -2 
    -1     3 
 

background image

 

34

 

Zmiana kształtu (formy) macierzy 

 
Tworzenie macierzy z(k-liczba kolumn, w-licz. wierszy) z elementów 
wektora y(w*k). 
 

>> y=[1,2,3,4,5,6,7,8,9] 

k=3; 
w=3; 

if

 length(y)==w*k 

 
   z=reshape(y,w,k) 

 
else 

   

'Nie mozna wykonac' 

end 

 
y = 
     1     2     3     4     5     6     7     8     9 
z = 
     1     4     7 
     2     5     8 
     3     6     9 
Przykład: Mnożenie macierzy przez stałą 

>> A=[1 2 3 ; 4 5 6] 

A = 
     1     2     3 
     4     5     6 

>> c=2; 
>> z=A*c 

z = 
     2     4     6 
     8    10    12 

>> Z=c*A 

Z = 
     2     4     6 
     8    10    12

Ten ciąg poleceń skopiowano z 
okna historii i wstawiono po 
znaku >> zachęty w oknie 
Commnand 
Naciśnięcie Enter po end 
powoduje wyświetlenie wyników 

background image

 

35

Przykład: Mnożenie macierzy przez wektor 

>> A=[1 2 3 ; 4 5 6] 

A =                  

% liczba w1=2    k1=3 

     1     2     3 
     4     5     6 

>> x=[7; 8; 9]

  

% liczba w2=1   k2=3 

x = 
     7 
     8 
     9 

>> Z=A*x 

Z = 

 

    50 
   122 

% Wynikiem jest wektor kolumnowy o liczbie wierszy w=w1 , k=w2 

 

 
Operacje transponowania  
>>x = [1 2 3] 

x= 
     1     2     3 
 

>> z = x' 

z = 

     1 
     2 
     3 
 
Przykład: Transponowanie  macierzy 

 

>> A=[1 2 3 ; 4 5 6] 

A =                 

% Macierz A 

 

     1     2     3 
     4     5     6 
 

>> Z=A' 

Z = 
     1     4         

% Macierz A transponowana 

     2     5 
     3     6 
 

Wektor x 

Wektor 
transponowany 
 X

T

    

background image

 

36

Przykład:     Mnożenie macierzy 

>> A=[1  2  3; 4  5  6]

  

A =                          

% Macierz A   - wA=2, kA=3

 

     1     2     3 
     4     5     6 

>> B=[1 1; 0 2; 3 1]

 

% Macierz B- wB-3 kB=2

 

B = 
     1     1 
     0     2 
     3     1 

>> Z=A*B 

Z =                     

% Macierz kwadratowa Z=A*B – licz. w=2 k=2 

    10     8 

22  20 

 

>> Z= A.* B

    

% Mnożenie z operatorem tablicowym

 

 
??? Error using ==> .* Matrix dimensions must agree.   

 

>> Z=A.*A

   

% Mnożenie z operatorem tablicowym

 

 
Z =   1      4      9     % każdy elem. jest iloczynem elem. o tych 
                                % samych indeksach. 
         16    25    36 
 
Przykład   Podnoszenie macierzy do potęgi 

 

>> A=[1  2  3;   4  5  6] 

 
A = 
     1     2     3 
     4     5     6 

 

>> A=A*A 

??? Error using ==> * Inner matrix dimensions must agree.

 

 

>> A=A^2 

??? Error using ==> ^ Matrix must be square. 

 
Ale potęgowanie tablicy prostokątnej jest możliwe dla operatora 
tablicowego 

 

>> A=A.^2 

A = 
     1     4     9 
    16    25    36   

 

background image

 

37

 
Przykład Potęgowanie macierzy: A^3= A*A*A 

 

>> A=[1 0; 3 2] 

A = 
     1     0 
     3     2 

 

>> Z=A^2 

Z = 
     1     0 
     9     4 
 

>> Z=A^3 

 

Z = 

     1     0 

21    8  

 

Obliczanie Wyznacznika Macierzy 

 

>> A=[1 3 1; 2 5 2; 1 1 0] 

 
A = 
     1     3     1 
     2     5     2 
     1     1     0 

 

>> det(A)

 

 

ans = 
          1 
 

 

 
 
 
 
 
 
 
 
 
 
 

>> A=[1 0; 3 2] 
A = 
     1     0 
     3     2 
 
>> wyzn= det(A) 
wyzn = 
              2 

background image

 

38

Obliczanie macierzy odwrotnej 

>> A=[1  3  1; 2  5  2;  1  1  0] 
A = 
     1     3     1 
     2     5     2 
     1     1     0 
>> det(A) 
ans = 
     1 

„Ręczne” obliczanie macierzy odwrotnej do A wymagałoby: 

•  obliczenia wyznacznika det(A)  
•  wyznaczenia macierzy dopełnień D 
•  wyznaczenia macierzy transponowanej D

T

   

•  wyznaczenia macierzy odwrotnej wg: A

-1

 =1/det(A) * D

T

   

>> OdwrA=A^(-1)

Ta operacja  Matlab wyznacza macierz odwrotną do A

 

Odwr  =

 

   -2.0     1.0     1.0 
    2.0    -1.0         0 
   -3.0     2.0    -1.0 

Wykorzystanie macierzy odwrotnej przy rozwiązaniu 

układu równań 

Przykład:       Rozwiązać układ równań 

 

x  + 3y  +  z =10                                                          1    3   1  

2x  + 5y  + 2z=18 

Macierz współczynników: A= 2    5   2 

 x   +   y         =3                                                           1    1   0

            

                                                 -2.0     1.0     1.0                      

A=

 

A

-1

 =1/det(A) * D

T

  =    

2.0    -1.0       0 

                                                  -3.0     2.0    -1.0 

Układ równań można zapisać w postaci: 
       x          10           
A * y    =    18       /trzeba po

dzielelić przez A (odpowiada to  * A

-1

 )

   

       z

             3    

 
       x                10           
       y    = A

-1

    18           

       z

                    3    

 

      

 x

         -2    1    1        10       (-2)*10 +1*18 +1*3        

1

    

       

   =   2    -1    0   *   18   =  2*10   +(-1)*18 +0*3 =  

2

      

       

z

 

         -3      2   -1            3         (-3)*10+2*18 +(-1)*3          

3

 

Szukane 

rozwiązanie 

„Ręcznie” można obliczyć z wzoru Sarrusa: 
1*5*0 + 3*2*1 + 1*2*1 – 1*5*1-1*2*1-0*2*3=1 

background image

 

39

Zasada określanie   macierzy  D dopełnień dla macierzy A 

 

A= 

 
 
 
 
 

D= 

(-1)

1+1

   

 
 

(-1)

1+2

   

 

(-1)

1+3

   

 

(-1)

2+1

   

 
 
 

(-1)

2+2

   

 

(-1)

2+3

   

 

(-1)

3+1

   

 
 
 

(-1)

3+2

   

 

(-1)

3+3

   

 

 

W efekcie postepowania zgodnie z powyższą zasadą 
macierz dopełnień D jest następująca: 

-2 

-3 

-1 

-1 

I odpowiadająca jej macierz  D

T

  jest jak niżej:  

 

-2 

 1 

 1 

 2 

-1 

 0 

 -3   2 

-1 

Mając det(A) i  D

T

  można obliczyć macierz odwrotna ze wzoru :    

A

-1

 =1/det(A) * D

T

   

Ponieważ tu 1/det(A) =1  Stąd  mamy:  A

-1

  = D

T

 

 
 
 
 

Obliczenia w Matlabie

 

  3  1 

  5  2 

 1 

Macierz wyjściowa A 

-2 

 1 

 1 

 2 

-1 

 0 

 -3   2 

-1 

Macierz obliczona „ręcznie”  i otrzymana  z Matlaba 

poleceniem:  

>> OdwrA=A^(-1)

są identyczne 

Zasada 
Obliczania  
dopełnienia 
dla elementu 
A[2, 2] 

background image

 

40

Poszukiwanie trendu dla danych pomiarowych- 

analiza teoretyczna 

Zagadnienie poszukiwania trendu ma szerokie zastosowanie np. 
ocena trendu na giełdzie, trendu bezrobocia itp. 
 
Dane są następujące pomiary pewnej wartości: 
Nr 

11 

13 

15 

17 

119 

105 

120 

90 

100 

85 

90 

75 

80 

 

Linia trendu

y = -5,1833x + 121,92

0

20

40

60

80

100

120

140

X

Y

x

y

Linia trendu

 

 
Do wyznaczenia trendu wielkości y można zastosować metodę 
najmniejszych kwadratów (MNK). Została ona opracowana przez 
Lagrendre’a i Gausa (1805-1809). Jej zasada jest następująca: 

 Wynik kolejnego pomiaru y

i

 uważa się za sumę nieznanej 

wartości y i błędu pomiarowego  

εεεε

j

 , 

 Należy tak dobrać wielkości εεεε

j

 aby suma kwadratów błędów 

εεεε

j

 

była jak najmniejsza tzn: 

min

2

2

=





j

j

j

j

y

y

ε

   

MNK może być używana również gdy wielkości mierzone yj nie są 

wprost zależne od wielkości x, lecz są w ogólnym przypadku sumą 

wielu zmiennych. 

background image

 

41

 

Przypadek trendu liniowego 

Przyjmujemy założenie o postaci linii trendu typu: 

a

x

a

y

i

i

0

1

*

+

=

 

Można wykazać, że wartości a

0

  i a

1

 dane są zależnościami: 

 
                                                                                                                                                                                          
 
 
             
 
 
 
 
 
 
 
 
Zależności te wynikają z rozwiązania układu równań 
różniczkowych: 

(

)

(

)

min

,

1

2

1

0

0

1

=

=

n

i

a

x

a

y

i

i

a

a

f

 

 

ekstremum

istnienia

a

f

konieczne

warunki

a

f

0

0

1

0

=

=

 

 
Wynik rozwiązania  metodą MNK można uzyskać posługując się 
postacią macierzową: 
 
 
 
 
 
Powyższe  równanie pozwala wyznaczyć współczynniki linii trendu.   

=

=

=

=

=

=

n

i

n

i

i

i

n

i

n

i

i

i

n

i

i

i

x

x

n

y

x

y

x

n

a

1

1

2

2

1

1

1

1

=

x

a

y

a

1

0

(

)

(

)

y

a

a

X

X

X

T

T

*

*

*

1

1

0

=

background image

 

42

Wyprowadzenie wzorów na współczynniki (a

0

 ,a

1

 
1. 

Określenie wartości  współczynnika a

0

 
Obliczamy pochodną: 

 
 
 
 

 

 
 
 
 

 

 
 
 
 

 
 
 
 

 
 
 
 

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

0

0

1

=

a

x

a

y

0

1

1

1

1

0

1

1

=

=

=

n

i

i

n

i

i

na

n

x

a

n

y

n

.

.

.

.

1

0

o

d

b

c

x

a

y

a

=

(

)

(

)

0

1

*

2

,

1

1

0

0

0

1

=

=

=

n

i

a

x

a

y

i

i

a

a

f

a

2

/

0

2

2

2

1

1

0

1

1

=

=

=

=

n

i

n

i

i

n

i

i

a

x

a

y

n

na

x

a

y

n

i

i

n

i

i

/

0

1

0

1

1

=

=

=

background image

 

43

(

)

(

)

2

/

0

)

(

*

2

,

1

1

0

1

0

1

=

=

=

i

n

i

x

a

a

f

a

a

x

a

y

i

i

0

1

1

0

1

2

1

*

=

+

+

=

=

=

n

i

n

i

i

n

i

i

i

i

x

a

x

a

x

y

0

1

1

1

1

2

1

*

=

+

+

=

=

=

n

i

n

i

i

n

i

i

i

i

x

x

a

y

x

a

x

y

0

1

2

1

1

1

1

1

2

1

1

*

=

 ∑

∑ −

+

+

=

=

=

=

=

n

i

n

i

i

x

n

i

i

n

i

i

n

i

i

i

i

n

a

x

y

n

x

a

x

y

=

=

=

=

=

=

∑

n

i

n

i

i

n

i

i

n

i

i

n

i

i

i

i

x

y

n

x

y

x

n

x

a

1

2

1

1

2

1

1

1

1

*

1

n

x

n

x

x

y

n

x

y

a

n

i

i

n

i

i

n

i

n

i

n

i

i

i

i

i

/*

1

*

1

2

1

1

2

1

1

1

1

∑

=

=

=

=

=

=

.

.

.

.

*

*

*

2

1

1

2

1

1

1

1

o

d

b

c

x

x

n

x

y

x

y

n

a

n

i

i

n

i

i

n

i

n

i

n

i

i

i

i

i

∑

=

=

=

=

=

=

 

2. Określenie wartości  współczynnika a

1

 
 
 
 

Wartość pochodnej: 

 
 
 
 

 
współczynnik a

 zastępujemy wyprowadzoną zależnością: 

 

 

 
 
 

 

 

 
 
 

Grupujemy wyrazy z a

1

 i wyłączamy a

1

 

 
 
 
 

Obliczamy  a

i po przekształceniach otrzymujemy: 

    

  

 
 
 
 
 

 
 
 

 
 
 
 

background image

 

44

Zastosowanie Matlaba (konsola) w obliczeniach 

Przykład 1: 
Obliczenie współczynników linii trendu dla przykładu 
danych z tabeli (założenie, że ma ona charakter liniowy): 

 
Równanie macierzowe na współczynniki linii: 

(

)

(

)

y

a

a

X

X

X

T

T

*

*

*

1

1

0

=

 

Zapis problemu w Matlabie: 
 
>> X=[1 1;1 3;1 5;1 7;1 9;1 11;1 13;1 15;1 17] 
X = 
     1     1 
     1     3 
     1     5 
     1     7 
     1     9 
     1    11 
     1    13 
     1    15 
     1    17 
 
>> y=[119;105;120;90;100;85;90;75;80] 
y = 
   119 
   105 
   120 
    90 
   100 
    85 
    90 
    75 
    80 

>> a = (X'*X)^(-1 )  * (X'*y) 
a = 
  119.3250       

%Poszukiwane współczynniki kierunkowe prostej

 

   -2.5917          

% określającej linie trendu 

Otrzymujemy równanie postaci: 

y = -2.59 x  +119.32 

Z programu Excell otrzymano: 

y = -5.18 x  +121.92 

 

background image

 

45

Obliczenia szczegółowe w Matlabie (konsola) czynników  
wzoru określającego linię trendu przy założeniu, że ma ona 
charakter liniowy: 

 
>> a = (X'*X)^(-1 )  * (X'*y)              (***) 

 

>> P=X' 
P = 
     1     1     1     1     1      1      1       1     1 
     1     3     5     7     9    11    13    15    17 
>> Z=X' 

X               % Pierwszy czynnik wzoru  (***) 

 
Z = 
     9    81 
    81   969 
 
>> ModwZ = Z^(-1)  

% Macierz odwrotna 1-szego czynnika 

 
ModwZ = 
    0.4486   -0.0375 
   -0.0375    0.0042 
 
>> R=X'*y                

% Macierz- drugi czynnik wzoru  (***)

 

 
R = 
         864 
        7154 
 
>> a=ModwZ*R     

% Wynik mnożenia 1-szego i 2-giego czynnika

 

 
a = 
  119.3250             

%Poszukiwane współczynniki kierunkowe prostej

 

   -2.5917 
 
>> 
 
 
 
 
 

 

background image

 

46

Zastosowanie Matlaba (konsola) w obliczeniach 

Przykład 2:     Wykorzystanie instrukcji „if” 
 
Należy zdefiniować i obliczyć następującą  funkcję: 

 

( )







<

>

=

1

2

3

,

1

3

6

2

2

x

dla

x

x

dla

x

x

dla

x

x

f

 

 
>> x=-5; 
>> 

if

 x>3 

          f=x*x - 6; 
     

elseif

 x>= -1 & x <=3   

          f=x; 
     

else 

          f=x*x - 2; 

     end 

>> f 
f = 
    23               
 
>> x=[-5,1,8];   

% definiujemy nowe dane kopiujemy polecenia i 

     % uruchamiamy 

>> 

if

 x>3 

         f=x*x - 6; 
   

elseif

 x>= -1 & x <=3   

         f=x; 
   

else 

         f=x*x - 2; 
   end 

??? Error using ==> * 
Inner matrix dimensions must agree. 

 
%Zapisujemy funkcję z użyciem operatorów tablicowych:  

 

>> 

if

 x>3 

         f=x.*x - 6; 
   

elseif

 x>= -1 & x <=3   

         f=x; 
   

else 

         f=x.*x - 2; 

   end           

% po wpisaniu naciskamy Enter i pojawia się znak zachęty

 

>> f             

%aby wyświetlić wyniki (można też wpisać np. f=f)

  

f = 
    23    -1    62 
>>   

background image

 

47

 

% Ten ciąg poleceń spowoduje automatyczny wydruk funkcji f 
% bez konieczności wpisania na końcu instrukcji np. f=f czy a=f 
 

>> 

if

 x>3 

         f=x.*x - 6 
     

elseif 

x>= -1 & x <=3   

         f=x 
     

else 

         f=x.*x - 2 
     

end 

 
f = 
 
    23    -1    62 
 
>>