MathGroup Archive 2003

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

Search the Archive

NDSolve and singularity (partial differential equation)

  • To: mathgroup at smc.vnet.net
  • Subject: [mg45010] NDSolve and singularity (partial differential equation)
  • From: Yama Masu <yamagomas at yahoo.co.jp>
  • Date: Sat, 13 Dec 2003 06:05:52 -0500 (EST)
  • Sender: owner-wri-mathgroup at wolfram.com

Hi.

I am trying to solve partial differential equation to obtain string
vibration with impulse;
  D[u[x, t], {t, 2}] == D[u[x, t], {x, 2}] + f[x, t], where
  f[x_, t_] = If[(t>0 && t< 0.011) && (x > -0.01 && x < 0.01), Sin[100 Pi t], 0]
with boundary condition
  u[x, 0] == 0, Derivative[0, 1][u][x, 0] == 0, u[-2, t] == 0, u[1, t] == 0
for {x, -2, 1}, {t, 0, 1}.

But NDSolve misses this singularity and gives u[x,t]=0 at any x and t.

How can I have NDSolve recognize this singularity.


If I take {x,-1,1} for the range of x and boundary condition u[-1, t] == 0,
reasonable solution is obtained. This is because the singularity is in the 
middle of the range and is accidentally found by NDsolve. But I want to 
solve the case with impulse not exactly in the middle of the range.

If I set MaxStepSize -> {0.005, 0.005}, NDSolve finds the singularity, but
now there is big accumulated error because the step is always small even
if there is no singularity. Therefore unreasonably flat solution is obtained.

How can I set steps small for the region (t>0 && t<0.011) &&
 (x>-0.01 && x<0.01) and not so big for other region as is automatically
done by NDSolve in the case -1<x<1?

I also tried  MaxSteps->{5000,5000}, StartingStepSize->{0.005,0.005}
but this did not work either, just because this option sets small
steps only at the starting point i.e. t=0 x=-2 and gives large steps
around x=0 and t=0.

Any help or clue is welcome.

Thanks in advance
    Masu

---------------The source I used------------------
f[x_, t_] = If[(t > 0 && t < 0.011) && (x>-0.01 && x<0.01) , Sin[100 Pi t], 0]

sol=NDSolve[
 {
  D[u[x, t], {t, 2}] == D[u[x, t], {x, 2}]+f[x,t],
  u[x, 0] == 0, 
  Derivative[0, 1][u][x, 0] == 0,
  u[-2, t] == 0,
  u[1, t] == 0
 },
 u,
 {x, -2, 1}, {t, 0, 1}]

{usol}={u}/.sol[[1]]

Plot[usol[x, 0.2],{x,-1,1},PlotRange->{-0.0005, 0.0009}];
  


  • Prev by Date: Re: Now I understand that it was an input problem!!
  • Next by Date: RE: Re: Maybe it's me but the integrator at wolfram doesn't work very well
  • Previous by thread: Re: Mathematica 5 hangs when rendering plots with large numbers
  • Next by thread: Replacement rules with I (sqrt(-1)