Re: NDSolve very very slow
- To: mathgroup at smc.vnet.net
- Subject: [mg128509] Re: NDSolve very very slow
- From: "Kevin J. McCann" <kjm at KevinMcCann.com>
- Date: Thu, 25 Oct 2012 23:34:47 -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: <k6aje7$r2t$1@smc.vnet.net>
Bob Hanlon and others may have suggestions to speed things up, but note
that you are doing your calculations with 40 place precision. Since it
is not machine precision, this significantly impacts the speed. How
would you do a 40-place calculation in C++?
Kevin
On 10/25/2012 1:41 AM, popov.ghost at gmail.com wrote:
> M=1;
> \[Lambda][l_] = l (l + 1);
> rinf = 15000;
> $MinPrecision = 40;
> wp = $MinPrecision;
> ac = $MinPrecision - 8;
> pg = wp/2;
>
> eq[\[Omega]_,
> l_] := \[CapitalPhi]''[r] + (2 (r - M))/(
> r (r - 2 M)) \[CapitalPhi]'[
> r] + ((\[Omega]^2 r^2)/(r - 2 M)^2 - \[Lambda][l]/(
> r (r - 2 M))) \[CapitalPhi][r] == 0;
>
> (*The solution:*)
>
> \[CapitalPhi]out[\[Omega]_, l_] := \[CapitalPhi]out[\[Omega], l] = {\[CapitalPhi], \[CapitalPhi]'} /.
> Block[{$MaxExtraPrecision = 100},
> NDSolve[{eq[\[Omega], l], \[CapitalPhi][rinf] ==
> init, \[CapitalPhi]'[rinf] ==
> dinit}, {\[CapitalPhi], \[CapitalPhi]'}, {r, 29,
> 39}, WorkingPrecision -> wp,
> AccuracyGoal -> ac, PrecisionGoal -> pg,
> MaxSteps -> \[Infinity]]][[1]];
>
> (*Run as:*)
>
> \[CapitalPhi]out[2, 1]//AbsoluteTiming