MATLAB
Logo programu | |
Autor | The MathWorks |
---|---|
Pierwsze wydanie | 1984[1] |
Aktualna wersja stabilna | R2024b (12 września 2024) [±] |
System operacyjny | Windows, Linux/Unix, OS X |
Rodzaj | język programowania, matematyka |
Licencja | Zamknięte oprogramowanie |
Strona internetowa |
MATLAB – program komputerowy będący interaktywnym środowiskiem do wykonywania obliczeń naukowych i inżynierskich, oraz do tworzenia symulacji komputerowych.
Opis ogólny
[edytuj | edytuj kod]Nazwa programu pochodzi od angielskich słów MATrix LABoratory, gdyż początkowo program ten był przeznaczony do numerycznych obliczeń macierzowych. Obecnie program ten potrafi znacznie więcej, cechuje go duża liczba funkcji bibliotecznych oraz duże możliwości rozbudowy przez użytkownika za pomocą pisania własnych funkcji. Posiada on swój język programowania, co umożliwia pisanie w pełni funkcjonalnych programów działających w środowisku Matlaba.
W zakresie grafiki MATLAB umożliwia rysowanie dwu i trójwymiarowych wykresów funkcji oraz wizualizację wyników obliczeń w postaci rysunków statycznych i animacji. Możliwe jest pobieranie danych pomiarowych z urządzenia zewnętrznego przez porty w celu ich obróbki. Wszystko to powoduje, że program ten znajduje bardzo szerokie zastosowanie[2].
Rys historyczny
[edytuj | edytuj kod]Prapoczątki programu MATLAB sięgają lat siedemdziesiątych, gdy w USA na zlecenie National Science Foundation powstały biblioteki języka Fortran do obliczeń macierzowych: Linpack i Eispack. Jeden z autorów tych bibliotek, Cleve Moler prowadził zajęcia z algebry liniowej na Uniwersytecie stanu Nowy Meksyk. Chcąc ułatwić życie swoim studentom napisał on w 1980 r. program, który umożliwiał korzystanie z tych bibliotek bez potrzeby programowania w Fortranie. Program ten napisany (także w Fortranie) w formie prostego interaktywnego języka poleceń i rozprowadzany na zasadach public domain był pierwowzorem programu MATLAB.
W 1983 C. Moler oraz S. Bangert i J. Little (inżynier z Uniwersytetu Stanford) postanowili rozwinąć powyższy projekt – zastąpili Fortran językiem C i dodali zintegrowaną grafikę. Założyli oni firmę The MathWorks Inc., która do dziś zajmuje się rozwojem i sprzedażą pakietu Matlab. Program został pierwszy raz zaprezentowany w grudniu 1984 roku na konferencji naukowej IEEE Conference on Decision and Control w Las Vegas. Rok później pojawiła się pierwsza wersja programu dla systemu Unix.[1]
Ważniejsze cechy programu
[edytuj | edytuj kod]Najważniejsze rodzaje plików
[edytuj | edytuj kod]M-pliki (*.m)
[edytuj | edytuj kod]W celu zautomatyzowania pewną liczbę poleceń z wiersza poleceń możemy zapisać do pliku z rozszerzeniem *.m (stąd nazwa m-plik) i tę listę poleceń uruchomić jednym poleceniem – mówimy wówczas o m-pliku skryptowym.
Pisząc powyższą listę poleceń w postaci funkcji języka programowania otrzymujemy dodatkowo możliwość wywołań z parametrami – mówimy wówczas o m-pliku funkcyjnym. W starszych wersjach programu MATLAB w jednym pliku mogła znajdować się tylko jedna funkcja. Obecnie w jednym pliku może znajdować się wiele funkcji, przy wywołaniu m-pliku wywoływana jest pierwsza funkcja w pliku. M-pliki funkcyjne to programy działające w środowisku MATLAB.
Poniżej przykładowy m-plik generujący trójwymiarowy wykres:
[x,y]=meshgrid(-3.5:0.05:3.5);
z=sin(x).*sin(y)+4*exp(-(x-0.5).^2-(y-0.5).^2);
surf(x,y,z)
colormap('jet')
shading interp
xlabel('X')
ylabel('Y')
zlabel('Z')
text(0,4,4,'z=sin(x).*sin(y)+4*exp(-(x-0.5).^2-(y-0.5).^2)','FontSize',18)
Mex-pliki
[edytuj | edytuj kod]Program napisany w języku C lub Fortran możemy skompilować poleceniem mex. Wynikiem kompilacji jest otrzymanie pliku dynamicznie ładowanej biblioteki współdzielonej (w Microsoft Windows są to pliki *.dll) nazywanego mex-plikiem (skrót od Matlab EXecutable). Mex-plik można uruchomić z wiersza poleceń w oknie programu MATLAB tak jak zwykły m-plik.
Przygotowanie mex-pliku bywa kłopotliwe, ale kompilacja do mex-plików ma następujące zalety:
- możemy korzystać z programów i bibliotek napisanych w C lub Fortranie.
- wzrost szybkości obliczeń w porównaniu do m-plików. W tej kwestii w przyszłych wersjach programu MATLAB przewaga mex-plików będzie malała w stosunku do m-plików.
Mat-pliki (*.mat)
[edytuj | edytuj kod]Tymczasowe lub końcowe wyniki obliczeń możemy zapisywać do pliku tekstowego ASCII o dowolnej nazwie lub do pliku binarnego z rozszerzeniem *.mat – wówczas wszystkie liczby (całkowite i zmiennoprzecinkowe) zapisywane są w formacie zmiennoprzecinkowym z podwójną precyzją.
Przykładowy kod źródłowy, który tworzy zmienne x i y, a następnie zapisuje je razem do pliku o nazwie dwie_zmienne.mat:
clear all
x=1:100;
y=sin(x);
save dwie_zmienne x y
Wczytanie zmiennych z pliku *.mat jest możliwe za pomocą polecenia load:
load dwie_zmienne
Używanie plików *.mat zamiast ASCII ma następujące cechy:
- mniejsza zajmowana pojemność na dysku – przykładowo jeśli zapiszemy na dysku liczbę 809154.1345098 to w pliku tekstowym zajmie ona 14 bajtów (13 cyfr + kropka) a w pliku binarnym 8 bajtów (taki rozmiar mają liczby zmiennoprzecinkowe ze zdwojoną precyzją). Może to mieć duże znaczenie przy większej ilości danych.
- konwersja z systemu dwójkowego na dziesiętny przy zapisywaniu do pliku ASCII może prowadzić do błędów zaokrągleń.
- do pliku ASCII możemy zapisać tylko jedną zmienną podczas gdy do pliku *.mat dowolną ich ilość (przy czym pojęcie „jedną zmienna” nie powinno być utożsamiane z jedną liczbą).
pliki fig (*.fig)
[edytuj | edytuj kod]Wykresy i inne formy graficzne wygenerowane w programie MATLAB można zapisać do wybranego formatu graficznego lub do pliku binarnego z rozszerzeniem *.fig. Zaletą tej drugiej formy zapisu jest możliwość późniejszej modyfikacji zapisanego obiektu w programie. Zapisu do formatu fig możemy dokonać za pomocą wybrania odpowiedniej opcji z menu (save as) lub za pomocą polecenia saveas. Wczytania pliku *.fig do programu MATLAB dokonuje się poleceniem open lub openfig.
Język programowania
[edytuj | edytuj kod]Język programowania pakietu MATLAB jest pełnoprawnym językiem programowania wysokiego poziomu, o składni wzorowanej na języku C. Pozwala on na używanie funkcji i struktur, oraz umożliwia pisanie programów zorientowanych obiektowo. Posiada on instrukcje sterujące takie jak: if, for, while, switch. Rezygnacja z trójargumentowej pętli for na rzecz tzw. notacji dwukropkowej skraca kod źródłowy, a więc i czas pisania.
Przykładowa pętla for napisana w C
int i;
for (i=0; i<N; ++i) {
//instrukcje
}
Przykładowa pętla for napisana w programie MATLAB
for i=1:N
%instrukcje
end
W zakresie programowania obiektowego możemy: definiować własne klasy obiektów i metody (funkcje) je obsługujące, przeciążać (nadpisywać) funkcje i operatory, oraz dziedziczyć klasy obiektów.
Zaawansowane możliwości programowania w MATLAB, duża ilość gotowych funkcji bibliotecznych (w tym implementacji metod numerycznych) oraz możliwości graficzne powodują, że MATLAB pozwala na rozwiązanie wielu problemów numerycznych w czasie znacznie krótszym, niż zajęłoby napisanie własnego kodu w C lub Fortranie.
Wszelkie wprowadzane i deklarowane dane (liczby, tekst) MATLAB traktuje jako macierz – pojedyncza liczba jest traktowana jako macierz o wymiarze 1x1. MATLAB wyróżnia następujące typy danych (wersja 5.x):
- double – macierz pełna. Liczby są reprezentowane w formacie zmiennoprzecinkowym z podwójną precyzją. W programie MATLAB możemy wykonywać operacje arytmetyczne tylko na liczbach typu double.
- char – typ tekstowy jakim jest dowolny napis. Formalnie jest to tak samo jak w języku C 8-bitowy typ całkowity (zakres 0–255). Dana liczba reprezentuje odpowiadający jej kod ascii.
- sparse – macierz rzadka. Elementy zerowe macierzy nie są zapamiętywane w pamięci komputera. W przypadku macierzy o dużej liczbie zer (macierze diagonalne, macierze rzadkie etc.) oszczędzamy pamięć oraz uzyskujemy skrócenie czasu obliczeń.
- struct – struktura. Tak jak w każdym języku programowania struktura jest typem danych zawierającym w swoich polach dane różnych typów.
- cell – macierz komórkowa (blokowa) – pojedynczymi elementami takiej macierzy mogą być nie tylko liczby ale i dowolne dane z powyższych typów. W macierzy komórkowej możemy przechować kilka macierzy o różnym wymiarze, tekst i strukturę jednocześnie.
- uint8 – 8-bitowy typ całkowity (zakres 0–255) przeznaczony do zapisywania w pamięci obrazów graficznych. Na tym typie danych nie można wykonywać żadnych operacji arytmetycznych.
Charakterystyczne dla języka programowania Matlaba jest automatyczne rozpoznawanie typów zmiennych – nie występuje deklaracja typu (przykładowo w języku C przed użyciem zmiennej abc konieczna jest linia – „double abc;”). MATLAB rozpoznaje typ zmiennej przy jej pierwszym użyciu, należy tylko odpowiednio ją wywołać.
Typ | Wywołanie |
---|---|
double | a=1 (a=[1]) |
char | a='napis' |
sparse | a=sparse(1) |
struct | a.składnik=1 |
cell | a={1} |
Grafika
[edytuj | edytuj kod]MATLAB cechuje obiektowy system graficzny:
- obiekty graficzne (nadrzędne okno graficzne, układ współrzędnych, okno menu, przyciski i suwaki etc.) są hierarchicznie uporządkowane w postaci drzewa – każdy obiekt ma jednego przodka i może mieć dowolną ilość potomków (dziedziczenie),
- każdy obiekt graficzny ma swoje właściwości (kolor, rozmiar, położenie etc.).
Pisząc okienkowy program w MATLAB wykorzystujemy gotowe obiekty graficzne, lub możemy tworzyć własne obiekty dziedzicząc już zdefiniowane.
Wczytywane obrazy są w pamięci zapisywane w postaci macierzy liczb double (w zakresie 0–1) lub liczb uint8 (zakres 0–255), obróbka obrazu polega na dokonywaniu operacji matematycznych na takiej macierzy.
Biblioteki dodatkowe (toolboksy)
[edytuj | edytuj kod]Toolboksy (z ang. toolboxes) to zbiór dodatkowych bibliotek (m-plików) do rozwiązywania specjalistycznych problemów z określonych dziedzin (automatyka, elektronika, telekomunikacja, matematyka etc.). Biblioteki te rozszerzają możliwości programu MATLAB.
Spośród dużej liczby istniejących toolboksów wymienić można:
- Financial Toolbox – przeznaczony do analiz i obliczeń finansowych (planowanie stałych przychodów, badanie wydajności obligacji, kalkulacja przepływu gotówki, obliczanie stóp procentowych etc.).
- Fuzzy Logic Toolbox – środowisko do projektowania i diagnostyki inteligentnych układów sterowania wykorzystujących metody logiki rozmytej i uczenie adaptacyjne.
- Image Processing Toolbox – programowe narzędzia do przetwarzania obrazów.
- Mapping Toolbox – przeznaczony do analizy informacji geograficznych i wyświetlania map, z możliwością dostępu do zewnętrznych źródeł geograficznych.
- Neural Network Toolbox – zbiór funkcji do projektowania i symulacji sieci neuronowych.
- Symbolic Math Toolbox – zestaw funkcji do obliczeń symbolicznych – rozszerza możliwości programu MATLAB o możliwość wykonywania obliczeń symbolicznych.
- Partial Differential Equation Toolbox – zestaw funkcji do numerycznego rozwiązywania równań różniczkowych cząstkowych metodą elementów skończonych.
- Simulink – pakiet służący do modelowania, symulacji i analizy układów dynamicznych. Simulink dostarcza także graficzny interfejs użytkownika umożliwiający konstruowanie modeli w postaci diagramów blokowych.
- Spline Toolbox – zestaw bibliotek do aproksymacji i interpolacji funkcjami sklejanymi.
- Wavelet Toolbox – biblioteka do analizy falowej sygnałów.
Zobacz też
[edytuj | edytuj kod]Przypisy
[edytuj | edytuj kod]- ↑ a b A Brief History of MATLAB (Krótka historia Matlaba) [online] (ang.).
- ↑ http://www.mathworks.co.uk/products/matlab/index.html?sec=applications [dostęp 2013-03-14] (ang.)