Wykład 1

Transkrypt

Wykład 1
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.