Sprawozdanie z laboratorium nr 1:
Rozwiązywanie równań różniczkowych z niezerowymi warunkami początkowymi.
$$\frac{d^{2}y}{dt^{2}} + 2\frac{\text{dy}}{\text{dt}} + 4y = 0\ ;\ \ war.\ pocz.\ \ y\left( 0 \right) = 0\ ;\ \dot{y}\left( 0 \right) = - 1$$
Symboliczne rozwiązywanie równań różniczkowych – funkcja dsolve().
syms x y;
y = dsolve('D2y + 2*Dy + 4*y=0' , 'y(0)=0' , 'Dy(0)=-1');
pretty(x);
t=0:0.01:9.99;
w=subs(y);
plot(t,w,'r-');
xlabel('czas[s]');
ylabel('amplituda sygnalu');
title('wykres rozwiazania rownania rozniczkowego');
grid;
Numeryczne rozwiązywanie równań różniczkowych – funkcja ode45().
Funkcja równania – jako równanie stanu:
function ydot=funkcja(t,y)
ydot=zeros(2,1);
ydot(1)=y(2);
ydot(2)=(-2*y(2)-4*y(1));
Wprowadzone parametry wyjściowe:
function rozw2
t0=0;
clc
disp('Funkcja rozwiazuje rownanie rozniczkowe zwyczajne metoda');
disp('Rungego - Kutty i podaje jego interpretacje graficzna:');
disp(' ');disp('postac rownania:');disp(' ');
disp(' y``+2*y`+4*y = 0');
y01=input ('Podaj wartosc y01 = ');
y02=input ('Podaj wartosc y02 = ');
tk=input ('Podaj czas symulacji tk = ');
czas_sym=[t0 tk];
war_pocz=[y01 y02];
[t,y]=ode45('funkcja',czas_sym,war_pocz);
plot(t,y(:,1),'g-');
xlabel('czas [s]');ylabel('amplituda sygnalu');
title('Wykers rozwiazania rownania rozniczkowego');
grid;
Rozwiązywanie równań różniczkowych przy pomocy pakietu Simulink.
schemat blokowy:
sim('metoda3')
figure(1)
plot(wykres3(:,1),wykres3(:,2),'b-')
xlabel('czas[s]');
ylabel('amplituda sygnalu');
title('wykres rozwiazania rownania rozniczkowego');
grid;
Zestawnienie i porównanie wykresów uzyskanych funkcją dsolve(), ode45() i przy pomocy pakietu Simulink.
Powiększenie zestawionych wykresów w punkcie charakterystycznym.
Wnioski:
Równanie różniczkowe: x''+2x'+4x=0 przy warunkach początkowych: x'(0)=-1; x(0)=1 zostało obliczone metodami dsolve,ode45 oraz za pomocą projektowania w dodatku Simulink. Na podstawie wykonanych obliczeń można wywnioskować że wszystkie metody okazały się skuteczne i żadna z metod nie jest obarczona dużym błędem, można to zauważyć na wykresie zbiorczym w którym wykresy poszczególnych rozwiązań się pokrywają, jednak zbliżenie ukazuje dokładne różnice. Dobierając odpowiednio czas symulacji przy projektowaniu w Simulinku, możemy uzyskać wykres dokładniejszy niż ten uzyskany przy pomocy funkcji ode45() oraz dsolve().
Dzięki tym metodom możemy w łatwy i szybki sposób obliczać równania różniczkowe.