On Wed, Aug 12, 2009 at 8:44 AM, William Stein<wst...@gmail.com> wrote:
>
> On Tue, Aug 11, 2009 at 11:30 PM, Jason
> Grout<jason-s...@creativetrax.com> wrote:
>>
>> William Stein wrote:
>>> Hi,
>>>
>>> I just wanted to let people know that David Ackerman -- a UW student who
>>> took my course on Sage last quarter -- is working (funded by NSF) on
>>> creating a "units package" for Sage right _now_.  If anybody has any
>>> pseudo-sage code that involves units that they wished work, please post
>>> it to this thread. What do you want units to *do*?
>>>
>>
>> Is he doing something from scratch or is he working from the packages
>> that have come up from time to time here?
>
> He is doing something from scratch.
>
> I had planned to have him work on integrating some existing package,
> but after evaluating that approach he said it didn't seem to make
> sense (at least he has a lot of experience using Sage, since he took
> my class).   I didn't have an opinion one way or the other, but we
> decided to ask -- "what is a so called units package supposed to do
> anyways" since I honestly couldn't really tell you.  I would use one
> to convert between Fahrenheit and Celcius, and maybe dollars and euros
> :-).   We google around and found that Matlab didn't seem to come with
> a units package, but there were several third party packages -- anyway
> Sage isn't much like Matlab so looking there seemed pointless.  Then
> we looked at Mathematica's included units package and read all the
> documentation and examples of it.    That was enlightening, and
> suggested doing almost precisely what Robert Dodier keeps telling us
> to do, which is make the different units just be symbolic variables,
> plus have some extra table somewhere of conversions (where everything
> is kept as exact fractions), and add a few functions to do
> conversions.

+1 on this design.

It's similar to what sympy does, except sympy always expands units to
multiples of base units. A conversion then is just a division:

>>> from sympy.physics.units import mega, kilo, second, giga, minute, Unit
>>> bit = Unit('bit', 'b')
>>> byte = 8*bit
>>> n = 94959 * kilo*byte
>>> n / (mega*byte)
94959/1000
>>> (6 *giga*byte/minute) / (mega*byte/second)
100

The advantage of the sympy approach is that the representation is
always normalized; a disadvantage is that a value converted to a
non-base unit will be in dimensionless form.

The suggested approach for Sage is better but you'll have to work out
what to do for example when comparing 100*m and 1/10*km, and whether
for example 1*N*s**2/kg should automatically simplify to 1*m.

Fredrik

--~--~---------~--~----~------------~-------~--~----~
To post to this group, send an email to sage-devel@googlegroups.com
To unsubscribe from this group, send an email to 
sage-devel-unsubscr...@googlegroups.com
For more options, visit this group at http://groups.google.com/group/sage-devel
URLs: http://www.sagemath.org
-~----------~----~----~----~------~----~------~--~---

Reply via email to