Z Skrypty dla studentów Ekonofizyki UPGOW
Linia 124: | Linia 124: | ||
Dotychczasowe przykłady były wypisywane bezpośrednio, w wierszu poleceń po znaku zachęty. Takie postępowanie jest czytelne, niezbyt uciążliwe i efektywne tylko przy niewielkiej sekwencji instrukcji, zajmujących kilka linii. W praktyce kod programu wygodniej przygotowywać, modyfikować bądź poprawiać w oddzielnym pliku. Jeżeli zapiszemy ten plik z rozszerzeniem *.m, na przykład moj_kod.m, to MATLAB potraktuje go jako skrypt, tzw. m – plik. Wpisanie w linii komend nazwy m-pliku (bez rozszerzenia) | Dotychczasowe przykłady były wypisywane bezpośrednio, w wierszu poleceń po znaku zachęty. Takie postępowanie jest czytelne, niezbyt uciążliwe i efektywne tylko przy niewielkiej sekwencji instrukcji, zajmujących kilka linii. W praktyce kod programu wygodniej przygotowywać, modyfikować bądź poprawiać w oddzielnym pliku. Jeżeli zapiszemy ten plik z rozszerzeniem *.m, na przykład moj_kod.m, to MATLAB potraktuje go jako skrypt, tzw. m – plik. Wpisanie w linii komend nazwy m-pliku (bez rozszerzenia) | ||
+ | |||
+ | >> moj_kod | ||
+ | |||
+ | powoduje wykonywanie wszystkich instrukcji zapisanych w tym pliku, jak gdyby były one wpisywane po kolei w linii poleceń. | ||
+ | |||
+ | MATLAB oferuje nie tylko szeroką paletę funkcji standardowych, ale umożliwia tworzenie przez programistę jego własnych funkcji. Definicję takiej funkcji należy koniecznie umieścić w pliku o rozszerzeniu *.m, podobnie jak w przypadku skryptu. Różnica polega na tym, iż nazwa m – pliku skryptowego może być dowolna, natomiast nazwa m – pliku zawierającego funkcję definiowaną samodzielnie przez programistę musi by taka sama, jak nazwa funkcji. Definicja własnej funkcji musi zaczynać się od słowa kluczowego '''function''' i dalej zawiera: | ||
+ | <source lang="matlab">function wynik = moja(x, y) | ||
+ | % oblicza kombinację funkcji trygonometrycznych | ||
+ | wynik = sin(x) + cos(y) – sin(y) * cos (x); | ||
+ | end | ||
+ | </source> | ||
+ | Po zapisujemy tego kodu w pliku moja.m, korzystamy z tej funkcji wywołując ją z linii komend | ||
+ | <source lang="matlab">z = moja(0, pi) | ||
+ | z = - 1 | ||
+ | </source> | ||
+ | W plikach *.m umieszcza się zwykle bardziej rozbudowane funkcje. Istnieje możliwość definiowania własnych funkcji bezpośrednio w linii komend, bez zapisywania do *.m pliku – nazywamy ją wówczas funkcją '''inline'''. W praktyce tym sposobem definiuje się funkcje o niewielkim kodzie. W przykładzie |
Wersja z 16:22, 24 mar 2010
Środowisko Matlab
MATLAB jest obecnie bardzo rozbudowanym narzędziem obliczeniowo-programistycznym, w tym rozdziale przedstawię tylko wybrane, podstawowe elementy środowiska MATLAB.
Spis treści |
Informacje podstawowe
MATLAB jest obecnie bardzo rozbudowanym narzędziem obliczeniowo-programistycznym, w tym podrozdziale przedstawię tylko wybrane, podstawowe elementy środowiska MATLAB.
Po uruchomieniu MATLAB w oknie pojawia się znak
>>
(ang. prompt) zachęcający do pisania instrukcji. Napiszmy
>> 3 + 4 + 3
Po wpisaniu instrukcji należy nacisnąć klawisz Enter/Return, co oznacza polecenie jej wykonania przez interpreter MATLAB. Wówczas na ekranie pojawi się wynik działania, przypisany do standardowej nazwy ans (ang. answer czyli odpowiedź)
ans = 10
Zakończenie instrukcji średnikiem powoduje, iż rezultat jej działania nie pojawi się na ekranie, jest to wygodne, gdy np. nie interesują nas pośrednie wyniki sekwencji obliczeń.
Instrukcję składającą sie z bardzo dużej liczby wyrażeń, znaków, itp - przez to niewygodną do manipulowania, nieczytelną - możemy dowolnie, według naszego uznania, podzielić na większa liczbę linii. Po napisaniu trzech kropek ... w dogodnym dla nas miejscu, przechodzimy do nowej linii i piszemy dalej. Interpreter potraktuje wyrażenie zapisane w dwóch lub więcej liniach, jako jedną całość. Z drugiej strony, w jednej linii możemy napisać kilka instrukcji, wystarczy je oddzielać przecinkami np.
>> 2 + 4 + 10, 100 – 30, 1000 – 1, 4 + 4 – 8
Na ekranie pojawi się sekwencja wyników,
ans = 16
ans = 70
ans = 999
ans = 0
Do nawigacji pomiędzy poprzednimi i następnymi instrukcjami służą klawisze oznaczone strzałkami (góra, dół). Zadania wykonywane przez MATLAB można w każdej chwili zatrzymać wywołując wbudowaną funkcję pause - do momentu naciśnięcia klawisza dowolnego znaku - ,pause(n) zatrzymać na n sekund, definitywnie przerwać naciskając kombinację klawiszy ctrl c. Instrukcja cls czyści okno, quit lub exit powoduje wyjście z MATLAB.
Znak % (procent) rozpoczyna krótki komentarz, czyli wszystkie znaki napisane po nim, aż do końca linii, są pomijane przez interpreter, służą tylko programiście do opisu.
Zmienne w MATLAB nie wymagają wcześniejszego deklarowania, tworzone są „w locie”, w momencie ich pierwszego użycia (inicjalizacji, nadania wartości), np. instrukcja
>> x = 1.4
powoduje utworzenie zmiennej o nazwie x, jej wartość wynosi 1.4. Dokładniej mówiąc, interpreter rezerwuje odpowiednią ilość komórek pamięci (bajtów) dla zmiennej o nazwie x, do tych komórek pamięci wprowadza wartość, którą w systemie dziesiętnym przedstawiamy jako 1.4. Nazwa zmiennej może zawierać tylko litery alfabetu łacińskiego (duże lub małe), cyfry od 0 do 9, znak podkreślenia, musi przy tym zaczynać się od litery. Naturalnie, nazwa zmiennej nie może się pokrywać ze słowami kluczowymi MATLAB. Wartość danej zmiennej można zobaczyć podając jej nazwę i naciskając Enter, lub korzystając z funkcji disp( ), np. W MATLAB wszystkie zmienne są traktowane jako tablice, zmienna skalarna traktowana jest jako tablica jednoelementowa.
MATLAB operuje na liczbach zmiennoprzecinkowych podwójnej precyzji. Domyślnie wyświetla jednak tylko 4 cyfry po kropce, aby zapewnić czytelność - taki format nazywany jest w MATLAB format short. Użytkownik może ustalić inny format wyświetlania liczb, pokażę to na przykładzie predefiniowanej w MATLAB zmiennej o nazwie pi:
>> format long % pokazywać liczby z precyzją 14 miejsc po kropce dziesiętnej
>> pi
>> 3.14159265358979
>> format longE % precyzja 14 miejsc po kropce, reprezentacja potęgowa
>> pi
>> 3.141592653589793e+000 . Przy definiowaniu zmiennej łańcuchowej (tekstowej) korzysta się z pojedynczych apostrofów, np.
>> napis = ‘Hej !! ‘
>> napis
>> Hej !!
Zmienna typu łańcuchowego może zawierać nazwę instrukcji, taką instrukcję uruchamia funkcja eval( ), np.
>> napis = ‘cos(sin(0)) ‘
>> eval(napis)
>> ans = 1
Funkcja input( ) służy do komunikacji z użytkownikiem programu, wypisuje ona na ekran treść swojego argumentu (łańcuch znaków) i MATLAB oczekuje na reakcję użytkownika. Oto jej typowe zastosowanie
>> n = input( ‘Wpisz n: ‘ )
>> Wpisz n: % system czeka na wpisanie wartości n
Po wpisaniu za dwukropkiem np. liczby 10 i jak zwykle naciśnięciu Enter, zobaczymy na ekranie wynik podstawienia
>> n = 10
Drugi przykład,
>> pierwszy_atom = input (‘ Nazwa atomu numer jeden: ‘ , ‘s’ )
>> Nazwa atomu numer jeden: % system czeka na wpisanie nazwy
Wpisanie drugiego parametru funkcji input( ) w postaci ‘s’ oznacza, że interpreter ma potraktować wprowadzoną daną jako ciąg znaków. Pisząc za dwukropkiem np. tlen dostajemy
>> pierwszy_atom = tlen
Funkcja num2str( ) zamienia liczbę na ciąg znaków, str2num( ) zamienia ciąg znaków na liczbę.
Komenda who powoduje wyświetlenie nazw wszystkich zmiennych zdefiniowanych w bieżącym programie (przestrzeni roboczej), whos podaje listę zmiennych wraz z dodatkowymi szczegółami (precyzja, rozmiar macierzy). Usunięcie wszystkich zmiennych powoduje komenda clear, wybraną zmienną, np o nazwie a, usuwamy instrukcją clear a.
Użycie komendy diary podczas sesji MATLAB powoduje, iż od tego momentu cały przebieg aktualnej sesji MATLAB jest zapisywany w pliku o nazwie diary. Komenda,
>> diary moja_sesja
zapisuje przebieg sesji w pliku, który nazwałem moja_sesja. Rejestrację sesji zawiesza komenda diary off, diary on nakazuje wznowienie rejestracji sesji.
MATLAB posiada liczny arsenał funkcji standardowych, np. polecenie
>> exp(1)
kreuje odpowiedź
ans = 2.7183
Kolejny przykład,
>> exp(sin(0)) + cos(0)
ans = 2
Dotychczasowe przykłady były wypisywane bezpośrednio, w wierszu poleceń po znaku zachęty. Takie postępowanie jest czytelne, niezbyt uciążliwe i efektywne tylko przy niewielkiej sekwencji instrukcji, zajmujących kilka linii. W praktyce kod programu wygodniej przygotowywać, modyfikować bądź poprawiać w oddzielnym pliku. Jeżeli zapiszemy ten plik z rozszerzeniem *.m, na przykład moj_kod.m, to MATLAB potraktuje go jako skrypt, tzw. m – plik. Wpisanie w linii komend nazwy m-pliku (bez rozszerzenia)
>> moj_kod
powoduje wykonywanie wszystkich instrukcji zapisanych w tym pliku, jak gdyby były one wpisywane po kolei w linii poleceń.
MATLAB oferuje nie tylko szeroką paletę funkcji standardowych, ale umożliwia tworzenie przez programistę jego własnych funkcji. Definicję takiej funkcji należy koniecznie umieścić w pliku o rozszerzeniu *.m, podobnie jak w przypadku skryptu. Różnica polega na tym, iż nazwa m – pliku skryptowego może być dowolna, natomiast nazwa m – pliku zawierającego funkcję definiowaną samodzielnie przez programistę musi by taka sama, jak nazwa funkcji. Definicja własnej funkcji musi zaczynać się od słowa kluczowego function i dalej zawiera:
function wynik = moja(x, y) % oblicza kombinację funkcji trygonometrycznych wynik = sin(x) + cos(y) – sin(y) * cos (x); end
Po zapisujemy tego kodu w pliku moja.m, korzystamy z tej funkcji wywołując ją z linii komend
z = moja(0, pi) z = - 1
W plikach *.m umieszcza się zwykle bardziej rozbudowane funkcje. Istnieje możliwość definiowania własnych funkcji bezpośrednio w linii komend, bez zapisywania do *.m pliku – nazywamy ją wówczas funkcją inline. W praktyce tym sposobem definiuje się funkcje o niewielkim kodzie. W przykładzie