MathGroup Archive 2005

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

Search the Archive

Re: Partial diff equations

  • To: mathgroup at
  • Subject: [mg58520] Re: [mg58510] Partial diff equations
  • From: Andrzej Kozlowski <akozlowski at>
  • Date: Tue, 5 Jul 2005 06:34:12 -0400 (EDT)
  • References: <>
  • Sender: owner-wri-mathgroup at

On 5 Jul 2005, at 14:57, David Boily wrote:

> I have a not difficult to integrate but huge system of partial
> differential equations that I would never attempt to solve by hand.  
> So I
> tried to feed it to mathematica and got the message bellow. I got  
> annoyed and
> tested DSolve with a trivial problem only to realize that, apparently,
> mathematica is not very good when it comes to partial diff equations.
> Indeed, how come mathematica can't solve this simple system:
> DSolve[{D[f[x,y],x]==2 x y^2, D[f[x,y],y]==2 x^2 y}, f[x,y], {x, y}]
> the solution is trivial (f[x,y]=x^2 y^2), but if I enter the above
> command I get:
> DSolve::overdet:
>    The system has fewer dependent variables than equations, so is
>     overdetermined.
> any info would be appreciated,
> Thanks,
> David Boily
> Centre for Intelligent Machines
> McGill University
> Montreal, Quebec

Computer algebra programs  are becoming pretty good at solving ODE's  
and PDE's numerically (I would rate Mathematica's capabilities in  
this field since version 5 as excellent) but they are hopeless at  
finding symbolic solutions. I do not know anybody who is using a  
computer program for any serious symbolic PDE work. However, first of  
all, in my case Mathematica 5.1 does not produce the message you  
report; it simply returns the input unevaluated almost immediately,  
which means that it does not not know any general methods to apply to  
a system of this kind, and it does not fall in into any special cases  
it knows how to deal with. It does not however mean that it is  
entirely useless in this sort of situation; one can sometimes reduce  
such a system to something more palatable to it, but of course human  
input is needed.

In your case we first define the system we want to work on:

sys = {D[f[x, y], x] == 2*x*y^2, D[f[x, y], y] == 2*x^2*y};

When you have a system of equations it often helps to replace it  
first by a single more general equation. One can often use Eliminate  
to make Mathemtica find one:


(message removed)

2*x^2*y == Derivative[0, 1][f][x, y] &&
   2*x*y^2 == Derivative[1, 0][f][x, y] &&
   x*Derivative[1, 0][f][x, y] ==
    y*Derivative[0, 1][f][x, y] &&
   Derivative[1, 0][f][x, y]^2 ==
    2*y^3*Derivative[0, 1][f][x, y]

The first two equations are just the ones we had already but the  
third one looks promising, so we try to DSolve it:

DSolve[v[[3]], f[x, y], {x, y}]

{{f[x, y] -> C[1][x*y]}}

This is certainly progress. Any solutions of the original equations  
must be of this form. So we simply define f as

f[x_, y_] := c[x *y]

and now our sys becomes:

sys1=Simplify[sys, x != 0 && y != 0]

{2*x*y == Derivative[1][c][x*y],
   2*x*y == Derivative[1][c][x*y]}

O.K., so we see that all we need to do is to DSolve:

DSolve[Union[sys1] /. x*y -> t, c[t], t]

{{c[t] -> t^2 + C[1]}}

hence we get the solution f[x,y]:=x^2*y^2+constant

Obviously this requires a lot of human input and making some good or  
lucky choices (if I had chosen v[[4]] instead of v[[3]] I would not  
have got anywhere) but occasionally this kind of approach may be  
useful even in quite complex cases (I have several examples of this  

Andrzej Kozlowski


  • Prev by Date: Re: display of function
  • Next by Date: Re: Re: Re: Re: Can't assign value to symbols
  • Previous by thread: Partial diff equations
  • Next by thread: Re: Partial diff equations