You are on page 1of 8

Podstawy Informatyki 3 – ćwiczenia02

Podstawy Informatyki
Programowanie w Matlab

Ćwiczenia 2
Podstawowe funkcje i stałe
W ćwiczeniu 1 poznaliśmy podstawowe operacje matematyczne. Poniżej znajduje się tabela
zawierająca nazwy i opis podstawowych funkcji wbudowanych w Matlab. Poszczególne ope-
racje wykonywane są na każdym elemencie macierzy wejściowej (a).

Funkcja Opis
sin(a), cos(a), tan(a), funkcje trygonometryczne; argument podawany
cot(a) w radianach (pi jest stałą przybliżającą wartość
liczby π)
asin(a), acos(a), atan(a), funkcje cyklometryczne
acot(a)
sinh(a), cosh(a), tanh(a), funkcje hiperboliczne
coth(a)
asinh(a), acosh(a), atanh(a) funkcje odwrotne do hiperbolicznych
sqrt(a) pierwiastek kwadratowy
exp(a) funkcja ea
log(a), log2(a), log10(a) odpowiednio ln(a), log2a, log10a
abs(a) wartość bezwzględna
angle(a), real(a) , imag(a) argument, część rzeczywista i urojona liczby
zespolonej
conj(a) liczba zespolona sprzężona
ceil(a) zaokrąglenie do liczby całkowitej w górę
floor(a) zaokrąglenie do liczby całkowitej w dół
fix(a) zaokrąglenie liczby dodatniej w dół,
ujemnej w górę
round(a) zaokrąglenie do najbliższej liczby całkowitej
rem(a,b) reszta z dzielenia a przez b
sign(a) funkcja signum (1 dla a>0, 0 dla a=0. –1 dla
x<0)

Istnieje również grupa funkcji zaprojektowanych głównie dla wektorów i macierzy. Jeżeli
argumentem takiej funkcji jest macierz, operacje wykonywane są dla każdej jej kolumny, a
wynikiem wówczas jest wektor wierszowy o wymiarze odpowiadającym liczbie kolumn w
macierzy.

Funkcja Opis
min(a), max(a) wielkość minimalna, maksymalna
mean(a), median(a) średnia arytmetyczna, mediana
cov(a), std(a) kowariancja, odchylenie standardowe
sum(a) suma
prod(a) iloczyn

Strona 1 z 8
Podstawy Informatyki 3 – ćwiczenia02

Ćwiczenie 2.1.
Proszę sprawdzić wszystkie powyższe funkcje. Należy zauważyć, że w Matlabie argumentem
wejściowym funkcji może być wynik innego polecenia. W szczególności proszę sprawdzić i
skomentować następującą operację
min(min(round(10*rand(5)))) (2.1)

Operatory relacji
Istnieje sześć operatorów relacji:
< mniejsze
<= mniejsze lub równe
> większe
>= większe lub równe
== równe
~= różne od
Argumentami relacji są macierze o tych samych wymiarach natomiast wynikiem jest macierz
o wymiarach takich samych jak argumenty, której elementy są równe 0 lub 1 w zależności od
wyniku relacji.

Ćwiczenie 2.2.
Proszę wprowadzić do pamięci macierze a i b (polecenie 2.2) oraz sprawdzić wszystkie moż-
liwe relacje pomiędzy ich elementami, tzn. a<b, a<=b, a>b, a>=b, a==b, a~=b

a=[4 5 7 0;2 10 12 24;32 2 3 5], ... (2.2)


b=[3 8 7 0;34 3 12 18;20 5 1 5]

Operatory i funkcje logiczne


Operatory logiczne mają postać
a|b alternatywa
a&b koniunkcja
~a negacja
Wszystkie zerowe elementy macierzy a i b mają wartość logiczną 0 (false) natomiast nieze-
rowe 1 (true).
Istnieje również cały szereg funkcji, które ułatwiają operacje porównywania i oceny macie-
rzy. Wynikiem tych funkcji jest wartość logiczna. Poniżej kilka przykładów.

all(a) (2.3)
sprawdza, czy wszystkie elementy wektora są różne od zera, jeżeli a jest macierzą Matlab
sprawdza każdą kolumnę a wynikiem jest wektor zer i jedynek.

any(a) (2.4)
sprawdza, czy którykolwiek z elementów wektora jest różny od zera

isempty(a) (2.5)
isempty([]) (2.6)
zwraca 1 jeżeli macierz nie ma wartości.

Strona 2 z 8
Podstawy Informatyki 3 – ćwiczenia02

Tworzenie m-plików
Polecenia i wyrażenia w Matlabie można wprowadzać bezpośrednio w oknie Command Win-
dow i natychmiast je wykonywać. Innym sposobem jest zapisywanie ich w plikach teksto-
wych o rozszerzeniu .m (stąd zwanych często m-plikami) i wykonywać je w trybie pośrednim
(wsadowym) podając nazwę odpowiedniego pliku (bez rozszerzenia). M-pliki są zatem ko-
dami źródłowymi programów, które są interpretowane i wykonywane w środowisku Matlaba.
Mamy dwa typy m-plików: skrypty i funkcje. Struktura m-plików oraz różnice między skryp-
tem a funkcją opisane będą w następnych rozdziałach. Obydwa pozwalają na budowanie wła-
snych poleceń uruchamianych dokładnie tak jak wewnętrzne polecenia Matlaba (których
większość również zapisana jest w postaci m-plików). Dają tym samych ogromne możliwości
dostosowania środowiska obliczeniowego do własnych potrzeb.
Ponieważ m-pliki są zwykłymi plikami tekstowymi, można je tworzyć używając dowolnego
edytora tekstu (na przykład Notatnika). Matlab zawiera jednak wbudowany edytor zoptymali-
zowany pod kątem pisania oraz analizy poprawności skryptów oraz funkcji. Okno tego edyto-
ra wywoływane jest komendą edit wydaną w oknie poleceń lub przez wywołanie polecenia
New -> M- file z menu File.
M-pliki zapisywane są w bieżącym katalogu roboczym (Current Directory), a ich nazwy mu-
szą spełniać te same warunki co nazwy zmiennych (zaczynać się od litery, nie zawierać spa-
cji, innych znaków specjalnych oprócz ewentualnie podkreślenia, nie zawierać polskich liter
itp.). Zapisany plik powinien mieć nazwę z rozszerzeniem .m aby mógł być rozpoznany przez
Matlab jako plik zawierający kod źródłowy programu i odpowiednio zinterpretowany i wyko-
nany,

Rys. 1 Okno edytora z przykładowym plikiem.

Skrypty
Skrypty są najprostszym rodzajem m-plików. Nie mają ani parametrów wejściowych ani wyj-
ściowych. Są tak naprawdę zapisem sekwencji poleceń wydawanych w trybie bezpośrednim, i
tak też są interpretowane przez Matlab. Skrypty operują na zmiennych już istniejących w
przestrzeni roboczej, mogą również tworzyć tam nowe zmienne. Zmienne utworzone w
skrypcie pozostają w przestrzeni roboczej po zakończeniu wykonywania poleceń zawartych w
skrypcie. Stanowi to istotną różnicę w stosunku do działania innych m-plików, funkcji, któ-
rym Matlab przydziela osobną pamięć w momencie uruchomienia, a po zakończeniu funkcji
wartości zmiennych lokalnych dla tej funkcji są usuwane z pamięci i nie są dostępne w prze-
strzeni roboczej Matlaba.

Strona 3 z 8
Podstawy Informatyki 3 – ćwiczenia02

Ćwiczenie 2.2.
Używając wewnętrznego edytora Matlab, proszę utworzyć i zapisać skrypt o nazwie
wyz_ilo.m , w którym zdefiniujemy podane niżej macierze a i b, obliczymy ich iloczyn
oraz wyznacznik tego iloczynu. Proszę także uruchomić ten skrypt wpisując w oknie poleceń
nazwę utworzonego pliku (bez rozszerzenia).
1 3 4   3 6 3
a = 2 3 4, b = 2 3 4
 
2 5 2 3 5 2

Zawartość pliku wyz_ilo.m:


%ciało skryptu
a=[1 3 4;2 3 4;2 5 2];
b=[3 6 3;2 3 4;3 5 2];
c=a*b %iloczyn
det(c) %wyznacznik

Po wpisaniu w oknie poleceń:


>>wyz_ilo
Matlab wykona wszystkie polecenia, które znajdują się w skrypcie.
Uwaga: tekst zaczynający się od znaku % jest komentarzem i nie jest interpretowany przez
Matlab

Tworząc skrypty i funkcje możemy korzystać z całego arsenału poleceń i instrukcji programi-
stycznych jakimi dysponuje język programowania Matlab. Podstawowymi instrukcjami w
każdym języku programowania są instrukcje warunkowe oraz instrukcje pętli.

Instrukcja warunkowa if
Instrukcja warunkowa if („jeżeli to”) ma postać standardową dla wielu języków programo-
wania. Mianowicie:

if wyrażenie logiczne
instrukcje
elseif wyrażenie logiczne
instrukcje
else
instrukcje
end

Instrukcję warunkową można wprowadzać w oknie poleceń linijka po linijce. Kiedy wiersz
zaczyna się od słowa kluczowego if Matlab przestaje wyświetlać wynik obliczeń po każdo-
razowym naciśnięciu klawisza Enter dopóki nie zostanie wprowadzona linia zamykającą
instrukcję ze słowem end. Wtedy analizowana jest cała instrukcja i wyświetlany wynik. Wy-
godniej jednak zapisywać te polecenia w skrypcie. Mamy wtedy możliwość łatwego popra-
wienia w edytorze ewentualnych błędów.

Przykład 2.1.
Proszę napisać skrypt z instrukcją warunkową, w którym wygenerujemy liczbę losową cał-
kowitą z przedziału <0;10> oraz jeżeli liczba ta będzie mniejsza lub równa 5 to przypiszemy
zmiennej wynik wartość 0, a jeżeli będzie większa od 5 to przypiszemy zmiennej wynik war-
tość 1.

Strona 4 z 8
Podstawy Informatyki 3 – ćwiczenia02

%Przyklad2_1 Instrukcja warunkowa if


liczba=round(10*rand(1)) (2.7)
if liczba<=5
wynik=0
else
wynik=1
end

Zapisz skrypt pod nazwą przyklad2_1.m a następnie uruchom go wpisując w oknie poleceń
jego nazwę (bez rozszerzenia):
>>przyklad2_1

Instrukcja warunkowa switch


Instrukcja switch jest szczególnym przypadkiem instrukcji warunkowej. Służy do wyboru
jednego z kilku wariantów w zależności od wartości zmiennej sterującej tą instrukcją:

switch zmienna
case wartość1
instrukcje
case wartość2
instrukcje
case wartość3
instrukcje
otherwise
instrukcje
end

Przykład 2.2.
Proszę napisać skrypt z instrukcją switch, w którym wygenerujemy liczbę losową całkowitą z
przedziału <0;10> , a następnie przypiszemy zmiennej wynik wartość sinusa wygenerowanej
liczby jeżeli była to jedynka, cosinusa dla dwójki i tangensa w przeciwnym wypadku.
%Przyklad2_2 Instrukcja warunkowa switch
liczba=round(10*rand(1)) (2.8)
switch liczba
case 1
wynik=sin(liczba)
case 2
wynik=cos(liczba)
otherwise
wynik=tan(liczba)
end

Zapisz skrypt pod nazwą przyklad2_2.m a następnie uruchom go wpisując w oknie poleceń
jego nazwę (bez rozszerzenia):
>>przyklad2_2

Strona 5 z 8
Podstawy Informatyki 3 – ćwiczenia02

Pętla for i pętla while


Jedno z haseł reklamowych Matlab głosi, że życie jest zbyt krótkie by pisać pętle do…loop. I
rzeczywiście, jak już się przekonaliśmy, macierzowa konwencja zmiennych znakomicie
zmniejsza liczbę instrukcji koniecznych do napisania. Niemniej czasami programowanie wy-
magać od nas będzie użycia pętli. Poniżej przykłady dwóch rodzajów pętli: o zadanej liczbie
kroków (pętla for) i o zadanym kryterium stopu (pętla while).

Ogólna postać pętli for:

for zmienna=zakres
instrukcje_powtarzane
end

natomiast ogólna postać pętli while

while wyrażenie_logiczne
instrukcje_powtarzane
end

Przykład 2.3.
Proszę napisać skrypt z instrukcją for, w którym wyświetlimy 10 liczb losowych całkowitych
z przedziału <0, 10>.
%Przyklad2_3 Instrukcja pętli wyliczanej
for i=1:10 (2.9)
disp(round(10*rand(1)))
end
disp(a)

Zapisz skrypt pod nazwą przyklad2_3.m a następnie uruchom go wpisując w oknie poleceń
jego nazwę (bez rozszerzenia):
>>przyklad2_3

Przykład 2.4.
Proszę napisać skrypt z dwoma zagnieżdżonymi instrukcjami for, w którym zbudujemy ma-
cierz o rozmiarach 5x5 (czyli 5 wierszy i 5 kolumn) składającą się z elementów o wartościach
i− j
aij = gdzie i oraz j oznaczają indeksy wierszy oraz kolumn.
i+ j

%Przyklad2_4 Instrukcja zagnieżdżonej pętli wyliczanej


for i=1:5 (2.10)
for j=1:5
a(i,j)=(i-j)/(i+j);
end
end
disp(a)

Zapisz skrypt pod nazwą przyklad2_4.m a następnie uruchom go wpisując w oknie poleceń
jego nazwę (bez rozszerzenia):
>>przyklad2_4

Strona 6 z 8
Podstawy Informatyki 3 – ćwiczenia02

Przykład 2.5.
Proszę napisać skrypt, w którym stablicujemy funkcję e − x zaczynając od 0 z krokiem 0.1 a
obliczenia będziemy kontynuować dopóty, dopóki wartości funkcji są większe od zadanej
wartości epsilon = 0.01 . Proszę podać ile wartości funkcji e − x zostanie zapisanych w tablicy.

%Przyklad2_5 Instrukcja pętli warunkowej


start=0; krok=0.1; i=0; epsilon=0.01; (2.11)
while exp(-(start+krok*i))>epsilon
tablica(i+1)=exp(-(start+krok*i));
i=i+1;
end
tablica
disp(i)

Zapisz skrypt pod nazwą przyklad2_5.m a następnie uruchom go wpisując w oknie poleceń
jego nazwę (bez rozszerzenia):
>>przyklad2_5

Podsumowanie ćwiczenia 2
• funkcje matematyczne
• operatory relacji < > <= >= == ~=
• operatory logiczne | & ~
• m-pliki, skrypty
• instrukcje warunkowe if...elseif...else
switch...case
• instrukcje pętli for, while

Zadania do ćwiczeń 2
π
2.1. Oblicz wartość: cos + ctg(arcsin0.5) + arctg 2 0.3
3

2.2. Oblicz wartość y = cosh2x - sinh2x dla x = 32π

2.3. Utwórz macierz 4 x 5 utworzoną z liczb losowych całkowitych z przedziału [0 ; 10] i


wyznacz wartości minimalne i maksymalne znajdujące się w wierszach i kolumnach.

2.4. Oblicz wartość minimalną i maksymalną w całej macierzy utworzonej w zadaniu 2.3.

2.5. Dla: x=[1 5 2 8 9 0 1] i y=[5 2 2 6 0 0 2], wykonaj poniższe polecenia i zinterpretuj ich
wyniki.
(a) x>y oraz x<y
(b) x==y oraz x<=y
(c) x>=y oraz x|y
(d) x&y oraz y&x
(e) (x>y)|(y<x) oraz (x>y)&(y<x)

Strona 7 z 8
Podstawy Informatyki 3 – ćwiczenia02

4 5 7 0  3 8 7 0
2.6. Wprowadź macierze: a =  2 10 12 24 oraz b = 34 3 12 18 i sprawdź czy
32 2 3 5  20 5 1 5 
wszystkie elementy macierzy a są większe lub równe odpowiadającym im elementom macie-
rzy b. Zapisz polecenia w taki sposób, aby odpowiedzieć 1 jeśli jest to prawdą oraz 0 jeśli to
fałsz.

2.7. Sprawdzić, czy w macierzach a i b są pary aij = bij . Zapisz polecenia w taki sposób, aby
odpowiedzieć 1 jeśli jest to prawdą oraz 0 jeśli to fałsz.

2.8. Policzyć ile jest par aij, bij o wartościach różnych od 0, takich że aij = bij .

2.9. Mając dane wektory: x=1:10 oraz y=[3 1 5 6 8 2 9 4 7 0] wykonaj poniższe


polecenia i zinterpretuj ich wyniki:
(a) (x>3)&(x<8) oraz x(x>5)
(b) y(x<=4) oraz x((x<2)|(x>=8))
(c) y((x<2)|(x>=8)) oraz x(y<0)

2.10. Mając dany wektor x=[3 15 9 12 -1 0 -12 9 6 1] napisać polecenia wykonujące


poniższe operacje.
(a) zamienić dodatnie elementy x na zera.
(b) zamienić wartości będące wielokrotnościami 3 na 3 (wykorzystać funkcję rem).
(c) pomnożyć parzyste elementy x przez 5
(d) stworzyć wektor y złożony z wartości x większych od 10
(e) zamienić wartości x mniejsze od średniej na zera (wykorzystać funkcję mean)
(f) obliczyć sumę elementów x o wartościach nieparzystych (wykorzystać funkcje rem i
sum).
2.11. Oblicz wartość funkcji podanej wzorem z klamrą dla przyjętej wartości x:

 x −1 dla x<3

f ( x) =  x sin x dla 3 ≤ x < 7
 1
 2 dla x≥7
x +1
2.12. Oblicz wartość funkcji z poprzedniego zadania dla wektora x = [0, 1, 2, ..., 10]

 1
 dla i ≠ j
2.13. Utwórz macierz A o rozmiarach 6 x 6 taką, że: a ij =  i − j
 0 dla i = j

Strona 8 z 8

You might also like