WIMIM/MIBM/N1/-/B04 WIMIM/ME/S1/-/C46 WIMIM/IM/S1/-/B19
Co mam zrobić, jeżeli obliczenia potrzebne są na wczoraj, trzeba jeszcze zrobić wykres, a do tego mam użyć Bardzo Skomplikowanego Czegoś wiedząc o tym raczej niewiele?
Aby móc obliczyć jak rozchodzi się tsunami, albo czy jutro będzie padał deszcz, albo jak wygnie się belka pod obciążeniem potrzebne są odpowiednie równania i sposób na obliczenie rozwiązań tych równań. Im dokładniej chcemy wykonać takie obliczenia, tym większą ilością liczb będziemy się posługiwać. Sensownie jest więc użyć macierzy zamiast robić rachunki na pojedynczych wartościach liczbowych.
Dodawanie Odejmowanie Mnożenie Dzielenie Transponowanie Sprzęganie, sprzęganie hermitowskie Odwracanie i obliczanie wyznacznika Obliczanie śladu macierzy Obliczanie wektorów i wartości własnych
Tworzenie macierzy Wyodrębnianie fragmentu Dekompozycje Czytanie/pisanie/drukowanie/rysowanie Konwersja Uwaga: wektory to też macierze.
for (i = 1; i <= N; i++) for (j = 1; j <= N; j++) { c[i][j] = 0; for (k = 1; k <= N; k++) c[i][j] = c[i][j] + a[i][k] * b[k][j]; } Ten algorytm działa, ale zwykle działa zbyt powoli są szybsze sposoby na mnożenie. To zbyt pracochłonne łatwiej przecież napisać po prostu A * B
Matlab jest programem licencjonowanym, można go kupić http://www.mathworks.com/ Alternatywą są darmowe programy Octave (GNU) http://www.gnu.org/software/octave/ SciLab (Open Source INRIA) http://www.scilab.org/
Interaktywnie CLI GUI Wsadowo skrypty (polecenie diary) run "skrypt.m" matlab r "skrypt" funkcje (alternatywa dla skryptów)
MAT-files zapis poleceniem save odczyt poleceniem load zawierają wartości zmiennych na jakich prowadzi się obliczenia M-files zapis jako pliku z dowolnego edytora tekstu uruchomienie przez podanie nazwy pliku jako polecenia/funkcji (bez.m) MEX-files Simulink: pliki.slx oraz.mdl
Najprościej Google Napisać help Napisać helpdesk Napisać doc Odnaleźć opcję menu help Uruchomić programy przykładowe Przeczytać PDF Przeczytać podręcznik Uwaga: dokumentacja do tworzonych funkcji
Duże i małe litery są traktowane jako różne znaki, zmienna A i zmienna a to dwie różne zmienne. Nie przejmujemy (?) się typami zmiennych Gdy chcemy zobaczyć co jest w zmiennej to ją piszemy w oknie poleceń i naciskamy enter Gdy nie chcemy widzieć wyniku stawiamy średnik Polecenie clear pozwala pozbyć się niepotrzebnych już zmiennych
Możemy macierz wczytać z pliku Możemy ją wpisać z klawiatury [1, 2.1e-8; pi, 1+i] Możemy użyć funkcji do tworzenia macierzy np.: eye(n), speye(n), zeros(n), ones(n), magic(n) rand(n), randi(n), randn(n) gallery(nazwa_macierzy_z_galerii, p1, p2, ) Możemy utworzyć jako ciąg, np. 5:5:25
Dodawanie, odejmowanie, mnożenie zapisujemy jako + - * Transpozycje kropka-apostrof i apostrof Odwracanie macierzy funkcja inv Dzielenie macierzy są dwie odmiany ze ukośnikiem i ukośnikiem odwrotnym Wyznacznik det, ślad trace Suma, różnica, iloczyn elementów sum, diff, prod i mnóstwo innych operacji, np. reshape
Normalnie Matlab każdą operację robi na macierzach (czyli jako operację na macierzach, wektorach i liczbach zależnie od tego co jest użyte) Jeżeli operator poprzedzi się kropką, to Matlab wykona daną operację skalarnie, choć przetworzy tak wszystkie elementy macierzy Funkcje takie jak sinus też wykonują się na wszystkich elementach macierzy naraz.
MatLab pozwala tworzyć bardzo złożone rysunki i zapisywać je np. jako pliki PS (nadają się do druku!) Na początek przydadzą się polecenia plot(x,y) które rysuje wykres y(x) surf(x,y,z) rysujące wykres trójwymiarowy contour(x,y,z) rysujący poziomice Przy pomocy odpowiednich poleceń można umieścić na rysunku tytuły, opisać osie współrzędnych, zmienić skale na logarytmiczne itd.
http://www.mathworks.com/products/matlab/demos. html?file=/products/demos/shipping/matlab/ dostarczane wraz z programem Matlab
Język programowania pakietu Matlab jest językiem programowania Wikipedia
M-pliki MEX-pliki Skrypty w Matlabie Funkcje w Matlabie Instrukcje warunkowe Instrukcje pętli Obsługa wyjątków Programowanie obiektowe?!
Skrypty to pliki, w których jest to czego nie chcemy wpisywać z klawiatury za każdym razem od nowa. Nazwa skryptu powinna mieć rozszerzenie.m, np. policz.m Skrypty to po prostu pliki tekstowe: Notepad++ edit policz.m diary ' policz.m' Aby uruchomić polecenia zapisane w skrypcie piszemy jego nazwę bez.m: policz.m wywołuje się pisząc policz
Skrypt używa zmiennych globalnych. Zmienne zmodyfikowane przez skrypt będą miały nowe wartości także i poza skryptem. Skrypt nie ma zmiennych lokalnych. Skrypty są uruchamiane z bieżącego katalogu. Gdy nie ma w bieżącym, przeszukiwana jest tzw. ścieżka. cd zmiana katalogu addpath dopisywanie katalogu do ścieżki run - uruchamianie skryptu z dowolnego katalogu Kolizje nazw skryptów i zmiennych
Funkcje w Matlabie są lepsze niż skrypty zmienne lokalne zmienne globalne parametry wejściowe parametry wyjściowe uchwyty dokumentacja dla help
Funkcje podstawowe Funkcje inlinie Funkcje anonimowe Funkcje lokalne Funkcje prywatne Funkcje zagnieżdżone Funkcje przeładowane/przeciążone (overloaded)
Jeżeli funkcja nazywa się fun to musi być zapisana w pliku fun.m Na początku musi być napisane słowo kluczowe function, co ma być wynikiem działania, jaka jest nazwa i jakie są parametry Na końcu może być napisane end Wszystkie zmienne wewnątrz funkcji są lokalne chyba że są globalne Specjalne komentarze - autodokumentacja
Zamiast pliku fun.m możemy użyć funkcji inline, np.: fun = inline('x^3-1'); fzero(fun, [0, 1])
Funkcje anonimowe to funkcje nie mające własnej nazwy są wygodniejsze niż inline fzero(@(x)x^3-1, pi/4) Można je nazwać, np.: fun1 = @(x,y)x * y / (x + y) ;
Funkcje prywatne są to tak samo napisane funkcje jak funkcje podstawowe ale umieszczone w folderze private W ten sposób stają się one niedostępne do normalnego wywołania chyba że wywołuje je inna funkcja, taka która jest w folderze w którym jest folder private
elseif
opcja = 'WARIANT1'; switch opcja case {'WARIANT1','WARIANT2'} disp('1 albo 2 ') case 'WARIANT3' disp('3') otherwise disp('ani 1, ani 2, ani 3') end
eps = 1; while (1+eps) > 1 eps = eps/2; end eps = eps*2
a = zeros(k,k) for m = 1:k for n = 1:k a(m,n) = 1/(m + n -1); end end for s = 1.0: -0.1: 0.0,..., end for s = [1,5,8,17],..., end for e = eye(n),..., end for V = A,..., end for k = 1:n, V = A(:,k);..., end
A = rand(3); B = ones(5); try C = [A; B]; catch err % -- tu możemy coś zrobić -- rethrow(err); end
global, persistent break return ~ do pomijania parametrów nargin nargout, ; % # i, j
Matlab jest bardzo prosty w użyciu, efektywność Matlaba jest bardzo wysoka, ale wymaga wektoryzacji problemu, tj. zapisania go macierzowo. Większość obliczeń można równie dobrze wykonać w programach Octave lub SciLab używając takich samych poleceń lub po automatycznej translacji ale niektórych obliczeń nie da się wykonać równie łatwo w darmowych programach. Możliwości graficzne Matlaba znacznie przewyższają konkurencję. Wydajność samych obliczeń numerycznych jest praktycznie taka sama dla wszystkich programów.