Programowanie Środ Matlab

Z Skrypty dla studentów Ekonofizyki UPGOW

Ś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