LoginSignup
1
0

More than 5 years have passed since last update.

Mathematicaメモ

Last updated at Posted at 2018-03-27

データ点のプロット

横軸のデータ点 $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]];

で参照できる.このリストには,固有値の絶対値が大きい順に格納されている.

実際の例

原理

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0