MathGroup Archive 1998

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

Search the Archive

Re: Mathematica 3.0 Palette for Physics SI Fundamental Constants


  • To: mathgroup@smc.vnet.net
  • Subject: [mg12419] Re: [mg12311] Mathematica 3.0 Palette for Physics SI Fundamental Constants
  • From: Bob Hanlon <BobHanlon@aol.com>
  • Date: Thu, 14 May 1998 11:15:28 -0400

A user-defined constant should behave similarly to a built-in constant
such as Pi, that is, it should act like a symbol unless its numeric
properties are explicitly or implicitly invoked.  For example,

{Pi, 2*Pi, 2*Pi/3, (1 + I)*Pi, Pi/3, Pi^2, Pi/3., 
	Pi^2., N[Pi], 1.*Pi, (1. + I)*Pi, (1 + 1.*I)*Pi,
	D[Pi, x], Dt[Pi, x], NumericQ[Pi]}

{Pi, 2*Pi, (2*Pi)/3, (1 + I)*Pi, Pi/3, Pi^2, 
  1.047197551196597, 9.869604401089357, 3.141592653589793, 
  3.141592653589793, 3.141592653589793 + 
   3.141592653589793*I, 3.141592653589793 + 
   3.141592653589793*I, 0, 0, True}

This behavior can be implemented along the following lines (that is, I
haven't checked this out thoroughly enough to be sure that I have
covered all the various situations required to cause a user-defined
constant to behave exactly like a built-in constant): 

RealQ[(x_)?NumberQ] := 
    !(Head[x] === Complex || Head[x] === Integer ||
    Head[x] === Rational); 

Real2Q[x_] := RealQ[x] || 
	Head[x] === Complex && (RealQ[Re[x]] || 
	RealQ[Im[x]]);

defineConstant[s_Symbol, (value_)?NumberQ] := 
   Module[{}, 
   	Unprotect[s]; 
	Clear[s]; 
	s/: NumericQ[s] = True; 
	s/: N[s] := value; 
     s/: (a_)?Real2Q*s := a*N[s]; 
     s/: s^(a_)?Real2Q := N[s]^a; 
     SetAttributes[s, {Constant, Protected}]
   ]

defineConstant[c, 2.99792458*^8 Meter/Second];

{c, 2*c, 2*c/3, (1 + I)*c, c/3, c^2, c/3., c^2., N[c],
	1.*c, (1. + I)*c, (1 + 1.*I)*c, D[c, x], Dt[c, x],
	NumericQ[c]}

{c, 2*c, (2*c)/3, (1 + I)*c, c/3, c^2, 
  (9.993081933333332*^7*Meter)/Second, 
  8.987551787368172*^16*(Meter/Second)^2., 
  (2.997924579999999*^8*Meter)/Second, 
  (2.997924579999999*^8*Meter)/Second, 
  ((2.997924579999999*^8 + 2.997924579999999*^8*I)*Meter)/
   Second, ((2.997924579999999*^8 + 
       2.997924579999999*^8*I)*Meter)/Second, 0, 0, True}

f[\[Lambda]_] := c/\[Lambda]

{f[\[Lambda]], N[f[\[Lambda]]], f[3*Meter], f[3.*Meter]}

{c/\[Lambda], (2.997924579999999*^8*Meter)/
   (Second*\[Lambda]), c/(3*Meter), 
  9.993081933333332*^7/Second}

Bob Hanlon

In a message dated 5/8/98 2:25:53 AM, silver1@inreach.com wrote:

>I have been constructing a custom palette which has about 100
>fundamental constants for physics.  What I thought would be a 2 or 3
>hour task has turned out to be a much larger project.  I wanted to set
>up the symbols for the constants to be as close to actual
>mathematical/physics expression as possible.  The purpose of the
>palette is to allow you to enter c for instance for the speed of light
>with appropriate units.
>



  • Prev by Date: Create Auto Save Package
  • Next by Date: Re: a^n*b^n != (a*b)^n
  • Prev by thread: Re: Mathematica 3.0 Palette for Physics SI Fundamental Constants
  • Next by thread: Re: Re: Mathematica 3.0 Palette for Physics SI Fundamental Constants