Funkcje matematyczne
Argumentem może być nie tylko liczba, ale również macierz lub wektor (czy też liczba zespolona etc.)
Podstawowe:
- Sin(x) – nie trzeba tłumaczyć. Jeżeli argumentem będzie macierz, policzy sinus każdego elementu.
- sqrt(x)
- exp(x) – podnosi liczbę do potęgi (a=exp(1))
- log10(x)
- log2(x)
Zaokrąglenia:
- floor(x) – zaokrągla w dół
- ceil(x) – zaokrągla w górę
- fix(x) – wyrzuca rozwinięcie dziesiętne (obcina wszystko po przecinku)
- round(x) – standardowe zaokrąglanie - zgodnie z zasadami matematycznymi
Funkcje na macierzach
- det(A) – wyznacznik
- rank(A) – rząd
- inv(A) – zwraca macierz odwrotną
// przykład:
// Oblicz równanie liniowe: A*x=b (A-macierz, x-niewiadoma, b-jakaś stała)
// x=inv(a)*b;
// x=(A^(-1))*b;
// x=A\b; -> najszybszy sposób
- diag(A) – zwraca przekątną macierzy A
// Jeżeli jako argument podamy wektor, to utworzymy macierz diagonalną
- fliplr(A) – lustrzane odbicie macierzy
- flipud(A) – odwrócenie macierzy do góry nogami
- rctgo(A) – obraca macierz o 90 stopni (oczywiście przeciwnie do wskazówek zegara)
- trin(A) – zwraca macierz z elementami nad przekątną podanej macierzy (górny trójkąt macierzy – elementy pod przekątną są zerowane)
- tril(A) – na odwrót – zwraca dolny trójkąt macierzy (pod przekątną)
Programowanie w MATLABie
- FOR
Składnia:
for zm=wektor
.
.
.
end
Przykłady:
for i=10:-1:0
end
leci od 10 do -1 z krokiem 0
for k=[1 4 7 0 5 2 3]
end
Wektor może być zdefiniowany w formie jawnej, lub krokowej.
Zamiast wektora można również podstawić macierz.
for k=1:10
v(k)=k^3;
Potęgi od 1 do 10 (??? O co kurwa tutaj chodzi?:X)
To działa, ale jest niepoprawne – istnieje problem z przydzielaniem pamięci. Np. dla 1.000.000 przydziela pamięć dla 1.000.000 elementów. Większość czasu jest zmarnowana na przydzielanie pamięci.
Poprawna wersja wygląda następująco:
v=zeros(1,10);
for k=1:10
v(k)=k^3;
end
lub z tego co zrozumiałem przy przepisywaniu…
for k=10: -1 :1
v(k)=k^3;
end
Najlepszy sposób(gdyż MATLAB interpretuje wtedy tylko jedną linię:
v=(1:10).^3;
- WHILE
Składnia:
while warunek_logiczny
.
.
.
end
Warunki logiczne:
==
<
>
<=
>=
~= (negacja. Czyli pewnie to samo co != czy <>)
& (AND)
| (OR)
Warto zwrócić uwagę, że są to pojedyncze znaki, a nie tak jak w C.
Przykłady:
s=0;
while s~=100
s=s+0.01;
end
W tym przykładzie był zły warunek – powinien być <=100, ponieważ system binarny nie trafi w 100 (?!WTF?!?!?!?!?!?!?!?!?!)
- IF
Składnia:
if warunek_logiczny_1
.
elseif warunek_logiczny_2
.
elseif warunek_logiczny_3
.
else
.
end
break; – przerwanie pętli
continue; - wraca na początek pętli
Jakieś denne info?
Program matlabowy zapisywany jest w plikach *.M. Wpisując *.M wywołujemy M-plik. (gdzie wpisując?:X)
M-plik może być:
- skryptem
Ciąg poleceń, jakie matlab ma wykonać.
Są przejrzyste ze względu na dostęp do poleceń, dostęp do workspace’a.
Przykład:
Test.m -> tworzymy m-plik
%opis
%opis // (te ostatnie 2 linie to są komentarze)
x=0:0.01:10;
y=sin(x)+ccs(x);
(help Test wyświetli komentarze zawarte w %opis)
- funkcją
Słowo kluczowe – function.
Function[x,y]=proba(a,b,c)
[x,y]-list parametró zwracanych
(a,b,c) – parametry zwracane (WTF again.)
Nazwa funkcji MUSI być taka sama jak pliku – proba.m.
Funkcje - przykłady
Function[x,y]=proba(a,b,c)
%opis
%opis
x=a+b-c;
y=a+b+c;
(return; nie jest potrzebne [bez argumentów] – WTF one more time)
Help proba - wypisuje komentarze.
Różnice skrypt < - > funkcja
Funkcja jest hermetyczna – tzn. wszystkie jej zmienne są lokalne. Nie widzi też ona pamięci MATLABa.
Wszystkie zmienne są przekazywane przez wartość.
- nargout (pierwsza litera to może być też ‘r’ lub ‘v’ – naprawdę trudno to rozczytać:X) – zwraca ilość argumentów zwracanych przez funkcję
to na obrazku zwraca ilość argumentów, jakie funkcja musi wyliczyć (?;/ pewnie ilość argumentów, które funkcja przyjmuje…)
Funkcje można wywoływać z różną ilością argumentów. ( szkoda, że nie napisał, co wtedy…)
Przykład:
function[x,y]=proba(a,b,c)
if uaryin(to, co na obrazku kurwa) == 1 //jeśli wywołałem funkcję z jednym argumentem
b=2;
c=5;
elseif uaryin == 2 //z dwoma argumentami
c=10;
end
x=a+b-c;
y=a*b*c;
proba(1) – przekazuje 1 argument
proba(1,3) – w argumenty etc.
proba(1) -> przeszukuje toolboxy, katalog roboczy
chdir ‘i:/matlab’ – ścieżka do katalogu
Jeżeli nie utworzymy funkcji w katalogu roboczym, to MATLAB pomija (wtf again )
Obejście hermetyczności funkcji
global zm – tworzy zmienna globalna (nie poleca się nadużywania zmiennych globalnych)
Jakieś tam funkcje ;o
min(a,b) – nie zamierzam tłumaczyć
min(v) – wektor też działa.
min(M) – zwraca wektor najmniejszych elementów w każdej kolumnie
to samo z funkcją max().
sum(v) – suma elementów wektora
sum(M) – wektor sum dla każdej kolumny
prod(v) – iloczyn elementów wektora
prod(M) – iloczyn elementów macierzy (chyba też dla każdej kolumny)
mean<albo meun – chgw>(v) – średnia arytmetyczna wektora
mean<patrzy wyżej>(M) – średnia arytmetyczna dla każdej kolumny
std(v) – odchylenie standardowe
std(M) – wektor odchyleń standardowych dla każdej kolumny (widzicie analogie? ^_-)
Przykłady:
sum(sum(A)) – największy element macierzy
sum(A’) – wektor sum dla kolejnych wierszy macierzy
prod(1:n) – silnia
sum(sum(A)) – suma wszystkich elementów macierzy
Dalej funkcje:
eval(‘…’) -> przekazuje tekst, który jest interpretowany i wykonywany
Przykład:
eval(‘x=sin(pi)’); -> przekazuje tekst i oblicza wartość. Wynik: x=0.
Mocne polecenie! (?;o)