在 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/

10-15 01:49