Matlab Przykłady praktyczne Równania różniczkowe
description
Transcript of Matlab Przykłady praktyczne Równania różniczkowe
3
syms xfun=3*x^3-sin(x)ezplot (fun) %domyślny przedział x (-2, 2)
syms xfun=3*x^3-sin(x)ezplot (fun, [ -1 1]) %tylko przedział x (y domyślny)
syms xfun=3*x^3-sin(x)ezplot (fun)ezplot (fun, [ -1 1 -2 2], 1) %przedział x i y oraz numer okna
syms xfun=3*x^3-sin(x)ezplot (fun)axis([ -1 1 -2 2 ]) % osobne ustalenie zakresów x i y
4
syms x
f=x^2
fp=diff(f)
subplot(2,1,1)
ezplot(f, [-2,2])
subplot(2,1,2)
ezplot(fp, [-2,2])
Przykłady
-2 -1.5 -1 -0.5 0 0.5 1 1.5 2
0
1
2
3
4
x
x2
-2 -1.5 -1 -0.5 0 0.5 1 1.5 2
-4
-2
0
2
4
x
2 x
syms x
f=x^2
fp=diff(f)
figure(1)
ezplot(f, [-2,2])
figure(2)
ezplot(fp, [-2,2])
-2 -1.5 -1 -0.5 0 0.5 1 1.5 2
0
0.5
1
1.5
2
2.5
3
3.5
4
x
x2
-2 -1.5 -1 -0.5 0 0.5 1 1.5 2
-4
-3
-2
-1
0
1
2
3
4
x
2 x
syms x
f=x^2
fp=diff(f)
ezplot(f, [-2,2])
hold on
ezplot(fp, [-2,2])
title('abcde')
Dwie krzywe na jednym wykresie
5
-2 -1.5 -1 -0.5 0 0.5 1 1.5 2
-4
-3
-2
-1
0
1
2
3
4
x
abcde
6
Długość krzywej (np. paraboli)
clcclearsyms xdisp('parabola')f=x^2;d=int(sqrt(1+diff(f)^2), -1, 1); %całka oznaczona
disp('całkowita długość:')disp(d)disp (double(d))
parabolaf= x^2całkowita długość:5^(1/2)-1/2*log(-2+5^(1/2))
2.9579
-1 -0.5 0 0.5 1
0
0.1
0.2
0.3
0.4
0.5
0.6
0.7
0.8
0.9
1
x
x2
7
Długość krzywej (np. paraboli) – równania parametryczne
clc, clearsyms tx=t/2; %równania parametryczney=t^2/4;l=int(sqrt(diff(x)^2+diff(y)^2),-2, 2)L=subs(l) %oblicz wartość liczbowąt=-2:0.1:2;x=subs(x);y=subs(y);plot(x,y)
x =1/2*t
y = 1/4*t^2l = 5^(1/2)-1/2*log(-2+5^(1/2))L =
2.9579
-1 -0.8 -0.6 -0.4 -0.2 0 0.2 0.4 0.6 0.8 10
0.1
0.2
0.3
0.4
0.5
0.6
0.7
0.8
0.9
1
9
x=-1:0.1:1;s=0;for k=1:length(x)-1 y(k)=x(k).^2; y(k+1)=x(k+1).^2;
s=s+sqrt((y(k+1)-y(k))^2+(x(k+1)-x(k))^2);enddisp(s)
Długość odcinka wg prawa Pitagorasa
s =
2.9564
wynik przybliżony
Realizacja metody siecznychSumujemy odcinki prostej pomiędzy punktami węzłowymi
10
x=0:0.1:pi;s=0;for k=1:length(t)-1 s=s+sqrt((sin(x(k+1))-sin(x(k)))^2+(x(k+1)-x(k))^2);enddisp(s)
Długość f(x)=sin(x) w przedziale (0, pi)
s =
3.7609
12
clear%wykres zaspya=10;b=20;h=0.5;[x, y] =meshgrid(-a/2:0.1:a/2, -b/2:0.1:b/2);z = h*(a^2-4*x.^2).*(b^2-4*y.^2)/b^2/a^2;mesh(x,y,z)
%obliczenie objętoscisyms y x h a bzsym= h*(a^2-4*x^2)*(b^2-4*y^2)/b^2/a^2;p=int(int(zsym,x,-a/2,a/2),y,-b/2,b/2)a=10;b=20;h=0.5;v0=subs(p)
14
clc,clearsyms xf=x^3-5*x+2ezplot(f,[-3, 3]) %rysujemy wykres funkcjidf=diff(f,x); % 1-sza pochodnaext=subs(solve(df,x)) %znajdujemy zera pochodnej (ekstrema)d2f=diff(f,x,2); % 2-ga pochodnafor k=1:length(ext) x=ext(k); % wstawiamy ekstremum do x – teraz x jest liczbą inf=subs(d2f); % wartość 2-giej pochodnej w punkcie extremum if imag(inf)==0 % jeśli wartość nie jest zespolona if inf<0 fprintf('w punkcie %f jest maksimum\n', x) else fprintf('w punkcie %f jest minimum\n', x) end endend;
Wyznaczanie ekstremum funkcji – badanie pochodnych
15
f = x^3-5*x+2ext = 1.2910 -1.2910 w punkcie 1.290994 jest minimum w punkcie -1.290994 jest maksimum
-3 -2 -1 0 1 2 3
-10
-5
0
5
10
x
x3-5 x+2
Wyniki badania extremum
16
Funkcja ta 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 to t.
17
Nazwy zmiennych symbolicznych nie powinny zawierać D. Zmienną niezależną domyślną t można zmienić i podać jako drugi 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.
UWAGI
18
ans =tan(x+C1)
Przykłady
dsolve('Dx = -a*x')
dsolve('Dy=1+y^2') %zmienna t domyślna
ans =tan(t+C1)
dsolve('Dy=1+y^2','x') %zmienna x ustalona
ans =C1*exp(-a*t)
parametr symboliczny
19
f = 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)
pochodna=
1+tan(t+1/4*pi)^2
f =tan(t+1/4*pi)
Po wstawieniu warunków początkowych:
20
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)
Wynik
21
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
22
f = S.ff =
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))
Przykład
S = f: [1x1 sym] g: [1x1 sym]
Dwa równania liniowe, pierwszego rzędu:
S = dsolve('Df = 3*f+4*g', 'Dg = -4*f+3*g')
Rozwiązania obliczane są zwracane w strukturze S. Można określić wartości f i g, wpisując:
23
Jeśli chcemy uzyskać f i g bezpośrednio, oraz uwzględnić także warunki początkowe, wpisujemy:
f =exp(3*t)*sin(4*t)
g =exp(3*t)*cos(4*t)
[f,g] = dsolve('Df=3*f+4*g, Dg =-4*f+3*g', 'f(0) = 0, g(0) = 1')
24
f = dsolve('D2y=cos(2*x)-y','y(0)=1','Dy(0)=0', 'x')
Przykład 3
Równanie różniczkowe drugiego stopnia z dwoma warunkami początkowymi:
f2 =
4/3*cos(x)-2/3*cos(x)^2+1/3
f =
4/3*cos(x)-1/3*cos(2*x)
f2=simplify(f) %uproszczenie
25
Sprawdzenie rozwiązania
s= diff(diff(f2))-cos(2*x)+f2
s2=simplify(s)
s =
-4/3*sin(x)^2+2/3*cos(x)^2-cos(2*x)+1/3
s2 =
0
26
Jeszcze jeden przykład składni w Symbolic Math Toolbox.
warunek pocz.: y(0) = 1
y = dsolve('Dy+4*y = exp(-t)', 'y(0) =1')spr=diff(y,t)+4*y %sprawdzenie rozwiązaniaspr1 = simplify(spr) %uproszczenie wyrażeniat=0; %sprawdzenie warunku początkowegowp=subs(y)
y =(1/3*exp(3*t)+2/3)*exp(-4*t)
spr =exp(-4*t)*exp(3*t)
spr1 =exp(-t)
wp =1
solve – symboliczne rozwiązywanie równań
subs – podstawianie danych do wyrażeń symbolicznych
limit – wyznaczanie granic funkcji (limes)
diff - wyznaczanie pochodnych funkcji
int - wyznaczanie całek nieoznaczonych i oznaczonych
dsolve – rozwiązywanie równań różniczkowych
simplify – upraszczanie wyrażeń symbolicznych
ezplot – wykres funkcji symbolicznej
Podstawowe funkcje Symbolic Tool
Podsumowanie
syms – inicjacja zmiennych symbolicznych
Przykłady zastosowań równań różniczkowych
Rzut ukośny pod kątem 0 z prędkością początkową v0 (pomijamy opór powietrza)
ax (t) = = 0
ay (t) = = -g
vx(0) = x'(0) = v0 cos 0
vy(0) = y'(0) = v0 sin 0
x(0)=0
y(0)=0
warunki początkowe
x1 = dsolve('D2x = 0','Dx(0) = v0*cos(alfa0)','x(0)=0','t')y1 = dsolve('D2y = -g','Dy(0) = v0*sin(alfa0)','y(0)=0','t')
Zapis równań różniczkowych w Matlabie:
clear,clcsyms a t0 t v0 v g alfa0
%danealfa0=pi/4;v0=60;g=9.81; % rozwiązanie równań różniczkowych x= dsolve('D2x = 0','Dx(0) = v0*cos(alfa0)','x(0)=0','t');y = dsolve('D2y = -g','Dy(0) = v0*sin(alfa0)','y(0)=0','t');
cd.
Kolejne czynności:
% wstawienie danych do wzorów x(t) i y(t)xu=subs(x); yu=subs(y); % obliczenie funkcji składowych prędkości vx(t) vy(t)vx=double(diff(xu,t)); %przeliczenie stałejvy=diff(yu,t); %obliczenie czasu osiągnięcia ziemit_ziemia=double(solve(yu)); disp('Czas osi¹gniêcia ziemi:')disp(t_ziemia(2)); %bo t_ziemia(1)=0 % wyznaczenie funkcji s(t)st=int(sqrt(diff(x,t)^2+diff(y,t)^2),t,0,t);s=subs(st); %wstawienie danych alfa0 i v0 do wzoru
cd.
% wyznaczenie funkcji s(t)st=int(sqrt(diff(x,t)^2+diff(y,t)^2),t,0,t);s=subs(st); %wstawienie danych alfa0 i v0 do wzoru % obliczenie drogi całkowitejt=t_ziemia(2);sc=subs(s); %wstawienie zasu t_ziemia(2) do funkcji s(t)disp('Całkowita droga:')disp(sc);
% Obliczenie zasięgu x rzutut=t_ziemia(2);zasieg = subs(xu);disp('Zasięg rzutu:')disp(zasieg); % Obliczenie czasu osiągnięcia wysokości maxtmax=double(solve(vy));disp('Czas osiągnięcia wysokości max:')disp(tmax);
cd.
% Obliczenie składowej y prędkości początkowejt=0;vy0=subs(vy);disp('Składowa y prędkości początkowej:')disp(vy0); %Obliczenie składowej y prędkości przy uderzeniu w ziemięt=t_ziemia(2);vyk=subs(vy);disp('Składowa y prędkości przy uderzeniu w ziemię:')disp(vyk);
cd.
%WYKRESY
t=0:0.1:t_ziemia(2); %Punkty czasu % wykres x(t) i y(t)
% wstawienie wektora czasu do obu funkcji położeniaxp=subs(xu); yp=subs(yu);subplot(3,2,1)plot(t,xp,t, yp)axis([0 ,t_ziemia(2), 0 max([zasieg ymax]+10)])title('Położenie x(t) y(t)')
% wykres y(x)subplot(3,2,2)plot(xp, yp)axis([0 ,zasieg, 0 ymax])title('Położenie y(x)')
cd.
%wykres vx(t) i vy(t)
%wektor dla stałej vx w punktach czasuvx=subs(vx); vx=ones(1, length(t))*vx; % wektor vy dla punktów czasuvy=subs(vy); subplot(3,2,3)plot(t,vx,t,vy)axis([0 ,t_ziemia(2), -vy0-10 vy0+10])title('Składowe prędkości vx(t) vy(t)') %wykres v(t)v=sqrt(vx.^2+vy.^2);%sumowanie składowych vx i vysubplot(3,2,4)plot(t ,v)axis([0 ,t_ziemia(2), -v0 v0])title('Prędkość v(t)')
%wykres s(t)
%wstawienie wektora czasust=subs(s); subplot(3,2,5)plot(t,st)axis([0 ,t_ziemia(2), 0 500])title('droga(t)')
cd.
Wyniki
Czas osiągnięcia ziemi: 8.6496Całkowita droga: 421.2087Zasięg rzutu: 366.9725Czas osiągnięcia wysokości max: 4.3248Wysokość max: 91.7431Składowa y prędkości początkowej: 42.4264Składowa y prędkości przy uderzeniu w ziemię: -42.4264
0 2 4 6 80
100
200
300
Położenie x(t) y(t)
0 100 200 3000
20
40
60
80
Położenie y(x)
0 2 4 6 8-50
0
50Składowe prędkości vx(t) vy(t)
0 2 4 6 8-60
-40
-20
0
20
40
60Prędkość v(t)
0 2 4 6 80
100
200
300
400
500droga(t)
Oscylator harmoniczny bez tłumienia
gdzie: y(t) – położenie ciała, – częstość drgań,
Oscylator z tłumieniem
– współczynnik tłumienia.
clcsyms xf=dsolve('D2y+1*y=0','y(0)=4','Dy(0)=0','x')t=0subs(f)ezplot(f,[0 10*pi, -6 6],1)f2=dsolve('D2y+0.1*Dy+1*y=0','y(0)=4','Dy(0)=0','x')ezplot(f2,[0, 10*pi, -5 5],2)
0 5 10 15 20 25 30-6
-4
-2
0
2
4
6
x
4 cos(x)
0 5 10 15 20 25 30-5
-4
-3
-2
-1
0
1
2
3
4
5
x
4/399 3991/2 exp(-1/20 x) sin(1/20 3991/2 x)+4 exp(-1/20 x) cos(1/20 3991/2 x)