ContourPlot的分辨率问题


11

我遇到了一个难题ContourPlot,当我改变我的变量的范围时,我得到一个全新的数字。例如:

ContourPlot[2.' c^4 - 1.693 c^4 x - 0.861 x^2 + 0.0417 Log[10^(-6)] x^2 + 
    0.25' x^2 Log[1/c^(2/3)] + (1.' c^4 + 0.673 x) x Log[x] - 
    0.125' x^2 Log[x]^2 == 0, {x, 3, 100}, {c, 1, 5}, PlotRange -> All] 

enter image description here

但是,如果我从{1,5}改变c范围内{1,50}这个数字是不同的:

enter image description here

任何人都知道的原因是什么?哪个数字是正确的?

9

这是一个解决问题。它可以通过增加使用PlotPoints数治愈:

Table[ContourPlot[ 
    2.' c^4 - 1.6931471805599454' c^4 x - 0.8611473146305157' x^2 + 
    0.041666666666666664' Log[10^(-6)] x^2 + 
    0.25' x^2 Log[ 
     1/c^(2/3)] + (1.' c^4 + 0.6732867951399863' x) x Log[x] - 
    0.125' x^2 Log[x]^2 == 0, {x, 3, 100}, {c, 1, 50}, 
    PlotRange -> All, PlotPoints -> pp, 
    PlotLabel -> "PlotPoints \[Rule] " <> ToString[pp] ], 
{pp, {Automatic, 150}} 
] 

enter image description here


12

rcollyer是对这个问题的根源,但有更好的(快)的方式来处理它不仅仅是起动了PlotPoints。单独用这个选项,我需要大约PlotPoints -> 300获得流畅的线条,历时七秒钟来呈现:

eq = 2.' c^4 - 1.6931471805599454' c^4 x - 0.8611473146305157' x^2 + 
    0.041666666666666664' Log[10^(-6)] x^2 + 
    0.25' x^2 Log[1/c^(2/3)] + (1.' c^4 + 0.6732867951399863' x) x Log[x] - 
    0.125' x^2 Log[x]^2 == 0; 

ContourPlot[Evaluate @ eq, {x, 3, 100}, {c, 1, 50}, 
    PlotRange -> All, PlotPoints -> 300] //AbsoluteTiming //Column 

enter image description here

MaxRecursion有很大帮助,在这种情况下:

ContourPlot[Evaluate @ eq, {x, 3, 100}, {c, 1, 50}, 
    PlotRange -> All, 
    PlotPoints -> 75, 
    MaxRecursion -> 6 
] // AbsoluteTiming // Column 

enter image description here

更好的是,这里似乎控制着较低的水平MaxBend参数:

ContourPlot[Evaluate @ eq, {x, 3, 100}, {c, 1, 50}, 
    PlotRange -> All, 
    MaxRecursion -> 3, 
    Method -> {MaxBend -> 0.5} 
] // AbsoluteTiming // Column 

enter image description here

+2

我一直推PlotPoints'的'数为即使放缓,似乎这样的伎俩。另外,我倾向于“MaxRecursion”,因为我曾经用它来关闭我的机器。然而,“MaxBend”看起来很有前景。 26 8月. 132013-08-26 19:29:46

+1

@rcollyer你是对的,你必须小心'MaxRecursion',因为它可以很容易地逃跑。 26 8月. 132013-08-26 19:34:03