ฉันจะเพิ่มความแม่นยำของผลลัพธ์ของ 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

RegionPlotมีการพัฒนาตั้งแต่การเปิดตัวRegionฟังก์ชันการทำงาน 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]