2010-11-22 7 views
1

나는 좋은 다항식을 가지고 있는데, 실제로는 this question의 게시되지 않은 답변입니다. (숙제 인 것 같아서, 질문자가 뇌 활동을 보여줄 때까지 아무 것도 게시하지 않습니다 : D) :플롯과 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 & 

첫 번째 루트를 원합니다. 그냥 확인 :

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에서 관리 정밀도가 어떻게 다른 숫자 결과를 얻으려면?

+0

Plot은 정밀도 제어가없는 시스템 번호를 사용하는 반면 N은 결과의 목표 정밀도를 보장 할 수있을 때까지 작업 정밀도를 높입니다. Stan Wagon은 자신의 저서 1 장에서 Plot –

+0

BTW에 정밀 제어를 추가하는 방법과 같은 자세한 내용을 제공합니다. Rob Knapp은 Mathematica에서 정밀 처리에 대한 좋은 개요를 가지고 있습니다. http://library.wolfram.com/infocenter/Conferences/7004/ –

+0

@Yaro 포인터 주셔서 감사합니다! 북마크 됨. –

답변

4

문제는 절대 정확도와 상대 정확도를 구별하는 것입니다. 아래 랜트하지만 제 용액 :
AccuracyGoalPrecisionGoal 용 문서에 따르면, 매쓰 미만 aAccuracyGoal이다 10^{-a} + 10^{-p} Abs[x]pPrecisionGoal 인 수치 오류 x 결과를 반환하기 위해 노력한다. 0 결과에 PrecisionGoal을 지정하면 문제가 발생합니다. 해결책 : AccuracyGoal 만 지정하십시오. N를 들어
당신은 Precision,Accuracy tupple을 제공하여이 작업을 수행 :

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

< 호언 장담 > 티카의 조건 "정확성"과 "정밀도"의 사용은 매우 실수입니다. 그것들은 실제로 "절대 정확도"및 "상대 정확도"라고 불려야합니다. 예 : 올바른 용어에 대한 설명은 Wikipedia을 참조하십시오. </rant >

+0

방아쇠를 당겼습니다. 고마워. –

-2

플롯의 정밀도는 그래프 크기/해상도와 같습니다 (약). 이것은 Mathematica에서의 최적화입니다.

+2

다음은 0 정밀도의 예제입니다. Plot @@ {Normal [Series [Cos [x], {x, 0, 200}]], {x, 0, 100}, PlotRange -> {-2, 2}} –

2

음, plot 명령으로 수행 된 계산이 N 명령에 의해 수행 된 것과 같지 않다고 생각합니다. Reap 및 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 명령과 매우 다릅니다. 임의 정밀도 계산의 어려움은 정확한 0을 추정하려고 시도하고 Mathematica가 정밀도를 결과에 첨부 할 수 없기 때문에 발생합니다. 이것은 훨씬 간단한 다항식에서 발생할 수 있습니다.

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

Reap [], Sow [] 예제에 +1 ... 플로팅하는 동안 절대로 사용하지 않았습니다. _ "와 Mathematica가 의미하는 것이 궁금합니다. _ –

+1

Mathematica의 임의 정밀도 산술 연산은 각 숫자에 정밀도를 첨부하려고 시도합니다. Janus가 지적했듯이 Precision은 상대적 정확도로 간주 될 수 있습니다. 따라서 숫자가 +/- dx까지 정확하면 dx/x를 기준으로 한 정밀도입니다. x = 0이면 정의되지 않습니다. 이것은 더 많은 숫자를 단순히 사용하여 표현식이 정확히 0임을 증명할 수 없다는 수학적 사실과 관련이 있습니다. Mathematica 문서 센터에 tutorial/ArbitraryPrecisionNumbers를 입력하면 주제에 대해 더 많은 것을 읽을 수 있습니다. –

+0

@Mark 설명과 링크에 감사드립니다. 이 –