Ohjeita Matlabin ODE-ratkaisijoihin

ODE = "Ordinary differential equations", eli tavalliset differentiaaliyhtälöt ja systeemit. (Suomeksi DYS)
Tässä olevat Matlab-koodit voit leikata/liimata Matlab-istuntoon tai editoriin muokkauasta ja kokeiluja varten.

Differentiaaliyhtälöitä Matlab:lla

Matlab:n differentiaaliyhtälörartkaisijat ovat kappale hienointa Matlab:ia. Niihin on todella panostettu (ja panostetaan), ja jälki on sen mukaista. Ratkaisumenetelmät ovat numeerisia, kuten Matlab:ssa yleensäkin.
Matlab:n dokumentaatio: help ode45 tai doc ode45

ODE-ratkaisijan peruskäyttö heiluri-esimerkillä valaistuna

ode = "Ordinary Differential Equation"

Yleisratkaisija: ode45 , kaikkien ode-tyyppisten ratkaisijoiden kutsusyntaksi on sama, perusmuodossaan tässä tapauksessa
[t,Y]=ode45(@heiluri,Tvali,y0) ,
missä heiluri määrittelee diffyhtälösysteemin (esim. heiluri alla ja esim. Tvali=[0 10]; y0=[1;1];

Tee näin

Jos ihmettelet, mitä virkaa argumentilla t on, eihän sille tehdä mitään, niin vastaus on: "hyvä kysymys" ja sitten:
Sen on oltava yhdenmukaisuuden vuoksi, koska ode45 vaatii , että diffyhtälösysteemin argumenttilista on aina samanlainen, esiintyypä siinä t tai ei, ts. onko systeemi autonominen tai ei.
(Jos et heti sisäistä tätä, niin älä huoli, kunhan teet, mitä käsketään!)

Pikku kokeilu

Tvali=[0 10]; y0=[1;1]; 
[t,Y]=ode45(@heiluri,Tvali,y0);
size(t)  % Aikapistevektorin pisteiden lkm.
size(Y)  % Kaksisarakkeinen matriisi, ratkaisut y1 ja y2 aikapisteissä t.
plot(t,Y(:,1),t,Y(:,2))  % Aikakuva
figure
plot(Y(:,1),Y(:,2))     % Faasikuva

Yhdistetään mukaan suuntakentän piirto

Suuntakentän piirtoa varten tarvitaan diffyhtälösysteemin määrittelemät derivaatat dy1 ja dy2. Ne annetaan 2. rivillä. Siihen voit editoida haluamasi muun 2 x 2 (autonomisen) ryhmän määrittelyn.
close all
[y1,y2]=meshgrid(-5:0.5:5,-5:0.5:5); % Koordinaattihilapisteistö
dy1=y2; dy2=-sin(y1);  % Heiluridiffyhtälöryhmän derivaatat hilapisteissä
quiver(y1,y2,dy1,dy2)  % Suuntanuolet hilapisteisiin derivaattojen suuntaan.
Nyt voit piirtää lisää trajektoreita samaan kuvaan vaikka näin:
ya0=[1;1]; yb0=[-5;2]; yc0=[5;-2]; % Kolme eri alkuarvovektoria
Tvali=[0 10]; 
[ta,Ya]=ode45(@heiluri,Tvali,ya0);
[tb,Yb]=ode45(@heiluri,Tvali,yb0);
[tc,Yc]=ode45(@heiluri,Tvali,yc0);
hold on
plot(Ya(:,1),Ya(:,2),Yb(:,1),Yb(:,2),Yc(:,1),Yc(:,2))
axis equal; axis([-5 5 -5 5])
xlabel y_1(t); ylabel y_2(t)
[y1,y2]=meshgrid(-5:0.5:5,-5:0.5:5); % Koordinaattihilapisteistö dy1=A(1,1)*y1+A(1,2)*y2; dy2=A(2,1)*y1+A(2,2)*y2; % quiver(y1,y2,dy1,dy2) axis equal; axis([-5 5 -5 5])



-------------------------------------------
plot(t,y1,'b',t,y2,'r'); grid on
title('Ratkaisut aikatasossa')
xlabel('t')% ,ylabel('y1,y2')
legend('y1(t)','y2(t)')
figure
plot(y1,y2)
grid on
title('Ratkaisut faasitasossa')
xlabel('y1');ylabel('y2')
taulukko=[t' y1' y2'];
taulukko(1:10,:)
    ans =
%%%%     t       y1       y2
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
         0         0    1.5000
    1.2121    0.0355    1.4645
    2.4242    0.0693    1.4307
    3.6364    0.1015    1.3985
    4.8485    0.1322    1.3678
    6.0606    0.1615    1.3385
    7.2727    0.1893    1.3107
    8.4848    0.2158    1.2842
    9.6970    0.2411    1.2589
   10.9091    0.2652    1.2348

Last modified: Mon Nov 17 23:32:03 FLE Standard Time 2008