2017-12-08 14 views
-2

私はRK4の実装を使用したいと思っています。私は何かのためにオンラインで見つけましたが、私がオンラインで見つけた実装の周りに頭を抱えるのは少し難しいです。たとえば :RK4 Pythonの説明

def rk4(f, x0, y0, x1, n): 
    vx = [0] * (n + 1) 
    vy = [0] * (n + 1) 
    h = (x1 - x0)/float(n) 
    vx[0] = x = x0 
    vy[0] = y = y0 
    for i in range(1, n + 1): 
     k1 = h * f(x, y) 
     k2 = h * f(x + 0.5 * h, y + 0.5 * k1) 
     k3 = h * f(x + 0.5 * h, y + 0.5 * k2) 
     k4 = h * f(x + h, y + k3) 
     vx[i] = x = x0 + i * h 
     vy[i] = y = y + (k1 + k2 + k2 + k3 + k3 + k4)/6 
return vx, vy 

は、誰かが私には正確なパラメータが何であるかを理解する助けていただけますか?可能であれば、もっと一般的な説明をしたいと思いますが、具体的に説明すると説明が簡単になる場合は、理想的なスプリングシステムのために具体的に使用する予定です。

+1

。 html#scipy.integrate.solve_ivp)または[this](https://docs.scipy.org/doc/scipy/reference/generated/scipy.integrate.ode.html#hnw93)? – Wrzlprmft

答えて

0

あなたがここにパラメータを求めている:

def rk4(f, x0, y0, x1, n): 
    ... 
    return vx, vy 
  • fは、微分方程式y'(x)=f(x,y(x))ためdef f(x,y)として宣言され、ODE機能で、
  • (x0,y0)
  • 、初期ポイントと値であり、 x1は積分区間の終了です。[x0,x1]
  • nサブ間隔または統合の数が

  • vx,vxステップであり、計算されたサンプル点であるvy[k]y(vx[k])を近似します。

スプリングシステムでは使用できません。このコードはスカラーの場合のみ有効です。v。ベクタ操作の場合は、numpyと動作するように変更する必要があります。なぜあなたは代わりに[この](https://docs.scipy.org/doc/scipy/reference/generated/scipy.integrate.solve_ivpのような文書化されたモジュールのオンラインあなたが見つけ、いくつかの文書化されていないコードを使用している

def rk4(func, x0, y0, x1, n): 
    y0 = np.array(y0) 
    f = lambda x,y: np.array(func(x,y)) 
    vx = [0] * (n + 1) 
    vy = np.zeros((n + 1,)+y0.shape) 
    h = (x1 - x0)/float(n) 
    vx[0] = x = x0 
    vy[0] = y = y0[:] 
    for i in range(1, n + 1): 
     k1 = h * f(x, y) 
     k2 = h * f(x + 0.5 * h, y + 0.5 * k1) 
     k3 = h * f(x + 0.5 * h, y + 0.5 * k2) 
     k4 = h * f(x + h, y + k3) 
     vx[i] = x = x0 + i * h 
     vy[i] = y = y + (k1 + 2*(k2 + k3) + k4)/6 
    return vx, vy