データ点のプロット
横軸のデータ点 $x_i$ に対して縦軸のそれが $y_i$ で与えられているとき,
list={{x1,y1},{x2,y2},...}
のようなリストを作れば,
ListPlot@list
によってプロットできる.
点列が次のように別々に与えられている場合を考えよう:
x={0.1, 0.3, 0.34, 0.6, 1.1};
y={100,300,200,500,20};
各データ点は横軸座標 x[i],縦軸座標 y[i] であるとする.このときは,
list=Partition[Riffle[x,y],2];
ListPlot@list
でプロットできる.
有限次元における固有値方程式を解く
ある$N$次元のケット空間 $\mathbb{H}^N$ において,以下の固有値方程式を考える:
$$
\hat{\mathcal{A}}|\phi_a\rangle=a|\phi_a\rangle,
$$ここで$\hat{\mathcal{A}}$はある線形演算子とする.目的は,Mathematicaを使って固有値$a$を求め,それに属する固有ケット$|\phi_a\rangle$から作られる行列要素:
$$
\langle\phi_a|\hat{\mathcal{B}}|\phi_{a'}\rangle,
$$を求めることである.ただし$\hat{\mathcal{B}}$は $\mathbb{H}^N$ で働く任意の線形演算子とする.前提条件として,以下の行列要素は人間が顕に書き下せるものとする:
$$\langle n|\hat{\mathcal{A}}|n'\rangle\ \mathrm{and}\ \langle n|\hat{\mathcal{B}}|n'\rangle,$$ここで$\{|n\rangle\}$は $\mathbb{H}^N$ における正規直交基底である.
コード
$\langle n_1|\hat{\mathcal{A}}|n_2\rangle$と$\langle n_1|\hat{\mathcal{B}}|n_2\rangle$は
A[n1,n2]
B[n1,n2]
という関数で与えられているものとする (近似数値とする).$n_1,n_2$はそれぞれ$1$から$N$まで動く整数としよう.まず行列 (リスト) を作る:
matA=Table[A[n1,n2],{n1,N},{n2,N}];
行列の固有値とそれに属する固有ベクトルを求める:
es=Eigensystem[matA]; (* 固有値方程式を解く *)
e=es[[1]]; (* 固有値列 *)
v=es[[2]]; (* 固有ベクトル列 *)
ここで,matAが近似数値で与えられていない場合は v が規格化されないので注意が必要である.
もう1つの方の行列を作る:
matB=Table[B[n1,n2],{n1,N},{n2,N}];
先程求めた固有ベクトル列を使って基底を変更する:
eigenmatB=Conjugate[v].matB.Transpose[v];
$\langle\phi_{a1}|\hat{\mathcal{B}}|\phi_{a2}\rangle$は
eigenmatB[[a1,a2]];
で取り出せる.また,$a$番目の固有ベクトルが属する固有値は
e[[a]];
で参照できる.このリストには,固有値の絶対値が大きい順に格納されている.