Informatyka Transport Wykład 8

Matlab

Iteracja

Uzupełnienia

Wybrane operacje symboliczne

1

Instrukcja iteracyjna („pętla liczona”) Schemat iteracji:

for zmienna = wartość_pocz : krok: wartość_ końcowa

instrukcja

instrukcja

blok instrukcji

instrukcja

powtarzanych

….

end

Jeśli pominięty krok to krok=1

2

Przykłady prostych "pętli" : clc,clear

for i= 1:10,

disp('jakiś tekst')

end;

clc

l ,cle

l ar

for i= 1:1:10,

a(i) = i;

%element tablicy

disp(a)

pause

end;

3

Przykład ("zagnieżdżanie" iteracji): clc,clear

for i= 1:10,

for j = 1:10,

a(i

i ,

j

)

j =

i

*

i j

end

end

4

Przykład (uzależnienie licznika "pętli wewnętrznej): for i= 1:5,

for j = 1:i,

a(i , j) = i*j;

end

end

disp(a)

1 0 0

0

0

2 4 0 0

0

3 6 9 0 0

4 8 12 16 0

5

5 10 15 20 25

Przykład (sumowanie elementów w tablicy dwuwymiarowej):

a=0;

suma = 0;

for i= 1:5,

for j = 1:5,

a(i , j

) =

= 2*i -

4* j,

pause, %zatrzymuje do naciśnięcia klawisza suma=suma+a(i , j);

end

end

disp(suma)

6

Przykład (zliczanie elementów dodatnich w tablicy dwuwymiarowej):

clear; clc

a=rand(5,5)-0.5

%elementy dodatnie i ujemne

iledod= 0;

for i= 1:1:5,

for

o j =

1

:

1 1:

1 5,

5

if a(i , j)>0

iledod=iledod+1;

end

end

end

disp(iledod)

7

Przykład

a=rand(5)

disp('Oto 3-ci wiersz')

for k= 1:1:5,

disp(a(3, k))

end

disp('Oto przekątna')

for k= 1:1:5,

disp(a(k, k))

end

8

Przykład

Zmiana wartości wybranych elementów clc, clear

a=zeros(5,5)

%macierz 5x5 z zerami

for w= 2:1:4

for k= 2:1:4

a(w,

w k)=1

= ;

end

end

disp(a)

9

Poznaliśmy już podstawowe zasady inżynierii programowania…w Matlabie

MATLAB – programowanie "wsadowe" – m-pliki M-pliki to programy źródłowe, które można

"ur

"u uch

u

a

ch m

a ia

i ć

a "

ć w

w środ

o o

d w

o i

w sku

i

sku Mat

a la

l b

a +

b Wi

W n

i d

n o

d w

o s

w

Można je także kompilować (np. kompilatorem języka C) – cel: powstają samoistne programy działające bez środowiska Matlaba 10

a=input('Podaj a:') To jest metoda interaktywnego

podawania danych

Dla programisty bardzo użyteczny jest dostęp do

d

o j

a

j k

a ie

i g

e o

g ś

o s

po

p s

o ob

o u

b

u o

d

o c

d zytu

t

u d

a

d n

a y

n ch

h z

p

l

p ilk

i u

u

dyskowego i zapisu wyników do pliku 11

Matlab – bardzo łatwy sposób zapisu i odczytu Zapis tablicy do pliku ASCII (tekstowego) i odczyt clear

c = [8 6 4 2;4 -1 4 5]

save ('dane.txt', 'c','-ASCII') %zapis do pliku clear c

%usu

u

n

su i

n ę

i ci

ę e

ci

e zmie

i n

e n

n e

n j

e z W

z o

W r

o kspa

ksp ce

a

load ('dane.txt')

%załadowanie pliku

disp('Dane z pliku:');

disp(dane) %dostęp pod nazwą zmiennej jak nazwa pliku 12

Zapisywanie wielu danych do pliku Specjalne pliki typu mat

a=rand(3)

% losowa tablica 3x3

b=6

% zmienna prosta

save ('plik.mat', 'a', 'b')

% zapisujemy do pliku mat

cle

cl a

e r

a a

clear b

%usuwamy zmienne z Workspace

load ('plik.mat')

%ładujemy plik

disp(a)

disp(b)

%sprawdzamy dane z pliku

13

Pakiet Matlab może posiadać zainstalowany dodatek Symbolic Toolbox, umożliwiający obliczenia symboliczne.

Wykorzystanie obliczeń symbolicznych wymaga zadeklarowania abstrakcyjnych zmiennych nie posiadających wartości. Służy do tego polecenie o postaci: sy

s m

y s

m ar

a g1

g

1 a

r

a g2

g

2 a

r

a g 3

3 i

t

i d

t

14

Przykład operacji symbolicznych na tablicach

>> syms A B a b c d e f g h

>> A=[a b; c d]

A =

[ a, b]

[ c,

d

]

d

>> B=[e f ; g h]

B =

[ e, f]

[ g, h]

15

>> il_m=A*B

il_m =

[ a*e+b*g, a*f+b*h]

[ c*e+d*g, c*f+d*h]

>> il_e=A.*B

il_e =

[ a*e, b*f]

[ c*g, d*h]

16

Rozwiązywanie równań – funkcja solve()

>> syms a b c x % definicja 4 zmiennych symbolicznych

>> y = solve(a*x^2+b*x+c) % rozwiązanie równania względem x y =

y

-1/2*(b-(b^2-4*a*c)^(1/2))/a

-1/2*(b+(b^2-4*a*c)^(1/2))/a

17

Obliczanie granic ciągów – funkcja limit()

» syms n

» g= limit((1-3*n)/(1+n), inf) g =

-3

Uwaga: inf jest symbolem ∞ (nieskończoność) 18

Obliczanie pochodnych funkcji - funkcja diff( ) Przykład: Obliczenie pochodnej funkcji f(x)=x2

» syms x

» w= diff(x^2)

ans =

2*x

19

Można też wyznaczać wzory na pochodne drugiego stopnia

Przykład:

f (x, y, z )

>> sym

s x, y,

y z

f = x*y*z^x+(1/x/y)^2

>> d2 = diff(f,x,2) d2 =

(x*y*z)^x*(log(x*y*z)+1)^2+(x*y*z)^x/x+6/x^4/y^2

20

Można obliczać całki za pomocą funkcji int( ) Całka nieoznaczona

» syms a x

» int(a+x)

ans =

a*

a x

* +

x 1

+ /

1 2

/ *

2 x

* ^

x 2

^

2

Całka oznaczona

» syms x

» int(x^2,1,3)

ans =

26/3

21