Matlab Przykłady praktyczne Równania różniczkowe

39
Matlab Przykłady praktyczne Równania różniczkowe Wykład 5 MOiPP 1

description

MOiPP. Wykład 5. Matlab Przykłady praktyczne Równania różniczkowe. Wykresy funkcji symbolicznych - ezplot. syms x f=x^2 fp= diff (f) subplot (2,1,1) ezplot (f, [-2,2]) subplot (2,1,2) ezplot ( fp , [-2,2]). Długość krzywej (np. paraboli). clc clear syms x disp ('parabola') - PowerPoint PPT Presentation

Transcript of Matlab Przykłady praktyczne Równania różniczkowe

1

Matlab

• Przykłady praktyczne

• Równania różniczkowe

Wykład 5

MOiPP

2

Przypomnienie - wykresy funkcji symbolicznych - ezplot

ezplot( f, [xmin xmax ymin ymax])

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

8

Można też liczyć w sposób przybliżony metodą siecznych

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

11

Zaspa

Iloczyn dwóch paraboli

Objętość oblicza całka podwójna:

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)

13

-5 -4 -3 -2 -1 0 1 2 3 4 5

-10-5

05

100

0.1

0.2

0.3

0.4

0.5

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)