Services & Resources / Wolfram Forums / MathGroup Archive
-----

MathGroup Archive 2012

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

Search the Archive

NDSolve: large relative error without error message

  • To: mathgroup at smc.vnet.net
  • Subject: [mg127619] NDSolve: large relative error without error message
  • From: Mara Grahl <grahl at th.physik.uni-frankfurt.de>
  • Date: Wed, 8 Aug 2012 21:32:39 -0400 (EDT)
  • Delivered-to: l-mathgroup@mail-archive0.wolfram.com
  • Delivered-to: l-mathgroup@wolfram.com
  • Delivered-to: mathgroup-newout@smc.vnet.net
  • Delivered-to: mathgroup-newsend@smc.vnet.net

Dear mathgroup,

I'm trying to solve a partial differential equation for quite a while
now and have several questions regarding the options for NDSolve.

Here's the PDE:

T = 100
mu = 0
g = 3.2

\[CurlyPhi]rb = 120^2

rb = D[10/4*\[CurlyPhi]^2, \[CurlyPhi]] /. \[CurlyPhi] -> \[CurlyPhi]rb

sol = NDSolve[{k*D[U[k, \[CurlyPhi]], k] ==
    k^5/(12*\[Pi]^2)*(3/Sqrt[
        k^2 + 2*D[U[k, \[CurlyPhi]], \[CurlyPhi]]]*
        Coth[Sqrt[k^2 + 2*D[U[k, \[CurlyPhi]], \[CurlyPhi]]]/(2*T)] +
       1/Sqrt[k^2 + 2*D[U[k, \[CurlyPhi]], \[CurlyPhi]] +
         4*\[CurlyPhi]*D[U[k, \[CurlyPhi]], {\[CurlyPhi], 2}]]*
        Coth[Sqrt[
         k^2 + 2*D[U[k, \[CurlyPhi]], \[CurlyPhi]] +
          4*\[CurlyPhi]*D[U[k, \[CurlyPhi]], {\[CurlyPhi], 2}]]/(
         2*T)] - (2*3*2)/Sqrt[
        k^2 + g^2*\[CurlyPhi]]*(Tanh[(
           Sqrt[k^2 + g^2*\[CurlyPhi]] - mu)/(2*T)] +
          Tanh[(Sqrt[k^2 + g^2*\[CurlyPhi]] + mu)/(2*T)])),
   U[500, \[CurlyPhi]] == 10/4*\[CurlyPhi]^2,
U^(0,1)[k,\[CurlyPhi]rb]==rb},
  U, {k, 2, 500}, {\[CurlyPhi], 0, \[CurlyPhi]rb}, AccuracyGoal -> 6,
  PrecisionGoal -> 6, MaxStepSize -> {0.05, 120}, MaxSteps -> 10000]

Please note that I did copy & paste from the notebook, except for the
boundary condition on the first derivative U^(0,1)[k,\[CurlyPhi]rb]==rb .

To summarize: it's a partial differential equation, first order in k and
second order in \[CurlyPhi]. My initial condition is U[500, \[CurlyPhi]]
== 10/4*\[CurlyPhi]^2.  I state only one boundary condition, since I
only know that the derivative should not change far away from the origin
(I chose 120^2 for the boundary).

I read tutorial/NDSolvePDE and related.

My coordinate intervals are {k, 2, 500} and {\[CurlyPhi], 0, 120^2}.
As far as I understand, without stating another method, Mathematica uses
the method LSODA (a particular method of lines). The intervals for the
coordinates are discretized on a grid with

Stepsize in k-direction = (500-2)/ N
Stepsize in \[CurlyPhi]-direction = 120^2 / M

where N and M are the number of grid points in each direction. That is,
for MaxStepSize -> {0.05, 120}, Mathematica can use 498/0.05= 9960 grid
points at maximum in k-direction, and 120 in \[CurlyPhi]-direction.

I experimented with different Accuracy- and PrecisionGoals, MaxStepSizes
and MaxSteps. It seems that the higher the Accuracy and Precision
settings, the earlier the integration gets unstable, that is the higher
the value for k in the error message

NDSolve::mxst: Maximum number of 10000 steps reached at the point k ==
4.053046219166641` .

This error message also appears for too small MaxStepSize, and
increasing MaxSteps is often not an effective help then. For larger
MaxStepSize there's no error message at all, but the solution given by
Mathematica is wrong for small k anyway. For example, using the settings

AccuracyGoal -> 5, PrecisionGoal -> 5, MaxStepSize -> {0.9, 140}

there's no error message. However, calculating the relative error

err := 1/(
  k*D[U[k, \[CurlyPhi]], k]) (-k*D[U[k, \[CurlyPhi]], k] +
    k^5/(12*\[Pi]^2)*(3/Sqrt[
        k^2 + 2*D[U[k, \[CurlyPhi]], \[CurlyPhi]]]*
        Coth[Sqrt[k^2 + 2*D[U[k, \[CurlyPhi]], \[CurlyPhi]]]/(2*T)] +
       1/Sqrt[k^2 + 2*D[U[k, \[CurlyPhi]], \[CurlyPhi]] +
         4*\[CurlyPhi]*D[U[k, \[CurlyPhi]], {\[CurlyPhi], 2}]]*
        Coth[Sqrt[
         k^2 + 2*D[U[k, \[CurlyPhi]], \[CurlyPhi]] +
          4*\[CurlyPhi]*D[U[k, \[CurlyPhi]], {\[CurlyPhi], 2}]]/(
         2*T)] - (2*3*2)/Sqrt[
        k^2 + g^2*\[CurlyPhi]]*(Tanh[(
           Sqrt[k^2 + g^2*\[CurlyPhi]] - mu)/(2*T)] +
          Tanh[(Sqrt[k^2 + g^2*\[CurlyPhi]] + mu)/(2*T)])))

for different points, shows that - with the above settings roughly for k
< 50 - the solutions acquire a complex part (whereas for k >50 , the
relative error is of the order 10^-6), e.g.:

err /. k -> 30 /. \[CurlyPhi] -> 30^2 /. sol
-0.522023 - 0.000456848 I

I face the same problem for all other settings I've tried so far. One of
the longest calculations I have run was for
AccuracyGoal -> 4, PrecisionGoal -> 4, MaxStepSize -> {0.005, 40},
MaxSteps -> 140000

I would appreciate very much any suggestions how to obtain a solution
with small relative error also for small k.

Thank you, best regards,
Mara












  • Prev by Date: Re: Symmetrizing function arguments
  • Next by Date: Re: Simplify Binomial
  • Previous by thread: Squares in Q[r], a question about algebraic numbers in mathematica
  • Next by thread: Re: NDSolve: large relative error without error message