Take the 2-minute tour ×
Mathematica Stack Exchange is a question and answer site for users of Mathematica. It's 100% free, no registration required.

I'm trying to use NDSolve for a chemical kinetics equation where the rate of conversion is given by this relationship as typed in Mathematica:

NDSolve[{X'[t] == k*(X[t])^m*(1 - X[t])^n, X[0] == 0}, {X}, {t, 0, 10000}]

The problem is that at the initial condition (t=0) the conversion should be zero (X=0), but this just returns the empty set X[t]=0 for all times rather than a solution for conversion vs. time.

Is there a way to get NDSolve to solve this differential equation while avoiding the empty set solution?

Additional info: I've determined the values for k, m, and n experimentally. k will be a function of temperature, but I'm just setting it equal to 1 for now for simplicity, m = 1.8, and n= 1.2. I can get NDSolve to give me a solution if I set the initial conditions such that the conversion at time t=0 is a small number rather than zero (i.e. X[0]==0.01), however the solution I get for the conversion vs. time is highly dependent on just how small I make the conversion value at time t=0 and I'm not sure what the most realistic value would be. I hope this makes sense.

Update from original poster (I now have a registered account):

I just wanted to say thanks for all the helpful responses to my question. The answers below make sense, mathematically the solution from NDsolve is correct. It's just a matter of what initial value other than zero makes the most sense for this situation, which I was getting hung up on. By the way, the reaction model is for an autocatalyzed reaction, more specifically a free-radical polymerization, where the initial rate is slow, but then shoots up rapidly at a certain conversion.

share|improve this question
Can you give a numerical example with appropriate values plugged in for all your constants? If a diff eq really does have two solutions, you can force NDSolve to avoid the all-zero one by specifying a non-zero "initial" condition. Note that you can specify a value for x at other positions than the start and beginning of the time interval. You can have x[100]==1 and {t,0,200} or you can have x[0]==1 and {t, -100, 100}. –  Szabolcs Sep 20 '13 at 21:04
(I'm not sure this approach will work. I can construct a first order diff eq where it would work with difficulties. It'll be easier if you give an actual numerical example and show us that it does have a non-zero solution.) –  Szabolcs Sep 20 '13 at 21:21
@Szabolcs Thanks for the comment. I added some additional information to the question regarding your comment. Hope that will help to clarify the problem. –  Dale Waters Sep 20 '13 at 21:33
Thanks for the edit (and welcome to Mathematica.SE). Can you explain why you think that this equation will have a non-zero solution if at some time t x[t]==0? It looks like it would reach 1 and 0 at -Infinity and Infinity. Notice that the equation does not contain the time at all, only x. This means that the solutions you get for different initial conditions have exactly the same shape and are only translated in time relative to each other. The shape of the solution doesn't depend on x[0] at all. –  Szabolcs Sep 20 '13 at 21:38
Actually, I think you are right. The shape of the solution does not depend on the initial conditions, the different initial values would just translate the solution in time relative to each other. I guess it's just a matter of picking the right initial value to match the experimental data? In theory though at t=0 the conversion should be zero (X=0), so I think that is what is confusing me. By the way, I corrected the original version of the equation to remove the negative sign, so that at Infinity the conversion should be X=1. –  Dale Waters Sep 20 '13 at 21:45

1 Answer 1

This is more of a math related question than a mathematica related question. The solution you obtain using NDSolve to the problem you stated is correct and the unique solution. As a mathematical foundation for this proposition one may use the existence and uniqueness theorem of Picard-Lindelöf.

For your problem this may be deduced the following way:

1) Obviously X[t]=0 is a solution of the ODE on {0,10000}.

2) Considering the chosen constants k,m,n your right hand side of the ODE is Lipschitz continous in X. This can be shown by for example using differential calculus. Be aware that this depends on the constants k,m,n!

share|improve this answer
I might get back to the answer and explain some more details if I find the time to do so. –  Wizard Sep 24 '13 at 13:44
To contribute a bit to the Wizard's answer, it is the essential property of this kinetic process that no reaction takes place, if X(t=0)=0. However, as soon as a fluctuation happens, the reaction starts. It follows that you need to put the initial condition taking into account such a fluctuation X(t=0)=X0. The choice of the value X0 depends upon internal properties of your system. Strictly speaking, the physics of problem sits here, and it is up to you to correctly reveal it. Have success! –  Alexei Boulbitch Sep 24 '13 at 15:00

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.