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
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 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ń.
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 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.
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`
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 itp)
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
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
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
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) :
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).
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
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
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
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
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
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 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
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 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
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
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
........
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 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!
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
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
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
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
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
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ślania 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 postępowania 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
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]