Dismiss Notice
Join Physics Forums Today!
The friendliest, high quality science and math community on the planet! Everyone who loves science is here!

Homework Help: Runge-kutta formula

  1. Jan 6, 2009 #1
    1. The problem statement, all variables and given/known data

    Use the fourth order Runge-Kutta formula to advance the differential equation:
    dy/dt = y with y(0)=1 forward one step h. That is find y(h).


    2. Relevant equations



    3. The attempt at a solution

    The Runge-Kutta formula is:
    x(i+1)=x(i)+h/6 [k(1)+2k(2)+2k(3)+k(4)]

    where,
    k(1)=f[x(i),t(i)]
    k(2)=f[x(i)+1/2 hk(1), t(i)+1/2 h]
    k(3)=f[x(i)+1/2 hk(2), t(i)+1/2h]
    k(4)=f[x(i)+hk(3),t(i)+h]

    I have no idea how to continue though, so any help would be great! thanks
     
  2. jcsd
  3. Jan 6, 2009 #2
    A first-order ODE is given as,

    [tex]dy/dx = f(x,y)[/tex]

    this is the defintion. So when one states, [tex]f(x_i,y_i)[/tex], this simply means, evaluate the first-order derivative at [tex]x_i[/tex] and [tex]y_i[/tex].

    This is how the method breaks down:

    [tex]The general form of the RK4 algorithm is given as,
    \begin{equation}\begin{split}
    k_{1}&=f(x_{i},y_{i})\\
    k_{2}&=f(x_{i}+\dfrac{1}{2}h, y_{i}+\dfrac{1}{2}k_{1}h)\\
    k_{3}&=f(x_{i}+\dfrac{1}{2}h,y_{i}+\dfrac{1}{2}k_{2}h)\\
    k_{4}&=f(x_{i}+h,y_{i}+k_{3}h)\\
    y_{i+1}&=y_{i}+\dfrac{1}{6}\cdot(k_{1}+2k_{2}+2k_{3}+k_{4})\cdot h
    \label{eq:}
    \end{split}\end{equation}[/tex]

    [tex]Simplified as eight equations,
    \begin{equation}\begin{split}
    k_1&=f(x_i,y_i)\\
    z_1&=y_i+\dfrac{1}{2}k_{1}h\\
    k_2&=f(x_{i}+\dfrac{1}{2}h, z_1)\\
    z_2&=y_i+\dfrac{1}{2}k_{2}h\\
    k_3&=f(x_{i}+\dfrac{1}{2}h, z_2)\\
    z_3&=y_i+k_{3}h\\
    k_4&=f(x_{i}+h, z_3)\\
    y_{i+1}&=y_i+\left(\dfrac{h\cdot(k_1+2(k_2+k_3)+ k_4)}{6}\right)
    \label{eq:}
    \end{split}\end{equation}
    [/tex]

    Say for example you are given, [tex]y'=(-y)ln(y),\;\;y(0)=0.5.[/tex]

    Hence,
    [tex]f(x_0,y_0)=(-0.5)\cdot ln(0.5)[/tex]

    In this example, it only varied in terms of y. However, you could be faced with an ODE such as [tex]y'=4e^{0.8x}-0.5y[/tex], in which case you need to take care how you substitute in the 'x' value. For the [tex]x_i+\dfrac{1}{2}h[/tex] bits, you need to evaluate it at [tex]x_{i+1}=x_i+\dfrac{1}{2}h[/tex].

    For example, if [tex]x_0=0[/tex] and h=0.5, then [tex]x_1=0+\dfrac{1}{2}(0.5)=0.25[/tex].

    Hope this helps...
     
  4. Jan 7, 2009 #3
    thankyou very much for that....i understand all of what you have said.

    So i found for my equation that f[t(0),y(0)] = 1, since y'=y and y(0)=1

    Im still slightly confused as to how to find y(h)?
     
  5. Jan 7, 2009 #4
    How do i find what k(1) - k(4) is? Do i substitute anything in for h?

    Also what are the value for t(i) and y(i)?
     
  6. Jan 7, 2009 #5
    You shouldn't jump to using RK4 if you don't understand the basics. Try using the Euler method (it's basically a first-order RK). You also need to know the stepsize 'h'. This is given with questions,

    [tex]y_{i+1}=y_i+hf(x_i,y_i)[/tex]

    As for your question, y'=y, you can ignore the x or 'time' component as it were, as it only varies in y.

    The first RK4 application would be, note [tex]y_0=y(0)=1[/tex],

    [tex]k_1 = f(0, 0) =1[/tex]
    [tex]k_2 = y_0+0.5*k_1*h[/tex]
    [tex]k_3 = y_0+0.5*k_2*h[/tex]
    [tex]k_4 = y_0+k_3*h[/tex]

    Hence,
    [tex]y_1=y_0+\left(\dfrac{h*(k_1+2(k_2+k_3)+k_4)}{6}\right)[/tex]

    For the next iteration, use [tex]y_1[/tex] to start off :)
     
Share this great discussion with others via Reddit, Google+, Twitter, or Facebook