Re: How to prevent Solve from DSolve?

*To*: mathgroup at christensen.cybernetics.net*Subject*: [mg976] Re: [mg888] How to prevent Solve from DSolve?*From*: Allan Hayes <hay at haystack.demon.co.uk>*Date*: Thu, 4 May 1995 06:04:34 -0400

>From: "Richard Q. Chen" <chen at fractal.eng.yale.edu> >Subject: [mg888] How to prevent Solve from DSolve? >I find it very frustrating that Mma always tries >to give explicit solutions to an ODE, even if the solutions are >so complicated as to be useless. > >In[2]:= Needs["Calculus`DSolve`"] > >In[3]:= DSolve[2 y[x] + (x + y[x]) y'[x] == 0, y[x], x] > >In this particular case I had to use pencil and paper and I obtained >the much simpler implicit solution > > f(x,y) = y*(y+2x)^2 = C[1] > > This is the kind of solution I wanted. >How can I prevent DSolve from using Solve to give complicated >solution? We can use Block as follows. Note that the effect is only inside Block[...] and has no effect on Solve outside this. In[1]:= Needs["Calculus`DSolve`"] In[2]:= Block[{Solve = ss}, DSolve[2 y[x] + (x + y[x]) y'[x] == 0, y[x], x] ] Out[2]= 2 ss[y[x] (3 x + y[x]) == C[1], y[x]] In[3]:= impsol = %[[1]] Out[3]= 2 y[x] (3 x + y[x]) == C[1] Caution: If Solve is used in DSolve then this technique might cause problems (not what you got by hand). Check the solution In[4]:= D[impsol,x] Out[4]= 2 (3 x + y[x]) y'[x] + 2 y[x] (3 x + y[x]) (3 + y'[x]) == 0 In[5]:= Simplify[%] Out[5]= 3 (3 x + y[x]) (2 y[x] + x y'[x] + y[x] y'[x]) == 0 We added an extra factor. Investigate graphically In[6]:= <<Graphics`ImplicitPlot` eqn = impsol/.y[x] ->y Out[6]= 2 y (3 x + y) == C[1] Make some rules to give C[1] a selection of values. In[7]:= cs = List/@Thread[Rule[C[1], Range[-4,4]]] Out[7]= {{C[1] -> -4}, {C[1] -> -3}, {C[1] -> -2}, {C[1] -> -1}, {C[1] -> 0}, {C[1] -> 1}, {C[1] -> 2}, {C[1] -> 3}, {C[1] -> 4}} In[8] ImplicitPlot[eqn/.cs, {x, -5, 5},{y, -5, 5}, PlotPoints -> 50, AxesStyle -> GrayLevel[.7] ]; This does not show the line y + 3x == 0. That's because (y+3x)^2 does not change sign when it crosses this line. Allan Hayes hay at haystack.demon.co.uk