Edytuj stronę Odnośniki Fold/unfold all ODT export Ta strona jest tylko do odczytu. Możesz wyświetlić źródła tej strony ale nie możesz ich zmienić. ====== 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 <code> 5 + 5 </code> <code> ans = 10 </code> <code> -2 * 4.3 </code> <code> ans = -8.6000 </code> <code> 2 ^ 10 </code> <code> ans = 1024 </code> <code> 3 / 5 </code> <code> ans = 0.60000 </code> <code> 3 / 0 </code> <code> warning: division by zero ans = Inf </code> **Ć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 <code> sin( pi / 4 ) </code> <code> ans = 0.70711 </code> <code> realmax eps </code> <code> ans = 1.7977e+308 ans = 2.2204e-16 </code> <code> sqrt(16) </code> <code> ans = 4 </code> <code> sqrt(-1) </code> <code> ans = 0 + 1i </code> **Ć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 <code> sin(5) + 3; </code> <code> disp(sin(5) + 3); disp('Witaj świecie') </code> <code> 2.0411 Witaj świecie </code> <code> fprintf('Witaj ściecie!\n') fprintf('sin(%d) = %f\n', 2, sin(2)) </code> <code> Witaj ściecie! sin(2) = 0.909297 </code> 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 <code> 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) </code> <code> 3.141593 3.141593e+00 3.14159 3.1415926536 3.141593 3.14 3.14 42 2a * Liczba pi wynosi 3.141593 </code> ===== Zmienne ===== * definicja i inicjalizacja zmiennych * operator ''%%=%%'' przypisania wartości <html><br></html> ''%%zmienna = wyrażenie%%'' * nazwy zmiennych ''%%A-Za-z0-9_%%'', małe/wielkie litery rozróżniane <code> x = 16 y = sqrt(x) z = x + y + sin(x) napis = 'Witaj Świecie' </code> <code> x = 16 y = 4 z = 19.712 napis = Witaj Świecie </code> <code> x = x + 1 </code> <code> x = 17 </code> błędne przypisanie <code> 1 = x </code> <code> parse error: invalid constant left hand side of assignment >>> 1 = x ^ </code> * ''%%who%%'' - lista zmiennych * ''%%whos%%'' - lista zmiennych wraz informacją o typie * ''%%clear%%'' - usuwanie zmiennych <code> who </code> <code> Variables in the current scope: ans napis x y z </code> <code> whos </code> <code> 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 </code> * zmienne są macierzami, liczby to macierze 1x1 * napisy są wektorem znaków (''%%char%%'') 1xN ===== Zmienna ans ===== * zmienna ''%%ans%%'' przechowuje ostatni wynik (answer) <code> sqrt(2) </code> <code> ans = 1.4142 </code> <code> x = ans + 5 </code> <code> x = 6.4142 </code> ===== 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()%%'' <code> x = 1; y = true; z = int32(x); d = 'abc'; whos </code> <code> 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 </code> ===== Wektory ===== <code> x = [ 1 2 3] </code> <code> x = 1 2 3 </code> <code> x = [ 1, 2, 3] </code> <code> x = 1 2 3 </code> <code> x = 1:10 </code> <code> x = 1 2 3 4 5 6 7 8 9 10 </code> <code> y = [ 1 ; 2 ; 3 ; 4] </code> <code> y = 1 2 3 4 </code> ===== Operacje na wektorach ===== <code> x = [1 2 3 4 5] x + 2 </code> <code> x = 1 2 3 4 5 ans = 3 4 5 6 7 </code> <code> sqrt(x) </code> <code> ans = 1.0000 1.4142 1.7321 2.0000 2.2361 </code> <code> y = [6 7 8 9 10] z = x + y sqrt(x) </code> <code> y = 6 7 8 9 10 z = 7 9 11 13 15 ans = 1.0000 1.4142 1.7321 2.0000 2.2361 </code> **Ć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 <code> help sin </code> <code> '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 <topic>' 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. </code> ===== 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 <code> lookfor cosine </code> <code> 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: </code> **Ćwiczenie**: zobacz pomoc dla polecenia ''%%format%%''. Porównaj wyniki wyświetlania liczby $\pi$ w róznych formatach, np.: ''%%short%%'', ''%%long%%'', ''%%rat%%'', ''%%bin%%'' ===== Wykresy ===== <code> x = -pi:pi; plot(x, sin(x)); </code> {{zajecia:pp2_2020_2:01_intro_files:01_intro_51_0.png| png}} <code> plot(x, cos(x), 'o') </code> {{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 <code> date </code> <code> ans = 03-Nov-2020 </code> **Ć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]] <code> hello </code> <code> Witaj Świecie </code> * ''%%type nazwa%%'' wyświetla zawartość pliku * ''%%edit nazwa%%'' otwiera edycję pliku <code> type hello </code> <code> % To jest pierwszy progeam w Matlab tekst = 'Witaj Świecie'; disp(tekst) </code> <code> help hello </code> <code> 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 <topic>' 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. </code> ===== 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]$