2017-11-19 5 views
2

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でこれをEnconding
dx/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)

このエラーの原因は何ですか?私は正しい単位を紛失していますか?

ご協力いただき、ありがとうございます。

+0

コンソールログの内容は何ですか?式の他のオペランドもログできますか?テスト/偽造する仮説: 'x.get'は配列が引数として与えられた場合に配列を返します。 – LutzL

+0

コンソールログの@LutzL図:https://snag.gy/J3aXUV.jpg –

+0

私の実装ではユニットを一切定義していないので、これはユニットの問題であるという疑惑があります。 –

答えて

0

解決方法: 's'、 'm/s'などのすべてのユニットを削除してください。どちらか、またはすべてのユニットが一致している必要があります。