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
2
Wynikiem jest 2/5 . Widzimy, że nie jest obliczana wartość wyrażenia , a jedynie jego
5
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')
1 + 5
a więc definiujemy = , co daje wynik:
2
rho =
(1 + sqrt(5))/2
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.
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)
"f
diff(f,t) - obliczanie pochodnej f po t czyli
"t
ans =
cos(s*t)*s
"f
diff(f,s) - obliczanie pochodnej f po t czyli
"s
ans =
cos(s*t)*t
2
" f
diff(f,t,2) - obliczanie drugiej pochodnej f po t czyli
2
"t
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.
Materiały do Laboratorium Informatyki Rok akademicki: 2006/07
Semestr: letni
f (x + h)- f (x)ź#
# ś#
f '(x) = lim
ś#
h0
h
# #
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(2x)dx , 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.
Materiały do Laboratorium Informatyki Rok akademicki: 2006/07
Semestr: letni
5) Rozwiązywanie równań (symboliczne):
Funkcja solve umożliwia symboliczne rozwiązywanie równań, np.:
solve('a*x^2 + b*x + c')
ans =
1/2/a*(-b+(b^2-4*a*c)^(1/2))
1/2/a*(-b-(b^2-4*a*c)^(1/2))
Warto zauważyć, że MATLAB sam domyślił się, że zmienną niezależną jest x .
Wywołanie tej funkcji w przypadku ogólnym powinno wyglądać następująco:
solve('a*x^2 + b*x + c','x')
5) Rozwiązywanie równań różniczkowych zwyczajnych (symboliczne):
Przykład:
dsolve('Dx = a*x')
ans =
C1*exp(t*a)
dsolve('Df = f + sin(t)')
ans =
-1/2*cos(t)-1/2*sin(t)+exp(t)*C1
Opracowali: dr inż. Witold Nocoń na podstawie MATLAB help.
Wyszukiwarka
Podobne podstrony:
Tutorial MATLAB 3Tutorial MATLABTutorial MATLABTutorial MATLAB 1Tutorial MATLABTutorial MATLAB 2Tutorial MATLABTutorial MATLABTutorial MATLABTutorial MATLABArtificial Neural Networks The Tutorial With MATLABmatlab tutorium1Matlab Polski tutorialmatlab tutorium2Matlab tutorial GUIMATLAB cw SkryptySIMULINK MATLAB to VHDL Routewięcej podobnych podstron