2017-11-19 2 views
2

math.js 홈페이지의 미분 방정식을 풀 때 한 가지 예가 있지만 상당히 복잡하며 개인적으로 수학을 적용하기에 충분한 정보를 제공하지 못합니다. js와 비슷한 문제가 있습니다. 그래서 내가하려는 것은 Lotka–Volterra equations for predator-prey simulation을 해결하는 것입니다. 이 방정식이 시스템에 있습니다, 그러나 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); 
} 

:

dx/dt = ax - bxy 

dy/dt = cxy - y 

가 math.js이를 Enconding, 나는

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'등의 모든 유닛을 제거하십시오. 그 중 하나 또는 모든 유닛이 일치해야합니다.