如何在Mathematica中定义新的数字常量?

Sim*_*mon 11 wolfram-mathematica

在Mathematica中定义数值常量的最佳方法是什么?

例如,假设我想g成为地球表面引力引起的近似加速度.我给它一个数值(in m/s^2),告诉Mathematica它是数字,正数和常数使用

Unprotect[g];
ClearAll[g]
N[g] = 9.81;
NumericQ[g] ^= True;
Positive[g] ^= True;
SetAttributes[g, Constant];
Protect[g];
Run Code Online (Sandbox Code Playgroud)

然后我可以将它用作符号计算中的符号,当需要数值结果时,它将自动计算到9.81.例如,1.0 g评估为9.81.

这似乎与数学常量中内置的Mathematica无关.例如,Pi > 0将评估True,但g > 0不会.(我可以添加g > 0到全局$Assumptions但是我需要调用才能Simplify使它生效.)此外,Positive[g]返回True,但Positive[g^2]不评估 - 将其与使用的等效语句进行比较Pi.

所以我的问题是,我还应该做些什么来定义数值常数?可以设置哪些其他属性/属性?有没有更简单的方法来解决这个问题?等等...

Dan*_*lau 5

我建议使用零参数"函数".这样就可以同时给出NumericFunction属性和数字评估规则.后者对于诸如Positive之类的谓词很重要.

SetAttributes[gravUnit, NumericFunction]
N[gravUnit[], prec_: $MachinePrecision] := N[981/100, prec]

In[121]:= NumericQ[gravitUnit[]]
Out[121]= True

In[122]:= Positive[gravUnit[]^2 - 30]
Out[122]= True
Run Code Online (Sandbox Code Playgroud)

Daniel Lichtblau