Vreemde differentiaalvergelijking

Moderators: dirkwb, Xilvo

Reageer

Vreemde differentiaalvergelijking

In onderstaande bericht kwam ik uit op een differentiaalvergelijking (zie formule 23) waar ik geen raad mee weet:

http://www.wetenscha...post__p__951774

Afgezien van de natuurkundige aspecten gaat het om deze differentiaalvergelijking:
\( - \frac{\mbox{d}y}{\mbox{d}x} = \left ( \frac{f(x)}{y} \, - \, 1 \right ) . \, g(x) \)
.

Ik ben slechts geïnteresseerd in de oplossing voor een eindig interval [-a,a] van x bij gegeven f en g op [-a,a]. Als een analytische aanpak te moeilijk wordt, is een grafisch programma dat voor een groot aantal functies f en g een grafiekje van y tekent ook welkom.

Re: Vreemde differentiaalvergelijking

In het bijzonder ben ik geïnteresseerd in oplossingen voor functieparen f en g van onderstaande type:
f(x)-en-g(x).JPG
f(x)-en-g(x).JPG (32.91 KiB) 891 keer bekeken

Re: Vreemde differentiaalvergelijking

Na lang zoeken heb ik een online programma gevonden waar we mogelijk iets aan hebben:

http://www.javaview.de/demo/PaExprOde.html

(Als iemand een vergelijkbaar eenvoudig freeware programma weet dat ik voor mijn eigen computer kan downloaden hoor ik het graag.)

Nu is het nog de vraag we f en g (voor zekere concrete waarden van a, b, c, d, d', e en e') in de toelaatbare functies kunnen uitdrukken:

http://www.javaview.de/doc/inspectors/Expressions.html

Gebruikersavatar
Berichten: 2.609

Re: Vreemde differentiaalvergelijking

Ik betwijfel dat je een analytische oplossing gaat vinden. Ben je bekend met numerieke integratie? Met een Runge-*** integratie krijg je mogelijk al mooie plots en het is niet zo moeilijk te implementeren in MATLAB.

Re: Vreemde differentiaalvergelijking

Xenion schreef: za 02 mar 2013, 23:03
Ik betwijfel dat je een analytische oplossing gaat vinden. Ben je bekend met numerieke integratie? Met een Runge-*** integratie krijg je mogelijk al mooie plots en het is niet zo moeilijk te implementeren in MATLAB.
In dit geval vind ik een analytische oplossing ook niet zo interessant; het gaat mij hier uiteindelijk toch om "het plaatje". Het online programma waarvan ik al een link heb gegeven doet wat ik zoek, alleen heb ik graag een freeware programmatje op mijn eigen bureaublad staan. Zo ben ik bijvoorbeeld zeer tevreden met het freeware programmatje Graph:

http://www.padowan.dk/

Een dergelijk eenvoudig gratis programmatje zou ik ook graag voor gewone differentiaalvergelijkingen hebben. Zelf programmeren en/of het gebruik van betaalde programmatuur gaan mij net een stapje te ver.

Gebruikersavatar
Berichten: 2.609

Re: Vreemde differentiaalvergelijking

Ik ken zo direct geen programma's behalve dan misschien wolfram alpha.

Hier heb je een MATLAB scriptje dat vergelijkingen van de vorm y'(t) = f(t,y) kan oplossen via die Runge-*** die ik vermeldde. Misschien werkt het ook voor Octave (gratis).

Code: Selecteer alles


function [y,t] = RK4(f, y0, t0, t_end, h)

t = linspace(t0,t_end,ceil( (t_end-t0)/ h ));

y = zeros(size(t));

y(1) = y0;

for i = 1:length(t)-1

k1 = f(t(i)	  , y(i));

k2 = f(t(i) + h/2, y(i) + h*k1/2);

k3 = f(t(i) + h/2, y(i) + h*k2/2);

k4 = f(t(i) + h  , y(i) + h*k3);

y(i+1) = y(i) + h*(k1 + 2*k2 + 2*k3 + k4)/6;

end

end

Je moet dan nog juist de functie f ergens definiëren. Ik heb het uitgetest met een eenvoudige rechte:

Code: Selecteer alles


function res = f(t,y)

res = t;

end

Als je de functie f(t,y) gedefinieerd hebt, dan kan je RK4 aanroepen en het resultaat plotten via:

Code: Selecteer alles


[y,t] = RK4(@f, 0, 0, 10, 0.1);

plot(t,y); xlabel('t'); ylabel('y');

In mijn test krijg ik dan mooi een parabool.

Re: Vreemde differentiaalvergelijking

Inmiddels heb ik een manier gevonden om bevredigende functies f en g te maken. Anders dan in mijn eerdere tekening zijn dit vloeiend verlopende functies, maar dat is in dit geval geen bezwaar. Zie hier een voorbeeldje:
vloeiende-f-en-g.JPG
vloeiende-f-en-g.JPG (46.45 KiB) 886 keer bekeken
Oftewel:

f(x) = 10 + (10/pi)*(atan(10*(x+10)) + atan(-10*(x-10)) )

g(x) = -7 + (3/pi)*(atan(10*(x+10)) + atan(-10*(x-10)) )

Kan zoiets in je programma geplugd worden?

Gebruikersavatar
Berichten: 2.609

Re: Vreemde differentiaalvergelijking

Ja hoor. Je kan die 2 functies apart definiëren en dan combineer je die in de uiteindelijke functie die je gaat integreren (merk op dat ik het minteken in de originele dv van kant gewisseld heb):

func.m

Code: Selecteer alles


function res = func(t,y)

res = -( f(t)/y - 1 )* g(t);

end

function res = f(x)

res = 10 + (10/pi)*(atan(10*(x+10)) + atan(-10*(x-10)) );

end

function res = g(x)

res = -7 + (3/pi)*(atan(10*(x+10)) + atan(-10*(x-10)) );

end

Je geeft dan @func mee aan RK4.

Als ik dat teken tussen op [-30,+30] met y0 = 1, dan geeft dat deze funky plot:
bartjes.png
bartjes.png (3.37 KiB) 884 keer bekeken
Je moet ook niet per se analytische uitdrukkingen hebben voor f en g als je het op deze manier doet: als je de functiewaarden kent in een aantal punten en je kan daartussen interpoleren dan kan je ook verder.

Re: Vreemde differentiaalvergelijking

Dat ziet er veelbelovend uit! Dank. :)

Het ziet er naar uit dat ik met mijn model op de goeie weg ben.

Helaas heeft Octave voor Windows volgens Wikipedia nogal wat haken en ogen.

Gebruikersavatar
Berichten: 2.609

Re: Vreemde differentiaalvergelijking

Voor elementaire berekeningen zoals in dit script zou Octave ook moeten werken. MATLAB is vooral beter omdat er voor verschillende vakgebieden gespecialiseerde functies en toolboxen bestaan.

Re: Vreemde differentiaalvergelijking

Nog een leuk online progje:

http://infinidim.net/dep/

Hier het resultaat:
Differential-Equation-Plotter.JPG
Differential-Equation-Plotter.JPG (38.29 KiB) 888 keer bekeken

Re: Vreemde differentiaalvergelijking

Een leuk en eenvoudig downloadbaar programmatje voor gewone differentiaalvergelijkingen heb ik nu ook gevonden:

http://odetoolkit.hmc.edu/

Reageer