background image

 

1

Programowanie w MATLAB-

ie

dr inż. Henryk Olszewski

background image

 

2

Wyrażenia warunkowe

Wyrażenia warunkowe służą do porównywania zmiennych 
o  tych  samych  rozmiarach.  Jeśli  wyrażenie  warunkowe  jest 
spełnione,  porównanie  zwraca  wówczas  wartość  1  (wartość 
logiczna „prawda”
). W przeciwnym wypadku zwracana jest 
wartość 0 (wartość logiczna „fałsz”). 

Operator porównania

Relacja

a == b

a = b

a ~= b

 b

a < b

a < b

a > b

a > b

a <= b

 b

a >= b

 b

background image

 

3

Wyrażenia warunkowe

     Operator logiczny

    Opis

Relacja

a | b

alternatywa

a lub b

a & b

koniunkcja

a i b

  ~a

negacja

nie a 

Funkcje logiczne ułatwiające operacje porównywania macierzy:

sprawdzenie,  czy  wszystkie  elementy  wektora  A  są  różne 
od 0 i zwrócenie wartości 1 („prawda”) lub 0 („fałsz”); jeśli  A 
jest  macierzą,  każda  kolumna  jest  traktowana  jako  wektor  - 
zwracany jest wektor wierszowy zer i jedynek:

 

»

 

all(A)

sprawdzenie, czy którykolwiek z elementów wektora A jest 
różny  od  0  i  zwrócenie  wartości  1  („prawda”)  lub  0  („fałsz”); 
jeśli  A  jest  macierzą,  każda  kolumna  jest  traktowana  jako 
wektor - zwracany jest wektor wierszowy zer i jedynek:

 

»

 

any(A)

background image

 

4

Wyrażenia warunkowe

zwraca wartość 1, jeśli argumenty funkcji są macierzami 
o  jednakowym  rozmiarze  i  zawartości  -  w  przeciwnym 
wypadku zwraca wartość 0:

 

»

 

isequal(A,B,...)

zwraca wartość 1, jeśli macierz A jest macierzą pustą - w 
przeciwnym wypadku zwraca wartość 0:

 

»

 

isempty(A)

Program  MATLAB  posiada  bogaty  zestaw  funkcji 
logicznych,  określanych  ogólnie  jako  is*,  np.  ischar
isrealisnan i wiele innych. 

background image

 

5

Instrukcje strukturalne

W programie MATLAB istnieje 5 instrukcji strukturalnych: 

instrukcja warunkowa if,

instrukcja wyboru switch

instrukcja pętli for

instrukcja pętli while

instrukcja przerwania break

Instrukcja

 warunkowa if 

Instrukcja  warunkowa  if  wykonuje  operację  logiczną 
relacji  a  następnie  grupę  poleceń,  jeżeli  wynik  operacji 
logicznej przyjmuje wartość „prawdy logicznej”. 
Opcjonalne  słowa  kluczowe  elseif  i  else  umożliwiają 
wykonanie  alternatywnej  grupy  poleceń.  Słowo  kluczowe 
end kończy grupę wykonywanych poleceń. 

background image

 

6

Instrukcja warunkowa if

Instrukcja warunkowa if może mieć jedną z dwóch postaci:

if wyrażenie 

if wyrażenie

instrukcje

instrukcje

end

elseif wyrażenie

   

instrukcje

else

   

instrukcje

end

Wyrażenie  w  instrukcji  if  jest  wyrażeniem  warunkowym  i 
powinno  zwracać  wartość  logiczną  -  instrukcje  zostaną 
wykonane, jeżeli wyrażenie będzie spełnione.

background image

 

7

Instrukcja warunkowa if

Przykład:

n = 3
if n < 0
   m = 10
elseif n= 0 
   m = 20
else
   m = 30
end
m

Ważne  jest  zrozumienie  operacji  relacji  i  działania  polecenia 
if w przypadku macierzy. 

background image

 

8

Instrukcja warunkowa if

W przypadku, gdy sprawdzamy czy dwie zmienne są równe, możemy 
użyć polecenie:

A = 2; B = 3
if A == B
   wynik = 1
else
   wynik = 0
end
wynik

W przypadku, gdy zmienne A i B są macierzami, operacja relacji           
        A == B nie sprawdza, czy macierze są równe, ale testuje gdzie 
one  są  równe.  W  rezultacie  otrzymuje  macierz  zero  -  jedynkową 
przedstawiającą  element  po  elemencie  wyniki  poszukiwań.  Jeżeli 
macierze  A  i  B  nie  mają  tych  samych  rozmiarów,  polecenie  operacji 
relacji: A == B  jest błędne.

background image

 

9

Instrukcja warunkowa if

A = [1 2;3 4]; B = [4 5;6 7]
if A == B
   wynik = ‘rowne’
else
   wynik = ‘rozne’
end
wynik
A == B

Przedstawiony przykład przedstawia błędne użycie polecenia if:

A = zeros(3,3);  B = ones(2,2)
if A == B
   wynik = ‘rowne’
else
   wynik = ‘rozne’
end
wynik

background image

 

10

Instrukcja warunkowa if

W przypadku macierzy, operacje relacji A > BA < B lub A == B dotyczą 
wszystkich elementów porównywanych macierzy:

A = [1 2 3; 4 5 6; 7 8 9]
B = A + 10
if A > B
   'wieksze'
elseif A < B
   'mniejsze'
elseif A == B
   'rowne'
else
   error('niespodziewana sytuacja')
end
A == B 
A < B
A > B

background image

 

11

Instrukcja wyboru switch

W ogólnym przypadku instrukcja wyboru switch ma postać:

switch wyrażenie
    case wartość1
      instrukcje
    case wartość2
      instrukcje
    ...
    otherwise
      instrukcje
 end

Wyrażenia  w  instrukcji  switch  mogą  być  liczbą  lub  łańcuchem 
znakowym.  Wartość  wyrażenia  jest  porównywana  z  wartościami 
kolejnych przypadków case(wartość1, wartość2,...)

background image

 

12

Instrukcja wyboru switch

Instrukcja wyboru switch wykonuje grupy poleceń występujące po 
słowach  kluczowych  case  i  otherwise.  Wykonywana  jest  tylko 
jedna  grupa  poleceń  spełniająca  zadany  warunek.  Instrukcja 
wyboru switch zakończona jest słowem kluczowym end:

n = 12
switch n
    case 0
       ‘n jest rowne zero’
    case 1
       ‘n jest rowne jeden’
    case 2
       ‘n jest rowne dwa’
    otherwise
       ‘n jest rozne od 0, 1, 2’
 end

background image

 

13

Instrukcja pętli for

Ogólna postać instrukcji pętli for jest następująca:
 

for zmienna=macierz_wartości
   instrukcje
end

czasie 

wykonywania 

instrukcji 

for 

kolumny 

macierzy_wartości 

przyporządkowywane 

są 

kolejno 

iterowanej 

zmiennej

praktyce 

wyrażenie 

macierz_wartości ma najczęściej jedną z postaci:

minimum:maksimum

minimum:krok:maksimum

przy  czym  krok  może  być  zarówno  dodatni,  jak  i  ujemny,  a 
zmienna nie musi przyjmować wartości całkowitych. 

background image

 

14

Instrukcja pętli for

Instrukcja  pętli  for  powtarza  grupę  poleceń  ustaloną  wcześniej 
liczbę razy. Słowo kluczowe end kończy pętle. 

for n = 1:32
   r(n) = rand;
end
r=r’
 
m = 10
n = 10
for i = 1:m
   for j = 1:n
      H(i,j) = 1/(i+j)
   end
end
H

background image

 

15

Instrukcja pętli while

Instrukcja  pętli  while  powtarza  polecenia  o  niezdefiniowaną  wcześniej 
liczbę  powtórzeń  określoną  przez  program  na  podstawie  zadanego 
warunku logicznego. Słowo kluczowe end kończy instrukcję pętli. 
Program znajdujący miejsca zerowe wielomianu metodą bisekcji:

a = 0; fa = -Inf; b = 3; fb = Inf;
while b-a > eps*b
   x = (a+b)/2; fx = x^3-2*x-5;
   if sign(fx) == sign(fa)
      a = x; fa = fx;
   else
      b = x; fb = fx;
   end
end

W rezultacie otrzymuje pierwiastek wielomianu x

- 2x – 5:

x = 2.09455148154233

background image

 

16

Instrukcja pętli while

Instrukcja pętli while ma postać:

while wyrażenie
   instrukcje
end

Instrukcje  w  bloku  while  są  powtarzane  dopóty,  dopóki  część 
rzeczywista  wyrażenia  ma  wszystkie  elementy  różne  od  zera 
(warunek przyjmuje wartość „prawda”). Postać wyrażenia jest 
taka sama, jak w instrukcji if

background image

 

17

Instrukcja przerwania break

Instrukcja  break  umożliwia  wcześniejsze  przerwanie  pętli  for  lub  while
Poniżej  przedstawiono  zmodyfikowany  poprzedni  przykład  obliczeń. 
Dlaczego  użycie  instrukcji  przerwania  break  jest  w  tym  przypadku  dobrą 
ideą? 

a = 0; fa = -Inf; b = 3; fb = Inf;
while b-a > eps*b
   x = (a+b)/2;
   fx = x^3-2*x-5;
   if fx == 0
      break
   elseif sign(fx) == sign(fa)
      a = x; fa = fx;
   else
      b = x; fb = fx;
   end
end
x

background image

 

18

Skrypty

Skrypt  jest  plikiem  tekstowym  o  rozszerzeniu  *.m  (m-plikiem), 
zawierającym polecenia i instrukcje programu MATLAB. Skrypty nie 
pobierają  żadnych  argumentów  wejściowych,  ani  też  nie  zwracają 
argumentów  wyjściowych  -  mogą  operować  tylko  na  zmiennych 
dostępnych w przestrzeni roboczej programu. 

Komentarze  w  skrypcie  poprzedza  się  znakiem  %.  Interpretator 
pomija  tekst  zawarty  pomiędzy  znakiem  %,  a  końcem  wiersza. 
Można  w  ten  sposób  tworzyć  objaśnienia  do  skryptów
umieszczając  komentarz  w  pierwszych  wierszach  skryptu. 
Objaśnienia zostaną wyświetlone na ekranie po wydaniu polecenia:

»

 

help nazwa_skryptu

gdzie  nazwa_skryptu  oznacza  nazwę  pliku  tekstowego  bez 
rozszerzenia *.m. 

background image

 

19

Skrypty

Skrypt generujący macierz 3x3 wypełnioną liczbami pseudolosowymi, 
następnie  tworzący  z  niej  macierz  trójkątną  dolną  oraz  macierz 
trójkątną górną zachowany w pliku p1.m:

% Pierwszy przykladowy skrypt
% Generuje macierz 3x3 wypelniona liczbami
% pseudolosowymi i tworzy z niej macierz trojkatna
% dolna oraz gorna
A=rand(3)

% tworzenie macierzy A

Ad=tril(A) % tworzenie macierzy Ad
Ag=triu(A) % tworzenie macierzy Ag
% koniec pierwszego przykladowego skryptu

Skrypt uruchamia się podając jego nazwę (bez rozszerzenia) w wierszu 
poleceń programu MATLAB lub w innym skrypcie:

»

 

p1

background image

 

20

Skrypty

Uruchomienie  skryptu  spowoduje  wykonanie  kolejno  wszystkich 
poleceń w nim zapisanych i wyświetlenie wyniku:

A =

0.6038

0.0153

0.9318

0.2722

0.7468

0.4660

0.1988

0.4451

0.4186

Ad =

0.6038

     0

     0

0.2722

0.7468

     0

0.1988

0.4451

0.4186

Ag =

0.6038

0.0153

0.9318

     0

0.7468

0.4660

     0

     0

0.4186

background image

 

21

Skrypty

Jeżeli po instrukcjach generujących macierze  AAd i Ag umieszczone 
są średniki, zmienne zostaną utworzone, ale na ekranie nie pojawi się 
żaden  efekt  uruchomienia  skryptu.  Po  wykonaniu  skryptu  zmienne  A
Ad  i  Ag  zostaną  jedynie  zapisane  w  przestrzeni  roboczej  programu 
MATLAB.

Polecenie

» help 

p1

spowoduje wyświetlenie objaśnienia skryptu:

Pierwszy przykladowy skrypt
Generuje macierz 3x3 wypelniona liczbami
pseudolosowymi i tworzy z niej macierz trojkatna
dolna oraz gorna

background image

 

22

Skrypty

Podczas  wykonywania  skryptu  można  wpisywać  dane  z  klawiatury 
oraz  wyświetlać  wyniki  w  oknie  poleceń  programu  MATLAB  za 
pomocą  instrukcji  wejścia/wyjścia,  aby  wyświetlić  wartość 
zmiennej  wystarczy  wpisać  we  wierszu  jej  nazwę  lub  użyć  funkcję 
disp, umożliwiającą również wyświetlanie tekstów.
Funkcje obsługi wejścia skryptu:

wyświetlenie  łańcucha  znaków  tekst,  oczekiwanie  na 
wpisanie przez użytkownika danej liczbowej i przypisanie jej 
zmiennej liczbowej  x; zamiast danej liczbowej można wpisać 
wyrażenie programu MATLAB, które funkcja obliczy: 

 

» x=input(tekst)

wyświetlenie  łańcucha  znaków  tekst,  oczekiwanie  na 
wpisanie  przez  użytkownika  łańcucha  znakowego  i 
przypisanie go zmiennej x:

 

» x=input(tekst,’s’)

background image

 

23

Skrypty

Funkcje obsługi wejścia skryptu:

zatrzymanie 

wykonywania 

skryptu 

do 

momentu 

naciśnięcia przez użytkownika dowolnego klawisza: 

 

» pause

zatrzymanie wykonywania skryptu na n sekund:

 

» pause(n)

background image

 

24

Funkcje

Funkcje programu MATLAB dzielą się na wbudowane i przechowywane w  m-
plikach. M-pliki z definicjami własnych funkcji może tworzyć sam użytkownik.
Definicja nowej funkcji zawarta w pierwszym wierszu m-pliku:

słowo kluczowe function;

nazwa funkcji - musi być taka sama, jak nazwa pliku (bez rozszerzenia 
*.m), w którym znajduje się funkcja;

wartość funkcji (lista argumentów wyjściowych);

parametry funkcji (lista argumentów wejściowych);

Definicja funkcji ma następującą postać:

function[wart_fun1, wart_fun2,...]=nazwa_funkcji(parametr1, ...)

%ewentualnie opis funkcji w formie komentarza

instrukcje

background image

 

25

Funkcje

W  ciele  funkcji,  wśród  instrukcji,  powinno  się  znaleźć  instrukcja 
przypisania:

wart_fun1=wynik1;

wart_fun2=wynik2;

...

Funkcja zdefiniowana w powyższy sposób może być używana na równi 
z  innymi  funkcjami  programu  MATLAB
.  Podczas  wykonywania 
funkcji  (podobnie,  jak  podczas  wykonywania  skryptu)  zostaje 
wyświetlony  wynik  działania  każdego  polecenia  niezakończony 
średnikiem. 

Przykładowa funkcja

Funkcja  przeliczająca  radiany  na  stopnie.  Działanie  funkcji  zostanie 
sprawdzone przeliczając na stopnie argument liczby zespolonej z=2-3j:

background image

 

26

Funkcje

function [y]=radst(x);

%% przelicza radiany na stopnie

%% postać ogólna; radst(x), gdzie x-liczba radianów

y=(x.*180)/pi;

%% koniec

Funkcję należy zapisać w pliku radst.m. Wydanie polecenia

» help radst

powoduje wyświetlenia komentarza funkcji:

przelicza radiany na stopnie

postać ogólna; radst(x), gdzie x-liczba radianów

W  celu  przeliczenia  na  stopnie  argumentu  liczby  zespolonej  należy 
wydać polecenie:

» radst(angle(2-3j))

background image

 

27

Zmienne lokalne i globalne

Zmienne  występujące  we  funkcjach  (w  tym  argumenty  wejściowe) 
są lokalne (nie są „widziane” przez inne funkcje i skrypty). Zmienne 
utworzone  w  przestrzeni  roboczej  programu  MATLAB  nie  są 
dostępne  we  funkcji.  Zmienne  globalne  są  deklarowane  przy 
pomocy polecenia global:

» global w

Polecenie  global  należy  umieścić  wszędzie  tam,  gdzie  zmienna 
ma  być  widoczna
  (w  definicji  funkcji,  skrypcie,  we  wierszu 
poleceń). 

Przykład:

Napisać  funkcję  funkw,  która  dla  danego  x  oblicza  wartość: 
y(x)=ax

2

+bx+c.  Funkcję  tę  wykorzystać  w  skrypcie  kwadrat2.m 

do  obliczenia  y(x)  w  przedziale  <-10,10>.  Wartości  parametrów  a
bc określić w skrypcie kwadrat2.m.

background image

 

28

Zmienne lokalne i globalne

Plik funkw.m:

function y=funkw(x)

global a b c

y=a*x.*x+b*x+c

Plik skrypt2.m:

global a b c

a=1; b=-2; c=1;

x=[-10:10];

y=funkw(x)

Po zadeklarowaniu zmiennych: ab i c jako globalnych można 
ich używać wewnątrz funkcji funkw

background image

 

29

Instrukcja return

Instrukcja 

return 

jest 

wykorzystywana 

do 

wymuszenia 

natychmiastowego  zakończenia  funkcji  i  powrotu  do  miejsca  jej 
wywołania. 

Przykład:
Napisać  funkcję  obliczającą  wartość  n!.  Dla  każdej  wartości  n<1 
funkcja powinna zwracać wynik 0. 

function s=silnia(n)
% funkcja oblicza n!, dla n<1 zwraca wartosc 0
s=0;
if (n<1)return
else

s=1;
for i=2:n, s=s*i; end

end

background image

 

30

Funkcje inline

Funkcje inline („we wierszu”) można zdefiniować za pomocą polecenia:

funkcja=inline(wyrażenie)

gdzie:

– funkcja - nazwa definiowanej funkcji,
– wyrażenie  -  wyrażenie  programu  MATLAB  w  postaci  łańcucha 

znaków.

Funkcje inline należy jedynie stosować do prostych obliczeń:

Przykład:
Zdefiniować  jako  funkcję  inline  funkcję  f1(x)=cos(2x-π)  oraz  obliczyć 
jej wartość dla x=3:

» 

f1=inline(‘cos(2*x-pi)’)

» y=f1(3)
f1 =

y =

Inline function

-0.9602

f1(x) = cos(2*x-pi)

background image

 

31

Dziękuję za uwagę


Document Outline