Re: how to define a constant like Pi in Mathematica
- To: mathgroup at smc.vnet.net
- Subject: [mg64023] Re: how to define a constant like Pi in Mathematica
- From: Urijah Kaplan <uak at sas.upenn.edu>
- Date: Fri, 27 Jan 2006 05:13:54 -0500 (EST)
- Organization: University of Pennsylvania
- References: <dra36k$m2t$1@smc.vnet.net>
- Sender: owner-wri-mathgroup at wolfram.com
In Mtm 5.2, Im[Log[Sqrt[E+Omega]]==0, but NumericQ[Omega]=True is not retained when you DumpSave[] Omega, Quit, and then Get. Strange. --Urijah Kaplan In[1]:= $Version Out[1]= 5.2 for Microsoft Windows (June 20, 2005) In[2]:= ClearAll[Omega]; SetAttributes[Omega,Constant]; N[Omega]=N[ProductLog[1]]; N[Omega,prec_]:=N[ProductLog[1],prec]; NumericQ[Omega]=True; Omega/:Re[Omega]=Omega; Omega/:Im[Omega]=0; Omega/:Arg[Omega]=0; Omega/:Abs[Omega]=Omega; Omega/:Conjugate[Omega]=Omega; In[12]:= {Negative[Log[Omega]],0<Sqrt[Omega]<1,Sign[Sqrt[E+Omega]],Ceiling[E+Omega]} Out[12]= {True,True,1,4} In[13]:= Im[Log[Sqrt[E+Omega]]] Out[13]= 0 In[14]:= ??Omega Global`Omega \!\(\* InterpretationBox[GridBox[{ {\(Attributes[Omega] = {Constant}\)}, {" "}, {GridBox[{ {\(Abs[Omega] ^= Omega\)}, {" "}, {\(Arg[Omega] ^= 0\)}, {" "}, {\(Conjugate[Omega] ^= Omega\)}, {" "}, {\(Im[Omega] ^= 0\)}, {" "}, {\(Re[Omega] ^= Omega\)} }, GridBaseline->{Baseline, {1, 1}}, ColumnWidths->0.999, ColumnAlignments->{Left}]}, {" "}, {GridBox[{ {\(Omega /: N[Omega, {MachinePrecision, \[Infinity]}] = 0.5671432904097838`\)}, {" "}, {\(N[Omega, prec_] := N[ProductLog[1], prec]\)} }, GridBaseline->{Baseline, {1, 1}}, ColumnWidths->0.999, ColumnAlignments->{Left}]} }, GridBaseline->{Baseline, {1, 1}}, ColumnAlignments->{Left}], Definition[ "Omega"], Editable->False]\) In[15]:= DefaultValues[NumericQ] OwnValues[NumericQ] DownValues[NumericQ] NValues[NumericQ] UpValues[Symbol] DownValues[Omega] UpValues[Omega] Out[15]= {} Out[16]= {} Out[17]= {} Out[18]= {} Out[19]= {} Out[20]= {} Out[21]= {HoldPattern[Abs[Omega]]\[RuleDelayed]Omega, HoldPattern[Arg[Omega]]\[RuleDelayed]0, HoldPattern[Conjugate[Omega]]\[RuleDelayed]Omega, HoldPattern[Im[Omega]]\[RuleDelayed]0, HoldPattern[Re[Omega]]\[RuleDelayed]Omega} In[22]:= NumericQ[Omega] Out[22]= True In[23]:= DumpSave["OM.mx",Omega] Out[23]= {Omega} In[24]:= Quit[] In[1]:= <<OM.mx In[2]:= ??Omega Global`Omega \!\(\* InterpretationBox[GridBox[{ {\(Attributes[Omega] = {Constant}\)}, {" "}, {GridBox[{ {\(Abs[Omega] ^= Omega\)}, {" "}, {\(Arg[Omega] ^= 0\)}, {" "}, {\(Conjugate[Omega] ^= Omega\)}, {" "}, {\(Im[Omega] ^= 0\)}, {" "}, {\(Re[Omega] ^= Omega\)} }, GridBaseline->{Baseline, {1, 1}}, ColumnWidths->0.999, ColumnAlignments->{Left}]}, {" "}, {GridBox[{ {\(Omega /: N[Omega, {MachinePrecision, \[Infinity]}] = 0.5671432904097838`\)}, {" "}, {\(N[Omega, prec_] := N[ProductLog[1], prec]\)} }, GridBaseline->{Baseline, {1, 1}}, ColumnWidths->0.999, ColumnAlignments->{Left}]} }, GridBaseline->{Baseline, {1, 1}}, ColumnAlignments->{Left}], Definition[ "Omega"], Editable->False]\) In[3]:= DefaultValues[NumericQ] OwnValues[NumericQ] DownValues[NumericQ] NValues[NumericQ] UpValues[Symbol] DownValues[Omega] UpValues[Omega] Out[3]= {} Out[4]= {} Out[5]= {} Out[6]= {} Out[7]= {} Out[8]= {} Out[9]= {HoldPattern[Abs[Omega]]\[RuleDelayed]Omega, HoldPattern[Arg[Omega]]\[RuleDelayed]0, HoldPattern[Conjugate[Omega]]\[RuleDelayed]Omega, HoldPattern[Im[Omega]]\[RuleDelayed]0, HoldPattern[Re[Omega]]\[RuleDelayed]Omega} In[10]:= NumericQ[Omega] Out[10]= False ted.ersek at tqci.net wrote: > John Smith wanted to define a constant such as (c=1.2345) > that would behave exactly like Pi or E. > > Below I give a good, but incomplete definition for the > Omega constant described at > http://mathworld.wolfram.com/OmegaConstant.html > > -------------------------------- > > In[1]:= > ClearAll[Omega]; > SetAttributes[Omega,Constant]; > NumericQ[Omega]=True; > N[Omega]=N[ProductLog[1]]; > N[Omega,prec_]:=N[ProductLog[1],prec]; > Omega/:Re[Omega]=Omega; > Omega/:Im[Omega]=0; > Omega/:Arg[Omega]=0; > Omega/:Abs[Omega]=Omega; > Omega/:Conjugate[Omega]=Omega; > > > After making the above definitions we can do lots of things with > Omega that aren't directly defined above. Here are some examples. > > > In[11]:= > { > Negative[Log[Omega]], > 0<Sqrt[Omega]<1, > Sign[Sqrt[E+Omega]], > Ceiling[E+Omega] > } > > Out[11]= > {True, True, 1, 4} > > > I thought with the above definitions, Mathematica could determine that > the following is zero, but it can't. > > In[12]:= > Im[Log[Sqrt[E+Omega]]] > > Out[12]= > Im[Log[Sqrt[E + Omega]]] > > However, if we change Omega to Pi above Mathematica knows the result is zero. > We could fix this specific example with a rule in DownValues[Im] or > UpValues[Log], > but that would only cover limited examples. No doubt there are many other > examples > that my definitions don't cover, but are covered for built-in constants > such as > E and Pi. > > In[13]:= > Im[Log[Sqrt[E+Pi]]] > > Out[13]= > 0 > > ---------------------------------- > QUESTIONS: > > (1) How can we define a constant the does a better job of acting > like a built-in constant. > > (2) After making the definitions above NumericQ[Omega] returns True. > Where is this definition stored? > > > I evaluated: > > In[14]:= > ??NumericQ > > > In[15]:= > ??Symbol > > > In[16]:= > ??Omega > > > In[17]:= > DefaultValues[NumericQ] > OwnValues[NumericQ] > DownValues[NumericQ] > NValues[NumericQ] > UpValues[Symbol] > DownValues[Omega] > UpValues[Omega] > > > After checking all those places I found no trace of the definition > NumericQ[Omega]=True > > > Note: I am using Mathematica 4.0 and this may be a bug that is fixed in > later versions. > > ---------- > Thanks, > > Ted Ersek > >