2010-11-22 9 views
1

Ich habe ein schönes Polynom, das ist in der Tat die nicht gepostete Antwort auf this question (Ich denke, es ist Hausaufgaben, also werde ich nichts posten, bis der Fragesteller etwas Hirnaktivität zeigt: D):Präzision in Plots und in N []

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 & 

Ich möchte die erste Wurzel. Just checking:

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

p[jj] 

alt text

scheint steil, aber gut. Aber schauen Sie jetzt:

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

Out[394]= -2.9523*10^13 

Wenn ich für einige Präzision fragen:

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 

So ist die Frage ... ist Wie anders ist die Präzision in Mma Verwaltung, wenn Sie für einen Plot stellen und wenn Sie fragen, für ein numerisches Ergebnis?

+0

Plot verwendet Maschinennummern ohne Präzisionskontrolle, während N die Arbeitsgenauigkeit erhöht, bis es die Zielgenauigkeit des Ergebnisses garantiert. Stan Wagon hat mehr Details in Kapitel 1 seines Buches, wie zum Beispiel, wie man die Präzisionssteuerung zu Plot hinzufügen kann. –

+0

BTW, Rob Knapp hat einen schönen Überblick über das Präzisionshandling in Mathematica http://library.wolfram.com/infocenter/Conferences/7004/ –

+0

@Yaro Danke für den Zeiger! Markiert –

Antwort

4

Das Problem besteht darin, zwischen absoluter und relativer Genauigkeit zu unterscheiden. Rant unten, aber zuerst die Lösung:
Nach der Dokumentation für AccuracyGoal und PrecisionGoal, wird Mathematica bemüht sich, das Ergebnis x mit einem numerischen Fehler zurück weniger als 10^{-a} + 10^{-p} Abs[x] wo a ist AccuracyGoal und p ist PrecisionGoal. Dies führt zu einem Problem, wenn ein PrecisionGoal für ein Null-Ergebnis angegeben wird. Lösung: Geben Sie nur AccuracyGoal an.
Für N tun Sie dies durch eine Precision,Accuracy Tupel geben:

In[113]:= N[jj[Root[jj,1]],{0,24}] 
Out[113]= 0.*10^-24 

<rant> Die Verwendung der Begriffe „Genauigkeit“ und „Präzision“ in Mathematica sehr schlampig ist. Sie sollten wirklich "absolute Genauigkeit" und "relative Genauigkeit" genannt werden. Siehe z.B. Wikipedia für eine Diskussion der richtigen Terminologie. </rant >

+0

Ihre zog den Auslöser. Danke vielmals. –

-2

Die Genauigkeit des Diagramms entspricht (ungefähr) der Grafikgröße/Auflösung. Dies ist eine Optimierung in Mathematica.

+2

Hier ist ein Beispiel mit 0-Genauigkeit 'Plot @@ {Normal [Reihe [Cos [x], {x, 0, 200}]], {x, 0, 100}, PlotRange -> {-2, 2}} ' –

2

Nun, ich denke nicht, dass die Berechnungen, die von Ihrem Plot-Befehl ausgeführt werden, denen des N-Befehls entsprechen. Sie können überprüfen, welche Punkte werden während der Plotten eingesteckt mit Reap und 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]] 

Beachten Sie, dass Plot verwendet nur Maschinengenauigkeit Zahlen. Dies unterscheidet sich sehr von Ihrem N-Befehl, bei dem Sie den exakten Stamm der Funktion einfügen. Die Schwierigkeit bei der Berechnung mit beliebiger Genauigkeit tritt auf, da Sie versuchen, eine exakte Null zu schätzen, und Mathematica kann keine Genauigkeit an das Ergebnis anhängen. Dies kann mit viel einfacheren Polynomen geschehen.

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

+1 für das Reap [], Sow [] Beispiel ... nie beim Plotten benutzt. Ich frage mich, was Sie mit _ "meinen, und Mathematica ist nicht in der Lage, eine Genauigkeit an das Ergebnis anzuhängen" _ –

+1

Mathematicas arbiträre arithmetische Präzisionsversuche versuchen, jeder Zahl eine Genauigkeit zuzuordnen. Wie Janus betont, könnte Präzision als relative Genauigkeit betrachtet werden. Wenn eine Zahl bis +/- dx genau ist, basiert ihre Genauigkeit auf dx/x. Wenn x = 0, ist dies nicht definiert. Dies hängt mit der mathematischen Tatsache zusammen, dass Sie nicht beweisen können, dass ein Ausdruck genau null ist, indem Sie einfach mehr Ziffern verwenden. Sie können viel mehr über das Thema lesen, indem Sie in das Mathematica-Dokumentationszentrum tutorial/ArbitraryPrecisionNumbers eingeben. –

+0

@Mark Vielen Dank für die Erklärung und den Link. –