Mathematica 9 is now available
Services & Resources / Wolfram Forums / MathGroup Archive
-----

MathGroup Archive 2013

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

Search the Archive

Re: Quantity[] (Units) slows things! Solutions?

  • To: mathgroup at smc.vnet.net
  • Subject: [mg131516] Re: Quantity[] (Units) slows things! Solutions?
  • From: "Kevin J. McCann" <kjm at KevinMcCann.com>
  • Date: Sat, 17 Aug 2013 02:05:03 -0400 (EDT)
  • Delivered-to: l-mathgroup@mail-archive0.wolfram.com
  • Delivered-to: l-mathgroup@wolfram.com
  • Delivered-to: mathgroup-outx@smc.vnet.net
  • Delivered-to: mathgroup-newsendx@smc.vnet.net
  • References: <kukj38$qt6$1@smc.vnet.net>

I find the new way Mathematica deals with units and physical constants to be a 
rather poor change to the old Units and PhysicalConstants packages. In 
addition to the fact that asking for something like the speed of light 
requires an internet connection, there is the slowdown in just the 
handling of units as you found.

I used the old units package, which has its own problems, to rewrite:

<< Units`

lwc2[dBZ_, sigma_, n_] :=
    Convert[((1/6)*Pi*(Gram/Centimeter^3)*
           Sqrt[n*10^(dBZ/10)*
               ((Milli*Meter)^6/Meter^3)])/
        E^((9*sigma^2)/2),
      Gram/Centimeter^3]

Then

Timing[Table[
   lwc2[dbz, 0.35, 200./(Centimeter^3)], {dbz, -100., -10., 0.1}]]

Takes about 0.5s as opposed to 23.5s on my computer.

Kevin

On 8/16/2013 3:07 AM, Frank Iannarilli wrote:
> Hi,
>
> This is for Mathematica9 which introduced units-handling via the Quantity[] function and its friends. It's a nice provision, but can slow things down substantially for production work, e.g. below shows a factor of 6500 slowdown!
>
> For example:
>
> lwc[dBZ_, sigma_, n_Quantity] := (1/6) Exp[-9 sigma^2/2] Pi
>     Quantity[1.,"Grams"/("Centimeters"^3)]
>     Sqrt[n (10^(dBZ/10))
>     Quantity[1., ("Millimeters")^6/("Meters"^3)]]
>
> Timing[Table[lwc[dbz, 0.35,
>     Quantity[200., 1/("Centimeters"^3)]],
>     {dbz, -100., -10., 0.1}]]
>
> ===>>65 Seconds!
>
> whereas the unitless equivalent:
>
> lwcn[dBZ_, sigma_, n_] := (1/6) Exp[-9 sigma^2/2] Pi
>      1.0 Sqrt[n (10^(dBZ/10)) ]
>
> Timing[Table[lwcn[dbz, 0.35, 200.], {dbz, -100., -10., 0.1}]]
>
> ===>>0.01 Seconds!
>
>
> Can anyone suggest any tricks other than removing the units-handling?
>
>
>
>



  • Prev by Date: Re: fyi, making animation into PDF file from images genenerated by Mathematica
  • Next by Date: Re: fyi, making animation into PDF file from images genenerated by Mathematica
  • Previous by thread: Quantity[] (Units) slows things! Solutions?
  • Next by thread: How to remove external parentheses from a list