math.jsのホームページにある微分方程式を解く例がありますが、それはかなり複雑で、数学を適用するには個人的に十分な情報を提供していません。他の同様の問題についてはjs。だから私がやろうとしているのは、Lotka–Volterra equations for predator-prey simulationを解決することです。システム内の2つの方程式があります、しかしhttp://mathjs.org/examples/browser/rocket_trajectory_optimization.html.htmlmath.jsでLotka-Volterra方程式を解く
function ndsolve(f, x0, dt, tmax) {
var n = f.size()[0]; // Number of variables
var x = x0.clone(); // Current values of variables
var dxdt = []; // Temporary variable to hold time-derivatives
var result = []; // Contains entire solution
var nsteps = math.divide(tmax, dt); // Number of time steps
for(var i=0; i<nsteps; i++) {
// Compute derivatives
for(var j=0; j<n; j++) {
dxdt[j] = f.get([j]).apply(null, x.toArray());
}
// Euler method to compute next time step
for(var j=0; j<n; j++) {
console.log(x.get([j]));
console.log(dt);
x.set([j], math.add(x.get([j]), math.multiply(dxdt[j], dt)));
}
result.push(x.clone());
}
return math.matrix(result);
}
:
math.jsでこれをEncondingdx/dt = ax - bxy
dy/dt = cxy - y
が、私はndsolve
がロケット軌道の例からである
math.import({ndsolve:ndsolve});
const sim2 = math.parser();
sim2.eval("dxdt(x, y) = x - x * y");
sim2.eval("dydt(x, y) = x * y - y");
sim2.eval("dt = 1.0 s"); // Simulation timestep
sim2.eval("x0 = 0");
sim2.eval("y0 = 0");
sim2.eval("tfinal = 100 s"); // Simulation duration
sim2.eval("result_stage1 = ndsolve([dxdt, dydt], [x0, y0], dt, tfinal)");
を得ましたこのコードを実行するとエラーが表示されます
関数の引数の予期しないタイプが追加(予想:数や複雑またはなBigNumberや分数、実際:単位、インデックス:1)
このエラーの原因は何ですか?私は正しい単位を紛失していますか?
ご協力いただき、ありがとうございます。
コンソールログの内容は何ですか?式の他のオペランドもログできますか?テスト/偽造する仮説: 'x.get'は配列が引数として与えられた場合に配列を返します。 – LutzL
コンソールログの@LutzL図:https://snag.gy/J3aXUV.jpg –
私の実装ではユニットを一切定義していないので、これはユニットの問題であるという疑惑があります。 –