이 함수에 대한 RegionPlot 결과의 정밀도를 높이려면 어떻게해야합니까?

Aug 17 2020

이 기능이 있습니다

f := 1024 (1 - (9 x^2)/4)^2 Cosh[(π x)/
    3]^2 Sinh[π x]^2 (8 (16 - 216 x^2 + 
        81 x^4 + (4 + 9 x^2)^2 Cosh[(2 π x)/3]) Sinh[π x]^2 - 
     1/256 ((4 + 9 x^2)^2 Sinh[x (2 π - y)] + 
        2 (64 - 144 x^2 + (4 + 9 x^2)^2 Cosh[(2 π x)/3]) Sinh[
          x y] - 9 (4 - 3 x^2)^2 Sinh[x (2 π + y)])^2);

어떤 범위의 변수에서이 함수가 음수인지보고 싶습니다. RegionPlot 사용

RegionPlot[ f < 0, {y, 2, 2.25}, {x, 1.15, 1.17}, 
 WorkingPrecision -> 30, PlotPoints -> 50]

이 줄거리를 얻습니다

그런 다음 범위를 다음과 같이 줄이면

RegionPlot[ 
 f < 0, {y, Rationalize[2.1299849, 0], Rationalize[2.1299855, 0]}, {x,
   Rationalize[1.15970110, 0], Rationalize[1.15970113, 0]}, 
 WorkingPrecision -> 90, PlotPoints -> 150]

나는 얻는다

여기에서는 파란색 부분이 접촉하는지 여부가 명확하지 않습니다. 파란색 부분이 연속적인지 여부를 자세히 알아 보려면 어떻게해야합니까?

답변

3 MichaelE2 Aug 17 2020 at 20:00

가장 간단한 플로팅 솔루션

ContourPlot[f,
 {y, Rationalize[2.1299849, 0],  Rationalize[2.1299855, 0]},
 {x, Rationalize[1.15970110, 0], Rationalize[1.15970113, 0]},
 ContourShading ->
  {RGBColor[0.368417, 0.506779, 0.709798, 0.4], None},
 Contours -> {{0}},
 PlotPoints -> 25, WorkingPrecision -> 32,
 Method -> {"TransparentPolygonMesh" -> True}
 ]

그러나 플롯이 항상 그다지 설득력있는 것은 아니며, 무슨 일이 일어나고 있는지 대략적인 아이디어 만 제공하도록 설계되었습니다.

분석 솔루션

비슷한 질문에 대한이 답변 에서 보여 주었 듯이 , 우리는 노드가 있다는 것을 분석적으로 보여줄 수 있습니다.

jac = D[f, {{x, y}}];
cpsol = FindRoot[jac == {0, 0}, {{x, 1.15}, {y, 2.13}}, 
   WorkingPrecision -> 50];
cpt = {x, y} /. cpsol
f /. cpsol      (* shows cpt is on curve *)
f /. N[cpsol]   (* show numerical noise at cpt is substantial *)
(*
  {1.1597011139328870007473930523093558428367204499142, 
   2.1299852028277681162523681416937176426970454505325}
  0.*10^-36
  0.0119859
*)

길들이기 RegionPlot

RegionPlotRegion기능 이 도입 된 이후로 발전해 왔습니다 . RegionPlot이 기능을 사용하여 플롯을 생성하는 것으로 보이며 WorkingPrecision수치 노이즈에서 분명한 옵션을 무시합니다 . 지역 기능은 기계 정밀도에서만 사용할 수있는 FEM 기능을 기반으로합니다. (마찬가지로 옵션 MaxRecursion이 없어 보입니다.)

다음은 작업 정밀도를 제어하는 ​​방법입니다.

ClearAll[fff];
fff[x0_Real, y0_Real] := 
  Block[{x = SetPrecision[x0, Infinity], 
    y = SetPrecision[y0, Infinity]},
   N[
    1024 (1 - (9 x^2)/4)^2 Cosh[(π x)/
        3]^2 Sinh[π x]^2 (8 (16 - 216 x^2 + 
          81 x^4 + (4 + 9 x^2)^2 Cosh[(2 π x)/
             3]) Sinh[π x]^2 - 
       1/256 ((4 + 9 x^2)^2 Sinh[x (2 π - y)] + 
           2 (64 - 144 x^2 + (4 + 9 x^2)^2 Cosh[(2 π x)/3]) Sinh[
             x y] - 9 (4 - 3 x^2)^2 Sinh[x (2 π + y)])^2),
    $MachinePrecision]
   ];

RegionPlot[
 fff[x, y] < 0,
 {y, Rationalize[2.1299849, 0],  Rationalize[2.1299855, 0]},
 {x, Rationalize[1.15970110, 0], Rationalize[1.15970113, 0]},
 PlotPoints -> 100]

그러나 하나의 제비는 여름을 만들지 않습니다.

2 Hausdorff Aug 17 2020 at 20:05

두 지역이 만나는 지 여부에 관심 ContourPlot이 있으므로 좀 더 안정적인 것처럼 보이는을 사용할 수도 있습니다 .

ContourPlot[f == 0, {y, 2.1299849, 2.1299855}, {x, 1.15970110, 1.15970113}, 
    WorkingPrecision -> 40, MaxRecursion -> 6]