====== Matlab ======
* język wysokiego poziomu do obliczeń numerycznych, wizualizacji i tworzenia aplikacji
* interaktywne środowisko do eksploracji, projektowania i rozwiązywania problemów
* obszerna biblioteka funkcji matematycznych dla algebry liniowej, statystyki, analizy Fouriera, filtrowania, optymalizacji, całkowania numerycznego i rozwiązywania zwykłych równań różniczkowych
* wizualizacja danych
* narzędzia programistyczne: edytor, debbuger, profiler, …
* narzędzia do tworzenia aplikacji z interfejsami graficznymi
* integracja algorytmów z zewnętrznymi aplikacjami (np. MS Excel) i językami (C, Java, .NET, …)
* ToolBox-y
===== Środowisko graficzne =====
{{https://ch.mathworks.com/help/matlab/learn_matlab/desktop.png}}
* **Current Folder** - katalog bieżący
* **Command Window** - linia komend
* **Workspace** - podgląd zmiennych i danych w projekcie
* **Command History** - historia komend
===== Matlab jako kalkulator =====
**Operacje arytmetyczne** ''%%+%%'' dodawnie, ''%%-%%'' odejmowanie, ''%%*%%'' mnożenie, ''%%/%%'' dzielenie, ''%%^%%'' potęgowanie
5 + 5
ans = 10
-2 * 4.3
ans = -8.6000
2 ^ 10
ans = 1024
3 / 5
ans = 0.60000
3 / 0
warning: division by zero
ans = Inf
**Ćwiczenie**: oblicz ile wynoisi $\frac{1.3^{2.2}}{5.3 - 3/13}$
===== Funkcje matematyczne =====
Stałe: ''%%pi%%'' $\pi$, ''%%inf%%'' $\infty$, ''%%NaN%%'' not a number, ''%%realmax%%'' największa liczba, rzeczywista, ''%%eps%%'' dokładność maszynowa
Funkcje: ''%%sin()%%'', ''%%cos()%%'', ''%%tan%%'', ''%%cot%%'', ''%%sinh%%'', ''%%asin%%'', ''%%sqrt()%%'' $\sqrt{x}$, ''%%exp()%%'' $e^x$, ''%%abs%%'' $|x|$, ''%%log%%'', ''%%log2%%'', ''%%log10%%'', ''%%sign%%'' znak, ''%%mod%%'' reszta z dzielenia
sin( pi / 4 )
ans = 0.70711
realmax
eps
ans = 1.7977e+308
ans = 2.2204e-16
sqrt(16)
ans = 4
sqrt(-1)
ans = 0 + 1i
**Ćwiczenie**: oblicz ile wynosi $\sqrt{\sin(0.3\pi) \cdot e^{-0.1}} $
===== Wyjście poleceń =====
* średnik na końcu instrukcji (;) wyłacza wyjście
* ''%%disp()%%'' wypisywanie zmiennych
* ''%%fprintf()%%'' wypisywanie formatowanych komunikatów zgodnie z funkcją ''%%printf%%'' z C
sin(5) + 3;
disp(sin(5) + 3);
disp('Witaj świecie')
2.0411
Witaj świecie
fprintf('Witaj ściecie!\n')
fprintf('sin(%d) = %f\n', 2, sin(2))
Witaj ściecie!
sin(2) = 0.909297
Formatowanie ''%%printf%%'':
* liczby rzeczywiste: ''%%%f%%'', ''%%%e%%'' notacja naukowa, ''%%%g%%'' krótka format
* ''%%%.3f%%'' precyzja
* ''%%%10f%%'' szerokośc okna
* ''%%%-10f%%'' wyrówanie do lewej
* ''%%%d%%'' liczby całkowite
* ''%%%x%%'' liczby całkowite (szesnastkowo)
* ''%%%s%%'' napis (ciąg znaków)
* ''%%%c%%'' znak
fprintf('%f\n', pi)
fprintf('%e\n', pi)
fprintf('%g\n', pi)
fprintf('%.10f\n', pi)
fprintf('%10f\n', pi)
fprintf('%10.2f\n', pi)
fprintf('%-10.2f\n', pi)
fprintf('%d %x %c\n', 42, 42, 42)
fprintf('Liczba %s wynosi %f', 'pi', pi)
3.141593
3.141593e+00
3.14159
3.1415926536
3.141593
3.14
3.14
42 2a *
Liczba pi wynosi 3.141593
===== Zmienne =====
* definicja i inicjalizacja zmiennych
* operator ''%%=%%'' przypisania wartości
''%%zmienna = wyrażenie%%''
* nazwy zmiennych ''%%A-Za-z0-9_%%'', małe/wielkie litery rozróżniane
x = 16
y = sqrt(x)
z = x + y + sin(x)
napis = 'Witaj Świecie'
x = 16
y = 4
z = 19.712
napis = Witaj Świecie
x = x + 1
x = 17
błędne przypisanie
1 = x
parse error:
invalid constant left hand side of assignment
>>> 1 = x
^
* ''%%who%%'' - lista zmiennych
* ''%%whos%%'' - lista zmiennych wraz informacją o typie
* ''%%clear%%'' - usuwanie zmiennych
who
Variables in the current scope:
ans napis x y z
whos
Variables in the current scope:
Attr Name Size Bytes Class
==== ==== ==== ===== =====
ans 1x1 8 double
napis 1x14 14 char
x 1x1 8 double
y 1x1 8 double
z 1x1 8 double
Total is 18 elements using 46 bytes
* zmienne są macierzami, liczby to macierze 1x1
* napisy są wektorem znaków (''%%char%%'') 1xN
===== Zmienna ans =====
* zmienna ''%%ans%%'' przechowuje ostatni wynik (answer)
sqrt(2)
ans = 1.4142
x = ans + 5
x = 6.4142
===== Typy danych =====
* typ ''%%double%%'' domyślny dla warlości liczbowych
* typ logiczny ''%%logical%%'', wartości: ''%%true%%'', ''%%false%%''
* typ znakowy ''%%char%%'', napis to macierz (wektor) znaków
* typ całkowity ''%%int32%%'' po rzutowaniu ''%%int32()%%''
x = 1;
y = true;
z = int32(x);
d = 'abc';
whos
Variables in the current scope:
Attr Name Size Bytes Class
==== ==== ==== ===== =====
ans 1x1 8 double
d 1x3 3 char
napis 1x14 14 char
x 1x1 8 double
y 1x1 1 logical
z 1x1 4 int32
Total is 21 elements using 38 bytes
===== Wektory =====
x = [ 1 2 3]
x =
1 2 3
x = [ 1, 2, 3]
x =
1 2 3
x = 1:10
x =
1 2 3 4 5 6 7 8 9 10
y = [ 1 ; 2 ; 3 ; 4]
y =
1
2
3
4
===== Operacje na wektorach =====
x = [1 2 3 4 5]
x + 2
x =
1 2 3 4 5
ans =
3 4 5 6 7
sqrt(x)
ans =
1.0000 1.4142 1.7321 2.0000 2.2361
y = [6 7 8 9 10]
z = x + y
sqrt(x)
y =
6 7 8 9 10
z =
7 9 11 13 15
ans =
1.0000 1.4142 1.7321 2.0000 2.2361
**Ćwiczenie**: oblicz wartość wyrażenia $\begin{bmatrix} 1 & 2 & 3 \\ \end{bmatrix} \cdot \begin{bmatrix} 1 \\ 2\\ 3 \\ \end{bmatrix}$
===== Komendy wbudowane =====
* ''%%clc%%'' czyszczenie wiersza poleceń
* ''%%who%%'' ''%%whos%%'' lista zmiennych
* ''%%clear%%'' usuwa wszystkie zmienne
* ''%%clear x%%'' usuwa zmienną ''%%x%%''
* ''%%help polecenie%%'' pomoc
* ''%%quit%%'' wyjście z Matlab
help sin
'sin' is a built-in function from the file libinterp/corefcn/mappers.cc
-- sin (X)
Compute the sine for each element of X in radians.
See also: asin, sind, sinh.
Additional help for built-in functions and operators is
available in the online version of the manual. Use the command
'doc ' to search the manual index.
Help and information about Octave is also available on the WWW
at https://www.octave.org and via the help@octave.org
mailing list.
===== Pomoc =====
* ''%%help polecenie%%'' pomoc dotycząca polecenia
* ''%%help elfun%%'' elementarne funkcje matematyczne
* ''%%help elmat%%'' elementarne funkcje macierzowe
* ''%%doc polecenie%%'' strona dokumentacji dotycząca polecenia
* ''%%lookfor wyrażenie%%'' lista poleceń dotyczacych wyrażenia
* ''%%F1%%''pomoc dotycząca zaznacznej funkcji
lookfor cosine
acos Compute the inverse cosine in radians for each element of X
.
acosh Compute the inverse hyperbolic cosine for each element of X
.
cos Compute the cosine for each element of X in radians.
cosh Compute the hyperbolic cosine for each element of X.
acosd Compute the inverse cosine in degrees for each element of X
.
cosd Compute the cosine for each element of X in degrees.
cosint Compute the cosine integral function:
**Ćwiczenie**: zobacz pomoc dla polecenia ''%%format%%''. Porównaj wyniki wyświetlania liczby $\pi$ w róznych formatach, np.: ''%%short%%'', ''%%long%%'', ''%%rat%%'', ''%%bin%%''
===== Wykresy =====
x = -pi:pi;
plot(x, sin(x));
{{zajecia:pp2_2020_2:01_intro_files:01_intro_51_0.png| png}}
plot(x, cos(x), 'o')
{{zajecia:pp2_2020_2:01_intro_files:01_intro_52_0.png| png}}
===== Inne przydatne komendy =====
* ''%%cd%%'' zmiana katalogu
* ''%%dir%%'' zawartość katalogu
* ''%%pwd%%'' bieżący katalog
* ''%%save nazwa%%'' zapis zmiennych, ''%%load nazwa%%'' odczytanie zmiennych
* ''%%date%%'' data
* ''%%clc%%'' czyszcenie wiersza poleceń
* ''%%quit%%'' wyjście z Matlab
date
ans = 03-Nov-2020
**Ćwiczenie**: wykonaj nastepujące kroki:
- usuń wszystkie zmienne i wyczyść wiersz poleceń
- utwóż zmienne $x=\pi$ i $y = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]$
- zapisz zmienne w pliku o nazwie ''%%dane%%''
- usuń zmienne $x$ i $y$
- wczytaj zmienne z pliku ''%%dane%%'' i wypisz ich wartości
===== Skrypty =====
Tryby pracy Matlab:
* interaktywny - w wierszu poleceń
* wsadowy - plik ''%%*.m%%'' (M-pliki) zawierający ciąg instrukcji staje się poleceniem Matlab. Nazwa pliku staje się poleceniem Matlaba
Przykład: uruchomienie pliku [[https://raw.githubusercontent.com/IS-UMK/pp2_matlab/master/hello.m|hello.m]]
hello
Witaj Świecie
* ''%%type nazwa%%'' wyświetla zawartość pliku
* ''%%edit nazwa%%'' otwiera edycję pliku
type hello
% To jest pierwszy progeam w Matlab
tekst = 'Witaj Świecie';
disp(tekst)
help hello
To jest pierwszy progeam w Matlab
Additional help for built-in functions and operators is
available in the online version of the manual. Use the command
'doc ' to search the manual index.
Help and information about Octave is also available on the WWW
at https://www.octave.org and via the help@octave.org
mailing list.
===== Zadanie =====
Napisz skrypt o nazwie ''%%zad1.m%%'', który wykona nastepujące instrukcje:
* wypisze Twoje imię i numer indeksu
* wypisze wartość funkcji $$f(x) = \frac{1}{ \sqrt{2 \pi}} e^{-x^2}$$ w punkcie $x=1$ z dokładnościa do 3 miejsc po przecinku
* wyrysuje wykres $$ f(x) = cos(2x) + e^{-0.01 x}$$ na odcinku $[-100, 100]$