Marcin Tyrała 23.11.2015r. Lab. nr 1
Krzysztof Urbanek
Równanie różniczkowe: d2ydt2+3dydt+9y=0, war. pocz. y(0)=0, y0=1
1. Symboliczne rozwiązanie równania różniczkowego (za pomocą funkcji dsolve):
syms y;
p=dsolve('D2y + 3*Dy + 9*y=0' , 'y(0)=0' , 'Dy(0)=1');
pretty(p);
t=0:0.01:9.99;
w=subs(p);
plot(t,w,'r-');
xlabel('czas[s]');
ylabel('amplituda sygnalu');
title('Wykres rozwiazania rownania rozniczkowego');
grid;
2. Numeryczne rozwiązanie równania różniczkowego (z użyciem funkcji ode45):
function ydot=funkcja(t2,y2)
ydot=zeros(2,1);
ydot(1)=y2(2);
ydot(2)=(-9*y2(1)-3*y2(2));
%drugi plik
czas_sym=[0 10];
war_pocz=[0 1];
[t2,y2]=ode45('funkcja',czas_sym,war_pocz);
plot(t2,y2(:,1),'g-');
xlabel('czas [s]');
3. Rozwiązanie równania różniczkowego przy pomocy pakietu Simulink
4. Wykresy uzyskane każdym ze sposobów rozwiązania:
Kod, który posłużył wygenerowaniu wykresów:
subplot(3,1,1);
plot(t,w,'r-'); title('dsolve');
subplot(3,1,2);
plot(t2,y2(:,1),'g-'); title('ode45');
subplot(3,1,3);
plot(ScopeData.time,ScopeData.signals.values); title('simulink');
5. Wykres łączony
plot(t,w,'r-',t2,y2(:,1),'g-',ScopeData.time,ScopeData.signals.values);
6. Wnioski
Na podstawie powyższych wykresów można stwierdzić, że każda z metod dała poprawny wynik, wszystkie 3 wykresy są niemal identyczne. Niewielkie różnice wynikają ze sposobów rozwiązania równania. Metoda symboliczna daje wynik najdokładniejszy, gdyż jest to wynik rzeczywisty. Kolejne dwie metody są obarczone pewnym błędem, który wynika z tego, że są to metody numeryczne. Błąd ten jest więc związany z krokiem całkowania. Ćwiczenie to pokazało, w jak szybki sposób można rozwiązać równanie różniczkowe z pomocą Matlaba.
miromaj123