Onsager Matrix

英語のwiki

 

熱力学的な量が複数あるときを考える。

それらが平衡状態の周りで摂動がある場合を考えている。

ボルツマンのエントロピーの公式から、確率密度分布が得られる。

 

摂動が十分小さいとすると、エントロピーのヘッセ行列によって、確率密度分布が近似できる。

ここで、ヘッセ行列は正定値対称行列である。

 

平衡状態周りでほんの少し非平衡である時、

線形な形で、平衡状態に収束しているとする。

 \frac{\partial x_i}{\partial t} = - \lambda_{ik} x_k

(アイシュタインの記法)

 

そして、熱力学的に共役な量が、エントロピーの一階微分に比例した量とする。それも、摂動に比例した量とすると、

 

 \dot{x}_i = - \gamma_{ik} X_k

このγというのが対称行列。これをOnsager行列というようだ。

 

Onsagerの相反定理というものがあるらしい。これのwiki

 

memo for Spyder

Spyderを使っていて困った場面がいくつかあったので、それをまとめてみる。

  • Spyderで、matplotlib.pyplotを使って図を作成したけれど、それが表示されなかった。

    困ったので調べてみると、

    %matplotlib qt

    と言うおまじないを唱えると、無事に別windowに表示された。

     

  • Spyderの文字が小さすぎて読めない、と言う時に、
    • preference
    • appearance
    • plain text のところのsizeを20くらいにする。
    • これで解決した。
    • ついでに文字もおしゃれにすることもできる。
  • Spyderでブランクのところを表示させたい時
    • preferenceのeditorのところをクリックして、
    • show blank spaces
    • で表示できる。

 

spinors for beginnersを聞く

こちらのビデオを聞く。

spinorというものがある。

超入門的な動画だったが、忘れるのはごめんなので、まとめる。

  • Boson、Fermionsというものがある。
  • Bosonのスピンは0か1
  • Fermionのスピンは0.5
  • スピンが1なら、ベクトル、スピンが0ならスカラー、では0.5のものがスピノルと言う
  • スピンがup かdownかと言う分け方ができる。
    • Born rule
      • 排他的な状態は直交する。
    • spinorは二つの状態の重ね合わせで記述する。
  • 光の偏光状態も対応がある。水平と鉛直方向の状態
  • 3次元ベクトルは2かける2のベクトルに変換することが出来る。
    • Pauli vector
    • これはさらに二つのベクトルに分解できる
      • Pauli spinor
  • テンソルの世界では1/2次元のテンソル、というイメージだ。
  • 4次元ベクトルについても同様の操作を考えることができる。
  • ベクトルの世界
    • Bivector、trivectorというように考えることが、表現のしやすさを与える。
    • このとき使うのが、wedge product
    • これを許したものがgrassman algebra
  • C* 代数では、このwedge productとdot productを許した代数。
  • Lie algebra
    • generatorsが交換則を満たす
  • QFTとの関係性がある。

全然わからない。

わからない点だけでも書き出しておこう。

まず、

ベクトルから、うまく行列を作って、それを分解することで、スピノルと言うものを作ったことは理解した。そして、元のベクトルから、二つのものを作ったので、次元が半分になった、と言うのも直感的には理解できる。

しかし、それがclifford代数とどう関係するのか。

そして、lie代数との関係性がわからない。(Lie代数に関する知識が少ないこともある)

QFTも同様だ。

これから学んでいくとする。

Burnside's lemma

バーンサイド補題なるものがある。wikiこちら

 

数え上げの問題において、非常に有用である。

  • Gを有限群で、集合Xに作用している。
    • 作用には右から、左からと言う二つのパターンがある。
    • 作用するとは、演算をしても閉じていて、(つまり、Gの要素をXの要素に噛ませても、Xの要素になる)
    • かつ、結合則単位元の存在を満たすもの
  •  |X/G| = \frac{1}{|G|} \Sigma_{g \in G} |X^g|
    • 左辺は軌道の数
    • 右辺は、
      • 分母の部分は集合Gの要素の数
        • 集合の大きさみたいなこと
      • 分子は、要素gを噛ませても変化しない(固定点と言われる)集合Xの要素の数
  • 簡単な例題を考える。 
    • 例えば、立体4目並べがあった時に、そこに32個の白玉と32個の黒玉を入れることを考えるとする。
    • そしたら、全部で何通りの敷き詰め方があるでしょうか。ただし、鉛直軸周りの回転によってパターンの重なるものは同一視する。と言う問題を考えよう。
    • まず、作用している群は巡回群0, 90, 180, 270度回す操作に対応する。
    • 次に、バーンサイド補題の式に代入していく。
      • 0の場合、それはそのまま、なので、64!/(32!32!)
      • 90、270の場合、結局4分の1ごとに同じ敷き詰め方になってほしいので、合わせて、2*16!/(8!8!)
      • 180の場合、半分ごとに同じ構造が現れるので、32!/(16!16!)
    • よって求める総和は、 \frac{1}{4}({}_{64}C_{32} + 2 * {}_{16}C_{8} + {}_{32}C_{16})となる。

 

BSpline

pythonのパッケージscipyに、BSplineをデータから書いてくれるものがあった。

使う。

 

 

import numpy as np
from scipy.interpolate import make_interp_spline, BSpline
import matplotlib.pyplot as plt


rng = np.random.default_rng()
#x = np.linspace(-3, 3, 10)
N = 6

def f(x):
    return x ** 2 / (1 + x) - x + 1 + np.sin(x / 2)
eps = rng.normal(0, 0.0001, N)
x = np.sort(np.array([0, 1, 2, 3, 4, 5]) + eps)
y = f(x) + 0.02 * rng.standard_normal(N)
xs = np.linspace(0, 4, 100)
print(x)
plt.plot(x, y, 'ro')
for k in [1, 2, 3, 6]:
    spl_i = make_interp_spline(x, y, k=k)
    plt.plot(xs, spl_i(xs), label=f'Interpolation spline (k={k})')


plt.plot(xs, f(xs), color = "red" ,label = "true")

plt.legend()
plt.show()

 

詳しいdocumentはこちら 

Levenberg Marquardt algorithm

"""

import numpy as np
from scipy.optimize import least_squares
import matplotlib.pyplot as plt

def y(theta, t):
return theta[0] / (1 + np.exp(- theta[1] * (t - theta[2])))

ts = np.linspace(0, 1, 100)
K = 1; r = 10; t0 = 0.5; noise = 0.1
ys = y([K, r, t0], ts) + noise * np.random.rand(ts.shape[0])

def fun(theta):
return y(theta, ts) - ys

theta0 = [1,2,3]
res1 = least_squares(fun, theta0, method = "lm")

plt.plot(ts, y(res1.x, ts), color = "blue")
plt.scatter(ts, ys, color = "red", s = 1)
print(res1.x)
plt.show()

"""

scipy で非線形フィッティングをする。

こちら

Levenberg Marquardt 法は、反復法で、

 (J^T J + \lambda I) \delta = J^T (y - f(\beta))という式に従って、更新していく。

ここで、λは非負の減衰係数で、徐々に調整されるらしい。

 

 

Markov's inequality

Markov' inequality

 

===

import numpy as np

a = 0.3
N = 10 ** 4
x = np.random.randn(N)
left_term = len([i for i in x if i > a]) / N
print(left_term)

def phi(x):
return np.exp(-x ** 2 + 2) + x ** 3 + np.log(x + 10)

phi_x = phi(x)
phi_a = phi(a)

right_term = np.average(phi_x / phi_a)
print(right_term)

===

あるランダム変数が、ある値を超えている確率についての、上限を与える不等式。

 

その確率変数が非負の実数で、非減少、非負関数の関数を考えると、

 

その関数で適当な変形を施したランダム変数の期待値を、関数で変形した閾値で割ったもので、上から抑えられる。

 

詳しくはこちら

 

三角不等式と並んで、確率論の文脈で活躍することが多い。

 

上のコードで遊んでみる。実際に確認した。