# NDSolve complains about missing derivatives of dependent variables in Mathematica 9

In Mathematica 8

NDSolve[{x[t] == 1, x == 1}, x[t], {t, 0, 10}]


solves fine and returns

{{x[t]->InterpolatingFunction[{{0.,10.}},<>][t]}}


while Mathematica 9 raises

NDSolve::derivs: No derivatives of dependent variables were found in the equations. NDSolve is designed to solve differential or differential algebraic equations. Use NSolve or FindRoot to numerically solve algebraic equations. >>

I get the point, but is there maybe a way to restore the old behavior via NDSolve's options system?

• Why would you want to restore the old behaviour?
– user21
Apr 18 '13 at 4:47
• These type of equations systems come from model descriptions (not my own; why would anyone describe such a pointless system, right?) and I would like to be able to reliable solve them (without manual intervention). Anyways, I hacked my way around it (see my answer, which I will not accept ...). Apr 18 '13 at 16:58
• The old behavior allowed to solve equations of the form f[x,y[x]]==0, which cannot be solved by any other built-in methods. Dec 16 '19 at 18:25

Based on an idea from my answer here:

Add a dummy derivative in a separate equation to trick Mathematica into not complaining:

NDSolve[{dummy'[t] == 0, x[t] == 1, x == 1}, x[t], {t, 0, 10}]
(* {{x[t] -> InterpolatingFunction[{{0., 10.}}, <>][t]}} *)


This is not a real answer to my own question because I am not restoring NDSolve's old behavior. I am posting it in the (unlikely) case anyone has the same problem and is looking for a solution. The following function

catchMissingDeriv=Quiet[
Check[
ReleaseHold[#],
NSolve[DeleteCases[#[[1,1]],_==_],#[[1,2]]],
{NDSolve::derivs}],
{NDSolve::derivs}]&;


catches NDSolve::derivs and switches to NSolve to calculate a solution. So,

catchMissingDeriv[Hold[NDSolve[{x[t] == 1, x == 1}, x[t], {t, 0, 10}]]]


will return

{{x[t] -> 1.}}