Czym jest matlab?
Matlab to pakiet przeznaczony do wykonywania obliczeń numerycznych oraz graficznej prezentacji wyników, opracowany w firmie Mathworks
Dostępny jest na różnych platformach sprzętowych oraz systemowych (np. Windows, Macintosh)
Podstawową strukturą danych w Matlabie jest macierz
Elementy pakietu MATLAB
Język Matlab
Serce Matlaba - interpreter języka
Środowisko robocze Matlaba
Zestaw narzędzi do zarządzania
System graficzny - tworzenie wykresów, przetwarzanie obrazów
m-pliki
szczególne pliki 2 rodz.: skryptowe, funkcyjne
Polwet [nie wiem co to] posiada biblioteki dodatkowych procedur i funkcji matematycznych umożliwiających rozwiązywanie problemów
Interfejs API
Podstawowym typem danych jest macierz, stąd pochodzi nazwa MATrix LABoraory
Praca z polwetem MATLAB
W trybie bezpośrednim - tryb roboczy umożliwiający prowadzenie dialogu między użytkownikiem i polwetem
W trybie pośrednim - umożliwiającym szybsze i efektywne wykonywanie obliczeń i prezentację wyników za pomocą uruchomienia programu napisanego w języku polwet Matlab czyli tzn. skrytpu
ZMIENNE
polwet Matlab nie wymaga deklarowania zmiennych ani określania ich rozmiaru
aby sprawdzić wartość istniejącej już zmiennej należy w wierszu poleceń wpisać jej nazwę
Matlab rozróżnia małe i duże litery
Standardowe polecenia pakietu pisane są zawsze małymi literami
LICZBY
stałopozycyjne - z opcjonalnym użyciem znaku + lub - oraz kropki dziesiętnej
zmiennopozycyjne - z użyciem znaku e lub E poprzedzającego wykładnik potęgi 10, np. 1e x = 100 [nie jestem pewien czy to x czy co innego tam jest]
do zapisu części urojonej liczb zespolonych używa się stałej i lub j
POLECENIA
po wydaniu polecenia i naciśnięciu klawisza enter matlab natychmiast wyświetla wynik
umieszczenie po poleceniu ; spowoduje wykonanie obliczeń ale bez zwracania wartości
polecenie powinno się mieścić w jednym wierszu
kilka poleceń w jednym wierszu oddzielamy , lub ;
POMOC SYSTEMOWA
uzyskanie informacji o funkcjach matlaba
>> help nazwa_funkcji
Help Desk - podręcznik opracowany w postaci stron HTML
MACIERZE - DEFINIOWANIE MACIERZY
Elementy w wierszu macierzy muszą być oddzielone spacją lub przecinkami
Średnik lub znak nowego wiersza kończy wiersz [???] i powoduje przejście do następnego
Cała lista elementów musi być ujęta w nawiasy kwadratowe
ODWOLANIA DO FRAGMENTÓW MACIERZY
x (j:k) - elementy wektora wierszowego x o numerze j
A(i,:) - wszystkie elementy w wierszu i macierzy A
A(i,j:l) - wszystkie elementy w wierszu macierzy A o numerach od j do l
A(i:k,j:l) - wszystkie elementy w kolumnach od j do l i wierszach od i do k
A(x,j:l) - wszystkie elementy w kolumach od j do l w wierszach macierzy A o numerach x
A(:,:) - cała dwuwymiarowa macierz A
A(:) - cała macierz A w postaci wektora kolumnowego
WYŚWIETLANIE MACIERZY I ICH ROZMIARÓW
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
[n, m] = size (A) - przypisuje zmiennej n liczbę wierszy, a zmiennej m liczbę kolumn
n = size (A, 1) - przypisuje zmiennej n liczbę wierszy macierzy A;
m = size (A, 2) - przypisuje
length (x) -
ARYTMETYKA MACIERZOWA I TABLICOWA
A + B A - B A * B B * A C1 = B / A ,C2=A \ B A12 = A * A A` |
A + B A - B A . * B = B . * A B . / A =A .\ B A .12 A` |
Funkcje generujące i przekształcające macierze:
eye (n) - tworzy macierz jednostkową n x n
ones (1) - tworzy macierz o elementach równych 1
zeros(n) - macierz zerowa n x n
rand (n) - macierz n x n wypełniona liczbami pseudolosowymi z przedziału <0,1> o rozkładzie jednostajnym
randn(n) - macierz n x n wypełniona liczbami pseudolosowymi o rozkładzie normalnym ze średnią 0 i wariancją 1
A = dieg (x) - macierz przekątna A ze składnikami wektora x na głównej przekątnej
x = dieg (A) - utworzenie wektora x z elementów znajdujących się na głównej przekątnej macierzy A
inv (A) - utworzenie macierzy odwrotnej do A
repeat (A, n, m) - utworzenie macierzy przez powielenie podmacierzy A m razy w poziomie i n razy w pionie
reshope (A, n, m) - utworzenie macierzy o n wierszach i m kolumnach z elementów branych kolejno kolumnami z macierzy A
rot90 (A) - obrócenie macierzy A o 90 stopni w kierunku przeciwnym do wskazówek zegara
tril (A) - utworzenie z macierzy A macierzy trójkątnej dolnej
trin (A) - utworzenie z macierzy A macierzy trójkątnej górnej
MACIERZE WIELOWYMIAROWE
Matlab dopuszcza definiowanie macierzy wielowymiarowych, odwoływanie się do elementów takich macierzy wymaga liczby indeksów > 2
Pierwszy indeks - wiersz macierzy (wynosi 1)
Kolumna - wymiar 2
Strona - wymiar 3
Książka - 4
Index 5 - tom
METODY TWORZENIA TABEL WIELOWYMIAROWYCH
Przez indeksowanie
Przez zastosowanie funkcji
Przez zastosowanie funkcji cat
cat (dim, A, B) - scala dwie macierze A i B zgodnie z podanym wymiarem dim
cat (2, A, B) - oznacza to samo
Przykład
macierz trójwymiarowa o rozmiarze 2 x 3 x 2 (2 wiersze i 3 kolumny na każdej stronie, 2 strony)
>> D (:, :, 1) = [130; 572] % str. 1
>> D (:, :, 2) = [478, 231] % str. 2;
PODSTAWOWE FUNKCJE I STAŁE MATEMATYCZNE
sin(z), cos(z), tan(z), cot(z)
asin(z), acos(z), atan(z), acot(z)
sinh(z), cosh(z), tanh(z)
sqrt(z)
exp(z)
log(z)
log2(z)
abs(z)
angle (z) argument liczby zespolonej
real (z), imag(z) część rzeczywista i urojona z liczby zespolonej
conj(z) liczba zespolona [???]
complex(x,y)
ceil(z) zaokrąglenie w górę
floor(z) zaokrąglenie w dół
fix(z) zaokrąglenie dodatniej w dół, ujemnej w górę
round(z) zaokrąglenie
rem(x,y);mod(x,y) reszta z dzielenia x,y
sign(x) f. sgnum
Funkcje operujące na wektorach
max(x) największy element
min(x) najmniejszy element
sum(x) suma elementów
prod(x) iloczyn
mean(x) średnia arytmetyczna
Stałe matematyczne
Pi wartość pi
Eps względna wartość zmiennoprzecinkowa
i lub j pierwiastek z liczby - 1
Inf lub inf
NaN lub nan
Typy danych
Double, char, sparse, cell, sruct, unit8
Istnieje też UserObject, który jest typem definiowanym przez użytkownika
Funkcje przetwarzające łańcuchy
deblanh(s) [zgaduje, że to tak, bo się nie da odczytać]
findstr(s1, s2)
lower(s)
strcat(s1,s2,...)
strcmp(s1,s2) - porównuje 2 łańcuchy
strcmpi(s1,s2) - porównuje 2 łańcuchy
strcmp(s1,s2,n) - porównuje n pierwszych znaków w łańcuchu
strvcat(s1,s2,s3) - łączy łańcuchy w [???]
upper(s) - zamiana liter na duże
int2str(n) - konwertuje
num2str(x) - konwertuje
str2double(s) - konwertuje
Środowisko Matlaba
Okno poleceń - obsługuje funkcje
clc - wyjście
none
echo on/ echo off
more on / more off - stronnicowanie tekstów
[???] plik
[???] off/on
Formaty liczb
short 5 cyfr, liczba stałopozycyjna
short e 5 cyfr, liczba zmiennopozycyjna
long 15 cyfr, liczba stałopozycyjna
long e 15 cyfr, liczba zmiennopozycyjna
short g 5 znaczących cyfr liczby stało- lub zmiennopozycyjnej
Operatory porównania
a = = b
a ~ = b
a < b
a > b
a < = b
a > = b
Operatory logiczne
a | b alternatywa a lub b
a & b koniunkcja a i b
~ a negacja nie a
Funkcje logiczne
all (A) sprawdza czy elementy wektora A są różne od 0 i zwraca 1 (prawda) lub 0 (fałsz)
any(a) sprawdza czy któryś z elementów wektora A jest różny od 0 i zwraca 1 (prawda) lub 0 (fałsz)
isequal(A,B,…)
isempty(A)
Instrukcje warunkowe switch
switch wyrazenie
case wartosc1
instrukcja
case wartosc2
instrukcja
...
otherwise
instrukcja
end
Instrukcja w iteracyjne for
for zmienna = nowa_wartosc
instrukcja
end
W polu wyrażenie nowa_wartosc ma najczęściej 1 z dwóch postaci:
minimum : maksimum
minimum : krok : maksimum
Instrukcja while
while wyrazenie
instrukcja
end
(podobnie jak w insrukcji if)
SKRYPTY
skrypt jest plikiem tekstowym o rozszeżeniu *.m (m-plikiem) zawierającym polecenia i instrukcje Matlaba
skrybty nie pobierają żadnych argumentów i wejść ani nie zawierają...
Ścieżka dostępu
Matlab wprowadza definicję ścieżki dostępu w celu znalezienia m-plików
M-pliki znajdują się w odpowiednio zorganizowanym katalogu
Jeśli wprowadzimy pewną nazwę „nazwa” do...
Plik startowy - startup.m
w trakcie startu Matlaba automatycznie wykonuje się plik matlab.m oraz startup.m
plik startup.m
Katalog bieżący
do pracy z plikami *.m i *.mat
System podpowiedzi
Pol. Help
Help [???]
Metody wprowadzania danych
konsole
generowanie przez wewnętrzne lub zewnętrzne formuły nie [p???]
zbiory dyskowe
Wprowadzanie danych
skalar
wektor
>> u = [123]
u =
1 2 3
>>
macierz
>> a = [123; 456; 789]
a =
...
>>
>> a = [123
456
789]
a =
>>
macierz znakowa
>> abc = [`abc'
`def'
`ghi']
abc =
abc
def
ghi
>>
macierz 3x3
szybkie tworzenie wektorów
1) >> v = 1 : 5
v 1 2 3 4 5
2) >> w = -p: pi/4: pi
w =
columns 1 throught
obszerne polecenia
>> srednia = (4 + 5 + 6 + 7 + 4 + 6 + 8) / 7
srednia =
...
wektory i macierze (?) zespolone (z użyciem [???] tak jak wcześniej)
Reprezentacja danych w pamięci i na ekranie
Dane liczbowe w pamięci Matlaba:
liczby 8 bajtowe
zespolone 16 bajtowe
znaki 8 bajtowe
>> iloczyn = A(1:2, 1:2) * A(1:2, 2:3) * A(2:3, 1:2) * A(2:3, 2:3)
save /c/plik - zapisuje dotychczasowe operacje w pliku o podanej ścieżce
load /c/plik - ładuje zapisane w pliku operacje
Pliki zawierające kod języka programowania Matlab nazywają się m-plikami.
M-pliki tworzy się za pomocą edytora tekstowego.
Wykonywanie m-pliku poprzez wloadowanie go z poziomu poleceń Matlaba.
LOADPAT - zmienna prezentująca ścieżkę dostępu do programu
Polecenia interakcyjne
INPUT - tekst jako znak zachęty do wprowadzania danych
KEY BOARD - wywołanie klawiatury w trakcie wykonywania M-pliku
MENU - generowanie okna dla realizacji wyboru danych użytkownika
PAUSE - wstrzymuje wykonywanie m-pliku...
M-pliki skryptowe
reprezent. własny zestaw poleceń użytkownika
ułatwiają wprowadzanie większej ilości danych
umożliwiają zapis wyników obliczeń
upraszczają powtarzające się operacje
mogą zawierać algorytmy obliczeniowe
w m-plikach skryptowych można używać poleceń do pracy interaktywnej
operują na danych w przestrzeni roboczej
Przykład
cos (x) = 1 - x2 / (1 * 2) + x4 / (1 * 2* 3 * 4) - x6 / (1 * 2 * 3 * 4 * 5 * 6) + ...
Przykład
x = input (`Podaj wartość x=');
y = 1; k = 0; s = 1; x2 = x * x;
while abs (y) > e
k = k + 2;
y = -y * x2 / (k * (k - 1));
s = s + y;
end
Polecenie input
Składnia
x = input (`tekst')
x = input (`tekst', `s')
Opis
Wyświetla tekst i zwraca zmienna wprowadzoną przez użytkownika
Przykład
i = input (`czy liczyć dalej? (t/n)', `s');
is isempty (i)
i = `y'
end
M-pliki funkcyjne
zawierają funkcje tworzone przez użytkownika
operują na zmiennych lokalnych i globalnych
komunikują się z przestrzenią roboczą przez parametry
nazwa funkcji musi być identyczna z nazwą m-pliku bez roszerzenia
Struktura funkcji
function f=fact(n) - linia definicji
% FACT Factorial - linia 1
% Fact (n) return - tekst pomocy
% Put simply - tekst pomocy
…
…
f = xyz;
Parametry wejścia i wyjścia oraz wszystkie instrukcje używane wewnątrz funkcji mają charakter lokalny
Pers.stant (chyba takie coos) - polecenie umożliwiające zdeklarowanie zmiennej lokalnej, która będzie zachowywać swoje wartości pomiędzy kolejnymi wywołaniami funkcji.
Zmienne lokalne i globalne
Każda funkcja zdefiniowana w Matlabie posiada swoje własne zmienne lokalne
W celu dostępu do danej zmiennej z innej funkcji lub przestrzeni roboczej Matlaba należy tą zmienna zadeklarować jako globalną we wszystkich miejscach gdzie ma być dostępna, np.: global ALPHA Beta
Zalecane jest używanie wielkich liter
Przestrzeń robocza funkcji
Każda m-funkcja posiada własny obszar pamięci oddzielonej od przestrzeni roboczej Matlaba, i nazywamy ją przestrzenią roboczą funkcji
Sprawdzanie liczby argumentów funckji
Funkcje nargin i nargout pozwalają na określenie z jaką liczbą argumentów i wyjść funkcja jest wywoływana
Zmienne i stałe specjalne
ans - zawiera ostatnią zmienna jeśli do wyrażenia nie przypisano żadnej zmiennej wyjściowej
eps - dokładność operacji zmiennoprzecinkowych w Matlabie
realmax - największa liczba zmiennoprzecinkowa
realimin - najmniejsza liczba zmiennoprzecinkowa
pi
i, j
inf, NON
Subfunkcje
Są zapisane w m-pliku po funkcjach podstawowych
Są widoczne tylko dla funkcji podstawowych lub innych subfunkcji tego samego m-pliku funkcyjnego
Funkcja podstawowa musi być zapisana w m-pliku
Funkcje prywatne
Muszą być umieszczane w katalogu o specjalnej nazwie private i są widoczne tylko przez funkcje z katalogów macierzystych.
Można w ten sposób definiować funkcje o takich samych nazwach jak oryginalne funkcji pakietu
Należy utworzyć katalog private
Poleceni użyteczne przy tworzeniu własnych m-plików
disp wyświetlanie tekstu lub macierzy
echo wyświetlanie tekstu lub macierzy
error przerywa wykonywanie m-pliku
return powrót do funkcji wywołującej
Funkcje pomocnicze
CLOCK = [ y m d h m s]
cputime - czas w sek. od uruchomienia Matlaba
etime
flops
tic toc
Potęgi
function wynik = potęga (podstawa, wykładnik);
i = 1; wynik = podstawa;
while (i < wykładnik)
wynik = wynik * podstawa;
i = i +1
end;
function wynik = potęga (podstawa, wykładnik);
i = 1; wynik = podstawa;
while (i < wykładnik)
wynik = wynik * podstawa;
i = i +1
end;
Silnia
function wynik = silnia (n)
if (nargin = = 1)
if (n < 0)
else error (`wpisz liczbę dodatnią');
i = 1;
wynik = 1
while (i < n + 1)
wynik = wynik * i;
i = i + 1
end;
end;
end;
Operacje wejścia/wyjścia
otwieranie i zamykanie plików
operacje wejścia/wyjścia niestandardowe
Podział macierzy
macierze pełne
w pamięci wewnętrznej przechowywana jest wartość każdego elementu wchodzącego w skład macierzy
zmienne stworzone w środowisku matlab są macierzami pełnymi
macierze rzadkie
zapamiętywane są tylko wartości elementów niezerowych oraz ich adresy (numer wiersza i kolumny)
Przykład
>> a = [005; 103; 070]
a =
0 0 5
1 0 3
0 7 0
---------------------------
>> [i, j, el] = find (a)
i = 2 nr wiersza
3
1
2
j = 1 nr kolumny
2
3
3
el = 1 konkretne wartości
7
5
3
Przykład
>> A = sparse (i, j, el)
A=
Compressed Column Sparse (rows = 3, cosl = 3, nuz = 4)
(2,1) -> 1
(3,2) -> 7
(1,3) -> 5
(2,3) -> 3
Macierze rzadkie
Nie powstają automatycznie!
Tworzymy ją poprzez
generowanie za pomocą odpowiednich funkcji
przekształcanie z macierzy pełnej
operacje na innych macierzach rzadkich
speye - macierz jednostkowa
sprandn - macierz losowa o zadanym wypełnieniu
sparse - generowanie macierze rzadkiej (chyba rzadkiej... ciężko rozczytać)
full - przekształcanie macierzy jednostkowej w pełną
find - wyszukiwanie elementów niezerowych
spconvert - utworzenie macierzy rzadkiej z danych w formacie ASCII
Funkcje dla macierzy rzadkiej
nuz - ilość elementów niezerowych
nonzeros - elementy niezerowe
spones - zmiana elementów niezerowych na jedynki
issparse - zwraca wartość 1 gdy zmienna jest macierzą rzadką
Operacje na plikach
przed zapisaniem lub odczytaniem danych należy utworzyć plik za pomocą funkcji fopen: id_pliku = fopen(nazwa_pliku, rodzaj_dostepu) ,gdzie:
nazwa_pliku - łańcuch znaków z nazwą otwieranego pliku
rodzaj_dostępu - łańcuch znaków o dopuszczalnych wartościach:
`r' - otwarcie pliku do odczytu
`w' - usunięcie zawartości istnijącego pliku lub otwarcie nowego i otwarcie go do zapisu
`a' - otwarcie pliku do dopisania na końcu
`r+' - otwarcie pliku do odczytu i zapisu
`w+'
`a+'
Funkcja fopen otwiera plik wskazany łańcuchem nazwa_pliku i zwraca unikatowy indentyfikator pliku (zmienna id_pliku); identyfikator ten powinien być używany we wszystkich operacjach we i wy wykonywanych na danym pliku. Jeśli operacja otwarcia pliku zakończy się sukcesem zmienna id_pliku będzie nieujemną liczbą całkowitą, else przyjmie wartość 1
Druga postać wywołania funkcji fopen jest następująca:
[id_pliku, informacja] = fopen (nazwa_pliku, rodzaj_dostepu)
informacja jest łańcuchem znakowym, który może być pomocny w ustaleniu błędu.
Zapisu elementów macierzy A w pliku [... ??? ...] identyfikatorem id_pliku dokonujemy przy pomocy funkcji fwrite:
liczba = fwrite (id_pliku, A, typ)
Argument funkcji typ pozwala określić na ilu bitach mają być zapisane dane i jak powinny być zinterpretowane
Wartości argumentu typ funkcji fwrite:
uchar - domyślny
schar
int 8, int 16, 1nt32, int64
single
float32
double
float 64
Odczyt plików binarnych
A = fread (id_pliku, rozmiar, typ)
[A, liczba] = fread (id_pliku, rozmiar, typ)
Funkcja fread wczytuje dane z pliku binarnego określonego przez identyfikator id_pliku i zapisuje je w macierzy A.
Rozmiar określa liczbę argumentów, które powinny zostać wczytane z pliku
Wartość argumentu rozmiar funkcji fread
n - odczytuje n elementów, zapisuje w wektorach kolumnowych
[m, n] - odczytuje tyle argumentów aby wypełnić kolumnami macierz m x n
Odczyt danych z pliku tekstowego dokonuje funkcja fscanf
A = fscanf(id_pliku, format, rozmiar)
[A, liczba] = fscanf(id_pliku, format, rozmiar)
Struktury tworzymy poprzez
przypisanie wartości do pól struktury
przez użycie funkcji: struct
Osoba.imie = `Jan'
Osoba.nazwisko = `Nowak'
Osoba(2).imie = `Krzysztof'
Osoba(2).nazwisko = `Kolumb'
Osoba = struct(`Jan', `Nowak')
Osoba(2) = struct(`Krzysztof', `Kolumb')
Struktury:
struct -
fieldsname (?) - podaje nazwy pól struktury
getfield - pobiera wielkość pola
setfield - ustawia wartość pola
rmfield - usuwa wartość pola
isnfield - jeżeli wskazane pole istnieje zwraca wartość 1
isstruct - jeżeli wskazana zmienna jest strukturą, zwraca wartość 1
PROGRAMOWANIE ZORIENTOWANE OBIEKTOWO
W przypadku gdy kod źródłowy jest niedostępny istnieje łatwa możliwość modyfikacji programu poprzez dziedziczenie czy przeładowanie
Integracja i hermetyzacja kodu oraz danych w obiektach. Wszelkie zmiany w obiektach wprowadzane są za pomocą odpowiednich metod mających prawa dostępu do obiektu.
Dziedziczenie - obiekty potomne przejmują pola i odpowiednie metody obiektów rodzicielskich, oprócz tego mogą posiadać własne dodatkowe pola i metody.
Polimorfizm (przeciążenie) - możliwość użycia tej samej nazwy funkcji czy metody obsługującej różne obiekty.
Zawieranie - możliwość utworzenia pola danego obiektu, które jest jednocześnie obiektem innej klasy.
Definicje klas muszą znajdować się w oddzielnych podkatalogach o nazwie:
@ nazwa_klasy
W katalogu własnym klasy umieszczony m-plik, który jest konstruktorem danej klasy:
nazwa_klasy.m
W katalogu własnym klasy umieszczamy m-pliki funkcyjne, zawierające metody i operatory posiadającej przywilej obsługi danej klasy
Konstruktor obiektu realizuje następujące zadania:
Sprawdza czy w wywołanym konstruktorze podano wartości pól obiektu. Jeżeli nie to tworzy obiekt pusty
Sprawdza, czy dane są już obiektem danej klasy
Wstawia odpowiednie wartości do pól tworzonej struktury i tworzy nowy obiekt przez wywołanie funkcji class
Przykład
function os = osoba(dane)
if norfin = = 0
os.imie = [ ];
os.nazwisko = [ ];
os = class (os, `osoba');
else if is a (dane, `osoba') %; [<- tu chyba coś jest źle]
os = dane; dane są obiektem klasy osoba
else
os.imie = dane(1);
os.nazwisko = dane(2);
os.class (os, `dane');
end
Przykład tworzenia obiektu
Pracownik = osoba({`Jan', `Nowak'})
Progr. zorien. obiektowo
Dostęp do danych w polach obiektu oraz możliwość ich modyfikacji posiadają wyłącznie metody
Przykład metody
function zmiana_nazwiska(osoba, n_nazwisko)
osoba.nazwisko = n_nazwisko
class
methods -
which - wypisuje metody obsługujące daną klasę
which-all - wypisuje wszystkie metody
isa - zwraca 1 jeżeli obiekt należy do danej klasy
is object - zwraca 1 jeżeli zmienna jest obiektem
Metody GET i SET
Metody pozwalają udostępnić dane obiektu poza katalog własny.
Get pobiera wartość danego pola
function l = get_imie(obj_name);
l = obj_name.imie;
function obj_name = set_imie(obj_name, imie_ );
obj_name.imie = imie_;
Metoda DISP
Function disp_obj(obj_name)
disp (`imie'), disp(obj_name.imie)
disp (`nazwisko'), disp(obj_name.nazwisko);