# Return to Answer

 2 replaced http://mathematica.stackexchange.com/ with https://mathematica.stackexchange.com/ edited Apr 13 '17 at 12:55 As a piggy back onto Sjoerd's solutionSjoerd's solution, here's a solution that will give you Solve like answers with the conditions still attached: Block[{Solve, conds}, Unprotect[Solve]; Solve[e_, v_] := With[{res = Reduce[e, v]}, (* capture the conditiions via a side-effect *) conds = res /. Equal[var_?(MemberQ[Flatten[{v}], #] &), __] :> Sequence[]; { Cases[res, var_?(MemberQ[Flatten[{v}], #] &) == rhs_ :> Rule[var, rhs], Infinity ] } ]; Transpose[{ DSolve[u'[t] == u[t]/(4 + u[t]^2), u[t], t][], List @@ LogicalExpand[conds] }] ] (* {{u[t] -> -2* some obscene condition}, ... } *)  But, it also produces this message: which could be removed with Quiet, but I left it in as I don't think it is as bad as the Solve one. Also, I used Block instead of InternalInheritedBlock as we are completely replacing the behavior of Solve with something else. As a piggy back onto Sjoerd's solution, here's a solution that will give you Solve like answers with the conditions still attached: Block[{Solve, conds}, Unprotect[Solve]; Solve[e_, v_] := With[{res = Reduce[e, v]}, (* capture the conditiions via a side-effect *) conds = res /. Equal[var_?(MemberQ[Flatten[{v}], #] &), __] :> Sequence[]; { Cases[res, var_?(MemberQ[Flatten[{v}], #] &) == rhs_ :> Rule[var, rhs], Infinity ] } ]; Transpose[{ DSolve[u'[t] == u[t]/(4 + u[t]^2), u[t], t][], List @@ LogicalExpand[conds] }] ] (* {{u[t] -> -2* some obscene condition}, ... } *)  But, it also produces this message: which could be removed with Quiet, but I left it in as I don't think it is as bad as the Solve one. Also, I used Block instead of InternalInheritedBlock as we are completely replacing the behavior of Solve with something else. As a piggy back onto Sjoerd's solution, here's a solution that will give you Solve like answers with the conditions still attached: Block[{Solve, conds}, Unprotect[Solve]; Solve[e_, v_] := With[{res = Reduce[e, v]}, (* capture the conditiions via a side-effect *) conds = res /. Equal[var_?(MemberQ[Flatten[{v}], #] &), __] :> Sequence[]; { Cases[res, var_?(MemberQ[Flatten[{v}], #] &) == rhs_ :> Rule[var, rhs], Infinity ] } ]; Transpose[{ DSolve[u'[t] == u[t]/(4 + u[t]^2), u[t], t][], List @@ LogicalExpand[conds] }] ] (* {{u[t] -> -2* some obscene condition}, ... } *)  But, it also produces this message: which could be removed with Quiet, but I left it in as I don't think it is as bad as the Solve one. Also, I used Block instead of InternalInheritedBlock as we are completely replacing the behavior of Solve with something else. 1 answered Sep 16 '12 at 15:53 rcollyer 28.9k66 gold badges7575 silver badges168168 bronze badges As a piggy back onto Sjoerd's solution, here's a solution that will give you Solve like answers with the conditions still attached: Block[{Solve, conds}, Unprotect[Solve]; Solve[e_, v_] := With[{res = Reduce[e, v]}, (* capture the conditiions via a side-effect *) conds = res /. Equal[var_?(MemberQ[Flatten[{v}], #] &), __] :> Sequence[]; { Cases[res, var_?(MemberQ[Flatten[{v}], #] &) == rhs_ :> Rule[var, rhs], Infinity ] } ]; Transpose[{ DSolve[u'[t] == u[t]/(4 + u[t]^2), u[t], t][], List @@ LogicalExpand[conds] }] ] (* {{u[t] -> -2* some obscene condition}, ... } *)  But, it also produces this message: which could be removed with Quiet, but I left it in as I don't think it is as bad as the Solve one. Also, I used Block instead of InternalInheritedBlock as we are completely replacing the behavior of Solve with something else.