Re: Partial diff equations
- To: mathgroup at smc.vnet.net
- Subject: [mg58520] Re: [mg58510] Partial diff equations
- From: Andrzej Kozlowski <akozlowski at gmail.com>
- Date: Tue, 5 Jul 2005 06:34:12 -0400 (EDT)
- References: <200507050557.BAA29453@smc.vnet.net>
- Sender: owner-wri-mathgroup at wolfram.com
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:
v=Eliminate[sys,x]
(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
kind).
Andrzej Kozlowski
Chiba,JAPAN
- References:
- Partial diff equations
- From: David Boily <dsboily@fastmail.ca>
- Partial diff equations