Matlab (5) Matlab równania różniczkowe, aproksymacja Równania różniczkowe - funkcja dsolve() Funkcja dsolve 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. Zmienna niezależna domyślna to t. Nazwy zmiennych symbolicznych nie powinny zawierać litery 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. Przykład 1. Rozwiązać równanie różniczkowe: () = + () f=dsolve dsolve('dy=1+y^2') tan(t+c1) f=dsolve dsolve('dy=1+y^2','x') tan(x+c1) Po wstawieniu przykładowego warunku początkowego: dsolve('dy=1+y^2','y(0)=1') %sprawdzenie s=diff diff(f,t)-1-f^2 tan(t+1/4*pi) s= 0 Przykład 2. Rozwiązać równanie: 5() = 75() r=dsolve dsolve('dx = -a*x') r = C1*exp(-a*t) Przykład 3. Równanie różniczkowe drugiego stopnia: (5) 5 = 89:(5) z dwoma warunkami początkowymi: y(0)=1; y'(0)=0 y = dsolve('d2y=cos(2*x)-y','y(0)=1','dy(0)=0', 'x') y = 4/3*cos(x)-1/3*cos(2*x) simplify(y) %uproszczenie ans = 4/3*cos(x)-2/3*cos(x)^2+1/3 Przykład 4. Rozwiązać równanie: = >? =5 > =? warunki początkowe: u(0)=1, u'(0)=-1, u"(0)=π
u = dsolve('d3u=u','u(0)=1','du(0)=-1','d2u(0) = pi','x') 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) D3u reprezentuje d 3 u/dx 3, D2u(0) odpowiada u"(0) 1 Znaleźć wzór na prędkość w ruchu jednostajnie przyśpieszonym w przedziale [t 0, t] z przyśpieszeniem a oraz warunkiem początkowym v(t 0 )=v 0. Zadanie to możemy rozwiązać na 2 sposoby: Sposób 1. Wykorzystanie funkcji int Korzystamy z tego, że przyśpieszenie jest pochodną prędkości v względem czasu t. @A @B = C, A(B D) = A D Po scałkowaniu otrzymujemy: A = A D + E C @B F Metoda obliczeń symbolicznych w Matlab-ie: syms a v0 t0 t v = v0 + int(a,t,t0,t) Wynik obliczeń symbolicznych: v = v0 + a*(t-t0) Sposób 2. Wykorzystanie funkcji dsolve Funkcja dsolve rozwiązuje symbolicznie zwykłe równania różniczkowe. dsolve('równanie1', 'równanie2', 'zmienna1', 'zmienna2', ) Warunki początkowe są określane przez równania podobne do 'y(a)=b' lub 'Dy(a)=b' gdzie y jest zmienną zależną, zaś a i b są stałymi. Przyśpieszenie jest pochodną prędkości v względem czasu t. @A @B = C, A(B D) = A D Określenie zmiennych symbolicznych: syms a t0 t v0 v Wywołanie funkcji dsolve zapis równania różniczkowego w postaci symbolicznej. dsolve('dv=a ', 'v(t0)=v0 ', 't') Metoda obliczeń symbolicznych w Matlab-ie: % program rozwiązania równania różniczkowego dv/dt=a, v(t0)=v0 syms a t0 t v0 v v = dsolve('dv = a','v(t0) = v0') %zmienna t jest domyślna Prędkość początkowa auta wynosi v 0 =30 m/s. Przyspieszenie jest funkcją a(t)= -0.2*t. Po jakim czasie auto się zatrzyma? Znamy następujące wzory: C(B) = L A(B) = M Rozwiązujemy równanie różniczkowe:, clear
syms t %rozwiązanie równania różniczkowego v=dsolve dsolve('dv=-0.2*t','v(0)=30') % szukamy miejsca zerowe dla v tk=subs subs(solve(v)) %wykres v(t) ezplot(v, [0 max(tk)]) hold on %"zamrożenie" wykresu % rysujemy oś x ezplot(0*t,[0 tk(2)]) title('v(t)') Zadanie Równanie oscylatora harmonicznego bez tłumienia to: + ω U(B) 0 = 0 gdzie: y(t) położenie ciała, ω D częstość drgań, zaś oscylatora z tłumieniem: @ V U @U + 2β @BV @B + ω DU(B) = 0 gdzie: β współczynnik tłumienia. Rozwiązać obydwa równania przyjmując różne warunki początkowe. Utworzyć wykresy y(t). Aproksymacja Metoda aproksymacji polega na znalezieniu funkcji f(x), której wykres przechodzi w pobliżu zbioru zadanych punktów. Niech w naszym przypadku funkcją aproksymującą f(x) będzie wielomian n-tego stopnia w(x). Wtedy do znalezienia współczynników wielomianu używamy funkcji polyfit, której składnia ma postać: a=polyfit polyfit(x,y,n) gdzie: x - jest zbiorem N posortowanych rosnąco wartości współrzędnych zmiennej niezależnej, y - jest zbiorem N odpowiadających wartości zmiennej zależnej, n - jest stopniem wielomianu aproksymującego, a - jest wektorem poszukiwanych wartości współczynników wielomianu aproksymującego. Obliczyć współczynniki paraboli y=p 1 x 2 +p 2 x+p 3, która przyjmuje wartości 0 na końcach przedziału <0,10>, a wartość 1 w połowie przedziału. Z warunków zadania wynika, że: x 1=0, y 1=0 x 2=5, y 2=1 x 3=10, y 3=0 Zapisujemy wartości współrzędnych x 1,x 2,x 3 wektorze x, a wartości y 1,y 2,y 3 w wektorze y x=[0, 5, 10] y=[0,1,0] Wykonujemy funkcję polyfit p=polyfit(x,y,2) Metoda obliczeń w Matlab-ie: % Obliczenie współczynników paraboli y(x)=p(1)*x^2 + p(2)*x+p(3) x=[0,5,10]; y=[0,1,0];
p=polyfit(x,y,2) plot(x,y,'o') %wykres punktowy % sprawdzenie na wykresie x1=0:0.1:10; y1=p(1)*x1.^2+p(2)*x1+p(3); hold on plot(x1,y1) Obliczyć współczynniki wielomianu 5-go stopnia, stanowiącego aproksymację dla zbioru punktów: p1(0, 0), p2(1, 1), p3(2, 1), p4(3, 1), p5(4, 1), p6(5,0) Przeanalizować poniższe rozwiązanie: clear N=5 %stopień wielomianu x1=[0 1 2 3 4 5] y1=[0 1 1 1 1 0] p=polyfit polyfit(x1,y1,n) x=0:0.1:5; y=0; %pętla sumująca elementy wielomianu for m=1:n+1 y=y+p(m)*x.^(n-m+1); end; %dwa wykresy plot(x1,y1,'o',x,y) axis([0 5-1 2]) Obliczenie wartości wielomianu o znanych współczynnikach Wartości otrzymanego wielomianu, w dowolnych zadanych punktach wektorem xx oblicza funkcja polyval. ypi = polyval(p,xx) gdzie p - wektor współczynników wielomianu ypi - wektor wartości wielomianu w zadanych punktach xx A zatem w naszym poprzednim zadaniu, zamiast pętli sumującej można wykorzystać funkcję polyval: clear N=5 %stopień wielomianu x1=[0 1 2 3 4 5] y1=[0 1 1 1 1 0] p=polyfit(x1,y1,n) x=0:0.1:5; %pętla sumująca elementy wielomianu y=polyval(p,x) %dwa wykresy plot(x1,y1,'o',x,y) axis([0 5-1 2])
Zbadać wielomiany stopnia od n=5 do 7, aproksymujące losowo wybrane wartości y z przedziału (0,10) dla punktów x=[1 2 3 4 5] oraz zgromadzić wykresy funkcji wielomianowych w jednym układzie współrzędnych. Realizacja obliczeń: x=1:5; y=round(10*rand(1,5)) plot(x, y, 'o') for k=4:7 % pętla stopni wielomianu hold on p=polyfit polyfit(x,y,k) xx=0:0.1:5; yy=polyval polyval(p,xx); plot(xx,yy) end Jak można zauważyć jednoznaczność rozwiązania istnieje dla stopnia wielomianu n mniejszego od liczby punktów N. Zadanie Obliczyć współczynniki paraboli z=q 1 y 2 +q 2 y+q 3, która przyjmuje wartości 0 na końcach przedziału <0,20>, a wartość 1 w połowie przedziału i narysować wykres paraboli.