http://www.math.hut.fi/teaching/v/3/01/H/ratk/harj1mlb.html    20.9.01

Harj. 1 LV pe 21.9.01

Peruskomennot ode-ratkaisuun Matlabilla

%Harj1lv.m
clf
[t,y]=ode45('flv1',[0,20],10);
plot(t,y)
hold on
% Seuraavaksi annetaan alkupisteen vaakakoordinaatin liukua oikealla.
% Käyrät ovat yhteneviä autonomisuuden takia. 
for a=0:1:15
   [t,y]=ode45('flv1',[a,20],10);
   plot(a,10,'o')  % Piirretään alkupisteeseen rinkula.
   plot(t,y)
end;
shg
%%%%%%%%% Tiedosto flv1.m %%%%%%%%%%%%%%%
function z=flv1(t,v)
g=9.81; 
z=g-v.^2;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
Vaihtoehtoinen tapa dfield5:lle. Kirjoitin skkaikki.m:n
% Suuntakentän, isokliinien ja numeeristen ratkaisukäyrien laskenta- ja
% piirrosskripti. 
%Sisältää nämä komennot:
%
%suuntakdata   % Funktiomääritys, kuva-ala,askel. Yleensä ajetaan vain kerran. 
%              % Editoi oma esimerkkisi tänne.
%
%suuntakentta  % Yleensä ajetaan sellaisenaan vain kerran.
%suuntakiso    % Editoi tilanteen mukaan, useita kutsuja ... useimmiten ei
               %   kylläkään tarvita.
%suuntakratk   % Ratkaisukäyriä, useita kutsuja.

% Editoi suuntakdata.m - tiedostoon ongelmariippuva osuus. 
% Jos haluat lisää isokliinejä, ratkaisukäyriä tms., aja vastaava
% skripti uudestaan. Eri osia, kuten suuntakiso.m kannattaa editoida
% ja räätälöidä tilanteen mukaan.

  >> suuntakdata.m
  >> suuntakratk.m

suuntakdata.m

% suuntakdata.m
%
% Käytettävät muuttujat h,a,b,c,d,t,x
% Huom! Tässä ei voi noin vaan muutella myöskään x:ää tai t:tä,
% kuten dfield5:ssä. Muuttujan nimet pitäisi silloin muuttaa
% muissakin osissa "skkaikkia".
%
h=0.5;a=0;b=10;c=0;d=12;   % Muutettavat parametrit
t=a:h:b;x=c:h:d;                          

 f=inline('9.81-(x.^2)','t','x')   %  Teht. 1 LV 10.9.01


Tästä alkaa Matlab-ajo

>> suuntakdata 
f =

     Inline function:
     f(t,x) = 9.81-(x.^2)

>> suuntakentta  % Tässä kokeillaan hiukan, liian pieni h ei ole hyvä.
>> suuntakratk   % Vuorovaikutteisin käyttö saadaan kirjoittamalla
>> suuntakratk   %  tämä komento kerran, valitsemalla yksi piste
>> suuntakratk   %  ja jatkamalla komentoikkunassa nuolinäppäimellä.

Valitse hiirellä alkupisteitä, lopuksi ENTER grafiikkaikkunassa

Warning: Failure at t=1.334144e+00.  Unable to meet integration tolerances without reducing the step size below the smallest value allowed (4.739830e-15) at time t.

> In /usr/local/matlab/6.0/toolbox/matlab/funfun/ode45.m at line 319
  In /home/apiola/opetus/peruskurssi/v2-3/301/matlab/suuntakratk.m at line 9
>

Tässä näkyy syy siihen, miksi dfield5:llä on vaikeuksia. Käyrät joka tapauksessa saadaan, laskenta kestää jonkin aikaa, ode45 joutuu ottamaan hyvin pieniä askelia, eikä siltikään pysty takaamaan vaadittua (oletus)virhetoleranssia.

Varsinainen syy on siinä, että tässä, samoinkuin dfield5:ssä lasketaan alkupisteestä sekä eteenpäin että taaksepäin kuva-alueen reunaan. Taaksepäin laskenta on epästabiilia. (Jos valitaan kuvaikkunan y-alue (0,10), ei taaksepäin laskentaa tapahdu, silloin menee hyvin oletustoleranssilla, kuten alussa nähtiin.)

["kuvah1t1.gif"]