MathOverflow is a question and answer site for professional mathematicians. Join them; it only takes a minute:

Sign up
Here's how it works:
  1. Anybody can ask a question
  2. Anybody can answer
  3. The best answers are voted up and rise to the top

Can you use the Crank-Nicolson method to get a numerical approximation to the fisher-kolmogorov equation? If not what would be the easiest way to model the equation using matlab?

Thanks and sorry its so basic but i'm new to these sorts of numerical approximations

share|cite|improve this question
up vote 1 down vote accepted

Crank-Nicolson will work fine, though a fully implicit scheme may actually perform a bit better especially if you have discontinuous initial conditions. Since Crank-Nicolson is effectively half explicit, discontinuities in the initial conditions $u(x,0)$ propagate into a lot of noise echoing around your solution grid.

Make sure you choose $\Delta t$ sufficiently small that your propagation matrix remains diagonally dominant. That is to say, choose it small in comparison to the initial size $|u(x,0)|$.

share|cite|improve this answer

The easiest solution really depends on the initial conditions and the coefficients. If your coefficients are not too large, quite frankly the easiest way to do so would be a Method of Lines. Approximate the LaPlacian to order 2 in space by the tridiagonal matrix (1,-2,1) and now you have a system of ODEs. In MATLAB if you define A like that then if you loop

u(t+1) = alpha/k * u(t) .*(1-u(t).^q) + A*u(t);

with a small enough $\Delta t$ you will get a solution. If you're just looking for answers, I'd try this first. If that's close but you need it slightly better, plug it into ode45. If it's stiffer than that, ode15s.

That shouldn't take more than an hour and if none of those are sufficient, then I would suggest doing something fancy. As Magneto suggested a fully implicit Crank-Nicholson will get the job done since it's order(2,2) and unconditionally stable, but you'll need to solve implicit equations (via fsolve). Spectral solutions that Mabuza suggested also should work well. If are solving a very stiff version and have a GPGPU using MATLAB's GPU FFTs for a spectral solution will probably be the best answer (in terms of "computational power per man hours").

But seriously, always try the easy way first!

share|cite|improve this answer

Another approach especially in higher dimensions would be to use a Fourier - Spectral method for spatial discretization followed by a fourth order Runge - Kutta algorithm to the algebraic differential system which is in "Fourier Space". The Inverse Fast Fourier Transform can then be used to recover the solution in the original domain. This technique is useful especially with coupled reaction diffusion equations.

share|cite|improve this answer

Your Answer


By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.