图中和N []的精度

时间:2010-11-22 02:49:03

标签: wolfram-mathematica

我有一个很好的多项式,实际上是this question的非张贴答案(我想这是家庭作业,所以我会发帖,直到提问者显示一些大脑活动:D):

jj = 1 + 54 #1 + 855 #1^2 + 6300 #1^3 + 37296 #1^4 + 221706 #1^5 + 
   385782 #1^6 + 1899783 #1^7 - 713709 #1^8 - 8772909 #1^9 + 
   1718343 #1^10 + 17264169 #1^11 - 3659847 #1^12 - 20026899 #1^13 + 
   3423276 #1^14 + 13768320 #1^15 - 1610712 #1^16 - 5314050 #1^17 + 
   881651 #1^18 + 1545093 #1^19 - 151263 #1^20 - 298626 #1^21 - 
   24552 #1^22 + 21978 #1^23 + 6594 #1^24 + 792 #1^25 + 
   45 #1^26 + #1^27 &

我想要第一个根。只需检查:

p[f_] := Plot[f[t], {t, Root[f, 1] - .003, Root[f, 1] + .003}];

p[jj]

alt text

看起来很陡但很好。但现在看看:

In[394]:= N[jj[Root[jj, 1]]]

Out[394]= -2.9523*10^13

如果我要求一些精确度:

In[396]:= N[jj[Root[jj, 1]], 1]

During evaluation of In[396]:= N::meprec: Internal precision limit $MaxExtraPrecision = 50.` reached while evaluating 1+<<11>>+<<18>>. >>

Out[396]= 0.*10^-49

所以问题是......当您要求绘图时以及当您要求数字结果时,Mma中的精确管理有何不同?

3 个答案:

答案 0 :(得分:4)

问题在于区分绝对准确度和相对准确度。勉强下面,但首先是解决方案:
根据{{​​1}}和AccuracyGoal的文档,Mathematica将努力返回结果PrecisionGoal,其数字误差小于x 10^{-a} + 10^{-p} Abs[x] {{1} }和aAccuracyGoal。如果为零结果指定p,则会导致问题。解决方案:仅指定PrecisionGoal 对于N,您可以通过提供PrecisionGoal tupple来执行此操作:

AccuracyGoal

&LT;咆哮&GT;在Mathematica中使用术语“准确性”和“精确度”非常草率。它们应该被称为“绝对准确度”和“相对准确度”。参见例如Wikipedia讨论正确的术语。&lt; / rant&gt;

答案 1 :(得分:2)

好吧,我不认为你的plot命令执行的计算与N命令执行的计算完全相同。您可以使用Reap and Sow检查绘图过程中插入的点:

p[f_] := Plot[f[t], {t, Root[f, 1] - 0.003, Root[f, 1] + 0.003},
  EvaluationMonitor -> Sow[t]];
Reap[p[jj]][[2, 1]]

请注意,Plot仅使用机器精度数字。这与您的N命令非常不同,在N命令中插入函数的确切根。由于您试图估计精确的零并且Mathematica无法将精度附加到结果,因此出现了任意精度计算的困难。这可以通过更简单的多项式来实现。

x0 = x /. First[Solve[x^5 - x - 1 == 0, x]];
N[x0^5 - x0 - 1, 9]

答案 2 :(得分:-2)

绘图的精度与图表大小/分辨率相同(大约)。这是Mathematica中的优化。