Matlab

2. Podstawowe polecenia i pisanie programów. Wprowadzanie i wyprowadzanie danych, pętle, instrukcja warunkowa IF

Programy dla MATLABa najlepiej pisać w jego EDYTORZE. Programy muszą być przechowywane w plikach z rozszerzeniem nazwy: ".m" dlatego mówi się o nich: "m-pliki".

Istnieją dwa rodzaje m-plików:

TABELA 2.1. Objaśnienie instrukcji i funkcji używanych w najprostszych programach:
Składnia instrukcji lub funkcji
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
łańcucha znakowego (lub pojedynczego znaku) i przypisuje go zmiennej

Przykł.2:


znak=input('Tak/Nie - naciśnij T lub N','s')

Wyświetlanie wyników:

disp(wyrażenie)

Wyświetla wartość wyrażenia w sposób podobny jak umieszczenie samego wyrażenia.

Przykł.3:


disp(['Liczba=',num2str(x),'  Kwadrat liczby=',num2str(x^2)]);

- w tym przypadku posklejano wyrażenia typu tekstowego (string)

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ć:

  1. dowolny tekst - kopiowany na wydruk,
  2. opisy pól dla wyprowadzania wartości z listy_wyrażeń, rozpoczynane znakiem % po której następuje liczbowy opis pola wydruku, zakończony literą oznaczającą typ wyprowadzanej wartości, np.:
    %8.2f - pole dla 8 znaków (cyfr i kropki) a w tym dwu znaków po kropce;
  3. znaki sterujące złożone z litery poprzedzonej znakiem \
    na przykład: \n - przejdź do nowej linii

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,
a dla drugiego: x^2- drugi opis pola: %14.4f,
\n - to rozkaz przejścia do nowej linii.

Wynik działania tej funkcji fprintf:

Liczba=  123.76
Kwadrat liczby=    15316.5376

Pętla typu WHILE:


	while wyrażenie
	  . . . . . instrukcje
	end

Powtarza wykonywanie instrukcji tak długo jak wyrażenie ma wartość logiczną true (czyli prawda) lub jest różne od zera

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

Pętla typu FOR:

for zm = pocz : przyrost : konc

instrukcje
powtarzane w pętli
end

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ł.6:


% 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;

Rozgałęzienie warunkowe:

	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ą tutaj

Przykł.7:


% 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

Więcej informacji uzyskasz z podręcznika lub wpisując w oknie komend help nazwa_polecenia


Zaczniemy od pisania programów skryptowych. Przed pisaniem trzeba:
     1) otworzyć EDYTOR Matlaba z Menu File-New lub ikonką "pusta kartka"
     2) utworzyć lub wybrać folder, w którym będziemy przechowywać programy i ustawić go jako jako bieżący - Current Directory (u góry okna Matlab'a).

2.1. Pisanie pierwszego programu

Napisz w edytorze Matlaba program (skrypt) obliczania objętości V sześcianu, o danym boku L i zapisz do swojego foldera (ustawionego jako bieżący) do pliku z rozszerzeniem nazwy ".m". Uwaga: nazwa pliku musi odpowiadać regułom budowy nazw w Matlabie (m.in. pierwsza litera i bez polskich liter)
a = input('Długość boku L=')
V=a^3
a, V

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 (a czy L?)

Postaramy się więc program ulepszyć.


2.2. Ulepszanie programu

Program powinien mieć objaśnienia swojego tekstu czyli KOMENTARZE rozpoczynające się znakiem procentu [%] (a w Scilab dwoma "slash'ami" //). 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. Do sformatowanego wyprowadzania wyników użyjemy funkcję fprintf:

% Program PR1.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);
Wpisz: help pr1 a następnie jeszcze raz uruchom program. Objaśnij elementy funkcji fprintf
Zauważ, że wyświetlane w komunikatach nazwy zmiennych (np.: L) nie muszą być takie same jak nazwy zmiennych używanych w obliczeniach (np.: a), jednak aby nie wprowadzać zamętu, programista powinien mieć listę zmiennych z wszelkimi objaśnieniami, dotyczącymi: nazw wewnętrznych i zewnętrznych, typów, ról, zakresów, .. itd.

2.3. Program z pętlą WHILE ... END

Uzupełnij program pętlą WHILE ... END tak aby działał wielokrotnie a zatrzymał się po wprowadzeniu zera jako danej - podobnie jak w podanym wcześniej przykładzie, w tabeli 2.1. Zapisz z nową nazwą i uruchom.


2.4. Program z instrukcją IF ... ELSE ... END

Przekopiuj z tabeli 2.1. do nowego okienka w edytorze program z instrukcjami IF ...ELSE ... END. Przeanalizuj i uruchom ten program


2.5. Program z pętlą FOR ... END

Przekopiuj z tabeli 2.1. do nowego okienka w edytorze program z pętlą FOR ... END. Przeanalizuj i uruchom ten program


Dalej