球対称関数を別の位置で球平均する
を原点から測った距離とし、原点から見て球対称な関数をとする。
原点から見て位置にあるサイトがあるとする。
サイトを原点に取り直した任意の位置ベクトルをと定義する。
やりたいことは、をサイトから見ると球対称ではないので、サイトから見たときの球対称成分を作りたいということである。
それはすなわちサイト上で球平均することに対応する。
、もしくは(こっちの方が直観的かも)であるから、
球対称であるから、を軸上に取っても結果は変わらない。
この時、は方位角に依存しないから、
ここで、はとの成す角である。
マイナスが気になるかも知れないが、最終的にはその動径成分ののみを使うので、符号はあまり重要でない。
であることに注意すると、
よって、
の関数としてを求めたいので、ここでの扱いは言わばパラメータのように外から与えられるものであり、積分変数ではないため積分の外に出せる。
例として、クーロンポテンシャルを考えると、
となり、違うサイトから見ると定数ポテンシャルとして与えられることになる。
したがって、点電荷が一次元に正負(絶対値は同じ大きさ)で交互に等間隔で無限に並んでいて、ある点電荷に働くトータルの静電ポテンシャルは、球平均すれば
と求めることが出来る。
ただ、これはのマクローリン展開、つまりに対して速く収束する展開に、を代入して得られたものを使用しているわけだから、本当に点電荷がほぼ無限に並んでいないと(ほぼ無限に展開しないと)値の一致は悪いと思われる。クーロンポテンシャルの収束が遅いのがよく分かる。
デルタ関数のエンタングルメントを完備関係式で断つ?
例えば球面調和関数
これはある意味のエンタングルメントを断ったと言えるか?
添字が一個なので、ベクトルに拡張すれば、
よって、ある種の行列化によって変数分離が可能である。ポイントは、もともと行列ではなくただの数だったので、「左に横ベクトル・右に縦ベクトル」の順番は変更出来ないという点である。
あまりエンタングルメントについて詳しくない(というか無知に等しい)が、エンタングルメントを断つ(解す)とは多分こういうことなのかと。
上では非局所相関を局所相関の積で表すというようなことをしたわけだが、この結果を用いると、いわゆる多重極展開と呼ばれる、動径成分と立体角成分に分ける展開が可能になる。
(これもある種のエンタングルメント解しか?)
これは「連続量の相関を離散量の話に置き換える」と言えるだろうか?
ちなみに逆もおそらく可能(離散量の相関を連続量の話に置き換える)。
連続と離散の絡み合いは楽しいので、もっと深めて行きたい。
Gaunt積分のまとめ
Gaunt積分の自分的メモ。
Clebsch–Gordan coefficients - Wikipedia
3-j symbol - Wikipedia
Gaunt積分(多分一般的な呼び名ではない。が、自分の分野ではよく出てくる。)
Gaunt係数(Wikipediaとかに載っているのはこっち。)
Clebsh-Gordan係数と3j記号の関係
3j記号の列の交換
行列要素を視覚的にチェックする方法
行列要素をなんとか可視化したくて、三次元プロット散布図で表現してみた。
Pythonでデータを可視化するmatplotlib初級(3D散布図編) - しぷぜん
from mpl_toolkits.mplot3d import Axes3D import matplotlib.pyplot as plt import numpy as np N = 20 row = range( N ) column = range( N ) X, Y = np.meshgrid( row, column ) X = X.reshape( N * N ) Y = Y.reshape( N * N ) fig = plt.figure() ax = fig.add_subplot( 111, projection='3d' ) for i in range(3): matrix_reshape_1d = np.random.rand( N * N ) # default marker size = 20 ax.scatter( X, Y, [i] * ( N * N ), s = matrix_reshape_1d * 20. ) plt.show()
例えば行列全体が時間に依存していて、それの時間発展を見たい時には良さそう。
複素数の場合には、色で位相を表現することになると思うが、色は配列で渡せないので、一点一点をいちいちプロットしないと行けない気がする。行列サイズが大きいと、おそらく途中で限界が来るだろう。
Legendre多項式の直交性を python (scipy) で確かめる
いつもnumpyの多項式の使い方を忘れるので、Legendre多項式の直交関係式で練習する。
ルジャンドル多項式 - Wikipedia
scipy.special.legendreでLegendre多項式を作ると、poly1dというタイプの関数が帰ってくるので、そのままxを代入できる(下記リンク or サンプルスクリプト参照)。
scipy.special.legendre — SciPy v1.0.0 Reference Guide
numpy.poly1d — NumPy v1.14 Manual
積分は一次元積分のquadを使用。
Python SciPy : SciPy の積分関数の基本的使い方 | org-技術
from scipy.special import legendre from scipy.integrate import quad def Plx( l, x ): # legendre( l ) >>> poly1d([ ... ]) # poly1d([ ... ])( x ) >>> float return legendre( l )( x ) def orthogonal_relation( lp, l ): # quad >>> ( result, error ) return quad( lambda x: Plx( lp, x ) * Plx( l, x ), -1., 1. ) [0] if __name__ == '__main__' for lp in range( 5 ): for l in range( 5 ): print( 'lp, l = ', lp, l ) print ( 'numerical', orthogonal_relation( lp, l ) ) if lp == l: print( 'analytical', 2. / ( 2 * l + 1. ) ) else: print( 'analytical', 0. )
sympyの虚数単位を通常に戻してnumpyが使えるようにする
sympy moduleを一部使ってゴニョゴニョ計算させて、それを元にnumpy moduleで処理(例えば逆行列計算)させようとした時に虚数単位が引っかかって怒られることがあった。
sympyの代数表記を数値表記に戻す方法として"N()"や"~.evalf()"があるが、これではsympyの虚数単位"I"は通常python上で扱われる"j"に戻らない。
戻すためには、"complex()"を使う必要がある。
ちなみに、Clebsh-Gordan係数のような関数丸ごとがobjectとしてsympy上で扱われている場合、"~.doit()"で一度崩してあげる必要がある。
つまり、"complex( ~.doit() )"のような感じ。
Sympyのウェブマニュアルには一箇所だけ"complex()"が出てきて、後は"N()"とか別のを使っているので、流し読みしていると見つからなかった。
Numerical evaluation — SymPy 1.2 documentation
検索機能って本当大事ですね。
追記
例えば"N()"や"evalf()"で数値化したものが実数だったとして、それに"+1j"で虚数を足すと、sympyの虚数単位"I"に変換されてしまう。
そのため、実数だと分かっている場合には、"float()"で通常の実数にし、そのあとで"+1j"を足すことが必要。
平方根の行列表現
平方根を評価するのに、級数展開以外のもので何か無いか考えた時に、虚数の行列表現を思い出した。
とりあえずに対応する行列を求めたい。
つまり、二乗したら単位行列に2をかけたものを返す行列を考える。
ここで非対角成分を消すためにとしてしまうと、となって全く面白くない。
そのための時の行列を探す。
この時、という条件しか出て来ないため、一意には決まらないことがわかる。
とりあえず、を課せば、
がに対応した行列になる。
とを入れ替えた転置の表式でも二乗して同じ値になる。
もし仮にとした時には、
となり、Pauli行列の和で思わず書き直したくなる形になる。
が二乗の形でが担う寄与を引いてくれているので、例えばは
と、全ての項を一次の形で表すことが出来る。
級数展開と行列表現が行き来出来るようになると楽しそうに思う。