Sovitetaan omat skriptit ja kirjan esitykset yhteen.
clear all
a=-5; b=5; c=-3; d=3;
h=0.5;
y1=a:h:b;
y2=c:h:d;
% Määritellään diffyhtsys-funktio f inline-tyylillä. Kestämme sen, että
% joudumme kirjoittamaan 2 eri koodia f:lle. Tämä on pikainen kertakäyttö-
% koodi. Varsinainen m-tiedosto on se, jota odexxx kutsuu.
%
% Koska suuntakenttiä ei juuri kannata piirtää muille kuin autonomisille
% systeemeille, suunnittelemme jatkot siten, että f on kirjoitettu ilman
% t-parametria.
%
% f=inline('[y2; -sin(y1)]','y1','y2') % Puretaan sittenkin komponenteiksi,
% % kts. alla.
Ongelmana on vektoriarvoisen funktion laskenta meshgrid-matriisilla.
(Jos välttelemme vektorimatriisia.)
No, yksinkertaisinta
on kirjoittaa koordinaattifunktiot erikseen (ja kärsiä kahteen kertaan
kirjoittamisen riesa).
% % Erikseen tämä tiedostossa hei.m
% %%%%%%%%%%%%%%%%%%%%%%%
f1=inline('y2','y1','y2') %function z=hei(t,y)
f2=inline('-sin(y1)','y1','y2') % z=[y(2);-sin(y(1))];
%%%%%%%%%%%%%%%%%%%%%%%%
[Y1,Y2]=meshgrid(y1,y2);
dy1=f1(Y1,Y2); dy2=f2(Y1,Y2);
clf
%quiver(Y1,Y2,dy1,dy2)
normit=sqrt(dy1.^2+dy2.^2);
quiver(Y1,Y2,0.7*h*dy1./normit,0.7*h*dy2./normit,0,'c') % Väri 'cyan'
% Argumentti 0 lopussa poistaa automaattisen skaalauksen
axis equal
axis([a,b,c,d])
hold on
plot(Y1(:),Y2(:),'xr')
% Piirretään kokeeksi hilapisteet näkyviin (punaisella ristillä).
%%%%%%%%% hei.m %%%%%%%%%%%%%%%%%
%function z=hei(t,y)
% z=[y(2);-sin(y(1))];
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
ya=ginput(1)
[T,Y]=ode45('hei',[0 10],ya);
plot(Y(:,1),Y(:,2),'g',Y(1,1),Y(1,2),'ok')
figure(2) % Toiseen ikkunaan aikakuva.
plot(T,Y)
xlabel t
ylabel 'y1,y2'
title('Aikakuva')
clear all
% Piirtoikkuna:
a=-5; b=5; c=-3; d=3;
h=0.5;
y1=a:h:b;
y2=c:h:d;
% Systeemi (autonominen)
f1=inline('y2','y1','y2')
f2=inline('-sin(y1)','y1','y2')
% Suuntakenttä:
[Y1,Y2]=meshgrid(y1,y2);
dy1=f1(Y1,Y2); dy2=f2(Y1,Y2);
normit=sqrt(dy1.^2+dy2.^2);
normit(normit==0)=1; % Poistetaan mahdollinen 0:lla jako.
clf
quiver(Y1,Y2,0.7*h*dy1./normit,0.7*h*dy2./normit,0,'c')
% Argumentti 0 lopussa poistaa automaattisen skaalauksen
axis equal
axis([a,b,c,d])
hold on
plot(Y1(:),Y2(:),'xr')
% Ratkaisukäyriä: Valitaan hiirellä, enter kuvaikkunassa lopettaa.
varit='mrgbkmr'
vari=1;
ya=[0;0];
while length(ya)>0
[T,Y]=ode45('hei',[0,10],ya);
plot(Y(:,1),Y(:,2),varit(vari),ya(1),ya(2),'ok')
vari=vari+1; vari=1+mod(vari,7);
ya=ginput(1);
end;
shg % Show graphics