Pakiety numeryczne Równania różniczkowe Łukasz Sztangret Katedra Informatyki Stosowanej i Modelowania
Równania różniczkowe zwyczajne Do rozwiązywania równań różniczkowych zwyczajnych I rzędu lub układów równań różniczkowych zwyczajnych I rzędu można wykorzystać jedną z poniższych funkcji Matlaba: ode23 ode45 ode113 ode15s ode23s ode23t ode23tb Składnia: [t,y] = ode45(dy,T,y0); Uchwyt do funkcji zwracającej pochodną szukanej funkcji y (dla jednego równania) lub wektor pochodnych (dla układu równań) Przedział czasu Warunek początkowy Wektor czasu Wektor zawierający wartości szukanej funkcji y
Równanie różniczkowe I rzędu Wykonujemy przekształcenie aby otrzymać wzór na y’ Rozwiązanie w Matlabie: [t,y]=ode45(dy,[0 1],2); plot(t,y); Definiujemy uchwyt do funkcji zwracającej pochodną szukanej funkcji y Wywołujemy funkcję ode45 podając dy, przedział czasu oraz warunek początkowy. Rozwiązaniem analitycznym jest funkcja
Układ równań różniczkowych I rzędu Rozwiązanie w Matlabie: -y(2)]; [t,y]=ode45(dy,[0 10],[exp(-2), exp(2)]); plot(t,y); Rozwiązaniem analitycznym są funkcje Definiujemy uchwyt do funkcji zwracającej wektor zawierający pochodne szukanych funkcji y
Równanie różniczkowe II rzędu Równanie należy przekształcić na układ równań I rzędu wprowadzając nowe zmienne: Podstawiając otrzymujemy: Obliczamy pochodne y 1 oraz y 2 : Rozwiązanie w Matlabie: 1+t-y(1)+2*y(2)]; [t,y]=ode45(dy,[0 2],[0 0]); plot(t,y(:,1)) Rozwiązaniem analitycznym jest funkcja
Równanie różniczkowe I rzędu Wykonujemy przekształcenie aby otrzymać wzór na y’ Rozwiązanie w Matlabie: [t,y]=ode45(dy,0.5:-0.5:0,exp(-1)); [t,y]=ode45(dy,[0,1],y(end)); plot(t,y); Rozwiązaniem analitycznym jest funkcja Rozwiązujemy równanie różniczkowe dla czasu od 0.5 do 0.
Atraktor Lorenza Układ trzech równań różniczkowych: s=10; r=28; b=8/3; -y(1)*y(3)+r*y(1)-y(2);... y(1)*y(2)-b*y(3)]; [t y]=ode45(dy,[0 100],[ ]); plot3(y(:,1),y(:,2),y(:,3)) view(20,20)
Model ciężarka Wprowadzamy nowe zmienne Obliczamy pochodne x 1 i x 2 Rozwiązanie w Matlabie: m=5; b=1.5; k=1; F=1; (F-k*x(1)-b*x(2))/m]; [t,x]=ode45(dx,[0 50],[0 0]); plot(t,x(:,1));
Model ciężarka m=5; b=1.5; k=1; F=1; (F-k*x(1)-b*x(2))/m]; [t,x]=ode45(dx,[0 50],[0 0]); plot(t,x(:,1)); m=5; b=1.5; k=1; (sila(t)-k*x(1)-b*x(2))/m]; [t,x]=ode45(dx,[0 50],[0 0]); plot(t,x(:,1)); function F=sila(t) if t<0.1 F=100; else F=0; end
Pakiet SIMULINK Simulink jest interaktywnym pakietem przeznaczonym do modelowania, symulacji i analizy układów dynamicznych.
Sources
Sinks
Math Operations
Model 1 Sine Wave Amplitude:1 Bias: 0 Frequency:2 Phase:0 Ramp Slope:0.1 Start time:0 Initial output:0
Model 2 – równanie różniczkowe
Model 3 – układ równań różniczkowych
Model 4 – równanie różniczkowe II rzędu
Model ciężarka Prędkość to całka z przyspieszenia Położenie to całka z prędkości Przyspieszenie jest równe (F-kx-bx’)/m
Model wahadła na wózku
M=1; m=1; b1=1; b2=4; L=3; F=5; g=9.81; x_0=0; a_0=0; x1_0=0; x1_max=5; a1_0=0; T=50; dt=1e-1; time=0:dt:T; U=[time.',... [ones(101,1);... zeros(100,1);... -1*ones(100,1);... zeros(200,1)]]; sim('model.mdl'); figure('Color',[1 1 1]) subplot(4,2,1) plot(t,U(:,2)) title('Sterowanie') subplot(4,2,3) plot(t,x); title('Polozenie wozka') subplot(4,2,5) plot(t,x1); title('Predkosc wozka') subplot(4,2,7) plot(t,x2); title('Przyspieszenie wozka') subplot(4,2,4) plot(t,a); title('Wychylenie wahadla') subplot(4,2,6) plot(t,a1); title('Predkosc katowa wahadla') subplot(4,2,8) plot(t,a2); title('Przyspieszenie katowe wahadla')
Model wahadła na wózku
Model ciężarka – SIMULINK/Simscape
Prezentacja udostępniona na licencji Creative Commons: Uznanie autorstwa, Na tych samych warunkach 3.0. Pewne prawa zastrzeżone na rzecz autorów. Zezwala się na dowolne wykorzystywanie treści pod warunkiem wskazania autorów jako właścicieli praw do prezentacji oraz zachowania niniejszej informacji licencyjnej tak długo, jak tylko na utwory zależne będzie udzielana taka sama licencja. Tekst licencji dostępny jest na stronie: