MathGroup Archive 1995

[Date Index] [Thread Index] [Author Index]

Search the Archive

Re: How to prevent Solve from DSolve?

  • To: mathgroup at christensen.cybernetics.net
  • Subject: [mg909] Re: How to prevent Solve from DSolve?
  • From: danl (Daniel Lichtblau)
  • Date: Sun, 30 Apr 1995 03:43:35 -0400
  • Organization: Wolfram Research, Inc.

In article <3nkbu2$mq8 at news0.cybernetics.net> chen at fractal.eng.yale.edu  
(Richard Q. Chen) writes:
> Hi,
> 	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. For example
> 
> In[2]:= Needs["Calculus`DSolve`"]
> 
> In[3]:= DSolve[2 y[x] + (x + y[x]) y'[x] == 0, y[x], x]
> 
> Out[3]= {{y[x] -> 
>  
>                   1/3  2
> >      -2 x + (3 2    x ) / 
>  
>               3                         6        3           2  1/3
> >        (54 x  + 27 C[1] + Sqrt[-2916 x  + (54 x  + 27 C[1]) ])    + 
>  
>              3                         6        3           2  1/3        
1/3
> >       (54 x  + 27 C[1] + Sqrt[-2916 x  + (54 x  + 27 C[1]) ])    / (3  
2   )}
>  
> >     , {y[x] -> 
>  
>                                   2
> >      -2 x - (3 (1 + I Sqrt[3]) x ) / 
>  
>            2/3      3                         6        3           2   
1/3
> >        (2    (54 x  + 27 C[1] + Sqrt[-2916 x  + (54 x  + 27 C[1]) ])    
) - 
>  
>                               3
> >       ((1 - I Sqrt[3]) (54 x  + 27 C[1] + 
>  
>                           6        3           2  1/3        1/3
> >             Sqrt[-2916 x  + (54 x  + 27 C[1]) ])   ) / (6 2   )}, 
>  
>                                          2
> >    {y[x] -> -2 x - (3 (1 - I Sqrt[3]) x ) / 
>  
>            2/3      3                         6        3           2   
1/3
> >        (2    (54 x  + 27 C[1] + Sqrt[-2916 x  + (54 x  + 27 C[1]) ])    
) - 
>  
>                               3
> >       ((1 + I Sqrt[3]) (54 x  + 27 C[1] + 
>  
>                           6        3           2  1/3        1/3
> >             Sqrt[-2916 x  + (54 x  + 27 C[1]) ])   ) / (6 2   )}}
> 
> 
> I would like to have Mma out put something like f(x,y) == C[1] so
> that I will know what kind of simpler function f(x,y) may be. I can
> then choose to solve for y in terms of x if it is desirable.
> 
> 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?
> 
> Thanks for any info.
> 
> -- 
> Richard Q. Chen
> chen at fractal.eng.yale.edu
> 
> 

  You cannot, so far as I know, safely prevent DSolve from calling Solve.  
You can either alter Solve, or else disable the use of radical solns for  
cubics.

(* Here we disable cubic solns *)
In[19]:= SetOptions[Roots, Cubics -> False];

In[20]:= DSolve[2 y[x] + (x + y[x]) y'[x] == 0, y[x], x]

                           2                2       3
Out[20]= {ToRules[Roots[9 x  y[x] + 6 x y[x]  + y[x]  == C[1], y[x]]]}


(* Here we short-circuit Solve *)
In[22]:= Unprotect[Solve];

In[23]:= Solve[a_, b___] := a

In[24]:= DSolve[2 y[x] + (x + y[x]) y'[x] == 0, y[x], x]

                          2
Out[24]= y[x] (3 x + y[x])  == C[1]

  Daniel Lichtblau, WRI




  • Prev by Date: Re: How to prevent Solve from DSolve?
  • Next by Date: Re: [Q] How to use NonlinearFit[...]
  • Previous by thread: Re: How to prevent Solve from DSolve?
  • Next by thread: Re: How to prevent Solve from DSolve?