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.

Podobne dokumenty