このプロットが連続しているかどうかを確認するために、正確なプロットを作成するにはどうすればよいですか?

Aug 17 2020

私はこの3変数関数を持っています

f := 16 ((-1 + (9 x^2)/4) Cos[z] Cosh[(π x)/3] + 
      3 x Sin[z] Sinh[(π x)/3]) Sinh[π x] + 
   8 (-1 + (9 x^2)/4) Sinh[x y] + (-3 + (9 x^2)/4)^2 Sinh[
     x (2 π + y)] - (1 + (9 x^2)/
      4)^2 (2 Cosh[(2 π x)/3] Sinh[x y] + Sinh[2 π x - x y]);

ContourPlot3Dを次のように使用します

ContourPlot3D[f == 0, {x, 1.1, 1.21}, {y, 2, 2.2}, {z, 0.8, 1.2}]

結果が得られます(プロットのさまざまな方向を添付しました)

ここでは、間に空の部分があります。これらの2枚のシートは互いに接触するか、または互いに回避していると確信しています。したがって、この空の部分(本当に空の場合)は真ではありません。より正確な結果(プロット)を取得して、それらが連続している(互いに会っている)かどうかを確認するにはどうすればよいですか?

回答

11 MichaelE2 Aug 17 2020 at 02:56

はい、シートが結合する重要なポイントがあります。

jac = D[f, {{x, y, z}}];

FindRoot[jac == {0, 0, 0}, {{x, 1.1}, {y, 2.1}, {z, 1}}];
cpt = {x, y, z} /. %
f /. %%
(*
  {1.1597, 2.12999, 0.963489}
  0.                           <-- on the surface  f == 0
*)

プロットの中央に臨界点を置きます(そしてPlotPoints、デフォルト= 15に奇数を使用します)。

cplot = ContourPlot3D[
  ff == 0,
  {x, cpt[[1]] - 0.1, cpt[[1]] + 0.1},
  {y, cpt[[2]] - 0.3, cpt[[2]] + 0.3},
  {z, cpt[[3]] - 0.6, cpt[[3]] + 0.6}, 
  AxesLabel -> Automatic]

討論。等高線図は、離散サンプリングと中間値の定理を適用して、等高線面がメッシュ要素を通過するタイミングを決定することで実現されます。これは、サーフェスを近似するためのかなり大まかな方法​​です。サーフェスの1枚のシートがメッシュ要素を通過するときに最高のパフォーマンスを発揮します。シートが交差したり接触したりすると、何が起こっているのかを推測するのが難しい場合があります。典型的なアプローチには、増加PlotPoints(デフォルト値15)またはMaxRecursion(デフォルト値2)が含まれます。これらのアプローチは、より細かいメッシュとより小さな穴につながります。時々彼らは問題を完全に解決します。上記では、表面に関する特定の知識を適用することができました。そのような重要なポイントが2つあったとしたら、おそらく上記の作業を行うことはできませんでした。