在 Mathematica 中定义数值常数的最佳方法是什么?
例如,假设我希望 g
是地球表面重力引起的近似加速度。我给它一个数值(在 m/s^2
中),告诉 Mathematica 它是数字,正数和常数,使用
Unprotect[g];
ClearAll[g]
N[g] = 9.81;
NumericQ[g] ^= True;
Positive[g] ^= True;
SetAttributes[g, Constant];
Protect[g];
然后我可以将它用作符号计算中的符号,当需要数值结果时,它会自动计算为 9.81。例如
1.0 g
评估为 9.81
。这似乎不像内置在数值常数中那样与 Mathematica 相关联。例如
Pi > 0
将评估为 True
,但 g > 0
不会。 (我可以将 g > 0
添加到全局 $Assumptions
但即使这样我也需要调用 Simplify
才能生效。)此外,
Positive[g]
返回 True
,但 Positive[g^2]
不计算 - 将其与使用 Pi
的等效语句进行比较。所以我的问题是,我还应该做什么来定义一个数值常数?可以设置哪些其他属性/属性?有没有更简单的方法来解决这个问题?等等...
最佳答案
我建议使用零参数“函数”。这样就可以同时赋予 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
丹尼尔·利希布劳
关于wolfram-mathematica - 如何在 Mathematica 中定义一个新的数字常量?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8275850/