Team:Groningen/Modelling/Model.js
From 2009.igem.org
(Difference between revisions)
(Enable specifying multiple explicit time-points.) |
m (Sort maxt entries.) |
||
Line 21: | Line 21: | ||
function simulate(x0,maxt,f) { | function simulate(x0,maxt,f) { | ||
if (!maxt.length) maxt = [maxt]; | if (!maxt.length) maxt = [maxt]; | ||
+ | maxt.sort(function(a,b){return a - b;}); | ||
var t = 0; | var t = 0; | ||
var oh = Math.min(1,maxt[0]/2), h, nt, mti = 0; | var oh = Math.min(1,maxt[0]/2), h, nt, mti = 0; |
Revision as of 13:14, 28 September 2009
function formatNumberToHTML(v,p) {
if (p===undefined) p = 5; return v.toPrecision(p) .replace(/e\+([0-9]+)$/i,'·10$1') .replace(/e\-([0-9]+)$/i,'·10-$1');
}
function setOutput(name,v,p) {
var node = document.getElementById(name); if (!node) return; node.innerHTML = formatNumberToHTML(v); node.value = v;
}
function getInput(name) {
var node = document.getElementById(name); if (!node) return undefined; return Number(node.value);
}
function simulate(x0,maxt,f) {
if (!maxt.length) maxt = [maxt]; maxt.sort(function(a,b){return a - b;}); var t = 0; var oh = Math.min(1,maxt[0]/2), h, nt, mti = 0; var data = {time: [0]}, x = {}, k1 = {}; for(var v in x0) { x[v] = x0[v]; data[v] = [x0[v]]; } do { if (t+oh>=maxt[mti]) { h = maxt[mti]-t; nt = maxt[mti]; } else { h = oh; nt = t + h; } k1 = f(t,x); for(var v in x) { x[v] += h*k1[v]; data[v].push(x[v]); } t = nt; data.time.push(t); if (t>=maxt[mti]) mti++; } while(t<maxt[maxt.length-1]); return data;
}