background image

 

1

Programowanie w Matlabie 

 
 

Materiały Cz. I 

 
 

 

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  o  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), w macierzowe (np. obliczanie macierzy 
odwrotnych,  wyznaczanie  wartości  własnych),  jak  i  wiele 
specjalistycznych  funkcji  matematycznych,  np.  funkcje  Bessela, 
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 zachęty  (>>) 

 

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  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 (ma on 
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: 

FileSave 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 itp)

 

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

 

zjawisk 

zmiennych w czasie

 

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  

 
Polecenie diary pozwala na rejestrację bieżących wyników w pliku i ich 
odtworzenie w stosownym czasie. Np. zapisywanie wydawanych poleceń 
w pliku ZAPIS.txt wymaga uruchomienia poleceniem: 

»       diary ZAPIS 

Rejestrację kończy polecenie

 diary off. 

Na poniższym rysunku pokazano polecenia wprowadzania macierzy 
liczbowych (A,B,C) jedno i 2 wierszowych oraz macierzy znakowych NaZ 
oraz Im. Pokazano też łączenie 2 macierzy  znakowych Im i Naz oraz 
stringu (w apostrofach). Połączenie tworzy dłuższy zredagowany tekst. 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

 
 
 
 
 
 

 

Jeśli wyczyścić  okno poleceń i odczytać zawartość ZAPIS (jest w 
bieżącym katalogu) to mamy odtworzony przebieg wpisywania poleceń  
i wyświetlania wynik

ó

w w trakcie naszej pracy- tak jak to pokazano 

powyżej w dwu oknach . 

diary ZAPIS -Start 
diary off- Stop 

Tekst rejestrowany 
w pliku ZAPIS 

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) : 

b) 

 

>>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.  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. 

»  > Naz1=

'KOWALSKI '

 

Naz1 = 

KOWALSKI  

>> Naz2=

'kowalski '

 

Naz2 = 

kowalski      

Ł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 

n1=double(Naz1) 

n1 = 

    75    79    87    65    76    83    75    73    32 

>> n2=double(Naz2) 

n2 = 

   107   111   119    97   108   115   107   105    32 

Konwersję odwrotną wykonuje polecenie 

char( ) 

>> T=char(n1) 
T = 
KOWALSKI

 

Z łańcuchów można budować macierze znakowe pozwalające na 

przedstawianie dłuższych tekstów np.:  

>> NazIm=[

'Jan  '

, Naz1] 

NazIm = 
Jan  KOWALSKI   

 

background image

 

18

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

»   dl=    length(NazIm) 

zwróci w dl liczbę 13 (liczba znaków w łańcuchu ).  

Do wyświetlania łańcuchów można użyć funkcji 

disp, np

»      disp(NazIm)  

Jan  KOWALSKI 

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  

Aby np. zdefiniować w Workspace  zmienne: 

x=12.34, y=12.34e-5, s= stala oraz  s1 = ’56.78'. 

trzeba wpisać poniższe polecenia: 

>> x=12.34, y=12.34e-5, s=

'stala'

, s1=

'56.78'

 

Polecenia nie są kończone średnikami stąd ich efekt ich wykonania 
jest widoczny poniżej : 

x = 

12.3400 

y = 

1.2340e-004 

s = 

program  

sl = 

56.78 

Aby zamienić liczby na ciągi znaków ASCII można użyć np. poleceń: 

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

Efekt tych poleceń  jest widoczny poniżej: 

s2   = 
12.34 
s3   = 

12

 

(liczba rzeczywista została zaokrąglona) 

s4   = 0.0001234

 

Aby zamienić ciąg znaków  ze zmiennych s i s1 na liczby można 
użyć funkcji: 

>>  x1=str2double(s), x2=str2double(s1) 

xl  
   = NaN

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

x2    
       = 56.7800 

Można też dokonywać konwersji wyrażeń np.:

 

sin(2*pi*x)

 

na 

łańcuch znaków

    

>> x=0.25; 

>>     num2str(sin(2*pi*x)) 
ans    
    = 1 

 
   

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 całkowitego x przez y  

sign(x)  

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

 

Grupy funkcji można wyświetlić korzystając z systemu pomocy: 

help     elfun 
help  matfun 
help specfun 

background image

 

21

Funkcje statystyczne i stałe  

 
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 

std(x) 

Zwraca odchylenie standardowe elementów wektora x 

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 mierzenia 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 A zawierający 1mln liczb z rozkłady normalnego, a 
nastepnie posortuj jego elementy i zapisz w wektorze B.  
Oblicz czas tych operacji w komputerze. 

>> tic;    

>> A=randn(1,100000);  
>> B=sort(A);  

>> czas_obl= toc 

czas_obl = 

   0.01500000000000 

Uwaga: Trzeba pamiętać o średnikach bo ich brak spowoduje 
wyświetlanie liczb, co będzie trwało bardzo długo ! 

Jeśli ilość pamięci nie jest wystarczająca otrzymamy komunikat: 
??? Error using >: 
Out of memory. Type HELP MEMORY for your options 

Datę i czas wyświetla poniższe polecenie: 

> B=clock 

B = 

  1.0e+003 * 

    2.0100    0.0100    0.0220    0.0180    0.0480    0.0197 

Wygodniejsze jest poniższe polecenie zwracające tablicę 6 elementową: 
>> A=fix(clock) 
A = 
        2010          10          22          18          48          26 

 

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 operatora 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 
numerów wierszy lub kolum przez wektory   

 
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 mnożenia  tablicowego .* 

                           % tzn mnożenia element po elemencie 

 

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 dla wektorów 
jest niepoprawna! 

background image

 

31

Przykład: Wektory kolumnowe – Mnożenie z wykorzystaniem 
 operatora 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 

 
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ń Matlaka wpisano  
po znaku >> zachęty w oknie 
Commnand 
Naciśnięcie Enter po end powoduje 
wyświetlenie wyników czyli 
zawartości z  (bo instrukcja 
z=reshape(y,w,k) 
nie jest zakończona średnikiem! 
Zwróć uwagę na brak znaków 
zachęty >> dopóki nie nastąpi 
zamknięcie logiczne (end -em) 
instrukcji if  

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

ROZWIĄZYWANIE UKŁADU RÓWNAŃ LINIOWYCH 
 

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ślania   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 postępowania 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

 

 
 
 
 

 
 

  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]