Jeg holder på å lære meg MatLab på egen hånd. Har et spørsmål som jeg håper noen MatLab-flinkiser kan svare meg på! I tekstboken jeg bruker er det en egen seksjon om hvordan man kan løse ordinære differensialligninger. Jeg har forstått det meste her, men ser ikke helt logikken i et eksempel boken bruker for å illustrere bruken av såkalt Event Location function. Dvs at man skriver et program hvor man instruerer om at dersom en viss begivenhet inntreffer så skal f.eks. MatLab avslutte utregningen av differensialligningene selv om vi opprinnelig har spesifisert et større domene.
Eksempelet i boken begynner med at man definerer en funksjon som følger:
Kode: Velg alt
function [value, isterminal, dircn] = proj(t,z,flag);
g = 9.81;
if nargin < 3 | isempty(flag)
value = [z(2); 0; z(4); -g];
else
switch flag
case 'events'
value = z(3);
isterminal = 1;
dircn = -1;
otherwise
error('function not programmed for this event');
end
end
Kode: Velg alt
tspan = [0 6];
z0 = [0, 5*cos(pi/4), 0, sin(pi/4)];
options = odeset('events','on');
[t, y] = ode45('proj',tspan,z0,options)
Dersom jeg ikke hadde tatt med "options" linjen ovenfor, og kun skrevet:
Kode: Velg alt
[t, y] = ode45('proj',tspan,z0)
Det jeg imiderltd ikke skjønner er hvordan MatLab kan regne ut verdiene for z(1), z(2), z(3) og z(4) når vi aktiverer "events". Slik jeg tolker logikken i funksjonen "proj", så vil jo man da, når man aktiverer options under utførelsen av ode45, forholde seg til det som står i "else"-delen av funksjonen. Men det er jo under "if"-delen at selve systemet beskrives under
Kode: Velg alt
value = [z(2); 0; z(4); -g];
Dersom noen kan forklare meg logikken her så vil jeg være meget takknemlig! Dette har plaget meg i hele natt!