WPROWADZENIE_DO_MATLABA_2.pdf

(324 KB) Pobierz
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
Tworzenie skryptów (m-plików)
Skrypt jest plikiem tekstowym zawierającym zestaw funkcji i poleceń Matlaba. Pliki skryptowe
mają rozszerzenie .m . Pliki skryptowe można tworzyć w każdym edytorze tekstowym.
Najwygodniej wykorzystać edytor Matlaba. Dostęp do edytora jest możliwy przez File -> New->
M-file lub przez odpowiednią ikonę.
Opisywanie skryptów
Każdy skrypt powinien mieć krótki opis zawartości i działania. Opis umieszcza się za znakiem
%. Ze względów praktycznych opis należy umieszczać za podwójnym znakiem procenta (%%).
Począwszy od Matlaba 7 znak %% oznacza nowy fragment kodu. Znaki %% oraz % są też
inaczej traktowane w czasie konwersji skryptu do html-a. Opis pliku można wywołać w
Matlabie przy pomocy polecenia help nazwa_skyptu. Za opis pliku traktowane są pierwsze linie
komentarza nieprzerwane liniami innego typu.
Przykład:
%% To jest test opisu skryptu piewszy_skrypt.m
%% Jestem w skrypcie % czy widać tę linię? a=5;
% jakaś komenda % czy widać tę linię
Zmienne w skryptach Matlaba
Skrypty do przechowywania zmiennych używają przestrzeni roboczej Matlaba. Z jednej strony
nie trzeba definiować mu zmiennych, ale istnieje niebezpieczeństwo użycia i zamazania
zmiennych istniejących już w przestrzeni roboczej.
Wypisywanie kroków wykonywanych w skrypcie na ekran.
Analogicznie do poleceń wypisywanych w Oknie Poleceń, polecenia wykonywane w skrypcie
dają echo na ekranie. Aby przyśpieszyć pracę skryptów oraz dla zapewnienia uniwersalności
(dobry nawyk dla programistów) należy wszystkie polecenia wykonywać z opcją ukrywania
echa (o ile celem pliku nie jest narysowanie wykresu). Do ukrywania echa stosuje się średnik na
końcu linii polecenia – patrz Temat 7.
Tworzenie funkcji
Funkcja tak jak skrypt jest plikiem tekstowym zawierającym zestaw funkcji i poleceń Matlaba
zaczynać się powinna od słowa kluczowego function . Pliki funkcji mają również rozszerzenie
.m .
UWAGA: Ważne jest aby nazwa funkcji i nazwa pliku były takie same.
Pliki funkcji można tworzyć w każdym edytorze tekstowym. Najwygodniej wykorzystać edytor
Matlaba. Podstawową różnicą miedzy funkcją a skryptem jest sposób przechowywania danych.
Skrypt czyni to w przestrzeni roboczej, natomiast funkcja przechowuje je poza przestrzenia
roboczą, co pozwala na dublowanie nazw zmiennych z przestrzenią roboczą. Inaczej mówiąc
funkcja jest hermetyczna i pokazuje na zewnątrz tylko dane wyjściowe, lub zmienne specjalnie
udostępnione przy pomocy operatora global.
Szkielet funkcji
function [x,y,z]=nazwa_funkcji(a,b,c,d) %% [x,y,z]=nazwa_funkcji(a,b,c,d) %%
Funkcja zwraca 3 wektory x,y,z dla danych parametrów wejściowych a,b,c,d
%%Koniec nazwa_funkcji.m
Funkcja powinna posiadać następujące elementy:
nagłówek funkcji – definicje parametrów funkcji -argumentów, (a, b, c, d – w naszym
szkielecie) oraz parametrów wyjścia -wartości, (x, y, z – w naszym szkielecie);
komentarz z opisem do help-u – opisuje co funkcja robi, opisuje argumenty funkcji oraz
wartości wyjściowe;
analiza liczby parametrów wejściowych – moduł funkcji analizuje liczbę parametrów
wejściowych, czy jest ich wystarczająco dużo do wykonania funkcji i czy ewentualnie można przyjąć
wartości domyślne dla niepodanych parametrów (na razie się tym nie zajmujemy);
analiza własności parametrów wejściowych – moduł funkcji sprawdza czy wartości
wprowadzonych argumentów umożliwiają poprawne wykonanie funkcji ( na razie się tym nie
zajmujemy);
implementacja algorytmu – zapewnia poprawność obliczeń numerycznych i przygotowuje
wartości wyjściowe.
Postępowanie przy pisaniu funkcji
Najwygodniej najpierw napisać skrypt a po przetestowaniu przerobić go w funkcję.
Przykład funkcji i wywołania funkcji
Zawartość pliku przykład_1.m:
function [x,y]=przyklad_1(a,b) %% [x,y]=przyklad_1(a,b) %% Funkcja rysuje wykres
funkcji y=a*cos(x+(pi/b)) %% zwraca 2 wektory x – wektor zmiennej x, y -wektor z
wynikami funkcji %% dla danych parametrów a, b. Funkcja rysuje wykres funkcji w
aktywnym oknie. x = 0:0.001:2*pi; y = a.*cos(x+(pi./b)); plot(x,y); %Koniec
przyklad_1.m
Wywołanie funkcji z Okna Poleceń:
>> przyklad_1(2,2); % rysuje wykres funkcji
>> [ax,ay]=przyklad_1(2,2); % oprócz wykresu wyprowadza do przestrzeni roboczej dwa
wektory ax, ay.
>> parametr1=3;, parametr2=4;
>> [ax,ay]=przyklad_1(parametr1, parametr2); % j.w.
Pod funkcje
W jednym pliku zawierającym funkcję można umieścić więcej funkcji. Przy czym tylko
pierwsza funkcja jest widoczna na zewnątrz. Wszystkie pozostałe funkcje mogą być
wywoływane tylko w obrębie danego pliku.
Temat 65
Instrukcja for
Instrukcja for pozwala na powtarzanie wybranego fragmentu kodu określoną ilość razy.
Szablon instrukcji for (uwaga na przecinek):
.... for zmienna_iterowana = macierz_wartości
, ..... Kod do wielokrotnego powtarzania ....
end
.....
Pętle w wybranych przypadkach mo na przerywać przy pomocy instrukcji break .
Przykład:
a=zeros(10,5); % alokacja pamięci
for i=1:10, for j=1:5, a(i,j)=i*j; end
end
Instrukcja warunkowa if
Instrukcja pozwala na wykonanie jednego z kilku fragmentów kodów zawartego pomiędzy
instrukcjami if , elseif , else . Wybór realizowanego kodu zależy od spełnienia odpowiednich
wyrażeń warunkowych, gdy żadne z nich nie jest spełnione jest wykonywany kod
występujący za operatorem else . Szablon instrukcji if:
If wyra�enie_warunkowe_1
Kod wersja 1
elseif wyra�enie_warunkowe_2
Kod wersja 2
elseif wyra�enie_warunkowe_3
Kod wersja 3
...... else
Kod wersja N
end
Przykład:
%% y=a*x^2+b*x+c a=1; , b=2; , c=3; % definicja stałych
wyznacznik=b^2-4*a*c; % np. wyznacznik równania kwadratowego if
wyznacznik>0
x1=(-b+sqrt(wyznacznik))/(2*a); , x2=(-b-sqrt(wyznacznik))/(2*a); elseif
wyznacznik==0 x1=-b/(2*a); , x2=x1; else x1=NaN; , x2=NaN; end
Instrukcje break i return
Obie instrukcje powodują przerwania wykonywania kodu. Funkcja break powoduje wyskoczenie
z najgłębiej zagnieżdżonej pętli do wyższej pętli. Funkcja return powoduje natychmiastowe
opuszczenie danej funkcji lub skryptu i powrót do miejsca jej wywołania.
Instrukcja switch-case
W przypadku listy znanych argumentów wywołania wygodnie jest skorzystać z funkcji
switch-case. Szablon instrukcji switch-case:
switch p case 1
instrukcja 1 case 2
instrukcja 2
otherwise inna
instrukcja end
Zgłoś jeśli naruszono regulamin