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

MathGroup Archive 2012

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

Search the Archive

Re: NDSolve: large relative error without error message

  • To: mathgroup at smc.vnet.net
  • Subject: [mg127794] Re: NDSolve: large relative error without error message
  • From: Mara Grahl <grahl at th.physik.uni-frankfurt.de>
  • Date: Thu, 23 Aug 2012 02:52:23 -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
  • References: <5022A87E.50606@th.physik.uni-frankfurt.de>

Dear mathgroup,

since there was no reply to my question so far, I just wanted to ask if
I described my problem in an understandable form.
To point out the main question:

For

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 the solution computed by Mathematia is
wrong. Is this a bug? If not, why is there no error message?

Best regards
Mara




On 08/08/12 19:57, Mara Grahl wrote:
> 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: Group and Replace itens sequence in a list
  • Next by Date: NDSolve: Transmissive boundary conditions?
  • Previous by thread: NDSolve: large relative error without error message
  • Next by thread: Text Alignment in Graphics[]