Matlab (5) Matlab – równania różniczkowe, aproksymacja =
Transkrypt
Matlab (5) Matlab – równania różniczkowe, aproksymacja =
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('Dy=1+y^2') dsolve f= tan(t+C1) f= dsolve('Dy=1+y^2','x') =dsolve f= tan(x+C1) Po wstawieniu przykładowego warunku początkowego: f = dsolve dsolve('Dy=1+y^2','y(0)=1') %sprawdzenie s=diff diff(f,t)-1-f^2 diff f= tan(t+1/4*pi) s= 0 Przykład 2. Rozwiązać równanie: 5( ) = −75( ) r=dsolve = -a*x') r=dsolve('Dx dsolve r= C1*exp(-a*t) Przykład 3. Równanie różniczkowe drugiego stopnia: (5) = 89:( 5) − 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') dsolve y= 4/3*cos(x)-1/3*cos(2*x) simplify(y) %uproszczenie simplify 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') dsolve 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 d3u/dx3 , D2u(0) odpowiada u"(0) 1 Ćwiczenie Znaleźć wzór na prędkość w ruchu jednostajnie przyśpieszonym w przedziale [t0, t] z przyśpieszeniem a oraz warunkiem początkowym v(t0)=v0. 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 = C, A(BD ) = AD @B Po scałkowaniu otrzymujemy: A = AD + E C @B F Metoda obliczeń symbolicznych w Matlab-ie: syms a v0 t0 t v = v0 + int(a,t,t0,t) int 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',…) dsolve 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 = C, A(BD ) = AD @B 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') dsolve 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 dsolve Ćwiczenie Prędkość początkowa auta wynosi v0=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) = Rozwiązujemy równanie różniczkowe: clc, clear M syms t %rozwiązanie równania różniczkowego v=dsolve dsolve('Dv=-0.2*t','v(0)=30') dsolve % szukamy miejsca zerowe dla v tk=subs subs(solve(v)) subs %wykres v(t) ezplot(v, ezplot [0 max(tk)]) hold on %"zamrożenie" wykresu % rysujemy oś x ezplot(0*t,[0 tk(2)]) ezplot title('v(t)') Zadanie Równanie oscylatora harmonicznego bez tłumienia to: + ω0 U(B) = 0 gdzie: y(t) – położenie ciała, ωD – częstość drgań, zaś oscylatora z tłumieniem: @V U @U + 2β + ωD U(B) = 0 V @B @B 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) polyfit 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. Ćwiczenie Obliczyć współczynniki paraboli y=p1x2+p2x+p3, 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: x1=0, y1=0 x2=5, y2=1 x3=10, y3=0 Zapisujemy wartości współrzędnych x1,x2,x3 wektorze x, a wartości y1,y2,y3 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) Ćwiczenie 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 clc N=5 %stopień wielomianu x1=[0 1 2 3 4 5] y1=[0 1 1 1 1 0] p=polyfit polyfit(x1,y1,N) polyfit 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) polyval 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 clc 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]) Ćwiczenie 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ń: clc 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) polyfit xx=0:0.1:5; yy=polyval polyval(p,xx); polyval 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=q1y2+q2y+q3, 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.