complex_plot の動作をsageでコピーするMathematicaグラフィックを作成するにはどうすればよいですか?つまり.
... 1つの変数の複素関数を取り、以下に示すように、指定されたxrangeとyrangeに関数の出力をプロットします。出力の大きさは明るさ(ゼロは黒、無限大は白)で示され、引数は色相で表されます(赤は正の実数で、引数が増えるとオレンジ、黄色、...まで増加します) 。
これは、絶対値の等高線がオーバーレイされたゼータ関数の例(M.ハンプトンから盗まれた ニュートラルドリフト )です。
数学のドキュメントページ 複素変数の関数ContourPlot
およびDensityPlot
「フェーズごとの潜在的な色付け」を使用して複素関数を視覚化できると書かれています。しかし、問題は両方のタイプのプロットにあり、ColorFunction
はその点の等高線または密度に等しい単一の変数のみを取ります-したがって、絶対値をプロットしている間、位相/引数に色を付けることは不可能のようです。これは、3つのパラメータPlot3D
がすべてColorFunction
に渡される(x,y,z)
では問題にならないことに注意してください。
Plot3D docs の「きちんとした例」など、複雑な関数を視覚化する方法は他にもあることは知っていますが、それは私が望んでいることではありません。
また、私は 以下の1つの解決策 (実際にはウィキペディアで使用されるいくつかのグラフィックを生成するために使用されています)を持っていますが、それはかなり低レベルの関数を定義し、高レベルで可能になるはずだと思いますContourPlot
やDensityPlot
のようなレベル関数。これにより、低レベルの構造を使用するお気に入りのアプローチを提供できなくなるわけではありません。
編集:MathematicaジャーナルにMichaelTrottによる素敵な記事がいくつかありました:
リーマン面の視覚化 代数関数の 、 IIa 、 IIb 、 IIc 、 IId 。
リーマン面の視覚化 デモ 。
リーマン面の戻り(Mma v6の更新)
もちろん、Michael Trottは Mathematicaガイドブック を書きました。これには多くの美しいグラフィックが含まれていますが、加速されたMathematicaのリリーススケジュールに遅れをとっているようです!
これが私の試みです。カラー機能を少し羽ばたきました。
ParametricPlot[
(*just need a vis function that will allow x and y to be in the color function*)
{x, y}, {x, -6, 3}, {y, -3, 3},
(*color and mesh functions don't trigger refinement, so just use a big grid*)
PlotPoints -> 50, MaxRecursion -> 0, Mesh -> 50,
(*turn off scaling so we can do computations with the actual complex values*)
ColorFunctionScaling -> False,
ColorFunction -> (Hue[
(*hue according to argument, with shift so arg(z)==0 is red*)
Rescale[Arg[Zeta[# + I #2]], {-Pi, Pi}, {0, 1} + 0.5], 1,
(*fudge brightness a bit:
0.1 keeps things from getting too dark,
2 forces some actual bright areas*)
Rescale[Log[Abs[Zeta[# + I #2]]], {-Infinity, Infinity}, {0.1, 2}]] &),
(*mesh lines according to magnitude, scaled to avoid the pole at z=1*)
MeshFunctions -> {Log[Abs[Zeta[#1 + I #2]]] &},
(*turn off axes, because I don't like them with frames*)
Axes -> False
]
メッシュラインの色を変える良い方法を考えていませんでした。最も簡単なのは、おそらくContourPlot
の代わりにMeshFunctions
を使用してそれらを生成することです。
Jan Homann に触発された Axel Boldt によって与えられた関数の私のバリエーションは次のとおりです。リンクされたページの両方にいくつかの素敵なグラフィックがあります。
ComplexGraph[f_, {xmin_, xmax_}, {ymin_, ymax_}, opts:OptionsPattern[]] :=
RegionPlot[True, {x, xmin, xmax}, {y, ymin, ymax}, opts,
PlotPoints -> 100, ColorFunctionScaling -> False,
ColorFunction -> Function[{x, y}, With[{ff = f[x + I y]},
Hue[(2. Pi)^-1 Mod[Arg[ff], 2 Pi], 1, 1 - (1.2 + 10 Log[Abs[ff] + 1])^-1]]]
]
次に、実行することにより、等高線なしでプロットを作成できます
ComplexGraph[Zeta, {-7, 3}, {-3, 3}]
ComplexGraphで特定のプロットメッシュを使用して表示することにより、 Brett をコピーすることにより、等高線を追加できます。
ComplexGraph[Zeta, {-7, 3}, {-3, 3}, Mesh -> 30,
MeshFunctions -> {Log[Abs[Zeta[#1 + I #2]]] &},
MeshStyle -> {{Thin, Black}, None}, MaxRecursion -> 0]
またはのような等高線図と組み合わせることによって
ContourPlot[Abs[Zeta[x + I y]], {x, -7, 3}, {y, -3, 3}, PlotPoints -> 100,
Contours -> Exp@Range[-7, 1, .25], ContourShading -> None];
Show[{ComplexGraph[Zeta, {-7, 3}, {-3, 3}],%}]
2つの理由から、適切な答えではありません。
とにかく、私にとって、以下は解釈するのがはるかに明確です(明るさは...まあ、ただの明るさです):
ブレットのコードはほとんど無傷です:
Plot3D[
Log[Abs[Zeta[x + I y]]], {x, -6, 3}, {y, -3, 3},
(*color and mesh functions don't trigger refinement,so just use a big grid*)
PlotPoints -> 50, MaxRecursion -> 0,
Mesh -> 50,
(*turn off scaling so we can do computations with the actual complex values*)
ColorFunctionScaling -> False,
ColorFunction -> (Hue[
(*hue according to argument,with shift so arg(z)==0 is red*)
Rescale[Arg[Zeta[# + I #2]], {-Pi, Pi}, {0, 1} + 0.5],
1,(*fudge brightness a bit:
0.1 keeps things from getting too dark,
2 forces some actual bright areas*)
Rescale[Log[Abs[Zeta[# + I #2]]], {-Infinity, Infinity}, {0.1, 2}]] &),
(*mesh lines according to magnitude,scaled to avoid the pole at z=1*)
MeshFunctions -> {Log[Abs[Zeta[#1 + I #2]]] &},
(*turn off axes,because I don't like them with frames*)
Axes -> False]