Systems of differential equations

From JSXGraph Wiki
Revision as of 20:26, 8 September 2010 by A WASSERMANN (talk | contribs)
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.

Display solutions of the ordinary differential equation

[math]\displaystyle{ y_1'= f_1(x,y_1,y_2) }[/math]
[math]\displaystyle{ y_2'= f_2(x,y_1,y_2) }[/math]

with initial values [math]\displaystyle{ (x_0,c_1) }[/math], [math]\displaystyle{ (x_0,c_2) }[/math].

f1(x,y1,y2)=
f2(x,y1,y2)=

See also

The underlying JavaScript code

<form>
f<sub>1</sub>(x,y1,y2)=<input type="text" id="odeinput1" value="y1+y2"><br />
f<sub>2</sub>(x,y1,y2)=<input type="text" id="odeinput2" value="y2+1"><input type=button value="ok" onclick="doIt()">
</form>
var brd = JXG.JSXGraph.initBoard('jxgbox', {axis:true, boundingbox:[-11,11,11,-11]});
var N = brd.create('slider',[[-7,9.5],[7,9.5],[-15,10,15]], {name:'N'});
var P1 = brd.create('point',[1,-1], {name:'(x_0,c_1)'});
var line = brd.create('line',[function(){return -P1.X();},function(){return 1;},function(){return 0;}],{visible:false});
var P2 = brd.create('glider',[1,-0.5,line], {name:'(x_0,c_2)'});

function doIt() {
  var txt1 = JXG.GeonextParser.geonext2JS(document.getElementById("odeinput1").value);
  var txt2 = JXG.GeonextParser.geonext2JS(document.getElementById("odeinput2").value);
  f = new Function("x", "yy", "var y1 = yy[0], y2 = yy[1];  var z1 = " + txt1 + "; var z2 = " + txt2 + "; return [z1,z2];");
  brd.update();
}

function ode() {
   return JXG.Math.Numerics.rungeKutta('heun', [P1.Y(),P2.Y()], [P1.X(), P1.X()+N.Value()], 200, f);
}

var g1 = brd.create('curve', [[0],[0]], {strokeColor:'red', strokeWidth:'2px', name:'y_1', withLabel:false});
var g2 = brd.create('curve', [[0],[0]], {strokeColor:'black', strokeWidth:'2px', name:'y_2', withLabel:false});
g1.updateDataArray = function() {
    var data = ode();
    var h = N.Value()/200;
    this.dataX = [];
    this.dataY = [];
    for(var i=0; i<data.length; i++) {
        this.dataX[i] = P1.X()+i*h;
        this.dataY[i] = data[i][0];
    }
};
g2.updateDataArray = function() {
    var data = ode();
    var h = N.Value()/200;
    this.dataX = [];
    this.dataY = [];
    for(var i=0; i<data.length; i++) {
        this.dataX[i] = P2.X()+i*h;
        this.dataY[i] = data[i][1];
    }
};
doIt();