数値計算ライブラリ:itensor:1サイト
Differences
This shows you the differences between two versions of the page.
| Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
| 数値計算ライブラリ:itensor:1サイト [2017/06/13 18:30] – [テンソル同士の積] koudai | 数値計算ライブラリ:itensor:1サイト [2021/06/27 22:04] (current) – external edit 127.0.0.1 | ||
|---|---|---|---|
| Line 2: | Line 2: | ||
| もっとも簡単な例として、シングルサイトにおけるスピン演算子と波動関数を定義する。 | もっとも簡単な例として、シングルサイトにおけるスピン演算子と波動関数を定義する。 | ||
| - | |||
| - | |||
| ====== 理論 ====== | ====== 理論 ====== | ||
| Line 54: | Line 52: | ||
| となる。 | となる。 | ||
| + | 状態$| \psi \rangle$におけるスピン演算子の期待値は | ||
| + | \begin{equation} | ||
| + | | ||
| + | \end{equation} | ||
| + | となる。 | ||
| ====== ソースコード ====== | ====== ソースコード ====== | ||
| Line 138: | Line 141: | ||
| } | } | ||
| </ | </ | ||
| - | |||
| - | Makefileの APP=one を APP=01_tutorial_code に書き換える。 | ||
| - | |||
| - | <sxh; first-line: 1; highlight: [6]; title: Makefile> | ||
| - | LIBRARY_DIR=../ | ||
| - | |||
| - | ifdef app | ||
| - | APP=$(app) | ||
| - | else | ||
| - | APP=01_tutorial_code | ||
| - | endif | ||
| - | |||
| - | CCFILES=$(APP).cc | ||
| - | |||
| - | ################################################################# | ||
| - | ################################################################# | ||
| - | ################################################################# | ||
| - | ################################################################# | ||
| - | |||
| - | |||
| - | include $(LIBRARY_DIR)/ | ||
| - | include $(LIBRARY_DIR)/ | ||
| - | |||
| - | TENSOR_HEADERS=$(LIBRARY_DIR)/ | ||
| - | |||
| - | #Mappings -------------- | ||
| - | OBJECTS=$(patsubst %.cc,%.o, $(CCFILES)) | ||
| - | GOBJECTS=$(patsubst %, | ||
| - | |||
| - | #Rules ------------------ | ||
| - | |||
| - | %.o: %.cc $(HEADERS) $(TENSOR_HEADERS) | ||
| - | $(CCCOM) -c $(CCFLAGS) -o $@ $< | ||
| - | |||
| - | .debug_objs/ | ||
| - | $(CCCOM) -c $(CCGFLAGS) -o $@ $< | ||
| - | |||
| - | #Targets ----------------- | ||
| - | |||
| - | build: $(APP) | ||
| - | debug: $(APP)-g | ||
| - | |||
| - | $(APP): $(OBJECTS) $(ITENSOR_LIBS) | ||
| - | $(CCCOM) $(CCFLAGS) $(OBJECTS) -o $(APP) $(LIBFLAGS) | ||
| - | |||
| - | $(APP)-g: mkdebugdir $(GOBJECTS) $(ITENSOR_GLIBS) | ||
| - | $(CCCOM) $(CCGFLAGS) $(GOBJECTS) -o $(APP)-g $(LIBGFLAGS) | ||
| - | |||
| - | clean: | ||
| - | rm -fr .debug_objs *.o $(APP) $(APP)-g | ||
| - | |||
| - | mkdebugdir: | ||
| - | mkdir -p .debug_objs | ||
| - | </ | ||
| - | |||
| - | プログラムのコンパイルと実行は、プログラムのあるディレクトリに入って次のようにする。 | ||
| - | |||
| - | > \$ make | ||
| - | > \$ ./ | ||
| - | |||
| ====== プログラムの解説 ====== | ====== プログラムの解説 ====== | ||
| Line 220: | Line 163: | ||
| auto s = Index(" | auto s = Index(" | ||
| </ | </ | ||
| - | クラスautoにより、添字オブジェクトsを定義する。 | + | クラスIndexにより、添字オブジェクトsを定義する。 |
| 書き方は Index(" | 書き方は Index(" | ||
| 今はアップとダウンからなるので、添え字の次元は2である。 | 今はアップとダウンからなるので、添え字の次元は2である。 | ||
| Line 244: | Line 187: | ||
| </ | </ | ||
| - | 次にスピン演算子$S^x_{s, s'}$, $S^z_{s, | + | 次にスピン演算子$S^z_{s, |
| 2階のテンソルを作りたい場合は次のようにする。 | 2階のテンソルを作りたい場合は次のようにする。 | ||
| <sxh C++; first-line: 30> | <sxh C++; first-line: 30> | ||
| Line 276: | Line 219: | ||
| </ | </ | ||
| とすればよい。 | とすればよい。 | ||
| + | |||
| + | ===== 期待値 ===== | ||
| + | |||
| + | 最後に、演算子の期待値の求め方を紹介する。 | ||
| + | 状態$\psi_s$とエルミート共役$\psi^*_{s' | ||
| + | <sxh C++; first-line: 68> | ||
| + | auto cpsi = dag(prime(psi)); | ||
| + | </ | ||
| + | スピン演算子の期待値は積 cpsi * Sz * psi あるいは cpsi * Sx * psi により得られるが、このままだとオブジェクトのままなので、実数として扱うためにメソッド.realを使う。 | ||
| + | <sxh C++; first-line: 68> | ||
| + | Real zz = (cpsi * Sz * psi).real(); | ||
| + | Real xx = (cpsi * Sx * psi).real(); | ||
| + | </ | ||
| + | ここで計算したのは | ||
| + | \begin{equation} | ||
| + | | ||
| + | \end{equation} | ||
| + | である(添字の順番に注意)。 | ||
数値計算ライブラリ/itensor/1サイト.1497346236.txt.gz · Last modified: 2021/06/27 21:57 (external edit)
