METODY KOMPUTEROWE W OBLICZENIACH INŻYNIERSKICH ĆWICZENIE NR 5 SKRYPTY W PROGRAMIE KOMPUTEROWYM MATLAB Dr inż. Sergiusz Sienkowski
ĆWICZENIE NR 5 Skrypty w programie komputerowym Matlab 5.1. Cel ćwiczenia Celem ćwiczenia jest opanowanie umiejętności tworzenia i uruchamiania skryptów w programie komputerowym Matlab. 5.2. Tworzenie i uruchamianie skryptów Skryptem nazywać będziemy plik tekstowy zawierający polecenia i funkcje Matlaba. Zadaniem skryptów jest ułatwienie opracowywania w Matlabie rozbudowanych instrukcji zawierających kombinację poleceń i funkcji. W celu utworzenia skryptu należy nacisnąć przycisk New Script znajdujący się na pasku narzędziowym zakładki HOME lub wybrać z klawiatury kombinację Ctrl+N. W wyniku tej operacji wywołane zostanie okno edytora skryptu. Okno to zostanie osadzone w głównym oknie programu Matlab.
Ćwiczenie 5. Skrypty w programie komputerowym Matlab 77 Wyświetlone zostaną również dodatkowe zakładki EDITOR, PUBLISH i VIEW zawierające narzędzia umożliwiające obsługę skryptu i edycję zawartego w nim kodu. W celu zapisu skryptu na dysku komputera lub zapisu postępów w jego opracowywaniu, należy nacisnąć przycisk Save na pasku narzędziowym zakładki EDITOR lub wybrać z klawiatury kombinację Ctrl+S. Podczas pierwszego zapisu skryptu, wyświetlone zostanie okno Select File for Save As umożliwiające zapis skryptu we wskazanym miejscu na dysku komputera.
78 Metody komputerowe w obliczeniach inżynierskich Każdy kolejny zapis skutkuje zachowaniem aktualnej zawartości skryptu. Po pierwszym zapisie skryptu na dysku, każde wyjście z okna skryptu do innego okna programu Matlab skutkuje automatycznym zapisaniem zawartości skryptu. Skrypty należą do kategorii m-plików. Zapisuje się je do plików z rozszerzeniem *.m. Ze względu na sposób uruchamiania skryptów, zapisywane są one domyślnie w bieżącym katalogu programu Matlab. Skrypt utworzony w Matlabie uruchamia się w oknie Command Window wpisując po znaku zachęty >> nazwę utworzonego skryptu bez rozszerzenia *.m >>nazwa_skryptu <Enter> Jeżeli skrypt zapisany został w innym miejscu niż bieżący katalog Matlaba, to w celu uruchomienia skryptu należy za pomocą paska narzędziowego, widocznego na poniższym rysunku lub polecania cd('sciezka_do_katalogu'), przejść do katalogu ze skryptem. Można również wykorzystać funkcję path i udostępnić programowi Matlab katalog, w którym skrypt został zapisany. W celu udostępnienia katalogu i uruchomienia skryptu należy wykonać następujące polecenia >>path(path,'sciezka_do_katalogu') <Enter> >>nazwa_skryptu <Enter> Funkcja path listuje ścieżki do katalogów Matlaba. Zagnieżdżenie tej funkcji spowoduje, że ścieżka do katalogu ze skryptem zostanie dołączona do listy ścieżek do katalogów Matlaba.
Ćwiczenie 5. Skrypty w programie komputerowym Matlab 79 Przykład. Utworzenie i uruchomienie skryptu skrypt5_1.m umożliwiającego wyświetlanie komunikatu 'Hello World!'. Powyższy skrypt składa się z trzech linii. W linii nr 1 znajduje się komentarz zaczynający się od znaku procenta %. Zastosowanie znaku % powoduje, że tekst, który po nim następuje nie będzie traktowany, jako wykonywalna cześć skryptu. W linii nr 2 znajduje się polecenie clc, którego zadaniem jest wyczyszczenie okna Command Window po uruchomieniu skryptu. W linii nr 3 znajduje się funkcja disp, która umożliwia wyświetlenie komunikatu 'Hello World!'. Uwaga, każda linia wykonywalnej części skryptu powinna zostać zakończona średnikiem. Wykonywanie poleceń i funkcji w skrypcie następuje od góry, w prawo i do dołu. Ponieważ skrypt skrypt5_1.m został zapisany w katalogu bieżącym, to jego uruchomienie polega na wpisaniu w oknie Command Window po znaku zachęty >> nazwy skryptu i naciśnięciu Enter na klawiaturze. Uruchomienie aktywnego skryptu możliwe jest również z zastosowaniem przycisku Run znajdującego się na pasku narzędziowym umieszczonym w zakładce EDITOR lub po naciśnięciu na klawiaturze F5. W wyniku uruchomienia skryptu w oknie Command Window wyświetlony zostanie komunikat 'Hello World!'
80 Metody komputerowe w obliczeniach inżynierskich 5.3. Wczytywanie danych do skryptu i ich konwersja W celu wczytania danych do skryptu i ich konwersji należy zastosować polecenia (funkcje) przedstawione w poniższej tabeli. Wczytywanie danych do skryptu następuje po jego uruchomieniu. Konwersja danych następuje w trakcie działania skryptu. Polecenie (funkcja) Opis a=input('tekst') Wprowadzenie do skryptu danej liczbowej i podstawienie jej do zmiennej a. Po uruchomieniu skryptu wyświetlony zostanie tekst 'tekst' (np. 'Podaj wartość liczby a='), po czym na końcu tekstu nastąpi odczekanie na wprowadzenie danej liczbowej, która zostanie podstawiona do zmiennej a, wprowadzenie danej należy potwierdzić naciskając Enter na klawiaturze
Ćwiczenie 5. Skrypty w programie komputerowym Matlab 81 a=input('tekst','s') Wprowadzenie do skryptu łańcucha znaków i podstawienie go do zmiennej a. Po uruchomieniu skryptu wyświetlony zostanie tekst 'tekst', po czym nastąpi odczekanie na wprowadzenie łańcucha znaków, który zostanie podstawiony do zmiennej a, wprowadzenie danej należy potwierdzić naciskając Enter na klawiaturze b=eval(a) Jeżeli zmienna a przechowuje łańcuch znaków zawierający nazwy poleceń i/lub funkcji, to funkcja eval umożliwi ich wyodrębnienie i wykonanie, otrzymany wynik zostanie podstawiony do zmiennej b num2str(a) Zamiana liczby rzeczywistej a na łańcuch znaków str2num('tekst') Zamiana łańcucha znaków 'tekst' odpowiadającego liczbie rzeczywistej na tę liczbę. sscanf('tekst','specyfikator') Zamiana łańcucha znaków 'tekst' na wektor wierszowy zawierający elementy otrzymane zgodnie z przyjętym specyfikatorem formatowana
82 Metody komputerowe w obliczeniach inżynierskich Specyfikator Opis %f Liczby rzeczywiste %d Liczby całkowite %u Liczby całkowita bez znaku %e Liczba rzeczywista w notacji naukowej %s Ciąg znaków %c Pojedynczy znak Przykład. Utworzenie i uruchomienie skryptu skrypt5_2.m umożliwiającego wykonanie podstawowych operacji arytmetycznych na dwóch liczbach rzeczywistych wprowadzonych z klawiatury. Powyższy skrypt składa się z sześciu linii. W linii nr 3 i 4 znajduje się funkcja input umożliwiająca wprowadzenie danych z klawiatury po uruchomieniu skryptu. W linii nr 5 i 6 znajduje się funkcja disp, której zadaniem jest wyświetlenie wyników operacji arytmetycznych wykonanych na dwóch liczbach rzeczywistych. Argumentem funkcji disp jest czteroelementowy wektor wierszowy. Pierwszy i trzeci element wektora to łańcuchy znaków, drugi i czwarty element to funkcja num2str,
Ćwiczenie 5. Skrypty w programie komputerowym Matlab 83 której zadaniem jest konwersja liczby rzeczywistej, będącej wynikiem operacji arytmetycznej, na łańcuch znaków. Przykład. Utworzenie i uruchomienie skryptu skrypt5_3.m umożliwiającego wyznaczenie średniej z elementów wektora wierszowego wprowadzonych za pomocą klawiatury. Powyższy skrypt składa się z pięciu linii. W linii nr 3 znajduje się funkcja input umożliwiająca wprowadzenie z klawiatury łańcucha znaków T zawierającego elementy na podstawie, których utworzony zostanie wektor wierszowy X. W linii nr 4 znajduje się dwuparametrowa funkcja sscanf. Drugi parametr tej funkcji to specyfikator formatowania '%f' dzięki któremu nastąpi zamiana łańcucha znaków T na wektor wierszowy X zawierający liczby rzeczywiste. W linii nr 5 znajduje się funkcja disp, której zadaniem jest wyświetlenie komunikatu na który składają się elementy dwuelementowego wektora wierszowego. Pierwszym elementem tego wektora jest łańcuch znaków. Drugi element to funkcja konwertująca na łańcuch znaków wynik obliczania wartości średniej z elementów wektora X. Wartość średnia jest obliczana z zastosowaniem funkcji mean.
84 Metody komputerowe w obliczeniach inżynierskich Przykład. Utworzenie i uruchomienie skryptu skrypt5_4.m umożliwiającego obliczenie wartości dowolnej funkcji jednoargumentowej. Powyższy skrypt składa się z sześciu linii. W linii nr 3 znajduje się polecenie umożliwiające wprowadzenie za pomocą funkcji input wzoru jednoargumentowej funkcji w postaci łańcucha znaków. Wprowadzony z klawiatury łańcuch znaków zostaje podstawiony do zmiennej funkcja. Argument wprowadzanej funkcji musi zostać oznaczony przez x. Wynika to z faktu, że dalsza część skryptu zawiera polecenia, które zostaną wykonane tylko wówczas, gdy argument funkcji zostanie w ten sposób oznaczony. W linii nr 4 znajduje się polecenie umożliwiające zadanie wartości zmiennej x w postaci liczby rzeczywistej. W linii nr 5 znajduje się funkcja eval, która umożliwi obliczenie wartości funkcji dla zadanej wartości x. Wynik obliczeń jest podstawiany do zmiennej wynik. W linii szóstej znajduje się funkcja disp, której zadaniem jest wyświetlenie wzoru wprowadzonej funkcji i wartość tej funkcji dla argumentu x. 5.4. Walidacja skryptów Matlab oferuje narzędzia umożliwiające sprawdzenie kodu skryptu w celu wyeliminowania występujących w nim błędów. Poniżej przedstawiono przykład skryptu zawierającego błędy składni kodu, które można wykryć i usunąć przy pomocy narzędzi Matlaba.
Ćwiczenie 5. Skrypty w programie komputerowym Matlab 85 Powyższy skrypt zawiera dwa błędy w linii nr 2 i jeden błąd w linii nr 3. Jeden z błędów w linii nr 2 wykrywany jest w czasie rzeczywistym. Sygnalizowane jest to umieszczeniem żółtopomarańczowego znacznika w linii, w której występuje błąd. Wykryty błąd dotyczy braku średnika na końcu polecenia. Po wskazaniu myszką miejsca, w którym znajduje się znacznik, wyświetlony zostanie komunikat błędu wraz z propozycją jego naprawy. Po naciśnięciu przycisku Fix wykryty błąd zostanie naprawiony. Drugi błąd, który występuje w linii nr 2 dotyczy funkcji, której zadaniem jest wprowadzanie danych do skryptu. W tym przypadku nazwa zastosowanej funkcji jest nieprawidłowa. Podobnie jest z trzecim błędem występującym w linii nr 3. Nazwa funkcji, której zadaniem jest wyświetlenie wartości liczbowej zmiennej a jest nieprawidłowa. Błędy w nazwach funkcji nie są wykrywane w czasie rzeczywistym. Aby je wykryć należy w prawym górnym rogu okna skryptu kliknąć na przycisk Show Editor Actions i rozwiniętego menu wybrać opcje Show Code Analyzer Raport i Show Dependency Report.
86 Metody komputerowe w obliczeniach inżynierskich W wyniku wybrania tych opcji utworzone zostaną raporty z informującymi o błędach występujących w skrypcie. Wygenerowane raporty pokazują, że Matlab nie rozpoznaje w skrypcie funkcji dip i imput. Takie funkcje mogły w ogóle nie zostać zaimplementowane, nie są wbudowane w Matlaba lub noszą niewłaściwą nazwę. W rozważanym przypadku, powstałe błędy związane są niewłaściwymi nazwami funkcji disp i input.
Ćwiczenie 5. Skrypty w programie komputerowym Matlab 87 Wykrycie błędów występujących w skrypcie odbywa się również po uruchomieniu skryptu za pomocą narzędzia Run znajdującego się na pasku narzędziowym w głównym oknie programu Matlab. W przypadku skryptu z powyższego przykładu, w oknie Command Window wyświetlony zostanie komunikat o błędzie dotyczącym funkcji imput, a po jego usunięciu i ponownym uruchomieniu skryptu, wyświetlony zostanie kolejny komunikat o błędzie dotyczącym funkcji dip. Matlab umożliwia analizowanie kodu skryptu z zastosowaniem wbudowanego debuggera 1. Działanie debuggera zostanie wyjaśnione na przykładzie poniższego skryptu. Przykład. Utworzenie i uruchomienie skryptu skrypt5_6.m umożliwiającego obliczenie wartości funkcji f(x)=a x 2 +b x+c w przedziale [-10, 10], gdzie a, b i c to liczby rzeczywiste wprowadzane z klawiatury. 1 Debugger to program umożliwiający dynamiczną analizę skryptów. Taka analiza polega na sprawdzaniu działania fragmentów lub całości kodu, oraz odnajdywaniu i identyfikacji występujących w nim błędów.
88 Metody komputerowe w obliczeniach inżynierskich W celu wykorzystania debggura do analizy kodu skryptu należy wykonać poniższe kroki. 1. Umieścić w skrypcie przynajmniej jeden znacznik, dzięki któremu możliwe będzie skorzystanie z narzędzi debggura. W tym celu należy kliknąć w znak "-" znajdujący obok numeru linii skryptu. W wyniku tej operacji utworzony zostanie znacznik w postaci czerwonej kropki. Powtórzenie tej operacji w innym miejscu skryptu, spowoduje umieszczenie kolejnego znacznika. W skrypcie z przykładu znaczniki zostały umieszczone w liniach nr 3 i 8. 2. Uruchomić skrypt za pomocą narzędzia Run z paska narzędziowego w zakładce EDITOR. Jeżeli w skrypcie umieszczone zostały znaczniki, to w tej samej zakładce wyświetlone zostaną narzędzia debuggera widoczne na poniższym rysunku. Znaczenie narzędzi przedstawiono w poniższej tabeli.
Ćwiczenie 5. Skrypty w programie komputerowym Matlab 89 Narzędzie Opis Przejście do kolejnego znacznika w kodzie, wszystkie polecenia między znacznikami zostaną wykonane Przejście do kolejnej linii kodu, wszystkie polecenia umieszczone w linii kodu zostaną wykonane Przejście do zagnieżdżonego fragmentu kodu Wyjście z zagnieżdżonego fragmentu kodu Wyłączenie programu debuggera Po uruchomieniu skryptu z przykładu, nastąpi wykonane polecenia clc, i zatrzymanie wykonywania skryptu w miejscu wskazywanym zieloną strzałką w oczekiwaniu na zastosowanie narzędzi debuggera. W tym samym czasie okno Command Window przyjmie postać widoczną na poniższym rysunku.
90 Metody komputerowe w obliczeniach inżynierskich 3. Zastosować narzędzia debuggera w celu przeanalizowania kodu skryptu. W przykładzie, w wyniku zastosowania narzędzia Step, nastąpi realizacja polecenia z linii nr 3 i przejście do linii nr 4 skryptu. Będzie temu towarzyszyła konieczność podania w oknie Command Window wartości liczbowej, która zostanie podstawiona pod zmienną a. Uwaga, jeżeli w linii zawierającej funkcję num2str zastosowane zostanie narzędzie Step In, to nastąpi przejście do sprawdzenia zagnieżdżonego kodu funkcji num2str, który umieszczony jest w m-pliku Matlaba o nazwie num2str.m. Uwaga, jeżeli w linii zawierającej znacznik zastosujemy narzędzie Continue, to nastąpi przejście do kolejnego znacznika, przy czym wszystkie polecenia między znacznikami zostaną wykonane. Kontynuowanie stosowania narzędzia Step spowoduje realizację poleceń umieszczonych w kolejnych liniach skryptu, aż do wyświetlenia wartości funkcji.
Ćwiczenie 5. Skrypty w programie komputerowym Matlab 91 5.5. Program ćwiczenia 1. Utworzyć w Matlabie skrypt o nazwie skrypt5_1.m, który po uruchomieniu wyświetli w oknie Command Window informacje o podgrupie laboratoryjnej, zgodnie z poniższym schematem "Metody komputerowe w obliczeniach inżynierskich Dane osobowe: Anna Nowak, Jan Kowalski Grupa: 11 AiR-SP/A Podgrupa laboratoryjna nr: 1". 2. Utworzyć w Matlabie skrypt o nazwie skrypt5_2.m, który po uruchomieniu będzie pobierał dane osobowe, nazwę grupy i numer podgrupy, a następnie wyświetli w oknie Command Window informacje o podgrupie laboratoryjnej zgodnie ze schematem przedstawionym w punkcie 1. 3. Utworzyć w Matlabie skrypt o nazwie skrypt5_3.m, który po uruchomieniu wyświetli w oknie Command Window wyniki obliczania rezystancji zastępczej układu a) szeregowo połączonych rezystorów, b) równolegle połączonych rezystorów. Rezystancje rezystorów wprowadzić do skryptu za pomocą łańcucha znaków. Wskazówka. Do obliczenia rezystancji zastępczej zastosować funkcję sum oraz tablicowe odwracanie wektora.
92 Metody komputerowe w obliczeniach inżynierskich 4. Utworzyć w Matlabie skrypt o nazwie skrypt5_4.m, który wyświetli w oknie Command Window wynik obliczania prądu elektrycznego płynącego przez układ szeregowo połączonych rezystorów umieszczonych w zamkniętym obwodzie elektrycznym. Wartość prądu obliczyć korzystając z Prawa Ohma na podstawie spadku napięcia na układzie szeregowo połączonych rezystorów i rezystancji zastępczej tego układu. 5. Utworzyć w Matlabie skrypt o nazwie skrypt5_5.m, który po uruchomieniu wyświetli w oknie Command Window wyniki obliczania a) wartości średniej, b) wartości skutecznej, c) wartości międzyszczytowej, na podstawie wyników pomiaru napięcia elektrycznego multimetrem cyfrowym. Wyniki pomiaru napięcia wprowadzić do skryptu za pomocą łańcucha znaków. Wskazówka. Zastosować do obliczeń funkcję mean oraz tablicowe potęgowanie wektora. Literatura [1] Luzar M., Metody komputerowe w obliczeniach inżynierskich, Wykład dla Studentów Automatyki i Robotyki, WIEA, UZ, www.issi.uz.zgora.pl [2] Czajka M., MATLAB. Ćwiczenia, Helion 2005 [3] Mrozek B., Mrozek Z., MATLAB i Simulink. Poradnik użytkownika, Helion 2004