AKADEMIA GÓRNICZO - HUTNICZA im. Stanisława Staszica w Krakowie |
|
|
Wydział: Inżynierii Mechanicznej i Robotyki |
|
|
Laboratorium: PODSTAW AUTOMATYKI |
||
Prowadzący: Mgr. inż. Sławomir Skrzyniarz |
||
Student: Łukasz Kafel Wojciech Kochański |
Kierunek: Mechatronika |
Ocena: |
|
Grupa: 25 |
|
|
Rok: D |
|
TEMAT ĆWICZENIA:
Rozwiązywanie równań różniczkowych z niezerowymi warunkami początkowymi
Cele ćwiczenia
Celem naszego ćwiczenia jest zapoznanie się z różnymi metodami rozwiązywania równań różniczkowych w MATLAB'ie: metodami analitycznymi realizowanymi przez m-funkcję oraz przez wykorzystanie SIMULINK'a jako pakietu w którym zamodelujemy układ rozwiązujący równania różniczkowe.
Zadanie: Rozwiązać poniższe równania różniczkowe:
2.1 -
przy następujących warunkach początkowych:
,
2.2 -
przy następujących warunkach początkowych:
,
Obydwa równania rozwiązaliśmy analitycznie wykorzystując funkcję ode45 oraz modelowanie w simulinku. Następnie porównliśmy otrzymane wyniki.
Zajmijmy się równaniem 2.1
Rozwiązanie analityczne rozpoczęliśmy od stworzenia m-pliku o nazwie funkcja_blasqcyber1.m w którym wpisaliśmy następujący kod:
function xdot=funkcja_blasqcyber1(t,x)
xdot=zeros(2,1);
xdot(1)=x(2);
xdot(2)=(-22*x(1)-2*x(2));
W drugim etapie rozwiązywania stworzyliśmy drugi m-plik o nazwie rozwiązanie blasqcyber1.m w którym, wprowadziliśmy (podany poniżej kod) parametry wejściowe, wywołaliśmy funkcję ode45 i narysowaliśmy zamieszczony poniżej wykres rozwiązania:
function rozwiazanie_blasqcyber1
t0=0;
clc
disp('funkcja rozwiazuje rownanie rozniczkowe zwyczajne metoda ');
disp('rudego kutego i podaje jego interpretacje graficzna: ');
disp(' ');
disp('postac rownania: ');
disp(' ');
disp('x``+2*x`+22x=0');
x01=input('podaj wartosc x01 = ');
x02=input('podaj wartosc x02 = ');
tk=input('podaj czas symulacj tk= ');
x0=[x01,x02];
[t,x]=ode45('funkcja_blasqcyber1',t0,tk,x0,0.001,0);
plot(t,x(:,1),'r-');
xlabel('czas [s]');
ylabel('amplituda sygnalu');
title('wykres rozwiazania rownania rozniczkowego');
grid;
Po wpisaniu w command window MATLAB'a wywołania funkcji rozwiązanie_blasqcyber1 otrzymaliśmy następujący wykres:
Rozwiązanie powyższego równania w module SIMULINK rozpoczniemy od zamodelowania układu różniczkującego przedstawionego poniżej:
Ustalając odpowiednio warunki początkowe na obu integratorach oraz blokach gain, w wyniku symulacji otrzymujemy następujący wykres:
W którym tak jak dla metody analitycznej na osi x mamy czas w [s] natomiast na osi y mamy amplitudę sygnału
Przechodzimy do równania 2.2
Rozwiązanie analityczne rozpoczęliśmy jak poprzednio od stworzenia m-pliku o nazwie funkcja_blasqcyber2.m w którym wpisaliśmy następujący kod:
function ydot=funkcja_blasqcyber2(t,y)
ydot=zeros(2,1);
ydot(1)=y(2);
ydot(2)=(-5*y(1)-2*y(2));
W drugim etapie rozwiązywania stworzyliśmy drugi m-plik o nazwie rozwiązanie blasqcyber2.m w którym, podanym poniżej wprowadziliśmy parametry wejściowe, wywołaliśmy funkcję ode45 i narysowaliśmy zamieszczony poniżej wykres rozwiązania:
function rozwiazanie_blasqcyber2
t0=0;
clc
disp('funkcja rozwiazuje rownanie rozniczkowe zwyczajne metoda ');
disp('rudego kutego i podaje jego interpretacje graficzna: ');
disp(' ');
disp('postac rownania: ');
disp(' ');
disp('2y``+4*y`+10y=0');
y01=input('podaj wartosc y01 = ');
y02=input('podaj wartosc y02 = ');
tk=input('podaj czas symulacj tk= ');
y0=[y01,y02];
[t,y]=ode45('funkcja_blasqcyber2',t0,tk,y0,0.001,0);
plot(t,y(:,1),'r-');
xlabel('czas [s]');
ylabel('amplituda sygnalu');
title('wykres rozwiazania rownania rozniczkowego');
grid;
Po wpisaniu w command window MATLAB'a wywołania funkcji rozwiązanie_blasqcyber2 otrzymaliśmy następujący wykres:
Rozwiązanie powyższego równania w module SIMULINK rozpoczniemy od zamodelowania układu różniczkującego przedstawionego poniżej:
W którym tak jak dla metody analitycznej na osi x mamy czas w [s] natomiast na osi y mamy amplitudę sygnału
Z rozwiązania powyższych równań obydwoma metodami możemy wysunąć następujące wnioski:
MATLAB jest bardzo dobrym środowiskiem do rozwiązywania tego typu równań, umożliwiając ich wizualizację na różne sposoby
Rozwiązanie metodą analityczną, chociaż wymaga więcej czasu, ponieważ musimy stworzyć odpowiednie m-pliki w których ręcznie wpisujemy kod programu daje w wyniku wykres zdecydowanie lepszej jakości w porównaniu do wykresu powstałego w modelowanym układzie w SIMULINKU
SIMULINK daje ogromne możliwości szybkiego modelowania skomplikowanych równań różniczkowych kilku stopni w prosty intuicyjny sposób. W naszym przypadku rozwiązanie powyższych równań wymagało wstawienia kilku powiązanych ze sobą bloków, które po połączeniu ze sobą oraz wprowadzeniu do nich warunków początkowych natychmiast dają pożądane wyniki
Zadanie: Skonstruować w SIMULINK'u modele poniższych równań różniczkowych oraz zarejestrować i porównać odpowiedź skokową układu, gdy sygnałem wejściowym jest sygnał o amplitudzie równej jedności:
3.1
dla następujących warunków początkowych:
,
3.2
dla następujących warunków początkowych:
,
Rozpoczniemy od zamodelowania równania 3.1 przy użyciu bloku transmitancji operatorowej, oto nasz model:
Przyjmując odpowiednie parametry bloku transmitancji oraz skoku jednostkowego o amplitudzie równej jedności otrzymujemy następujący wykres:
Następnie modelujemy równania stanu i wyjścia, schemat przedstawiono poniżej:
Przyjmując odpowiednie parametry symulacji otrzymujemy poniższy wykres:
Następnym etapem jest zamodelowanie równania 3.2 przy użyciu bloku transmitancji operatorowej, oto nasz model:
Przyjmując odpowiednie parametry bloku transmitancji oraz skoku jednostkowego o amplitudzie równej jedności otrzymujemy następujący wykres:
Następnie modelujemy równania stanu i wyjścia, schemat przedstawiono poniżej:
Przyjmując odpowiednie parametry symulacji otrzymujemy poniższy wykres:
Wniosek:
Rozwiązania otrzymane obydwoma sposobami (równaniu z transmitancją operatorową jak i równaniem stanu i wyjścia) są identyczne
Zadanie: Dla równania z punktu 3.1 stworzyć schemat blokowy, wykres rozwiązania sporządzić korzystając z kodów ASCII
W przestrzeni roboczej została utworzona macierz o nazwie wynik, zawierająca trzy wektory zmiennych: czas symulacji, wymuszenie, oraz odpowiedź skokową układu.
Wykres z modułu scope wygląda następująco:
Po wpisaniu komendy save simeout -ascii nasza macierz wynikowa zostanie zapisana na dysku.
Następnie po wpisaniu następujących komend:
>> t=simout(:,1)
>> u=simout(:,2)
>> y=simout(:,3)
>> plot(t,u,'r',t,y,'g')
W wyniku uzyskujemy poniższy wykres:
Zadanie zostało wykonane stosując inny sposób wizualizacji wyniku
Rozwiązać równania różniczkowe wykorzystując funkcję ode45
5.1
dla następujących warunków początkowych:
,
5.2
dla następujących warunków początkowych:
,
Równanie 5.1
Rozwiązanie analityczne
przy danych warunkach początkowych
/
Równanie charakterystyczne będzie miało następującą postać:
Wyróżnik trójmianu kwadratowego Δ przyjmie postać:
,
Pierwiastki następująco
,
,
Otrzymamy związki:
,
W naszym przypadku:
,
Całka ogólna równania jednorodnego przyjmie postać:
Po zróżniczkowaniu
Po wstawieniu do CORJ warunku początkowego
otrzymamy:
,
Po wstawieniu do różniczki CORJ warunku początkowego
otrzymujemy:
Stąd
Ostateczne rozwiązanie równania przyjmie postać następującą:
Rozwiązanie mfunkcją
Rozwiązanie modułem SIMULINK
Równanie 5.2
Rozwiązanie analityczne
przy danych warunkach początkowych
/
Równanie charakterystyczne będzie miało następującą postać:
Wyróżnik trójmianu kwadratowego Δ przyjmie postać:
,
Pierwiastki następująco
,
Otrzymamy związki:
,
,
W naszym przypadku:
,
Całka ogólna równania jednorodnego przyjmie postać:
Po zróżniczkowaniu
Po wstawieniu do CORJ warunku początkowego
otrzymamy:
,
Po wstawieniu do różniczki CORJ warunku początkowego
otrzymujemy:
,
Czyli
Stąd
Ostateczne rozwiązanie równania przyjmie postać następującą:
Rozwiązanie mfunkcją
Rozwiązanie modułem SIMULINK