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