# Strange solution of damped oscillator

s = DSolveValue[m*x''[t] + k*x[t] + b*x'[t] == 0, x[t], t]
s /. {m -> 1, b -> 6, k -> 9}


(* This gives me c1*exp(-3t)+c2*exp(-3t) which is wrong. Should be c1*exp(-3t)+c2*t*exp(-3t). The true result is given by *)

DSolveValue[x''[t] + 9*x[t] + 6*x'[t] == 0, x[t], t]


(* STRANGE! *)

• You simply had bad luck. Mathematica tries to perform computations for generic values of m, b and k. Unfortunately, the discriminant Sqrt[b^2 - 4 k m] in the generic solution becomes 0 for you specified values. That tells me that some eigenvalue of your ODE has multiplicity 2 but the according matrix is not diagonalizable. In that case, the generic formula for solutions is no more valid. – Henrik Schumacher Apr 6 '18 at 19:27

User Henrik Schumacher has already given a good answer. I want to add a simple but important remark: the correct solution is returned under the substitution {m -> 1, b -> 6, k -> 9} if the latter is taken as a limit. You cannot perform the substitution directly because the roots of the characteristic polynomials become degenerate for your parameters, and therefore the solution is singular.

You can use the following:

s = DSolveValue[{m*x''[t] + k*x[t] + b*x'[t] == 0, x[0] == x0, x'[0] == v0}, x[t], t];
Limit[s /. {m -> 1, b -> 6}, k -> 9]

(* E^(-3 t) (x0 + t (v0 + 3 x0)) *)


which is the expected solution. Note that the substitution {m -> 1, b -> 6} can be performed without limits because the latter is non-singular. You can replace any two parameters directly (essentially, it's a choice of units, so nothing can diverge there), but not the third one.

Your second order ODE is equivalent to solving the first order ODE system

A = {{-b/m, -k/m}, {1, 0}};
{u'[t], x'[t]} == A.{u[t], x[t]}


That can be solved by MatrixExp[A t].{C[1],C[2]}. However, when A is symbolic, Mathematica computes the matrix exponential by computing a symbolic eigensystem. In the generic case, Mathematica may assume that the eigenvalues are different from each other so that A is diagonalizable. In this case, the matrix exponential can be obtained by

{λ, U} = Eigensystem[A];
Transpose[U].(Exp[λ t] Inverse[Transpose[U]])


However, this breaks down when we insert your specific values:

Eigensystem[A /. {m -> 1, b -> 6, k -> 9}]

{{-3, -3}, {{-3, 1}, {0, 0}}}


The second returned "eigenvector" being {0,0} tells us that there is no second eigenvector and that A is not diagonalizable. In that case, one has to take care of a generalized eigenvector and one has to apply a Jordan decomposition. This is accurately done by Mathematica if you present the numerical values {m -> 1, b -> 6, k -> 9} before submitting the ODE to DSolve.

• To use the term of art: MatrixExp[] works differently if the matrix is defective, as opposed to when the matrix is diagonalizable. For instance: With[{m = 1, b = 6, k = 9}, {vm, jm} = JordanDecomposition[{{-b/m, -k/m}, {1, 0}}]]. – J. M. will be back soon Apr 7 '18 at 20:21