Finding the condition for root of a third degree polynomial
Assuming real coefficients and a=1, following Daniel Lichtblau comment, conditions are quickly found by:
Resolve[ForAll[s, s^3 + b*s^2 + c*s + d == 0, Re[s] < 0] &&
Element[d, Reals] && Element[c, Reals] && Element[b, Reals]]
with simple answer:
b > 0 && c > 0 && 0 < d < b c
.
Quantifier elimination is known to work for problems like this.
Since a != 0
then without loss of generality you can set a == 1
poly = #^3 + b*#^2 + c*# + d &;
The conditions can be found very rapidly if the three roots are real. Further, assuming that you want three distinct roots,
(* cond = Reduce[{Root[poly, 1] < 0, Root[poly, 2] < 0, Root[poly, 3] < 0,
Root[poly, 1] < Root[poly, 2] < Root[poly, 3]}, {b, c, d}, Reals] //
FullSimplify *)
EDIT: written more simply
cond = Reduce[{Root[poly, 1] < Root[poly, 2] < Root[poly, 3] < 0}, {b,
c, d}, Reals] // FullSimplify
Generating some examples
SeedRandom[0];
cond5 = FindInstance[cond, {b, c, d}, Integers, 5];
Checking,
Grid[{#, NSolve[poly[s] == 0 /. #, s, Reals]} & /@ cond5, Alignment -> Left]