Orthogonalization matrix の導出と、格子定数による偏微分

Orthogonalization matrix の計算法を書いておく。

\begin{pmatrix}X \\ Y \\ Z \end{pmatrix} = \begin{pmatrix}\mathbf{a} & \mathbf{b} & \mathbf{c} \end{pmatrix}\begin{pmatrix}x \\ y \\ z \end{pmatrix} = \begin{pmatrix}a_x & b_x & c_x\\ a_y & b_y & c_y\\ a_z & b_z & c_z \end{pmatrix}\begin{pmatrix}x \\ y \\ z \end{pmatrix}

となるように、行列の成分を決めたい。(X, Y, Z) はデカルト座標系での座標であり、(x, y, z) は結晶軸に沿った分数座標である。まず、標準方位として、a 軸の方向が x 軸正の方向と一致し、b 軸が x, y 平面 に載っていて第一または第二象限にあり、c 軸は a, b 軸と合わせて右手系を作るものとする。(妙に細かいのは、以下で正負を決めるときに効いてくる)

すると、左下の成分はすぐに 0 になる。

\begin{pmatrix}x \\ y \\ z \end{pmatrix} = \begin{pmatrix}a_x & b_x & c_x\\ 0 & b_y & c_y\\ 0 & 0 & c_z \end{pmatrix}\begin{pmatrix}x \\ y \\ z \end{pmatrix}

a 軸の長さは a だから、 a_x = a。b 軸の長さは b で、a 軸となす角度が  \gamma だから、

 \mathbf{a \cdot b} = a b \cos\gamma = a_x b_x = a b_x
したがって、
 b_x = b \cos\gamma

 |\mathbf{b}|^2 = b^2 = b_x ^2 + b_y^2 = b^2\cos^2\gamma + b_y^2
したがって、
 b_y = b \sin\gamma

ここまでで、
\begin{pmatrix}x \\ y \\ z \end{pmatrix} = \begin{pmatrix}a & b\cos\gamma & c_x\\ 0 & b\sin\gamma & c_y\\ 0 & 0 & c_z \end{pmatrix}\begin{pmatrix}x \\ y \\ z \end{pmatrix}
となった。

c 軸の基底も内積を使って決めていく。
 \mathbf{a \cdot c} = a c \cos\beta = a_x c_x = a c_x
より
 c_x = c\cos\beta
となる。
 \mathbf{b \cdot c} = b c \cos\alpha = b_x c_x + b_y c_y = b c \cos\beta \cos\gamma + b c_y \sin\gamma
だから
 c_y = \frac{c}{\sin\gamma}(\cos\alpha - \cos\beta \cos\gamma)
も得られる。

最後のが一番面倒。
 c = |\mathbf{c}| = \sqrt{c_x^2 + c_y^2 + c_z^2}
より、
 \begin{eqnarray} c_z &=& \sqrt{c^2 - c_x^2 - c_y^2} \\ &=& c\sqrt{1 - \cos^2\beta - \frac{(\cos\alpha - \cos\beta \cos\gamma)^2}{\sin^2\gamma}} \\ &=& c\sqrt{\frac{(1 - \cos^2\beta)\sin^2\gamma - \cos^2\alpha + 2\cos\alpha\cos\beta\cos\gamma - \cos^2\beta\cos^2\gamma}{\sin^2\gamma}}\\ &=& c\sqrt{\frac{(1 - \cos^2\beta)(1 - \cos^2\gamma) - \cos^2\alpha + 2\cos\alpha\cos\beta\cos\gamma - \cos^2\beta\cos^2\gamma}{\sin\gamma}} \\ &=& c\sqrt{\frac{1 - \cos^2\beta - \cos^2\gamma + \cos^2\beta\cos^2\gamma - \cos^2\alpha + 2\cos\alpha\cos\beta\cos\gamma - \cos^2\beta\cos^2\gamma}{\sin^2\gamma}} \\ &=& \frac{c}{\sin\gamma}\sqrt{1 - \cos^2\alpha - \cos^2\beta - \cos^2\gamma  + 2\cos\alpha\cos\beta\cos\gamma}\end{eqnarray}

以上。これで、Wikipedia にある式 が導出できた。すなわち、

\begin{pmatrix}X \\Y \\ Z \end{pmatrix} = \begin{pmatrix}a & b\cos\gamma & c\cos\beta\\ 0 & b\sin\gamma & \frac{c}{\sin\gamma}(\cos\alpha - \cos\beta \cos\gamma)\\ 0 & 0 & \frac{c}{\sin\gamma}\sqrt{1 - \cos^2\alpha - \cos^2\beta - \cos^2\gamma  + 2\cos\alpha\cos\beta\cos\gamma} \end{pmatrix}\begin{pmatrix}x \\ y \\ z \end{pmatrix}

注意: プログラムで計算する場合は、この最終形を用いるよりも、
 c_z = \sqrt{c^2 - c_x^2 - c_y^2} を使ったほうが効率的である。偏微分を求める場合も、この形のほうが見通しがよい。 c_z \alpha, \gamma への依存性は  c_y を通じてのみ生じるから、合成関数の微分を使って計算すると楽できる。