Instrukcja

Transkrypt

Instrukcja
Katedra Elektrotechniki Teoretycznej i Informatyki
Przedmiot: Zintegrowane Pakiety Obliczeniowe W
Zastosowaniach Inżynierskich
Numer ćwiczenia:
3
Temat: Skrypty i funkcje w Matlabie
1. SKRYPTY I FUNKCJE
MATLAB jest zintegrowanym interaktywnym środowiskiem obliczeniowym jak również
i językiem programowania. Znaczy to, że można wykonywać pojedyncze komendy jak również
pisać i uruchamiać programy. Bardzo istotny jest fakt, że w obu przypadkach posługujemy się
dokładnie takimi samymi poleceniami.
Pliki zawierające polecenia Matlaba nazywamy m-plikami. M-pliki można tworzyć
korzystając z dowolnego edytora tekstowego, lecz najwygodniej jest posługiwać się
wbudowanym wewnętrznym edytorem. Edytor wywołujemy komendą edit.
Rozróżniamy dwa podstawowe typy m-plików:
skrypty, w przypadku których nie można deklarować wejściowych i wyjściowych
parametrów, a operują one na zmiennych znajdujących się w pamięci Matlaba (główny
obszar roboczy).
funkcje, w przypadku których deklarować można parametry wejściowe i wyjściowe, ale
zmienne deklarowane lokalnie nie są dostępne za zewnątrz funkcji.
M-pliki MUSZĄ być tworzone we własnych katalogach użytkowników. NIGDY NIE
WOLNO TWORZYĆ WŁASNYCH PLIKÓW W GŁÓWNYM KATALOGU MATLABA.
M-pliki można uruchamiać z bieżącego katalogu lub z katalogów zapisanych w ścieżce dostępu.
W przypadku gdy w różnych katalogach występują m-pliki o tej samej nazwie, wykonywany jest
ten który występuje w katalogu wymienionym wcześniej na ścieżce dostępu.
Skrypty
W przypadku wpisania komendy będącej nazwą skryptu Matlab wykonuje kolejne
polecenia zawarte w pliku. Skrypty mogą operować na zmiennych znajdujących się w głównym
obszarze roboczym Matlaba lub też zmienne te mogą być tworzone w samym skrypcie. Zmienne
utworzone w skrypcie pozostają w głównym obszarze roboczym.
Przykład 1.
Utwórz plik myscript.m który zawiera następujące komendy Matlaba:
% This is a comment line, you can write here anything you like
[x y] = meshgrid(-3:.1:3, -3:.1:3);
z = x.^2 - y.^2;
% Now lets plot a function z and calculate their minimum and maximum values
mesh(x,y,z);
1
xlabel(‘X’)
ylabel(‘Y’)
colormap jet
az=34; el=10;
view(az,el);
minVal = min(min(z)); maxVal = max(max(z));
who
W tym celu należy kolejno:
1. Uruchomić system Matlab, a następnie wydać polecenie edit
2. Wprowadzić w edytorze powyższe polecenia
3. Zapisać plik we własnym katalogu roboczym pod nazwą myscript.m
Wpisanie komendy
myscript
w oknie interpretera spowoduje wykonanie wszystkich komend znajdujących się w pliku.
Utworzony zostanie również wykres, który wyświetlony zostanie po zakończeniu wykonania
całego skryptu. Aby wyświetlić aktualną postać wykresu zaraz po wykonaniu komendy należy
stosować polecenie drawnow.
Zmienne x, y, z oraz az, el pozostaną w głównym obszarze roboczym i możliwe jest ich
późniejsze wykorzystanie. Aby usunąć wszystkie zmienne z głównego obszaru roboczego należy
wykonać komendę clear all, natomiast żeby usunąć określoną zmienną należy zastosować
polecenie clear z podaniem nazwy zmiennej do usunięcia np. clear x.
Funkcje
Funkcje to m-pliki w przypadku których można zadeklarować wejściowe i wyjściowe
argumenty. NAZWA FUNKCJI I M-PLIKU W KTÓRYM ZOSTANIE ZAPISANA POWINNY
BYĆ IDENTYCZNE.
Funkcje operują na zmiennych lokalnych, które dostępne są jedynie wewnątrz funkcji i nie są
one widoczne w głównym obszarze roboczym. Podobnie, nie są możliwe odwołania do
zmiennych w głównym obszarze roboczym z wnętrza funkcji. Jeśli zachodzi konieczność
dostępu do zmiennej zadeklarowanej w głównym obszarze roboczym, a nie chcemy przekazywać
jej jako argument to możemy się posłużyć poleceniem global. Poniżej znajduje się przykład
funkcji o nazwie myfun.
Przykład 2.
function [minVal, maxVal] = myfun(x,y,z)
% This function plots a variable z and calculates minimum and maximum of z
mesh(x,y,z);
xlabel(‘X’)
ylabel(‘Y’)
colormap(‘jet’) ;
az=34; el=10;
view(az,el);
minVal = min(min(z)); maxVal = max(max(z));
Pierwsza linia m-pliku zawierającego definicję funkcji musi zawierać słowo kluczowe function.
Polecenie to definiuje nazwę funkcji oraz listę wejściowych i wyjściowych argumentów. W
przypadku przedstawionej powyżej funkcji są to wejściowe argumenty (x,y,z) oraz argumenty
wyjściowe (minVal, maxVal). Linie występujące bezpośrednio po linii zawierającej polecenie
function, aż do pierwszej linii pustej lub z dowolną komendą mogą zawierać komentarz, który
zostanie wyświetlony w momencie wydania komendy help myfun.
2
Pozostałe linie zawierają komendy wykonywane po wywołaniu funkcji. Wszystkie zmienne
utworzone w funkcji lub będące argumentami wejściowymi czy wyjściowymi są lokalne w danej
funkcji.
Zdefiniujmy funkcję myfun, w tym celu należy:
1. Wywołać edytor Matlaba komendą edit
2. Wpisać kolejne polecenia funkcji do pliku
3. Zapisać funkcję w katalogu roboczym pod nazwą myfun.m
Teraz możliwe jest użycie nowej funkcji w skrypcie Przykładowy skrypt o nazwie
myscript2 przedstawiony został poniżej:
Przykład 3.
clear all
[x1 y1] = meshgrid(-3:.1:3, -3:.1:3);
z1 = x1.^2 + y1.^2;
% plot a function z1 and calculate their minimum and maximum values by using
% newly defined function
[minValZ, maxValZ] = myfun(x1, y1, z1);
who
Po zapisaniu pliku ze skryptem możemy go uruchomić wpisując polecenie myscript2 w oknie
poleceń Matlaba. W odróżnieniu od poprzednio napisanego skryptu, teraz zmienne (az,el) nie są
dostępne w głównym obszarze roboczym.
Przykład 4.
Stwórz skrypt zawierający poniższe polecenia i zapisz go pod nazwą oblicz.m:
g=[0.6 1.5 2.3 -0.5; ...
8.2 0.5 -0.1 -2.0; ...
5.7 8.2 9.0 1.5; ...
0.5 0.5 2.4 0.5; ...
1.2 -2.3 -4.5 0.5];
a=g(:,2)
b=g(4,:)
c=g(1,1)+g(2,1)
d=g
e=g.*0.5
Sprawdź działanie skryptu i zobacz co znajduje się w głównym obszarze roboczym po jego
uruchomieniu. Wykorzystaj do tego celu polecenia who lub whos
Następnie dokonaj modyfikacji pliku skryptu na plik funkcji i zapisz go pod nazwą foblicz.m:
function foblicz(g)
a=g(:,2)
b=g(4,:)
c=g(1,1)+g(2,1)
d=g
e=g.*0.5
Ćwiczenia
Dany jest skrypt obliczający wartości średnie, minimalne i maksymalne dwóch macierzy.
Dokonaj modyfikacji skryptu do funkcji tak, by funkcja przyjmowała tablice, a zwracała tylko
ich wartości średnie.
3
A=[1 12 14 2 4 8 10; 1 2 0 0 5 3 8];
B=A.*1.5;
%obliczenia wartosci sredniej dla macierzy A
wartMaxA=max(max(A));
wartMinA=min(min(A));
[ilosc_elemWA,ilosc_elemKA]=size(A);
wartSrA=sum(A(:))/(ilosc_elemWA*ilosc_elemKA);
%obliczanie wartosci sredniej dla macierzy B
wartMaxB=max(max(B));
wartMinB=min(min(B));
[ilosc_elemWB,ilosc_elemKB]=size(B);
wartSrB=sum(B(:))/(ilosc_elemWB*ilosc_elemKB);
4