我有一个很好的多项式,实际上是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]
看起来很陡但很好。但现在看看:
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中的精确管理有何不同?
答案 0 :(得分:4)
问题在于区分绝对准确度和相对准确度。勉强下面,但首先是解决方案:
根据{{1}}和AccuracyGoal
的文档,Mathematica将努力返回结果PrecisionGoal
,其数字误差小于x
10^{-a} + 10^{-p} Abs[x]
{{1} }和a
是AccuracyGoal
。如果为零结果指定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中的优化。