matlab przykłady metod obliczeniowych obliczenia symboliczne
DESCRIPTION
MOiPP. Wykład 4. Matlab Przykłady metod obliczeniowych Obliczenia symboliczne. Sortowanie bąbelkowe. Porównywanie kolejnych par elementów sąsiadujących i zamiana miejscami w przypadku niew ł a ś ciwej kolejno ś ci. 1234.....N. N-1 porównań. Wykonujemy N przebiegów. - PowerPoint PPT PresentationTRANSCRIPT
![Page 1: Matlab Przykłady metod obliczeniowych Obliczenia symboliczne](https://reader035.vdocuments.pub/reader035/viewer/2022062314/56812bc0550346895d9001f2/html5/thumbnails/1.jpg)
1
Matlab
• Przykłady metod obliczeniowych
• Obliczenia symboliczne
Wykład 4
MOiPP
![Page 2: Matlab Przykłady metod obliczeniowych Obliczenia symboliczne](https://reader035.vdocuments.pub/reader035/viewer/2022062314/56812bc0550346895d9001f2/html5/thumbnails/2.jpg)
Porównywanie kolejnych par elementów sąsiadujących i zamiana miejscami w przypadku niewłaściwej kolejności
Sortowanie bąbelkowe
1 2 3 4 ..... N
N-1 porównań Wykonujemy N przebiegów
Sortowanie bąbelkowe skróconePrzebiegów wykonujemy N-1
W każdym kolejnym przebiegu liczba analizowanych par jest zmniejszana o 1, a
![Page 3: Matlab Przykłady metod obliczeniowych Obliczenia symboliczne](https://reader035.vdocuments.pub/reader035/viewer/2022062314/56812bc0550346895d9001f2/html5/thumbnails/3.jpg)
3
96 12 22 76 64 23 74 11
9622 76 64 23 74 1112
2 PRZEBIEG
1 PRZEBIEG
![Page 4: Matlab Przykłady metod obliczeniowych Obliczenia symboliczne](https://reader035.vdocuments.pub/reader035/viewer/2022062314/56812bc0550346895d9001f2/html5/thumbnails/4.jpg)
4
clcclearN=5;G=rand(1,N)%stadardowa funkcja sortującaG1=sort(G)%sortowanie bąbelkowefor k=1:N-1 for m=1:N-k if G(m)>G(m+1) pom=G(m); G(m)=G(m+1); G(m+1)=pom; end end disp(G) %pokazuje kolejne wypływające "bąbelki"end%ostatecznie po posortowaniudisp(G)
zamiana miejscami gdy elementy w niewłaściwej kolejności
M-plik - sortowanie "bąbelkowe"
![Page 5: Matlab Przykłady metod obliczeniowych Obliczenia symboliczne](https://reader035.vdocuments.pub/reader035/viewer/2022062314/56812bc0550346895d9001f2/html5/thumbnails/5.jpg)
5
Obliczenia symboliczne w Matlabie
Niezbędny jest tu dodatkowy (komercyjny) tzw. toolbox o nazwie Symbolic Tool
![Page 6: Matlab Przykłady metod obliczeniowych Obliczenia symboliczne](https://reader035.vdocuments.pub/reader035/viewer/2022062314/56812bc0550346895d9001f2/html5/thumbnails/6.jpg)
Obliczenia symboliczne wymagają zadeklarowania zmiennych symbolicznych – abstrakcyjnych zmiennych, które nie posiadają wartości liczbowej
syms zmienna1 zmienna2 itd
Służy do tego polecenie syms:
![Page 7: Matlab Przykłady metod obliczeniowych Obliczenia symboliczne](https://reader035.vdocuments.pub/reader035/viewer/2022062314/56812bc0550346895d9001f2/html5/thumbnails/7.jpg)
Symboliczne rozwiązywanie równań – funkcja solve()
syms x af=a - x^2;z =solve (f, x)
Przykład:
z = a^(1/2) -a^(1/2)
![Page 8: Matlab Przykłady metod obliczeniowych Obliczenia symboliczne](https://reader035.vdocuments.pub/reader035/viewer/2022062314/56812bc0550346895d9001f2/html5/thumbnails/8.jpg)
syms a b c d e f g h
A=[a b; c d]
B=[e f ; g h]
il_m=A*B
il_e=A.*B
Symboliczne operacje macierzowe
A =
[ a, b]
[ c, d]
B =
[ e, f]
[ g, h]
il_m =
[ a*e+b*g, a*f+b*h]
[ c*e+d*g, c*f+d*h]
il_e =
[ a*e, b*f]
[ c*g, d*h]
ilustracja iloczynów macierzy kwadratowych
iloczyn macierzowy Cauchy'ego
iloczyn elementowy Hadamarda (po współrzędnych)
![Page 9: Matlab Przykłady metod obliczeniowych Obliczenia symboliczne](https://reader035.vdocuments.pub/reader035/viewer/2022062314/56812bc0550346895d9001f2/html5/thumbnails/9.jpg)
Przykład:
Wstawienie danych do wyrażeń symbolicznych -
funkcja subs( )
Rezultat:
y =
-1/2*(b-(b^2-4*a*c)^(1/2))/a
-1/2*(b+(b^2-4*a*c)^(1/2))/a
w =
-0.3333
-1.0000
syms a b c x % definicja 4 zmiennych symbolicznych
y = solve(a*x^2+b*x+c) % rozwiązanie równania względem x
a=3; b=4; c=1; % Przypisanie wartości liczbowych a b c
w = subs(y) % Obliczenie wartości liczbowej dla y
![Page 10: Matlab Przykłady metod obliczeniowych Obliczenia symboliczne](https://reader035.vdocuments.pub/reader035/viewer/2022062314/56812bc0550346895d9001f2/html5/thumbnails/10.jpg)
Do obliczania granic na podstawie wyrażenia symbolicznego służy funkcja limit.
Jej składnia może być następująca:
limit (F,[zmienna],[b])
wyznaczenie granicy dla wyrażenia symbolicznego F, względem wskazanej zmiennej,
granica dla zmiennejb,
Obliczenia granic ciągów i funkcji - funkcja limit( )
![Page 11: Matlab Przykłady metod obliczeniowych Obliczenia symboliczne](https://reader035.vdocuments.pub/reader035/viewer/2022062314/56812bc0550346895d9001f2/html5/thumbnails/11.jpg)
Uwagi:
• zmienna jest opcjonalna, jeśli wyrażenie zawiera jedną zmienną.
• b opcjonalne, jego pominięcie oznacza granicę dla zmienna0.
wyznaczenie granicy lewostronnej dla wyrażenia symbolicznego F, w punkcie b,
limit(F, zmienna, b, 'left')
wyznaczenie granicy prawostronnej dla wyrażenia symbolicznego F, w punkcie b.
limit(F, zmienna, b, 'right')
![Page 12: Matlab Przykłady metod obliczeniowych Obliczenia symboliczne](https://reader035.vdocuments.pub/reader035/viewer/2022062314/56812bc0550346895d9001f2/html5/thumbnails/12.jpg)
Obliczenie granicy ciągu:
syms n
w= limit((1-3*n)/(1+n), inf)
Przykład
Rezultat:
w =
-3
Uwaga: inf jest symbolem ∞ (nieskończoność)
![Page 13: Matlab Przykłady metod obliczeniowych Obliczenia symboliczne](https://reader035.vdocuments.pub/reader035/viewer/2022062314/56812bc0550346895d9001f2/html5/thumbnails/13.jpg)
Przykład
syms x
a=limit(tan(x),x, pi/2,'left')
b=limit(tan(x),x, pi/2,'right')
a=
Inf
b=
-Inf
Obliczenie granicy lewo i prawostronnej funkcji tg(x)
w punkcie pi/2
![Page 14: Matlab Przykłady metod obliczeniowych Obliczenia symboliczne](https://reader035.vdocuments.pub/reader035/viewer/2022062314/56812bc0550346895d9001f2/html5/thumbnails/14.jpg)
Argumentami funkcji są:
• funkcja, względem której pochodna będzie liczona,
• zmienna, względem której pochodna jest liczona (opcjonalnie)
• rząd pochodnej (opcjonalnie)
Obliczanie pochodnych funkcji - funkcja diff( )
diff (F,[zmienna],[N])
![Page 15: Matlab Przykłady metod obliczeniowych Obliczenia symboliczne](https://reader035.vdocuments.pub/reader035/viewer/2022062314/56812bc0550346895d9001f2/html5/thumbnails/15.jpg)
syms x a=diff(x^2)
Przykład:
Obliczenie pochodnej funkcjif(x)=x2
a = 2*x
Rezultat
![Page 16: Matlab Przykłady metod obliczeniowych Obliczenia symboliczne](https://reader035.vdocuments.pub/reader035/viewer/2022062314/56812bc0550346895d9001f2/html5/thumbnails/16.jpg)
Obliczenie pochodnej funkcji f(x, y, z)
według każdej zmiennej (pochodne cząstkowe):
Przykład:
![Page 17: Matlab Przykłady metod obliczeniowych Obliczenia symboliczne](https://reader035.vdocuments.pub/reader035/viewer/2022062314/56812bc0550346895d9001f2/html5/thumbnails/17.jpg)
17
syms x y z
f=(x*y*z)^x+(1/(x*y))^2
diff(f)
diff(f,x)
diff(f,y)
diff(f,z)
ans =
(x*y*z)^x*(log(x*y*z)+1)-2/x^3/y^2
ans =
(x*y*z)^x*(log(x*y*z)+1)-2/x^3/y^2
ans =
(x*y*z)^x*x/y-2/x^2/y^3
ans =
(x*y*z)^x*x/z
![Page 18: Matlab Przykłady metod obliczeniowych Obliczenia symboliczne](https://reader035.vdocuments.pub/reader035/viewer/2022062314/56812bc0550346895d9001f2/html5/thumbnails/18.jpg)
syms x
diff(f,x,2)
Obliczenie pochodnej funkcji f (x, y, z )
Przykład:
ans =
(x*y*z)^x*(log(x*y*z)+1)^2+(x*y*z)^x/x+6/x^4/y^2
![Page 19: Matlab Przykłady metod obliczeniowych Obliczenia symboliczne](https://reader035.vdocuments.pub/reader035/viewer/2022062314/56812bc0550346895d9001f2/html5/thumbnails/19.jpg)
Całkowanie funkcji - funkcja
int( )
Jej argumentem jest funkcja symboliczna
opcjonalnie także zmienna całkowania oraz granice całkowania (dla całek oznaczonych).
int(F,[zmienna], [a , b])
Uwaga: domyślnie zmienną symboliczną jest x
![Page 20: Matlab Przykłady metod obliczeniowych Obliczenia symboliczne](https://reader035.vdocuments.pub/reader035/viewer/2022062314/56812bc0550346895d9001f2/html5/thumbnails/20.jpg)
syms a x int(a+x) int(a+x, a) %Sprawdzeniediff(f)
Przykład:
ans = a*x+1/2*x^2
ans = 1/2*a^2+a*x
ans = a+x
Obliczenie całki nieoznaczonej funkcji f(a,b)=a+b
Rezultat:
![Page 21: Matlab Przykłady metod obliczeniowych Obliczenia symboliczne](https://reader035.vdocuments.pub/reader035/viewer/2022062314/56812bc0550346895d9001f2/html5/thumbnails/21.jpg)
Obliczenie całki oznaczonej:
syms x
int(x^2,1,3)
int(sin(x),0,pi)
Obliczenie całki oznaczonej funkcji sin x w przedziale (0, π)
ans = 26/3
ans = 2
![Page 22: Matlab Przykłady metod obliczeniowych Obliczenia symboliczne](https://reader035.vdocuments.pub/reader035/viewer/2022062314/56812bc0550346895d9001f2/html5/thumbnails/22.jpg)
Funkcja oblicza symbolicznie rozwiązania równań różniczkowych zwyczajnych. Równania są określane przez symboliczne wyrażenia zawierające literę D do oznaczenia stopnia.
Symbole D2, D3... DN, odnoszą się do drugiej, trzeciej,..., n-tej pochodnej.
D2y jest zatem odpowiednikiem symbolicznym
.
Rozwiązywanie równań różniczkowych funkcja dsolve()
Zmienna niezależna domyślna t.
![Page 23: Matlab Przykłady metod obliczeniowych Obliczenia symboliczne](https://reader035.vdocuments.pub/reader035/viewer/2022062314/56812bc0550346895d9001f2/html5/thumbnails/23.jpg)
Nazwy zmiennych symbolicznych nie powinny zatem zawierać D. Zmienną niezależną można zmienić i podać jako ostatni argument.
Warunki początkowe mogą być określone przez dodatkowe równania.
Jeśli nie określono warunków początkowych, rozwiązania zawierają stałe całkowania: C1, C2, itp. Rozwiązanie dsolve jest podobne do solve. Oznacza to, że można wywołać dsolve z liczbą zmiennych wyjściowych równą liczbie zmiennych zależnych od lub umieścić w strukturze, której pola zawierają rozwiązania równań różniczkowych.
![Page 24: Matlab Przykłady metod obliczeniowych Obliczenia symboliczne](https://reader035.vdocuments.pub/reader035/viewer/2022062314/56812bc0550346895d9001f2/html5/thumbnails/24.jpg)
dsolve('Dy=1+y^2')
Przykład
dsolve('Dx = -a*x')
zmienna t domyślna
zmienna x ustalona
ans =tan(t+C1)
dsolve('Dy=1+y^2','x')ans =
tan(x+C1)
ans =
C1*exp(-a*t)
Rozwiązać równanie:
![Page 25: Matlab Przykłady metod obliczeniowych Obliczenia symboliczne](https://reader035.vdocuments.pub/reader035/viewer/2022062314/56812bc0550346895d9001f2/html5/thumbnails/25.jpg)
y = dsolve('Dy=1+y^2','y(0)=1')
Uwaga: y jest w obszarze roboczym MATLAB, ale t nie jest, a zatem polecenie diff(y,t) zwraca błąd.
Aby umieścić t w obszarze roboczym należy:
syms t
pochodna=diff(y,t)
y =tan(t+1/4*pi)
Po wstawieniu warunków początkowych:
pochodna=
1+tan(t+1/4*pi)^2
![Page 26: Matlab Przykłady metod obliczeniowych Obliczenia symboliczne](https://reader035.vdocuments.pub/reader035/viewer/2022062314/56812bc0550346895d9001f2/html5/thumbnails/26.jpg)
Przykład 2
Równania nieliniowe mogą mieć wiele rozwiązań, nawet wtedy, gdy podane są warunki początkowe:
x = dsolve('(Dx)^2+x^2=1','x(0)=0')
x =
[ sin(t)]
[ -sin(t)]
![Page 27: Matlab Przykłady metod obliczeniowych Obliczenia symboliczne](https://reader035.vdocuments.pub/reader035/viewer/2022062314/56812bc0550346895d9001f2/html5/thumbnails/27.jpg)
Równanie różniczkowe drugiego stopnia z dwoma warunkami początkowymi:
Przykład 3
y = dsolve('D2y=cos(2*x)-y','y(0)=1','Dy(0)=0', 'x')
simplify(y) %uproszczenie
y =
4/3*cos(x)-1/3*cos(2*x)
ans =
4/3*cos(x)-2/3*cos(x)^2+1/3
![Page 28: Matlab Przykłady metod obliczeniowych Obliczenia symboliczne](https://reader035.vdocuments.pub/reader035/viewer/2022062314/56812bc0550346895d9001f2/html5/thumbnails/28.jpg)
u = dsolve('D3u=u','u(0)=1','Du(0)=-1','D2u(0) = pi','x')
warunki początkowe
u =
1/3*pi*exp(x)-1/3*(pi+1)*3^(1/2)*exp(-1/2*x)*sin(1/2*3^(1/2)*x)+
(1-1/3*pi)*exp(-1/2*x)*cos(1/2*3^(1/2)*x)
Przykład 4
D3u reprezentuje d3u/dx3
D2u(0) odpowiada u"(0)
![Page 29: Matlab Przykłady metod obliczeniowych Obliczenia symboliczne](https://reader035.vdocuments.pub/reader035/viewer/2022062314/56812bc0550346895d9001f2/html5/thumbnails/29.jpg)
Funkcja dsolve rozwiązuje także układ równań różniczkowych zwyczajnych kilku zmiennych, z warunkami początkowymi lub bez
Układ równań różniczkowych
![Page 30: Matlab Przykłady metod obliczeniowych Obliczenia symboliczne](https://reader035.vdocuments.pub/reader035/viewer/2022062314/56812bc0550346895d9001f2/html5/thumbnails/30.jpg)
S = dsolve('Df = 3*f+4*g', 'Dg = -4*f+3*g')
Przykład
f = S.fg = S.g
S = f: [1x1 sym] g: [1x1 sym]
Dwa równania liniowe, pierwszego rzędu:
Rozwiązania obliczane są zwracane w strukturze S. Można określić wartości f i g, wpisując:
f = exp(3*t)*(C1*sin(4*t)+C2*cos(4*t))
g = exp(3*t)*(C1*cos(4*t)-C2*sin(4*t))
![Page 31: Matlab Przykłady metod obliczeniowych Obliczenia symboliczne](https://reader035.vdocuments.pub/reader035/viewer/2022062314/56812bc0550346895d9001f2/html5/thumbnails/31.jpg)
Jeśli chcemy uzyskać f i g bezpośrednio, oraz uwzględnić także warunki początkowe, wpisujemy:
[f,g] = dsolve('Df=3*f+4*g, Dg =-4*f+3*g', 'f(0) = 0, g(0) = 1')
f =exp(3*t)*sin(4*t)
g =exp(3*t)*cos(4*t)
![Page 32: Matlab Przykłady metod obliczeniowych Obliczenia symboliczne](https://reader035.vdocuments.pub/reader035/viewer/2022062314/56812bc0550346895d9001f2/html5/thumbnails/32.jpg)
Jeszcze jeden przykład składni w Symbolic Math Toolbox.
y = dsolve('Dy+4*y = exp(-t)', 'y(0) =1')spr=diff(y,t)+4*y %sprawdzenie rozwiązaniaspr = simplify(spr)t=0 %sprawdzenie warunku początkowegowp=subs(y)
y(0) = 1
y =(1/3*exp(3*t)+2/3)*exp(-4*t)
spr =exp(-4*t)*exp(3*t)
spr =exp(-t)
t =0
wp =1