MATLAB
PODSTAWY PROGRAMOWANIA
Ćwiczenia 4
SKRYPTY I INSTRUKCJE STERUJĄCE
Wydział Inżynierii Lądowej i Środowiska
Katedra Mechaniki Budowli i Mostów
copyleft by Marcin Kujawa & Łukasz Smakosz
MATLAB
4. Skrypty i instrukcje sterujące 2013/2014
Marcin Kujawa
Łukasz Smakosz
Politechnika Gdańska
WILiŚ
Katedra Mechaniki Budowli i Mostów
2/25
Operatory logiczne
Operatory logiczne służą do określania warunków i zależności między
zmiennymi. Operatory używane w języku Matlab to:
==
równe
~=
różne
<
mniejsze
>
większe
<=
mniejsze równe
>=
większe równe
&
oraz (koniunkcja)
|
lub (alternatywa)
Uwaga: należy pamiętać, że pojedynczy znak równości oznacza w Matlabie
podstawienie i użycie go przy formułowaniu warunku równości spowoduje
błąd
i przerwanie realizacji skryptu.
MATLAB
4. Skrypty i instrukcje sterujące 2013/2014
Marcin Kujawa
Łukasz Smakosz
Politechnika Gdańska
WILiŚ
Katedra Mechaniki Budowli i Mostów
3/25
Instrukcje sterujące
Instrukcje sterujące służą do wykonywania ciągu poleceń w pewnych
określonych warunkach. Należą do nich pętle FOR i WHILE oraz instrukcja
warunkowa IF.
Pętla FOR
Pętla FOR pozwala na powtarzanie wybranego ciągu instrukcji określoną
liczbę razy.
Pętli FOR używamy, kiedy liczba powtórzeń jest z góry znana.
MATLAB
4. Skrypty i instrukcje sterujące 2013/2014
Marcin Kujawa
Łukasz Smakosz
Politechnika Gdańska
WILiŚ
Katedra Mechaniki Budowli i Mostów
4/25
Przykład:
Napisz skrypt, który generuje wektor A o wymiarze 1×5 o elementach
spełniających zależność
2 .
clear, clc
for
i=1:5
% otwarcie petli, liczba powtorzen
A(i)=2*i;
% potarzany ciag instrukcji
end
% zamkniecie petli
A
% wynik dzialania petli
MATLAB
4. Skrypty i instrukcje sterujące 2013/2014
Marcin Kujawa
Łukasz Smakosz
Politechnika Gdańska
WILiŚ
Katedra Mechaniki Budowli i Mostów
5/25
Przykład:
Napisz skrypt, który generuje wektor A o wymiarze 1×5 o elementach
spełniających zależność
2 .
clear, clc
for
i=1:5
A(i)=2*i
end
A
z każdym kolejnym przebiegiem pętli za i będą
podstawiane liczby od 1 do 5, ze skokiem co 1
za element na i-tym miejscu wektora A zostanie
podstawione wyrażenie 2*i, wartość i zmienia się z
każdym kolejnym przebiegiem pętli
MATLAB
4. Skrypty i instrukcje sterujące 2013/2014
Marcin Kujawa
Łukasz Smakosz
Politechnika Gdańska
WILiŚ
Katedra Mechaniki Budowli i Mostów
6/25
ZADANIE DO WYKONANIA NA ZAJĘCIACH
Stwórz skrypt liczący wartości funkcji
dla a=2, b=4, c=5 oraz
zmiennej
1 ; 3 (ze skokiem co 1).
MATLAB
4. Skrypty i instrukcje sterujące 2013/2014
Marcin Kujawa
Łukasz Smakosz
Politechnika Gdańska
WILiŚ
Katedra Mechaniki Budowli i Mostów
7/25
ZADANIE DO WYKONANIA NA ZAJĘCIACH
Stwórz skrypt liczący wartości funkcji
dla a=2, b=4, c=5 oraz
zmiennej
1 ; 3 (ze skokiem co 1).
clear, clc
% definicja stalych
a=2;
b=4;
c=5;
for
x=1:3
y=a*x^2+b*x+c
end
MATLAB
4. Skrypty i instrukcje sterujące 2013/2014
Marcin Kujawa
Łukasz Smakosz
Politechnika Gdańska
WILiŚ
Katedra Mechaniki Budowli i Mostów
8/25
ZADANIE DO WYKONANIA NA ZAJĘCIACH
Zmodyfikuj poprzedni skrypt tak aby x przyjmował wartości od 5 do 7 ze
skokiem co 0.5.
MATLAB
4. Skrypty i instrukcje sterujące 2013/2014
Marcin Kujawa
Łukasz Smakosz
Politechnika Gdańska
WILiŚ
Katedra Mechaniki Budowli i Mostów
9/25
ZADANIE DO WYKONANIA NA ZAJĘCIACH
Zmodyfikuj poprzedni skrypt tak aby x przyjmował wartości od 5 do 7 ze
skokiem co 0.5.
clear, clc
% definicja stalych
a=2;
b=4;
c=5;
for
x=5:0.5:7
y=a*x^2+b*x+c
end
MATLAB
4. Skrypty i instrukcje sterujące 2013/2014
Marcin Kujawa
Łukasz Smakosz
Politechnika Gdańska
WILiŚ
Katedra Mechaniki Budowli i Mostów
10/25
ZADANIE DO WYKONANIA NA ZAJĘCIACH
Napisz skrypt, który generuje macierz A o wymiarze 3×6 o elementach
spełniających zależność
,
.
MATLAB
4. Skrypty i instrukcje sterujące 2013/2014
Marcin Kujawa
Łukasz Smakosz
Politechnika Gdańska
WILiŚ
Katedra Mechaniki Budowli i Mostów
11/25
ZADANIE DO WYKONANIA NA ZAJĘCIACH
Napisz skrypt, który generuje macierz A o wymiarze 3×6 o elementach
spełniających zależność
,
.
clear, clc
for
i=1:3
for
j=1:6
A(i,j)=i*sqrt(2*j)/(i+j);
end
end
A
pętla zewnętrzna - generuje wiersze macierzy;
dla każdego i-tego wiersza realizowany jest
pełen przebieg pętli wewnętrznej
pętla wewnętrzna - generuje elementy we
wszystkich j kolumnach i-tego wiersza
MATLAB
4. Skrypty i instrukcje sterujące 2013/2014
Marcin Kujawa
Łukasz Smakosz
Politechnika Gdańska
WILiŚ
Katedra Mechaniki Budowli i Mostów
12/25
Pętla WHILE
Pętla WHILE pozwala na powtarzanie ciągu instrukcji tak długo, jak długo
określone w niej wyrażenie warunkowe jest spełnione.
Jest wykorzystywana kiedy dokładna liczba powtórzeń nie jest z góry znana, ale
znany jest warunek powtarzania ciągu instrukcji, lub jeżeli operacja ma się
powtarzać aż do przerwania jej przez użytkownika.
Uwaga: błędna realizacja pętli może prowadzić do powtarzania zawartego w niej
ciągu instrukcji w nieskończoność. Żeby przerwać taką realizację należy użyć
kombinacji klawiszy
CTRL+C
przy aktywnym oknie Command Window.
MATLAB
4. Skrypty i instrukcje sterujące 2013/2014
Marcin Kujawa
Łukasz Smakosz
Politechnika Gdańska
WILiŚ
Katedra Mechaniki Budowli i Mostów
13/25
Przykład:
Stwórz skrypt zwiększający wartość zdefiniowanej przez użytkownika zmiennej
i o 1, aż do osiągnięcia wartości 100. Przetestuj zachowanie skryptu dla różnych
wartości i.
clear, clc
i=input(
'Podaj i: '
);
while
i<100
% warunek realizacji petli
i=i+1
% wartosc i rosnie przy kazdym przebiegu
end
MATLAB
4. Skrypty i instrukcje sterujące 2013/2014
Marcin Kujawa
Łukasz Smakosz
Politechnika Gdańska
WILiŚ
Katedra Mechaniki Budowli i Mostów
14/25
Przykład:
Stwórz skrypt obliczający pierwiastek kwadratowy z wprowadzonej przez
użytkownika liczby. Niech po wyświetleniu wyniku skrypt pyta się użytkownika
o chęć powtarzania obliczeń.
clear, clc
disp(
'Skrypt oblicza pierwiastek kadratowy liczby a'
)
i=
't'
;
% def zmiennej aktywujacej petle
while
i==
't'
% warunek powtarzania petli
clc
% czyszczenie ekranu po kazdym powtorzeniu
a=input(
'Wprowadz a: '
);
sqrt(a)
i=input(
'Kontynuowac [t/n]? '
,
's'
);
end
MATLAB
4. Skrypty i instrukcje sterujące 2013/2014
Marcin Kujawa
Łukasz Smakosz
Politechnika Gdańska
WILiŚ
Katedra Mechaniki Budowli i Mostów
15/25
ZADANIE DO WYKONANIA NA ZAJĘCIACH
Zmień powyższy skrypt tak, żeby akceptował tylko liczby dodatnie i powtarzał
się jeżeli warunek ten nie zostanie spełniony.
MATLAB
4. Skrypty i instrukcje sterujące 2013/2014
Marcin Kujawa
Łukasz Smakosz
Politechnika Gdańska
WILiŚ
Katedra Mechaniki Budowli i Mostów
16/25
ZADANIE DO WYKONANIA NA ZAJĘCIACH
Zmień powyższy skrypt tak, żeby akceptował tylko liczby dodatnie i powtarzał
się jeżeli warunek ten nie zostanie spełniony.
clear, clc
disp(
'Skrypt oblicza pierwiastek kadratowy liczby a'
)
i=
't'
;
while
i==
't'
clc
a=input(
'Wprowadz dodatnie a: '
);
while
a<=0
clc
disp(
'Wprowadzona liczba nie jest dodatnia!'
)
a=input(
'Wprowadz dodatnie a: '
);
end
sqrt(a)
i=input(
'Kontynuowac [t/n]? '
,
's'
);
end
pętla wewnętrzna aktywuje się tylko wtedy
kiedy wprowadzona liczba jest niewłaściwa
MATLAB
4. Skrypty i instrukcje sterujące 2013/2014
Marcin Kujawa
Łukasz Smakosz
Politechnika Gdańska
WILiŚ
Katedra Mechaniki Budowli i Mostów
17/25
ZADANIE DO WYKONANIA NA ZAJĘCIACH
Podaj i skomentuj wynik działania następującego skryptu:
tol=1;
while
(1+tol)>1
tol=tol/2;
end
tol
MATLAB
4. Skrypty i instrukcje sterujące 2013/2014
Marcin Kujawa
Łukasz Smakosz
Politechnika Gdańska
WILiŚ
Katedra Mechaniki Budowli i Mostów
18/25
ZADANIE DO WYKONANIA NA ZAJĘCIACH
Podaj i skomentuj wynik działania następującego skryptu:
tol=1;
while
(1+tol)>1
tol=tol/2;
end
tol
tol =
1.1102e-16
pętla będzie się powtarzać tak długo, aż wartość
zmiennej tol, dzielona na pół przy każdym
przebiegu, stanie się dla Matlaba nieodróżnialna
od zera
MATLAB
4. Skrypty i instrukcje sterujące 2013/2014
Marcin Kujawa
Łukasz Smakosz
Politechnika Gdańska
WILiŚ
Katedra Mechaniki Budowli i Mostów
19/25
Instrukcja warunkowa IF
Instrukcja pozwala na wykonanie jednego z kilku ciągów instrukcji zawartych
pomiędzy instrukcjami if, elseif, else.
Wybór realizowanego kodu zależy od spełnienia sprawdzanych kolejno wyrażeń
warunkowych if oraz elseif. Gdy żadne z nich nie jest spełnione,
wykonywany jest kod występujący za operatorem else.
Samodzielna instrukcja pozwala na jednorazową realizację fragmentu kodu.
MATLAB
4. Skrypty i instrukcje sterujące 2013/2014
Marcin Kujawa
Łukasz Smakosz
Politechnika Gdańska
WILiŚ
Katedra Mechaniki Budowli i Mostów
20/25
Przykład:
Stwórz skrypt obliczający rzeczywiste pierwiastki równania kwadratowego
postaci:
.
a=10;, b=12;, c=3;
% definicja stałych
d=b^2-4*a*c;
if
d>0
% jezeli prawda, to...
disp(
'Delta>0'
)
x1=(-b+sqrt(d))/(2*a)
x2=(-b-sqrt(d))/(2*a)
elseif
d==0
% jezeli prawda, to...
disp(
'Delta=0'
)
x1=-b/(2*a)
x2=x1
else
% jezeli cokolwiek innego to...
disp(
'Delta<0'
)
disp(
'brak pierwiastkow rzeczywistych'
)
end
MATLAB
4. Skrypty i instrukcje sterujące 2013/2014
Marcin Kujawa
Łukasz Smakosz
Politechnika Gdańska
WILiŚ
Katedra Mechaniki Budowli i Mostów
21/25
Przykład:
Stwórz skrypt obliczający rzeczywiste pierwiastki równania kwadratowego
postaci:
.
a=10;, b=12;, c=3;
% definicja stałych
d=b^2-4*a*c;
if
d>=0
% jezeli prawda, to...
x1=(-b+sqrt(d))/(2*a)
x2=(-b-sqrt(d))/(2*a)
else
% jezeli cokolwiek innego to...
disp(
'Delta<0'
)
disp(
'brak pierwiastkow rzeczywistych'
)
end
MATLAB
4. Skrypty i instrukcje sterujące 2013/2014
Marcin Kujawa
Łukasz Smakosz
Politechnika Gdańska
WILiŚ
Katedra Mechaniki Budowli i Mostów
22/25
Przykład:
Stwórz skrypt tworzący menu z trzema opcjami, jedną z których jest 'koniec'.
Niech menu powraca po każdym wyborze do czasu, aż nie zostanie kliknięta
opcja 'koniec'.
clear, clc
m=0;
% def zmiennej aktywujacej petle WHILE
while
m~=3
% funkcja menu podstawia za m numer wybranej opcji
m=menu(
'Tytul'
,
'Opcja 1'
,
'Opcja 2'
,
'Koniec'
);
if
m==1
disp(
'Opcja 1'
)
elseif
m==2
disp(
'Opcja 2'
)
else
disp(
'Koniec'
)
end
end
MATLAB
4. Skrypty i instrukcje sterujące 2013/2014
Marcin Kujawa
Łukasz Smakosz
Politechnika Gdańska
WILiŚ
Katedra Mechaniki Budowli i Mostów
23/25
Przykład:
Stwórz skrypt tworzący menu z trzema opcjami, jedną z których jest 'koniec'.
Niech menu powraca po każdym wyborze do czasu, aż nie zostanie kliknięta
opcja 'koniec'.
clear, clc
m=0;
% def zmiennej aktywujacej petle WHILE
while
m~=3
% funkcja menu podstawia za m numer wybranej opcji
m=menu(
'Tytul'
,
'Opcja 1'
,
'Opcja 2'
,
'Koniec'
);
if
m==1
disp(
'Opcja 1'
)
elseif
m==2
disp(
'Opcja 2'
)
else
disp(
'Koniec'
)
end
end
"Powtarzaj tak długo jak długo
m jest różne od 3",
tzn. aż w menu nie zostanie
wybrana opcja nr 3
MATLAB
4. Skrypty i instrukcje sterujące 2013/2014
Marcin Kujawa
Łukasz Smakosz
Politechnika Gdańska
WILiŚ
Katedra Mechaniki Budowli i Mostów
24/25
ZADANIE DO WYKONANIA NA ZAJĘCIACH
Napisz skrypt, który dla dowolnych wartości a, b, c wyliczy wartość d równą:
gdy a jest większe równe b oraz b jest równe c,
gdy a i c są mniejsze równe od b,
∗ gdy a jest równe b.
Jeżeli powyższe warunki nie zostały spełnione, na ekranie ma pojawić się
stosowny komunikat.
MATLAB
4. Skrypty i instrukcje sterujące 2013/2014
Marcin Kujawa
Łukasz Smakosz
Politechnika Gdańska
WILiŚ
Katedra Mechaniki Budowli i Mostów
25/25
ZADANIE DO WYKONANIA NA ZAJĘCIACH
Napisz skrypt, który dla dowolnych wartości a, b, c wyliczy wartość d równą:
gdy a jest większe równe b oraz b jest równe c,
gdy a i c są mniejsze równe od b,
∗ gdy a jest równe b.
Jeżeli powyższe warunki nie zostały spełnione, na ekranie ma pojawić się
stosowny komunikat.
a=2;, b=2;, c=5;
if
(a>=b & b==c)
d=a+b
elseif
(a<=b & c<=b)
d=a-c
elseif
(a==b)
d=a*b
else
disp(
'Zaden z warunkow nie jest spełniony!'
)
end