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.
所以我的问题是,我还应该做些什么来定义数值常数?可以设置哪些其他属性/属性?有没有更简单的方法来解决这个问题?等等...
我建议使用零参数"函数".这样就可以同时给出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
| 归档时间: |
|
| 查看次数: |
3054 次 |
| 最近记录: |