Ćwiczenie 5. Matlab – równania różniczkowe, aproksymacja =

Transkrypt

Ćwiczenie 5. Matlab – równania różniczkowe, aproksymacja =
Ćwiczenie 5. Matlab – równania różniczkowe, aproksymacja
Równania różniczkowe - funkcja dsolve()
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
. Zmienna niezależna domyślna
to t.
Nazwy zmiennych symbolicznych nie powinny zatem 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
spr= diff(f,t)-1-f^2
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)=π
1
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)
Układ równań różniczkowych
Funkcja dsolve rozwiązuje także układ równań różniczkowych zwyczajnych kilku zmiennych, z warunkami początkowymi lub bez.
Przykład
Dwa równania liniowe, pierwszego rzędu:
@
= 3A(B) + 4C(B) ;
D( )
= −4A(B) + 3C(B)
S = dsolve('Df
= 3*f+4*g', 'Dg = -4*f+3*g')
dsolve
S=
f: [1x1 sym]
g: [1x1 sym]
Rozwiązania są zwracane w strukturze S. Można określić wartości f i g, wpisując:
f = S.f
f=
exp(3*t)*(C1*sin(4*t)+C2*cos(4*t))
g = S.g
g=
exp(3*t)*(C1*cos(4*t)-C2*sin(4*t))
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')
dsolve
f=
exp(3*t)*sin(4*t)
g=
exp(3*t)*cos(4*t)
Poniżej jeszcze jeden przykład składni w Symbolic Math Toolbox.
+ 4I(B) = J K
; y(0)=1
y = dsolve('Dy+4*y
dsolve
= exp(-t)', 'y(0) =1')
spr=diff
diff(y,t)+4*y
%sprawdzenie rozwiązania
diff
spr = simplify(spr)
simplify
t=0;
%sprawdzenie warunku początkowego
wp=subs
subs(y)
subs
y=
(1/3*exp(3*t)+2/3)*exp(-4*t)
spr =
exp(-4*t)*exp(3*t)
spr =
exp(-t)
wp =
1
2
Zadanie
Równanie oscylatora harmonicznego bez tłumienia to:
+ ω0 2 I(B) = 0
gdzie: y(t) – położenie ciała, ωO – częstość drgań,
zaś oscylatora z tłumieniem:
PQ I
PI
+
2β
+ ωO Q I(B) = 0
PB Q
PB
gdzie: β– współczynnik tłumienia.
Rozwiązać obydwa równania przyjmując różne warunki początkowe. Utworzyć wykresy y(t) dla założonych
wartości ω0 i β oraz różnych warunków początkowych.
Ćwiczenie
Zadanie z ćw. 3 wykonane metodą rozwiązania równania różniczkowego:
Samochód startuje w chwili t0=0 od prędkości v0=0 i przyspiesza ruchem jednostajnie przyspieszonym do
prędkości v1 = 20m/s w czasie 5 sekund. Jedzie ze stałą prędkością przez 10 sekund, a następnie hamuje
przez 4 sekundy i zatrzymuje się.
Przeanalizować i zrozumieć etapy wykonania zadania.
%Ruch złożony, a=const
clc,clear
syms t tp sp vp a V
%dane
T=[0 5 15 19]
V=[0 20 20 0 ]
sp0=0; %droga początkowa
N=length(T)-1; %liczba przedziałów
s=dsolve('D2s=a','s(tp)=sp','Ds(tp)=vp')
%Obliczenie S(t) w przedziałach
for k=1:N
A(k)=(V(k+1)-V(k))/(T(k+1)-T(k)); % przyspieszenia
tp=T(k); vp=V(k); a=A(k);
if k==1
sp=sp0;
end
S(k)=subs(s);
t=T(k+1);
sp=subs(S(k)); %obliczenie war. pocz. dla nast. przedziału
syms t %czas z powrotem symboliczny
end
S % wypisz tablicę wyrażeń symb. S(t) w przedziałach
%wykresy
subplot(3,1,1)
for k=1:N
ezplot(S(k),[T(k) T(k+1)])
hold on
t=T(k+1); %końcowy czas przedziału
zasieg(k)=subs(S(k)); %wstaw do wzoru
end
zasieg %tablica zasięgów w przedziałach
3
z=max(zasieg) %na wypadek gdyby auto się cofało
fprintf('Auto przejechało %d m\n',zasieg(end));
axis([T(1) T(end) 0 z])
title('s(t)');
%wykres prędkości
syms t
subplot(3,1,2)
for k=1:N
v(k)=diff(S(k))
ezplot(v(k),[T(k) T(k+1)])
hold on
end
axis([T(1) T(end) min(V)-5 max(V)+5])
title('v(t)');
%wykres przyspieszeń
subplot(3,1,3)
syms a
for k=1:N
a(k)=diff(v(k))
ezplot(a(k),[T(k) T(k+1)]);
hold on
end
axis([T(1) T(end) min(A)-2 max(A)+2]);
title('a(t)');
s(t)
200
100
0
0
5
10
t
v(t)
15
0
5
10
t
a(t)
15
5
10
x
15
20
10
0
5
0
-5
0
Aproksymacja
Metoda aproksymacji polega na znalezieniu funkcji f(x), której wykres przechodzi w pobliżu zbioru zadanych
punktów, zaś sama funkcja minimalizuje wartość pewnego kryterium dopasowania, najczęściej sformułowanego
w postaci:
4
g
c = d[Ie − A(fe )]Q
ehi
gdzie fe to wartości zmiennej niezależnej, Ie to wartości zmiennej zależnej. Tego typu aproksymacja nazywana jest aproksymacją średniokwadratową.
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=polyf
polyfit
polyfit(x,y,n)
it
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 zadanym 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;
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
Realizacja obliczeń:
xx=[0:0.1:10];
p= [1 3 1];
ypi=polyval(p,xx);
plot(xx,ypi) % rysowanie wykresu paraboli w przedziale (0,10)
Ć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.
Zadania
1. Napisać program, który wczytuje stopień wielomianu n instrukcją:
n = input('n = ')
oblicza wektor P współczynników wielomianu instrukcją polyfit dla danych:
x=[1:12];
y=[1.2 3.7 4.7 4.5 3.4 1.9 1.7 1.8 2.3 3.8 5.4 7.5];
oblicza wartości yy wielomianu instrukcją polyval dla danych:
xx =[1:0.2:12];
oraz wyświetla wykresy y(x) oraz yy(xx) instrukcją plot.
6
2. 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 tej paraboli.
7

Podobne dokumenty