Mathematicaは複素対数の分岐をどのように理解しますか?



How Does Mathematica Understand Branchcuts Complex Logarithm



解決:

標準の組み込み対数関数は、次のように複素変数に対して定義されています。

Log [z] = Log [Abs [z]] + I Arg [z]

ブランチカットの位置は、極角がzは$- pi $から$ pi $の範囲にあると想定されます。この同じブランチカットも、ビルトインの定義の一部です。Arg関数。



単純に(小文字)と呼ばれる別の対数関数を次に示します。分岐カットが行われる極角$ sigma $を指定できるログ:

Clear [arg、log]; arg [z _、_:-Pi]:= Arg [z Exp [-I(σ+ Pi)]] + + Pi; log [z _、_:-Pi]:= Log [Abs [z]] + I arg [z、]

最初の引数は通常と同じですログ機能。 2番目の引数はオプションであり、省略した場合、新しい関数は組み込みの関数と一致します。位相角のデフォルトの分岐カットargは$ sigma =- pi $です。



これらのブランチカットの場所を説明するために、複素変数の関数をプロットする「コンビニエンス関数」を定義しました辺の長さの正方形のz原点周辺の6:

plot [f _]:= Module [{fn = f /。 z-> x + I y}、Show [ContourPlot [Im [fn]、{x、-3、3}、{y、-3、3}、ContourShading->自動、ExclusionsStyle->赤]、ContourPlot [Re [fn]、{x、-3、3}、{y、-3、3}、ContourShading-> False、ContourStyle-> Blue、ExclusionsStyle-> Red]、FrameLabel-> {'Re(z)'、 ' Im(z) '}、Background-> Lighter [Orange]、PlotRangePadding-> 0、PlotLabel-> Framed [Grid [{{Style ['-'、Bold、Blue]、' Real part '}、{Style [' -'、太字、灰色]、'架空の部分 '}}、配置->左]、FrameStyle->なし、背景->白、RoundingRadius-> 5]、ImageSize-> 300]]

たとえば、ブランチカットの場所を参照してください( ネット )デフォルトから非標準の方向に回転します。

GraphicsRow [{plot [Log [z]]、plot [log [z、π/ 4]]}]

ログ



しかし今、あなたの関数を見てください。その定数は無関係であるため、a = 1:

プロット[zTanh [πz] Log [z ^ 2 + 1]]

ブランチは垂直にカットします

ここでは、ブランチカットのデフォルトの選択対数関数は、複素平面での垂直分岐カットにつながります。これは、上半平面が統合するのに安全な場所ではないことを意味します...

必要に応じて、ブランチカットの場所を別の場所に変更してみてください。$ sigma $を適切に選択したログ関数。

ここで、関数の選択の自由がありますログが入ります。これを試してください:

プロット[zTanh [πz] log [z ^ 2 + 1、0]]

カットが移動しました

ご覧のとおり、ブランチカットは別の位置にあり、統合ドメインの中央をカットしていません。

編集:統合の結果

質問では、上半平面の半円に沿った積分が実行され、被積分関数は、前の画像に示されているデフォルトのブランチカットと回転したブランチカットに対応する、これら2つの関数のいずれかになります。ここで私はそれらを関数として定義します:

f [z _]:= z Tanh [πz] Log [z ^ 2 + 1]; g [z _]:= z Tanh [πz] log [z ^ 2 + 1、0]

質問はさらに、統合の結果が「信頼できる」かどうかを尋ねます。答えはイエスですが、あなたはあなたが何を求めているのかを正確に知る必要があります Mathematica やること。したがって、私がすでに上で言ったことを明確にするために、いくつかの異なるプロットを追加します。積分輪郭の半径を選択します。

r = 6.2;

これは、物事を曖昧にするために大きすぎないように選択されますが、虚軸に沿って一定の間隔で現れるタン関数。

次に、上半平面に対応する区間で2つの関数と極角をプロットし、2つの数値積分を確認します。

Plot [Evaluate [{Re [#]、Im [#]}&@ f [r Exp [I ϕ]]]、{ϕ、0、Pi}]

セミサークル1

NIntegrate [f [r Exp [I ϕ]]、{ϕ、0、Pi}](* ==> 20.271-3.55271 * 10 ^ -15 I *)

この積分は完全に許容されますが、ブランチカットを超えるため、おそらく予期しないものが発生します。この場合、マグネタの下の領域のキャンセルによる実数部の消失、不連続な曲線です。 Mathematica 孤立した不連続性は統合可能であるため、警告は生成されません。それで、この結果は「信頼できる」のでしょうか?もちろん。あれを欲しいですか?それはあなた次第です。

これを前に提案した関数と比較してください。

プロット[評価[{Re [#]、Im [#]}&@ g [r Exp [I ϕ]]]、{ϕ、0、π}]

セミサークル2

NIntegrate [g [r Exp [I ϕ]]、{ϕ、0、Pi}](* ==> 58.2644 + 37.6991 I *)

今、あなたは連続関数を統合しています、そしてそれはどんな与えられたものにも当てはまりますr孤立特異点を回避する限り。

この結果も「信頼できる」ものです。残念ながら、これが必要かどうかは質問からわかりません。いずれにせよ、両方の関数の漸近的振る舞いは全体として発散しているのでr(投稿の他の質問に答えます)、半円に沿った積分は有限半径で行われる必要があります。

コメントから、目標はコーシーの定理を適用することであると推測しています。これは完全に問題ありませんが、この問題では何のメリットもありません。それでも、これが目標である場合は、ブランチカットを統合輪郭と交差させないようにする必要があります。では、この状況ではどちらのカットがより良い選択ですか?答えは次のとおりです。g [z]、ブランチカットが実際の軸に沿って伸びている場合でも、カットを上から抱き締めることで、半円を完成させる閉じた輪郭を確実に描くことができます。

これを行うと、$ z = i $の分岐点の周りの微小円上の積分を計算する必要があります。 $ z = i $の周りの因子の級数展開を行うことにより、被積分関数がゼロになり、したがって積分もゼロになることがわかります。これは最後の質問に答えます(これはブランチカットの選択とは関係ありません)。

編集2

楽しみのために、パラメータ$ sigma $を変更すると、さまざまな対数関数のブランチカットが互いにどのように進化するかを次に示します。

フレーム= Table [plot [z Tanh [Pi z] log [z ^ 2 + 1、σ]]、{σ、0、Pi、Pi / 16}]; ListAnimate [Join [Reverse [frames]、frames]、AnimationRepetitions-> 1]

カット

NSGIFは実際には次のもので作成されました:

Export ['cuts.gif'、Join [Reverse [frames]、frames]、ImageResolution> 72、AnimationRepetitions-> Infinity、 'DisplayDurations'->。1] 

@Jensのソリューションの代替手段は、の引数にフェーズを追加することです。代わりにログに記録し、出力の関連するローテーションを削除します。ログ:

logbranch [σ_]:= With [{phase = I(σ+ Pi)}、Function [Log [#Exp [-phase]] + phase]]

少し異なる定義を使用したので、置き換えるだけですでログイン置き換える代わりにlogbranch [ϕ]Log [z] withlog [z、ϕ]

これが並んでいます正の実軸に沿ってカットされたブランチの2つのバージョンのComplexPlot:

log0 = logbranch [0]; GraphicsRow [{ComplexPlot [log [z、0]、{z、-2-2I、2 + 2I}]、ComplexPlot [log0 [z]、{z、-2-2I、2 + 2I}]}]

ここに画像の説明を入力してください