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
o
Funkcje systemowe
o
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
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.:
o
Control System Toolbox- projektowanie układów sterowania
o
Optimization Toolbox - metody optymalizacji,
o
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.
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
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ń)
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
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.
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`
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
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)
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
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!
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 !
12
Pisanie dłuższego ciągu poleceń na konsoli jest trudne, bo prawie
nie sposób uniknąć błędów. Wygodniej jest:
o
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.
o
Po wpisaniu poleceń należy zapisać plik wybierając:
File
Save As
(można tu poda inną niż domyślna nazwę programu)
o
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
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
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
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
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).
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ść.
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
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
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)
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
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
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
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
A
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
x
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).
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)
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
x
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.
A
o numerach określonych przez elementy wektora
x
A(:,:)
cała dwuwymiarowa macierz
A
A(:)
cała macierz
A
w postaci wektora kolumnowego
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
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
........
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
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!
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
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
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
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
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
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
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
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
y
= 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
39
Zasada określanie macierzy D dopełnień dla macierzy A
A=
D=
(-1)
1+1
5
2
1
0
(-1)
1+2
2
2
1
0
(-1)
1+3
2
5
1
1
(-1)
2+1
3
1
1
0
(-1)
2+2
1
1
1
0
(-1)
2+3
1
3
1
1
(-1)
3+1
3
1
5
2
(-1)
3+2
1
1
2
2
(-1)
3+3
1
3
2
5
W efekcie postepowania zgodnie z powyższą zasadą
macierz dopełnień D jest następująca:
-2
2
-3
1
-1
2
1
0
-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
1
3 1
2
5 2
1
1
0
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]
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
1
2
3
4
5
6
7
8
9
x
1
3
5
7
9
11
13
15
17
y
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.
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
−
=
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
=
−
−
∑
∑
=
=
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
0
zastępujemy wyprowadzoną zależnością:
Grupujemy wyrazy z a
1
i wyłączamy a
1
Obliczamy a
1
i po przekształceniach otrzymujemy:
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
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
>>
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
>>
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
>>