lotka-volterra-phase

lotka-volterra-phase

by belyakov_am

HTML

<script src="https://cdnjs.cloudflare.com/ajax/libs/jsxgraph/0.99.7/jsxgraphcore.js"></script>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/jsxgraph/0.99.7/jsxgraph.css">
<div id="jxgbox-phase" class="jxgbox" style="width:600px; height:600px;">
</div>

JavaScript

board_phase = JXG.JSXGraph.initBoard('jxgbox-phase', {
  boundingbox: [-4, 42.5, 42.5, -3.5],
  axis: true,
  grid: false,
  showCopyright: false
});

alpha_slider_p = board_phase.createElement('slider', [
  [3.0, 40.5],
  [8.0, 40.5],
  [0.0, 0.42, 1.0]
], {
  name: '&alpha;',
  strokeColor: 'black',
  fillColor: 'black'
});
alpha_text_p = board_phase.createElement('text', [5, 39.5, "alpha"], {
  fixed: true
});

beta_slider_p = board_phase.createElement('slider', [
  [13.0, 40.5],
  [18.0, 40.5],
  [0.0, 0.14, 1.0]
], {
  name: '&beta;',
  strokeColor: 'black',
  fillColor: 'black'
});
beta_text_p = board_phase.createElement('text', [13, 39.5, "beta"], {
  fixed: true
});

gamma_slider_p = board_phase.createElement('slider', [
  [23.0, 40.5],
  [28.0, 40.5],
  [0.0, 0.79, 1.0]
], {
  name: '&gamma;',
  strokeColor: 'black',
  fillColor: 'black'
});
gamma_text_p = board_phase.createElement('text', [23, 39.5, "gamma"], {
  fixed: true
});

delta_slider_p = board_phase.createElement('slider', [
  [33.0, 40.5],
  [38.0, 40.5],
  [0.0, 0.17, 1.0]
], {
  name: '&delta;',
  strokeColor: 'black',
  fillColor: 'black'
});
delta_text_p = board_phase.createElement('text', [33, 39.5, "delta"], {
  fixed: true
});

prey_0 = board_phase.createElement('glider', [10, 0, board_phase.defaultAxes.x], {
  name: 'Preys',
  strokeColor: 'blue',
  fillColor: 'blue'
});
pred_0 = board_phase.createElement('glider', [0, 5, board_phase.defaultAxes.y], {
  name: 'Predators',
  strokeColor: 'red',
  fillColor: 'red'
});


var draw_data = null;

function solve_ode(x0, I, N, f) {
  var data = [x0];
  var dt = (I[1] - I[0]) / N;
  for (let i = 1; i < N; ++i) {
    var dx_dt = data[i - 1][0] + dt * f(0, data[i - 1])[0];
    var dy_dt = data[i - 1][1] + dt * f(0, data[i - 1])[1];
    data.push([dx_dt, dy_dt]);
  }

  return data
}


function ode_phase() {
  var I_phase = [0, 200];
  var N_phase = 5000;

  var f_phase = function(t_phase, x_phase) {
    var alpha_p = alpha_slider_p.Value();
   ...