Tutorial_MATLAB_06.pdf

(211 KB) Pobierz
Laboratorium POK
Materiały do Laboratorium Informatyki
Rok akademicki: 2006/07
Semestr: letni
MATLAB – cz. 6 – Obliczenia
symboliczne
Środowisko MATLAB’a oferuje szereg bibliotek funkcji (tzn. toolbox’ów). Jednym z nich
jest toolbox „Symbolic Math” służący do przeprowadzana obliczeń symbolicznych. Toolbox
ten może być niedostępnych we wszystkich wersjach MATLAB’a.
Pierwszym krokiem jest zdefiniowanie zmiennych symbolicznych w następujący sposób:
x = sym('x')
x =
x
a = sym('alpha')
a =
alpha
Polecenia te tworzą dwie zmienne symboliczne:
- zmienną x, która wypisywana na ekran jest pod nazwą x,
- zmienną a, która wypisywana na ekran jest pod nazwą alpha.
Jak widać, jeśli zmienna jest zmienną symboliczną to wynik wypisywany jest bez wcięcia
(tzn. wartość zmiennej a, czyli ‘alpha’, pojawia się na ekranie dokładnie pod „a =”). Dla
porównania, wpisanie zwykłej wartości liczbowej do zmiennej, jak np.:
b = 8
b =
8
Powoduje wyświetlenie wyniku (8) z wcięciem (jak wyżej).
Przykłady prostego użycia:
sym(2)/sym(5)
ans =
2/5
Wynikiem jest „2/5”. Widzimy, że nie jest obliczana wartość wyrażenia 5
2 , a jedynie jego
postać. Ponadto:
Opracowali: dr inż. Witold Nocoń na podstawie MATLAB help.
Materiały do Laboratorium Informatyki
Rok akademicki: 2006/07
Semestr: letni
sym(2)/sym(5) + sym(1)/sym(3)
ans =
11/15
W tym wypadku następuje sprowadzenie do wspólnego mianownika.
x = sym('x')
a = sym('alpha')
rho = sym('(1 + sqrt(5))/2')
a więc definiujemy
ρ
1+
5
, co daje wynik:
2
rho =
(1 + sqrt(5))/2
Policzmy teraz wyrażenie:
f
= ρ
1
f = rho^2 - rho – 1
otrzymujemy:
f =
(1/2+1/2*5^(1/2))^2-3/2-1/2*5^(1/2)
Otrzymujemy dosyć skomplikowane wyrażenie. Możemy je uprościć wykorzystując funkcję
simplify :
simplify(f)
ans =
0
Widzimy, że w tym przypadku wyrażenie to redukuje się do zera.
Więcej możliwości:
Załóżmy, że chcemy badać funkcję kwadratową. aby możliwe było dokonywanie operacji
symbolicznych (różniczkowanie, całkowanie itp.), musimy zdefiniować tą funkcję w
następujący sposób:
a = sym('a')
b = sym('b')
c = sym('c')
x = sym('x')
Opracowali: dr inż. Witold Nocoń na podstawie MATLAB help.
2
ρ
83054901.001.png
Materiały do Laboratorium Informatyki
Rok akademicki: 2006/07
Semestr: letni
lub prościej:
syms a b c x
a następnie zdefiniować funkcję:
f = sym('a*x^2 + b*x + c')
Funkcja findsym pozwala na znalezienie zmiennych symbolicznych znajdujących się w
wyrażeniu, a więc:
findsym(f)
ans =
a, b, c, x
Aby podstawić wartości liczbowe do zmiennych symbolicznych, posługujemy się funkcję
subs . Np.:
syms x
f = 2*x^2 - 3*x + 1
subs(f,2)
ans =
3
a więc do wyrażenia f wstawiono x=2 i obliczono wynik. Jeśli w wyrażeniu występuje więcej
zmiennych symbolicznych, należy podać nazwę zmienne której wartość wstawiamy, np:
syms x y
f = x^2*y + 5*x*sqrt(y)
g = subs(f, x, 3)
a więc w wyrażeniu f, podstawiamy x=3, ciągle pozostaje zmienna symboliczna y, więc nie
można obliczyć wartości liczbowej wyrażenia f. otrzymujemy więc następujący wynik:
ans =
9*y+15*y^(1/2)
Podstawiając natomiast y=2, czyli:
subs(g,2)
otrzymujemy:
ans =
39.2132
Opracowali: dr inż. Witold Nocoń na podstawie MATLAB help.
Materiały do Laboratorium Informatyki
Rok akademicki: 2006/07
Semestr: letni
Operacje na wyrażeniach symbolicznych:
1) Obliczanie pochodnej:
syms x
f = sin(5*x)
diff(f)
ans =
5*cos(5*x) - obliczona pochodna funkcji f
diff(f,2)
ans =
-25*sin(5*x) - obliczona druga pochodna funkcji f
2) Pochodna cząstkowa (pochodna funkcji posiadającej więcej zmiennych):
syms s t
f = sin(s*t)
diff(f,t) - obliczanie pochodnej „f po t” czyli
t
ans =
cos(s*t)*s
diff(f,s) - obliczanie pochodnej „f po t” czyli
f
s
ans =
cos(s*t)*t
diff(f,t,2) - obliczanie drugiej pochodnej „f po t” czyli
2
f
t
2
ans =
-sin(s*t)*s^2
3) Obliczanie granic
syms h n x
limit( (cos(x+h) - cos(x))/h,h,0 )
ans =
-sin(x)
Jak nietrudno zauważyć policzyliśmy pochodną funkcji cos(x), licząc granicę ilorazu
różnicowego, czyli:
Opracowali: dr inż. Witold Nocoń na podstawie MATLAB help.
f
 
Materiały do Laboratorium Informatyki
Rok akademicki: 2006/07
Semestr: letni
f
'
()
=
lim
f
( ) ( )
+
h
f
x
h
h 0
3) Całkowanie:
Jeśli:
f =
sin(s*t)
to int(f) daje następujący wynik:
ans =
-1/s*cos(s*t)
Jest to więc całka funkcji f.
Aby obliczyć całkę oznaczoną, należy określić przedział:
int(sin(2*x),0,pi/2)
2
Liczymy więc całkę:
sin dx
()
x
, co daje wynik:
0
ans =
1
4) Algebra liniowa:
syms t;
G = [cos(t) sin(t); -sin(t) cos(t)]
G =
[ cos(t), sin(t)]
[ -sin(t), cos(t)]
Możemy obliczyć macierz A=G*G:
A=G*G
A =
[ cos(t)^2-sin(t)^2, 2*cos(t)*sin(t)]
[ -2*cos(t)*sin(t), cos(t)^2-sin(t)^2]
Opracowali: dr inż. Witold Nocoń na podstawie MATLAB help.
x
x
2
Zgłoś jeśli naruszono regulamin