[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])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:
- Mene Matlab-istunnon ylänauhasta valitsemalla omaan työskentelyhakemistoosi.
- Ota Matlab:n FILE-valikosta NEW->m-file ja kirjoita (tai cut/paste):
function dy = heiluri(t,y) dy=[y(2);-sin(y(1))];- Talleta funktio nimelle heiluri.m työskentelyhakemistoosi,
- Testaa funktiotasi tyyliin
heiluri(1,[1,2]), heiluri(1,[pi/2,-5]), heiluri(1,[pi,-5])
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)) % FaasikuvaYhdistetää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)
------------------------------------------- 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