Użyte w poniższych ćwiczeniach elementy języka Matlab opisane są w rozdziale 8 podręcznika [1].
Utwórz folder dla swoich programow (np. na Pulpicie) i nadaj mu jako nazwę swoje nazwisko wraz z literką imienia.
Ustaw ten swój folder jako bieżący folder Matlaba czyli Current Directory (w linii u góry pod menu)
Otwórz EDYTOR MATLABa - z Menu File-New lub File-Open lub ikonami:
i napisz poniższy program (skrypt) obliczania objętości V sześcianu, o danym boku L i zapisz do swojego foldera (ustawionego jako bieżący) do pliku "pr1.m".
a = input('Długość boku L=') V=a^3 a, V |
W programie użyto funkcji input(..), która pozwala wprowadzać z klawiatury zarówno dane liczbowe jak i teksty:
Funkcja input(..). Składnia oraz objaśnienie |
Przykład |
Wprowadzanie danych liczbowych z klawiatury: zmienna = input('żądanie danych') Wyświetla tekst żądania danych a następnie wpisana z klawiatury liczba zostaje podstawiona do zmiennej. Zamiast liczby można wpisać wyrażenie Matlaba |
Przykł.1: F=input('Siła nacisku='); L=input('Długość dźwigni='); Moment_sily=F*L |
Wprowadzanie danych tekstowych z klawiatury: zmienna = input('żądanie danych','s') Wyświetla żądanie danych, oczekuje na wpisanie przez użytkownika |
Przykł.2: znak=input('Tak/Nie - naciśnij T lub N','s') |
Uruchom ten program w Matlabie. Instrukcje trzeba kończyć średnikiem [;] - aby pozbyć się niepotrzebnego wyswietlania "echa" działania każdej instrukcji. Popraw to i sprawdź efekt. Drugą wadą jest bardzo nieeleganckie i mylące wyświetlanie wyników, bez objaśnień (a czy L?).
Postaramy się więc ulepszyć program, korzystając m.in. z operacji na tekstach.
Funkcja disp(..). Składnia oraz objaśnienie |
Przykład |
Wyświetlanie wyników: disp(wyrażenie) Wyświetla wartość wyrażenia arytmetycznego albo tekstowego w sposób podobny jak umieszczenie samego wyrażenia, nie zakończonego średnikiem. |
Przykł.3: disp(['Liczba=',num2str(x),' Kwadrat liczby=',num2str(x^2)]); - w tym przypadku posklejano wyrażenia typu tekstowego (string), umieszczając je we wspólnym nawiasie prostokątnym i oddzielając przecinkami. Przed sklejaniem przekonwertowano wyrażenia o wartościach liczbowych na teksty przy pomocy funkcji num2str(..) |
Program powinien mieć objaśnienia swojej treści czyli KOMENTARZE rozpoczynające się znakiem procentu [%].
Linie komentarzy umieszczone na poczatku pliku (przed instrukcjami) wyświetlą się jako jego opis gdy wpiszemy: "help nazwa_pliku", a dodatkowo program po uruchomieniu też powinien się przedstawić.
Oprócz tego dobrze jest na początku wymazać zmienne z pamięci komendą clear oraz oczyścić ekran komendą clc.
Uzupełnij program dopisując na początku trzy linie jak pokazano niżej.
% Program PR1a.M oblicza objętość sześcianu disp('Obliczanie objętości sześcianu'); clear; clc a = input('Długość boku L='); V=a^3; disp( . . . . . . ); |
W poleceniu disp(..) masz skleić wyprowadzane teksty z liczbami w jedną linię. Jednak w tym celu trzeba najpierw przekonwertować liczby na tekst funkcją num2str(..).
Przeczytaj przykład 3 jak to zrobić i wpisz w miejsce kropek argument funkcji disp( . . . ) sklejony w jedno wyrażenie tekstowe, które w jednej linii wyświetla napisy i wyniki, na przykład tak:
Sześcian o boku L=... ma objętość V=..."
Wpisz: help pr1 a następnie jeszcze raz uruchom program.
Funkcja fprintf(..). Składnia oraz objaśnienie |
Przykład |
Sformatowane wyprowadzanie wyników (jak w języku C): fprintf('opis_formatu', lista_wyrażeń) Wyprowadza na ekran lub do pliku napisy oraz wartości wyrażeń zgodnie z podanymi formatami. Opis_formatu może zawierać:
Opisy pól są uwzględniane po kolei (od lewej do prawej) dla kolejnych wyrażeń z listy. Ta sama funkcja może wyniki wyprowadzać do pliku - jeśli ma trzy parametry zamiast dwu. Pierwszy parametr jest wtedy identyfikatorem pliku. Ale o tym będzie w innym miejscu |
Przykł.4: x=123.76; fprintf('Liczba=%8.2f \nKwadrat liczby=%14.4f', x, x^2) Lista wyrażeń zawiera tu dwa elementy: x, x^2 Dla pierwszego czyli x jest pierwszy opis pola czyli: %8.2f, Wynik działania tej funkcji fprintf:
Liczba= 123.76 |
Zastąp funkcję disp(..) funkcją sformatowanego wyprowadzania wyników fprintf(..):
% Program PR1b.M oblicza objętość sześcianu disp('Obliczanie objętości sześcianu'); clear; clc a = input('Długość boku L='); V=a^3; fprintf('Sześcian o boku L=%7.3f ma objętość V=%12.4f ',a,V); |
Po zapisaniu zmian jeszcze raz uruchom program. Objaśnij elementy funkcji fprintf
Zauważ, że wyświetlane nazwy zmiennych (np.: L) nie muszą być takie same jak nazwy zmiennych wewnątrz programu (np.: a), jednak programista powinien mieć listę zmiennych z wszelkimi objaśnieniami, dotyczącymi: nazw wewnętrznych i zewnętrznych, typów, ról, zakresów, .. itd.
Uzupełnij program pętlą WHILE ... END tak aby działał wielokrotnie a zatrzymał się po wprowadzeniu zera jako danej - podobnie jak w podanym przykładzie. Zapisz z nazwą PR1c.m i uruchom.
Pętla typu WHILE: while wyrażenie . . . . . instrukcje end
Powtarza wykonywanie instrukcji tak długo jak długo wyrażenie |
Przykł.5: clear; clc fprintf('\nProgram oblicza pierwiastki z dodatnich liczb'); fprintf('\nZero kończy obliczenia'); x=1 while x > 0 x=input('Podaj liczbę:'); fprintf('Pierwiastek=%9.2f\n',sqrt(x)) end |
Przekopiuj z poniższej tabeli do nowego okienka w edytorze program (Przykł. 6) z instrukcjami IF ...ELSE ... END. Zapisz jako pr2.m, przeanalizuj i uruchom ten program.
Instrukcja IF czyli rozgałęzienie warunkowe w programie: if warunek instrukcje wykonywane gdy warunek spełniony ... else instrukcje wykonywane gdy warunek NIE spełniony ... end Pozwala wykonać jeden z dwu możliwych bloków instrukcji zależnie od spełnienia lub nie spełnienia określonego warunku, w postaci relacji (np.: 2*x>sin(y)) lub złożonego wyrażenia logicznego. Rolę warunku może pełnić wyrażenie arytmetyczne wtedy, jego wartość niezerowa jest traktowana jako "prawda" natomiast wartość zerowa jako "fałsz". Wyrażenia logiczne są objaśnione tutaj |
Przykł.6: % Wykorzystano 3 zagnieżdżone instrukcje IF % do wybrania jednej z czterech możliwości: clear; clc; fprintf('Słowna ocena temperatury:') t=input('Ile stopni jest na termometrze za oknem:'); if t<0 disp('Mróz!'); else if t<12 disp('Chłodno!'); else if t>25 disp('Gorąco!'); else disp('Ciepło'); end end end |
Przekopiuj z poniższej tabeli do nowego okienka w edytorze program (Przykł. 7) z pętlą FOR ... END. Przeanalizuj i uruchom ten program
TABELA 5. Pętla FOR ... END
Pętla typu FOR: powtarzane w pętli instrukcje umieszczone między for i end będą wykonane dla każdej wartości zmiennej zm. Zmienna ta przyjmuje najpierw wartość pocz a przy każdym następnym obiegu pętli jest zwiększana o przyrost, ale nie może przekroczyć wartości konc. |
Przykł.7: % tabela i wykres funkcji cosinus kwadrat % dla kąta od zera do 180 stopni clear; clc; i=0; fprintf('\nFunkcja cosinus kwadrat\n'); fprintf('alfa F(alfa)'); for alfa=0:5:180 i=i+1; X(i)=alfa*pi/180; Y(i)=cos(X(i))^2; fprintf('\nalfa=%5.1f Y=%7.4f',alfa,Y(i)); end plot(X,Y); grid on; |