MathGroup Archive 2010

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

Search the Archive

Difficulty in obtaining a numerical solution for a partial

  • To: mathgroup at smc.vnet.net
  • Subject: [mg114282] Difficulty in obtaining a numerical solution for a partial
  • From: Dilip Ahalpara <dpa1951 at gmail.com>
  • Date: Tue, 30 Nov 2010 04:01:54 -0500 (EST)

Dear all,

I have a partial differential equation (PDE), which when I try to solve
using NDSolve (to get U(x,t) in a given range, say  x in [0,20] and t in
[0,10]),
it blows up.
The PDE for U(x,t) is,
  Ut + (2/U) Ux Uxx - Uxxx = 0
where Ux=delU/delx, Ut=delU/delt, Uxx=del^2U/delx^2 etc.

As initial condition, a profile U(x,0) is fed, which is obtained
from a known function satisfying the PDE, obtained
from
  (c0/2) * (Sech[Sqrt[c0]/2 * (x-x0-c0*t)])^2
and the initial profile is placed around x0, with a height specified by c0.
The boundary condition is set to match at x0Left and x0Right.

To show that my Mathematica program has a correct logic,
I first solve a PDE
  Ut + 6 U Ux + Uxxx = 0
using the same initial and boundary conditions -- and it works
nicely as expected.

I include below the Mathematica program.

----------
(* Define the differntial equations*)
diffEqnLHS1 = D[u1[x, t], t] + 6*u1[x, t]*D[u1[x, t], x]  + D[u1[x, t], {x,
3}]
diffEqnLHS2 = D[u2[x, t], t] + D[u2[x, t], x]   D[u2[x, t], {x, 2}]*2/u2[x,
t] - D[u2[x, t], {x, 3}]
template[x0_, c0_, x_, t_] := 0.5*c0*(Sech[0.5*Sqrt[c0]*(x - x0 - c0*t)])^2;

cValue = 1.2;
{x0Left, x0Right} = {0.0, 20.0}; (*Solution space*)
x0Template = 5.0; (*Placing initial profile at x0*)
c0Template = 3;(*with height c0*)
initCondition = template[x0Template, c0Template, x, 0] +
   template[x0Template + (x0Right - x0Left), c0Template, x, 0] +
   template[x0Template - (x0Right - x0Left), c0Template, x, 0];
Print[N[initCondition /. x -> x0Left, 10], "  ", N[initCondition /.x ->
x0Right, 10],
  "  ", (initCondition /. x -> x0Left) == (initCondition /.x -> x0Right)];

soln1 = NDSolve[diffEqnLHS1 == 0 && u1[x, 0] == initCondition && u1[x0Left,
t] == u1[x0Right, t],
    u1, {t, 0, 10}, {x, x0Left, x0Right}]; // Timing
Animate[Plot[Evaluate[u1[x, t] /. soln1[[1]]], {x, x0Left, x0Right},
  PlotRange -> {0, 2}, GridLines -> Automatic], {t, 0, 10}]

soln2 = NDSolve[diffEqnLHS2 == 0 && u2[x, 0] == initCondition && u2[x0Left,
t] == u2[x0Right, t],
    u2, {t, 0, 1}, {x, x0Left, x0Right}]; // Timing
Animate[Plot[Evaluate[u2[x, t] /. soln2[[1]]], {x, x0Left, x0Right},
  PlotRange -> {0, 2}, GridLines -> Automatic], {t, 0, 1}]
----------

As can be seen by running this code, the Animate for soln1 works
quite ok -- it shows the initial profile propagating to the right
(increasing x) without changing the shape of the profile.
However when I try to solve another PDE of my interest,
i.e. corresponding to soln2, NDSolve does not generate a
well behaved solution.

My questions:
[1] What is going wrong while solving the second PDE?
[2] How to obtain a numerical solution for the second
PDE correctly?

Thanks for your time.
Dilip


  • Prev by Date: Re: Re-virginating Manipulates?
  • Next by Date: Re: Pass by reference for compiled functions
  • Previous by thread: Re: Links from slide shows/PDF documents to Mathematica Manipulate demos?
  • Next by thread: basic pattern matching