Problems with Runge-Kutta method

In summary, the code is trying to solve for beta using a midpoint method, but the evaluation of beta is wrong.
  • #1
matteo86bo
60
0
Hi everyone,
I've a little problem with my algorithm.
I have two grids: one for time and the other one for the radius.
I need to evaluate this equation:

[tex]\frac{d\beta(r,t)}{dt}=A\beta(r,t)^N[/tex]

I try solving this with a simple Runge Kutta II method, but I'm not convinced at all that this works properly.

Let's check my code:

k1 = deltaT*(-A*beta(i,j-1)**N
k2 = deltaT*(-A*(beta(i,j-1)+k1/2.)**N)

beta(i,j) = beta(i,j-1) + k2

What do you think about that?
This is not the simplest case, just the one you can read in Numerical Recipes ...

P.S.:

beta(i,j) mean beta at r_i and t_j
so i and j referes to radius and time grid respectively
 
Physics news on Phys.org
  • #2
I'm having difficulties making sense of your code. It looks like you're trying to the midpoint method, but in that case the evaluation of beta when computing k2 is all wrong. When you take the half-step you will, in general, not end up on a grid vertex, so you can't use "beta(i,j-1)" there.
 
  • #3
Should it look like that?

k2 = deltaT*(-A*( (beta(i,j-1)+beta(i,j))/2. +k1/2.)**N)

i know i need to evaluate beta in t+deltaT/2.. can this work?
 
  • #4
Like I said I got a bit confused by your notation. Let's step back a bit. The ODE is given by
[tex]\frac{dy(t)}{dt} = f(y(t), t)[/tex]

In your case we have [itex]y(t) = \beta(r, t)[/itex] and [itex]f(y(t), t) = Ay(t)^N[/itex]. Note the use of y(t) in the right hand of f.

The midpoint method is then

[tex]\tilde{y}_{j+1} = y_j + \frac{h}{2}f(y_j, t_j)[/tex]
[tex]y_{j+1} = y_j + hf(\tilde{y}_{j+1}, t_j + \frac{h}{2})[/tex]

where h is the step length ([itex]\Delta t[/itex]). Inserting the expression for f we get

[tex]\tilde{y}_{j+1} = y_j + \frac{h}{2}f(y_j, t_j) = y_j + \frac{h}{2}Ay_j^N[/tex]
[tex]y_{j+1} = y_j + hf(\tilde{y}_{j+1}, t_j + \frac{h}{2}) = y_j + hA\tilde{y}_{j+1}^N[/tex]

Here y_j = beta(i,j-1) using your notation. So in the second line we don't access the original beta, instead we use the midpoint we found. Also note that you seem to have flipped signs on A between the ODE and the code, while I haven't (not sure which sign is the correct one).

Hope this helps, and I hope I didn't mess up somewhere :)
 
  • #5
thank you man!
I messed up with the grid ... the sign is my fault, but it doesn't matter ...
 
  • #6
Glad it helped :)
 

FAQ: Problems with Runge-Kutta method

What is the Runge-Kutta method?

The Runge-Kutta method is a numerical method used to solve ordinary differential equations. It is a popular method because it is more accurate than other numerical methods such as Euler's method.

What are the common problems with the Runge-Kutta method?

The most common problems with the Runge-Kutta method include numerical instability, difficulty in handling stiff equations, and high computational cost.

How can numerical instability be addressed in the Runge-Kutta method?

Numerical instability in the Runge-Kutta method can be addressed by using smaller step sizes, choosing appropriate initial conditions, and implementing adaptive step size methods.

What are stiff equations and how do they affect the Runge-Kutta method?

Stiff equations are ordinary differential equations that contain both rapidly changing and slowly changing terms. These equations can be challenging for the Runge-Kutta method to solve accurately, and can lead to numerical instability.

Are there any alternatives to the Runge-Kutta method for solving differential equations?

Yes, there are several alternative methods to the Runge-Kutta method, including Euler's method, Adams-Bashforth method, and other higher-order methods. The choice of method depends on the specific problem and the desired level of accuracy.

Back
Top