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