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