MatLab - løsning av system av differensialligninger
Lagt inn: 16/05-2012 15:31
Hei.
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:
Deretter går man frem som følger:
MatLab vil nå skrive fem kolonner med tall, hvorav den første kolonnen representerer verdier for t, mens de andre kolonnene representerer verdiene for z(1), z(2), z(3) og z(4) ved korresponderende t. Når z(3) treffer verdien 0, avsluttes utregningene.
Dersom jeg ikke hadde tatt med "options" linjen ovenfor, og kun skrevet:
Så får jeg ut akkurat de samme kolonnene som over, men nå fortsetter utregningene etter at z(3) = 0, og helt til vi når endepunktet for tspan.
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
Hvorfor er det da slik at MatLab løser systemet helt fint selv om man aktiverer "events"?
Dersom noen kan forklare meg logikken her så vil jeg være meget takknemlig! Dette har plaget meg i hele natt!
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!