1 van 1

Vreemde differentiaalvergelijking

Geplaatst: do 28 feb 2013, 21:38
door Bartjes
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

Geplaatst: za 02 mar 2013, 15:37
door Bartjes
In het bijzonder ben ik geïnteresseerd in oplossingen voor functieparen f en g van onderstaande type:
f(x)-en-g(x)
f(x)-en-g(x) 1018 keer bekeken

Re: Vreemde differentiaalvergelijking

Geplaatst: za 02 mar 2013, 20:25
door Bartjes
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

Re: Vreemde differentiaalvergelijking

Geplaatst: za 02 mar 2013, 23:03
door Xenion
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

Geplaatst: zo 03 mar 2013, 10:54
door Bartjes
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.

Re: Vreemde differentiaalvergelijking

Geplaatst: zo 03 mar 2013, 11:34
door Xenion
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

Geplaatst: zo 03 mar 2013, 12:22
door Bartjes
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
vloeiende-f-en-g 1013 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?

Re: Vreemde differentiaalvergelijking

Geplaatst: zo 03 mar 2013, 12:36
door Xenion
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
bartjes 1011 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

Geplaatst: zo 03 mar 2013, 13:32
door Bartjes
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.

Re: Vreemde differentiaalvergelijking

Geplaatst: zo 03 mar 2013, 13:46
door Xenion
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

Geplaatst: zo 03 mar 2013, 14:31
door Bartjes
Nog een leuk online progje:

http://infinidim.net/dep/

Hier het resultaat:
Differential-Equation-Plotter
Differential-Equation-Plotter 1015 keer bekeken

Re: Vreemde differentiaalvergelijking

Geplaatst: ma 04 mar 2013, 18:12
door Bartjes
Een leuk en eenvoudig downloadbaar programmatje voor gewone differentiaalvergelijkingen heb ik nu ook gevonden:

http://odetoolkit.hmc.edu/