Równania różniczkowe wyższych rzędów

Równania różniczkowe wyższych rzędów

Wskazówki dotyczące rozwiązywania równań różniczkowych przedstawione w poprzednim wpisie w pełni wystarczą do rozwiązywania problemów opisanych równaniem różniczkowym pierwszego rzędu. W praktyce oznacza to, że są one przydatne w zasadzie... nigdy 🙂 Nie są bezużyteczne, ale na pewno są niewystarczające do rozwiązywania większości problemów obliczeniowych. Jeśli w rzeczywistości stykamy się z potrzebą rozwiązania równania różniczkowego, to jest to zazwyczaj równanie wyższego rzędu i wtedy potrzeba czegoś jeszcze. Weźmy dla przykładu problem swobodnie odbijającej się od podłoża sprężystej piłki.
Żartowałem, przykład z odbijającą się piłką jest już przedstawiony w dokumentacji MATLABa i kopiowany w różnych MATLABowych podręcznikach, więc dla odmiany coś innego.

Układ RLC

Banalny i klasyczny układ elektryczny. Jego schemat nie jest specjalnie skomplikowany

Problem: określić, jak będzie wyglądało napięcie na kondensatorze w ciągu kilku chwil od momentu włączenia zasilania obwodu. Jak dojść do rozwiązania z pomocą MATLABa? Metoda nr 1, prosta i niewątpliwie skuteczna: uruchomić Simscape.


Niestety, nie zawsze możemy pozwolić sobie na rozwiązywane problemów w ten sposób. Przede wszystkim, nie każdy problem można zamodelować tak łatwo, poza tym nie każdy posiada pakiet SimScape. Złożone równania różniczkowe można rozwiązywać z pomocą podstawowej wersji MALTABa, należy jednak wiedzieć, jak takie równanie zapisać.
Dla obwodu przedstawionego powyżej wygląda ono tak:

RC\dot{u}_c + LC \ddot{u}_c + u_c = u_{we}

Zapisanie równania to jedno, sprawienie, by MATLAB je rozwiązał, to drugie. Niestety, przy pomocy metody odeXX w MALTABie można rozwiązywać wyłącznie równania i układy równań różniczkowych pierwszego rzędu. Oznacza to, że należy w pierwszej kolejności znaleźć sposób na zapisanie równania różniczkowego wyższego rzędu w zmienionej formie. Równanie różniczkowe n-tego rzędu można zapisać jako układ n równań pierwszego rzędu. W powyższym przypadku obwodu RLC można zastosować następujące podstawienie:

\begin{cases}y_1 = u_c \\ y_2 = \dot{y}_1 \end{cases}

W związku z tym równanie przyjmuje postać:

\begin{cases} \dot{y}_1 = y_2 \\ \dot{y}_2 = \frac{U_{we} - RC{y_2} - y_1}{LC} \end{cases}

No, to teraz można przepisać wszystko do MATLABa 🙂

% Parametry równania
param.R = 5;
param.L = 0.2;
param.C = 0.001;
param.Uwe = 5;
[t, y] = ode45(@odefun,[0 .5], [0 0], [], param);
plot(t, y(:,1)); grid;
xlabel('Czas [s]');
ylabel('U_c [V]');
function dy = odefun(t, y, param)

% Wektor wyjsciowy
dy = zeros(2,1);
% Zdefiniowanie równania / układu równań 
dy(1) = y(2); 
dy(2) = (param.Uwe - y(2)*param.R*param.C - y(1))...
    /(param.L*param.C);

end

(Visited 3 950 times, 1 visits today)

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *