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
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
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*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