关于N函数的适用范围
mathematica吧
全部回复
仅看楼主
level 1
请问下N函数是不是有适用范围的,比如我想对我算出的数值保留两位,结果发现没用,能问下是为什么?谢谢!
In[18]:= ({3.34, 3.32, 3.35, 3.32} - 3.24)^2 // Total // Sqrt
Out[18]= 0.186815
In[19]:= N[%, 2]
Out[19]= 0.186815
2019年06月24日 08点06分 1
level 14
N设置精度只对精确数有效,对本身是近似数而要改变精度用SetPrecision
2019年06月26日 13点06分 2
谢谢,不过我发现SetPrecision的进位机制有点奇怪,能进一步请教下吗,问题我放楼下了
2019年06月27日 01点06分
“N设置精度只对精确数有效”不对,参6楼。
2019年07月06日 05点07分
level 10
N[expr,n]
尝试给出具有 n 位精度的结果.
——————————————————————
除非 expr 中的数是精确的,或者具有足够高的精度,否则 N[expr,n] 可能无法给出具有 n 位精度的结果.
——————————————————————
还可以尝试“NumberForm”
2019年06月27日 00点06分 3
谢谢你的友情帮助[哈哈]
2019年06月27日 01点06分
“还可以尝试“NumberForm””NumberForm只改变外观,不会改变内部精度。
2019年07月06日 05点07分
更多内容可参考精品区MatrixForm那篇文章,道理是一样的。
2019年07月06日 05点07分
level 1
为了方便看,我把结果就给贴图出来了,见谅。
当取如下复数时,可以看到实部是表现出5进位的(红线),但虚部就有点奇怪了,可以看到
在蓝线部分并没表现出逢5进位。我以为跟实部虚部还有点关系。
t = 3.5455 + 4.5545 I;
Table[{SetPrecision[t, n], NumberForm[t, n]}, {n, 1, 5}] // Column
于是,当我把复数减少了一位有效数,可以看到在实部其实也没有表现5进位。
t = 3.545 + 4.554 I;
Table[{SetPrecision[t, n], NumberForm[t, n]}, {n, 1, 4}] // Column
所以,我想请问下这是为什么?或者说SetPrecision的进位机制是怎样的?
2019年06月27日 01点06分 4
在没有考虑“显示形式与内部精度无关”这点的时间点上就已经上了歪路了,这一部分可参考《mathematics中`和``有什么区别吗?如下图所示:》,这帖又是17年以前的,但是可以从百度快照里翻出来。
2019年07月06日 05点07分
吧务
level 15
你们真急人。
2019年07月06日 05点07分 6
谢谢!的确NumberForm只能改变形式,对结果不影响。不过加 ` 就可以生成所需精度的数值了,有时候加N会不会多余呢。 当然精度想随意调整的话,或者用个变量替代的话(像a=Integer, N[3.14,a]这样),可能N还是有必要的,仅使用3.14`a 好像是不行的吧
2019年07月08日 06点07分
嗯,突然想到一个问题,因为一般来说我们都是在中间需要读取一定精度的结果再进行操作,比如说得到题目中的Out[18]= 0.186815,而不是去手动输入它。那要得到这样的结果,是得事先就对输入的那些数值规定好精度是吗,像In[18]:= ({3.34, 3.32, 3.35, 3.32} - 3.24)^2 // Total // Sqrt对精度做好确定
2019年07月08日 06点07分
@sky无聊之人 光是 a=1234 你就不能直接用 ` 来改。你那个In[18]全是MachinePrecision,因为小数没超出MachinePrecision的表示范围时Mathematica默认用MachinePrecision,除非强制指定。
2019年09月07日 11点09分
1