Gewone differentiaalvergelijkingen: Scheiden van variabelen
Exacte oplossingen van een GDV met MATLAB
MATLAB is primair een software omgeving voor numerieke berekeningen, maar het heeft het computer algebra pakket MuPAD aan boord om exacte berekeningen te kunnen doen. Een paar voorbeelden geven een idee hoe het werkt.
Algemene oplossing We bekijken de differentiaalvergelijking
dsolve
functie:
>> syms y(t) % maak een symbolische functie y(t)
>> % gebruik == als symbool voor een vergelijking en diff voor afgeleide
>> GDV = diff(y,t) == t*y
GDV(t) =
diff(y(t), t) == t*y(t)
>> yopl = dsolve(GDV) % los GDV exact op
yopl =
C1*exp(t^2/2)
Beginwaardeprobleem Je kunt aan het dsolve
commando ook de beginwaarde als vergelijking opgeven. We nemen als voorbeeld het beginwaardeprobleem
dsolve
functie:
>> syms y(t)
>> GDV = diff(y,t) == y^2
GDV(t) =
diff(y(t), t) == y(t)^2
>> cond = y(0) == 1;
>> yopl = dsolve(GDV, cond)
yopl =
-1/(t - 1)
GDV van orde 2 We nemen als voorbeeld het beginwaardeprobleem
>> syms y(t)
>> Dy = diff(y,t)
Dy(t) =
diff(y(t), t)
>> GDV = diff(y,t,2) - 3*diff(y,t) + 2*y == 0
GDV(t) =
2*y(t) - 3*diff(y(t), t) + diff(y(t), t, t) == 0
>> cond = [y(0)==-1, Dy(0)==-3];
>> yopl = dsolve(GDV, cond)
yopl =
exp(t) - 2*exp(2*t)
We zetten dit voorbeeld door om te laten zien hoe je met de symbolische oplossing verder kunt rekenen in numerieke zin. Zo maar waarden voor invullen werkt niet omdat yopl
een symbolische uitdrukking of beter gezegd een string is. Gebruik eval
om het string commando ook echt uit te voeren. Als je snel in MATLAB wilt kunnen rekenen en van vectorisatie gebruik wilt maken, dan moet je dit expliciet aangeven.
>> t = [0,1,2]
t =
0 1 2
>> yopl(t)
Subscript indices must either be real positive integers or logicals.
Error in sym/subsref (line 841)
R_tilde = builtin('subsref',L_tilde,Idx);
>> yopl % dit is eigenlijk een string object
yopl =
exp(t) - 2*exp(2*t)
>> eval(yopl) % voer string commando uit
ans =
-1.0000 -12.0598 -101.8072
>> eval(vectorize(yopl)) % gebruik vectorisatie
ans =
-1.0000 -12.0598 -101.8072