background image

Komputerowe 

Wspomaganie

Projektowania

Akademia Morska w Gdyni

Wydział Elektryczny

mgr inż. Andrzej Rak    anrak@am.gdynia.pl

background image

2

Programy wspomagania obliczeń inżynierskich

Komercyjne

• MATLAB
• MathCAD
• Mathematica
• Statistica
• Maple
• ...

Wolne

• Octave
• Scilab
• Maxima
• Euler
• Scigraphica
• ...

background image

3

Co to jest MATLAB?

MAT

rix 

LAB

oratory

Język programowania wysokiego poziomu (IV 

generacji)

Producent: The MathWorks Inc. USA

http://www.mathworks.com

news:comp.soft-sys.matlab

background image

4

Literatura

1. Dokumentacja w Internecie: 

http://www.mathworks.com/access/helpdesk/help/helpdesk.shtml

 

2. Pratap R., Matlab 7 dla naukowców i inżynierów, PWN (Mikom), Warszawa, 

2007.

3. Dobroczyński L., Matlab. Środowisko obliczeń naukowo technicznych, Mikom, 

Warszawa, 2005.

4. Mrozek B. Mrozek Z., Matlab. Leksykon kieszonkowy, Helion, Warszawa 

2005.

5. Mrozek B. Mrozek Z., Matlab i Simulink Poradnik Użytkownika, Helion, 

Warszawa 2004.

5,5. Mrozek B. Mrozek Z., Matlab 6 (5 Simulink 2) Poradnik Użytkownika, PLJ, Warszawa 2001 

(1998)

6. Zalewski A. Cegieła R., Matlab - obliczenia numeryczne i ich zastosowania, 

Nakom, Poznań 1996.

background image

5

Cechy MATLAB-a

• Otwarte środowisko
• Ogromna ilość rozszerzeń (toolbox-y)
• Integracja obliczeń numerycznych i funkcji 

graficznych

• Wieloplatwormowość (PC, UNIX, Macintosh)
• Interfejs API (C, Fortran, Ada, ActiveX)

background image

6

Struktura środowiska MATLAB

background image

7

Główne okno MATLAB-a

Okno poleceń

Podgląd przestrzeni roboczej

Historia poleceń

Dostęp do programów narzędzi i plików pomocy

Operacje w bieżącym katalogu

Ustalanie bieżącego katalogu

Pomoc

background image

8

Podstawowe polecenia - Pomoc

• Pomoc na temat

>> help

• Okno pomocy

>> helpwin

 

• Poszukiwanie ciągu znaków

>> lookfor

» 

lookfor serial

FREESERIAL Release MATLAB's hold on serial port.
INSTRCB Wrapper for serial object M-file callback.
INSTRFIND Find serial port objects with specified property values.
DATENUM Serial date number.

. . . .

» help instrfind
 INSTRFIND Find serial port objects with specified property values.

 

     OUT = INSTRFIND returns all serial port objects that exist in 

memory.

     The serial port objects are returned as an array to OUT

.....

background image

9

Tryby pracy z MATLAB-em

• Tryb interakcyjny

zmienna = polecenie;
polecenie, polecenie, zmienna = polecenie;

• Tryb wsadowy

m-file (skrypt)

Uwaga!  MATLAB rozróżnia 

WIELKIE

 i 

małe

 litery

background image

10

Znaki specjalne

=

przypisanie

[ ]

tworzenie tablic, listy argumentów wyjściowych

{ }

tworzenie i indeksowanie tablic blokowych

( )

argumenty wejściowe funkcji, kolejność obliczeń

...

kontynuacja linii

:

generowanie wektorów, indeksowanie macierzy

.

kropka dziesiętna, element operatorów
arytmetycznych, wskazywanie pól struktury

background image

11

Znaki specjalne cd.

;

koniec wiersza macierzy, wstrzymanie „echo”

,

separator indeksów, argumentów funkcji, poleceń

%

komentarz

wprowadzanie łańcuchów, operator transpozycji lub
sprzężenia macierzy

!

wyjście do systemu operacyjnego

..

katalog macierzysty („jeden wyżej”)

background image

12

Podstawowe polecenia - Pliki i zmienne

>> cd / pwd, ls / dir

 - zmiana, listowanie bieżącego katalogu

>> what

 - listowanie plików bieżącego katalogu (z podziałem na grupy)

>> which

 - lokalizowanie funkcji lub zmiennej za pomocą nazw

>> clear

 - usuwanie zmiennej / funkcji z pamięci

>> who (whos)

 - listowanie nazw zmiennych w przestrzeni roboczej 

(rozmiar macierzy, zajętość pamięci, typ)

>> size

 - zwraca rozmiar macierzy

background image

13

Operatory arytmetyczne

>> 2/3

ans =

    0.6667

>> 2\3

ans =

    1.5000

Operatory Arytmetyczne

^    potęgowanie

*    mnożenie

/    dzielenie prawostronne

\    dzielenie lewostronne

+   dodawanie

-    odejmowanie

’     sprzężenie macierzy

.’    transpozycja macierzy

background image

14

» kasa = [-2 10 NaN 30 -11 Inf 31];
» all_pos = all(kasa>=0)
all_kasa =
    0
» each_pos = kasa>=0
each_pos =
    0     1     0     1     0     1     1
» pos_fin = (kasa>=0)&(isfinite(kasa))
pos_fin =
    0     1     0     1     0     0     1

1 = PRAWDA
0 = FAŁSZ

Operatory Logiczne
= =  równe

>     większe niż

<     mniejsze niż

~     nie

&    i

|      lub

isempty()

isfinite(), etc. . . .

any()

all()

Operatory logiczne

background image

15

Zmienne i stałe specjalne

ans

Domyślna nazwa nie zadeklarowanej zmiennej

pi

Pi 

 

π

 = 3.141592…

eps

Precyzja zmiennoprzecinkowa: 2.206x10

-16

 = 2

-52

(

realmax, realmin

)

inf

Nieskończoność 

1

i,j

Jednostka urojona

nan

0/0 lub 

∞ / ∞

flops

Licznik operacji zmiennoprzecinkowych

background image

16

Wprowadźmy liczbę rzeczywistą
Reprezentacja stałoprzecinkowa

format short

   = 0.3333 

  

  (5 cyfr)

format long

     = 0.33333333333333 

(15 cyfr)

Reprezentacja zmiennoprzecinkowa (e)

format short e

  = 3.3333e-001

 

  (5 cyfr)

format long e

  = 3.333333333333333e-001 

(15 cyfr)

Postać ułamkowa (przybliżenie)

format rat

 = 1/3

Reprezentacja szesnastkowa

format hex

 = 3fd5555555555555

 

(15 cyfr)

Wybrane formaty 

wyświetlania

 liczb 

3333

.

0

3

1

=

=

x

background image

17

Macierz - podstawowy typ danych w MATLAB-ie

MATLAB == MATrix LABoratory

»load durer

»image(X);

»colormap(map)

»load detail

»image(X);

»colormap(map)

background image

18

Macierz - indeksowanie

4

10

1

6

2

8

1.2

9

4

25

7.2

5

7

1

11

0

0.5

4

5

56

23

83

13

0

10

1

2

Wiersze (m)   

3

4

5

Kolumny

(n)

1         2         3          4         5

1

6

11

16

21

2

7

12

17

22

3

8

13

18

23

4

9

14

19

24

5

10

15

20

25

A =

A (2,4)

A (17)

Tablica prostokątna:
Skalar:  macierz 1-na-1
Wektor:  macierz m-na-1

 macierz 1-na-n

Macierz: macierz m-na-n

background image

19

Wybór elementów macierzy

4

10

1

6

2

8

1.2

9

4

25

7.2

5

7

1

11

0

0.5

4

5

56

23

83

13

0

10

1

2

3

4

5

1         2         3          4         5

1

6

11

16

21

2

7

12

17

22

3

8

13

18

23

4

9

14

19

24

5

10

15

20

25

A =

A(3,1)

A(3)

A(1:5,5)
A(:,5) 

A(21:25)

A(4:5,2:3)

A([9 14;10 15])

• Używaj nawiasów () do określania indeksów
• Dwukropek (:) określa zakres: “Wszystko”
• Nawiasy [ ] pozwalają zdefiniować macierz indeksów
• ‘end’ określa największą wartość indeksu

A(1:end,end) 
A(:,end)

A(21:end)

background image

20

Definiowanie macierzy

Elementem macierzy może być 
dowolne wyrażenie MATLAB-a

» a=[1 2;3 4]
a = 
     1     2
     3     4
» b=[-2.8, sqrt(-7), (3+5+6)*3/4]
b =
   -2.8000   0 + 2.6458i   10.5000
» b(2,5) = 23
b =
   -2.8000  0 + 2.6458i  10.5000   0        0
         0            0        0   0  23.0000

Separator wierszy:
średnik (;)

Separator kolumn:
spacja / przecinek (,)

Macierze muszą 
być prostokątne 

(za brakujące 
elementy wstaw 0)

Pamiętaj o 
nawiasach [ ]

background image

21

Definiowanie macierzy cd.

» w=[1 2;3 4] + 5
w =
     6     7
     8     9
» x = 1:5
x =
     1     2     3     4     5
» y = 2:-0.5:0
y = 
  2.0000   1.5000   1.0000   0.5000   0 
» z = rand(2,4)
z =
  0.9501   0.6068   0.8913   0.4565
  0.2311   0.4860   0.7621   0.0185

Operacje 
algebraiczne

Generowanie ciągów:
operator dwukropek (:)

Specjalizowane 
funkcje

background image

22

Łączenie macierzy

» a=[1 2;3 4]
a = 
     1     2
     3     4
» cat_a=[a, 2*a; 3*a, 4*a; 5*a, 6*a]
cat_a =
     1     2     2     4
     3     4     6     8
     3     6     4     8
     9    12    12    16
     5    10     6    12
    15    20    18    24

Stosuj [ ] do łączenia 
zdefiniowanych 
macierzy jako 
“elementów” nowych

Pamiętaj o 
nawiasach [ ]

Macierz 
wynikowa musi 
być prostokątna 

4*a

Separator wierszy:
średnik (;)

Separator kolumn:
spacja / przecinek (,)

background image

23

Mnożenie macierzy

• “Wewnętrzne” wymiary muszą być równe
• Wymiar macierzy wynikowej = “zewnętrzne” wymiary macierzy 

mnożonych

• Elementy macierzy wynikowej = suma iloczynów wierszy 

pierwszej macierzy z kolumnami drugiej

» a = [1 2 3 4; 5 6 7 8];
» b = ones(4,3);
» c = a*b
c =
    10    10    10
    26    26    26

[2x4]
[4x3]

[2x4]*[4x3]              [2x3]

a(2gi wiersz) * b(3cia kolumna)

background image

24

Mnożenie tablicowe

• Macierze muszą mieć identyczne wymiary
• Wymiar macierzy wynikowej = Wymiary macierzy mnożonych
• Elementy macierzy wynikowej = iloczyny odpowiednich 

elementów macierzy mnożonych 

» a = [1 2 3 4; 5 6 7 8];
» b = [1:4; 1:4];
» c = a.*b
c =
     1     4     9    16
     5    12    21    32

c(2,4) = a(2,4)*b(2,4)

Uwaga!  Analogiczne reguły odnoszą się do pozostałych działań

background image

25

Co to jest wektoryzacja?

Inne języki programowania - pętle

MATLAB - operacje macierzowe:

»

tic; Gestosc = Masa./(Dlug.*Szer.*Wys); toc

elapsed_time =
     0

» tic;

 

for I = 1:1000

Gestosc(I) = Masa(I)/(Dlug(I)*Szer(I)*Wys(I));
end; toc
elapsed_time =
   0.0500

TIC i TOC - 

pomiar czasu 

Kod wektoryzowany 

jest znacznie szybszy 

background image

26

Macierze wielowymiarowe

 1   0   0   0
 0   1   0   0
 0   0   1   0
 0   0   0   1

» A = pascal(4);
» A(:,:,2) = magic(4)
A(:,:,1) =
     1     1     1     1
     1     2     3     4
     1     3     6    10
     1     4    10    20
A(:,:,2) =
    16     2     3    13
     5    11    10     8
     9     7     6    12
     4    14    15     1
» A(:,:,9) = 

diag(ones(1,4));

Warstwa N

 0   0   0   0
 0   0   0   0
 0   0   0   0
 0   0   0   0

16   2   3  13
 5  11  10   8
 9   7   6  12
 4  14  15   1

 1   1   1   1
 1   2   3   4
 1   3   6  10
 1   4  10  20

background image

27

Edytor macierzy

background image

28

>> -5/(4.8+5.32)^2
ans =
   -0.0488
>> (3+4i)*(3-4i)
ans =
    25
>> cos(pi/2)
ans =
  6.1230e-017
>> exp(acos(0.3))
ans =
    3.5470

» a = 2;
» b = 5;
» a^b
ans = 
    32
» x = 5/2*pi;
» y = sin(x)
y = 
     1
» z = asin(y)
z = 
    1.5708

Wynik zapisany 
do zmiennej “ans” 
(bez nazwy)

argumenty funkcji 
w nawiasach ()

Wstrzymanie 
wypisania 
odpowiedzi

MATLAB jako kalkulator

Deklarowanie zmiennych

Liczby zapisywane są w notacji 
zmiennoprzecinkowej podwójnej precyzji

Praca interakcyjna

background image

29

» [sred, odch] = ourstat([6 3 8 6 1 8 7 2 3 9 7 1]) 

sred =

    5.0833

odch =

    2.7826

Praca wsadowa

Wykonanie m-pliku funkcyjnego

Zmienne 
wyjściowe
(wynikowe)

Nazwa m-pliku

Dane 
wejściowe
(wektor)

background image

30

• Pliki skryptowe

• Działają tak jakby wpisywano szereg poleceń MATLAB-a w 

oknie poleceń

• Zmienne przechowywane są w 

globalnej

 przestrzeni roboczej

• Pliki funkcyjne

• Pozwalają na tworzenie własnych poleceń MATLAB-a
• Wszystkie zmienne wewnątrz funkcji są 

lokalne

• Informacja do funkcji może być przekazywana tylko w formie 

parametrów

Pliki skryptowe i funkcyjne

background image

31

% m–plik obliczjący
% ciąg Fibonacciego

f = [1 1]; i = 1;
while f(i) + f(i+1) < 1000

f(i+2) = f(i) + f(i+1);
i = i + 1;

end
semilogy(f)

• Standardowy plik 

tekstowy ASCII

• Wykonuje ciąg poleceń 

MATLAB-a w przestrzeni 
roboczej.

M-plik skryptowy

background image

32

M-plik funkcyjny (funkcja)

function

 y = mean (x)

% MEAN Average or mean value.
% For vectors, MEAN(x) returns the mean value.
% For matrices, MEAN(x) is a row vector
% containing the mean value of each column.

[m,n] = size(x);

if 

m == 1

m = n;

end

y = sum(x)/m;

Argumenty wyjściowe

Argumenty wejściowe

Nazwa funkcji

Pomoc

Kod funkcji

background image

33

Wybrane polecenia związane z programowaniem 

funkcji

function

  definiowanie funkcji

global

 

definiowanie zmiennych globalnych

persistent    

definiowanie zmiennych lokalnych z pamięcią wartości

nargchk

sprawdzanie zakresu wartości parametrów

nargin

liczba argumentów wejściowych

nargout

liczba argumentów wyjściowych

return

 

powrót do miejsca wywołania funkcji

error

komunikat o błędzie i przerwanie wykonywania funkcji

eval

 

wykonanie łańcucha jako polecenia MATLAB-a

feval

 

wykonanie funkcji zapisanej jako łańcuch

input

 

tekst jako zachęta do wprowadzania danych

keyboard

  wywołanie klawiatury

menu

 

generacja graficznego lub tekstowego menu

pause

 

oczekiwanie na reakcję użytkownika

background image

34

Struktury programowania

• pętla 

for

for

 indx = 1:10

  y(indx)= 3*indx

end

• pętla 

while

indx=1;

while

 indx <= 10

  y(indx)=3*indx
  indx=indx+1;

end

    

background image

35

•  instrukcja warunkowa 

if 

for

 indx = 1:41

   

if

 indx <= 10

        y(indx)= 2*indx;

   

elseif

  indx <=20

        y(indx)= 3*indx;

   

else

        y(indx)= indx-1;

   

end

end

• “wektoryzuj” gdzie się da!

y = [2:2:20 33:3:60 20:40]

Struktury programowania cd.

background image

36

Struktury programowania cd.

• Instrukcja wyboru 

switch

switch

 inputval

     

case

 1, 

     y = 2*indx;

     

case

 2, 

     y = 4*indx;

     

otherwise

,  disp(

‘unknown option‘

);

end

• nie “przelatuje”  (w przeciwieństwie do C nie potrzeba instrukcji 

break)

case

  TrueValue,  y=1;

case

  NextValue,  y=2;   

%Warunek nie sprawdzany

background image

37

Edycja skryptu

>> edit     
>> edit nazwa.ext

background image

38

Debuggowanie skryptu

Ustaw pułapkę
Usuń pułapki
Krok do funkcji
Krok w funkcji
Kontynuuj
Wyjście

Obsługa stosu

Kursor nad 
zmienną = wartość

K

>>

background image

39

W następnych odcinkach...

•Funkcje I/O
•Grafika 2D i 3D
•Podstawy „Handle Graphics”
•Przykłady zastosowań

•SIMULINK