■サンプルファイルのダウンロードについて
本書掲載のサンプルファイルは、下記 URL からダウンロードできます。
http://– – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – –・本書の内容についてのご意見、ご質問は、お名前、ご連絡先を明記のうえ、小社出版部宛文書（郵送または E-mail）でお送りください。
・電話によるお問い合わせはお受けできません。
・本書の解説範囲を越える内容のご質問や、本書の内容と無関係なご質問にはお答えできません。
・匿名のフリーメールアドレスからのお問い合わせには返信しかねます。
本書で取り上げられているシステム名／製品名は、一般に開発各社の登録商標／商品名です。本書では、™ および ® マークは明記していません。本書に掲載されている団体／商品に対して、その商標権を侵害する意図は一切ありません。本書で紹介している URL や各サイトの内容は変更される場合があります。

はじめに
近年目覚ましい発展を遂げるナノメートルサイズの精密制御技術が、これまで全くの空想でしかなかった量子コンピュータの実現を期待させるようになってきました。特に、人工知能（AI）技術の中核をなすニューラル・ネットワークによる深層学習（ディープラーニング）と相性が良いこと
も、期待に拍車をかけています。そのような状況に伴って、量子コンピュータに関する啓蒙書や量子コンピュータを動作させることで有用な計算を行うための量子アルゴリズムに関する専門書も多数出版されており、これらの書籍によって「そもそも量子コンピュータとは何か？」「そもそもな
ぜ並列計算が可能なのか？」「どのようにして有用な計算を行うことができるのか？」といった基本的な問に答えられる知識は得られます。その一方、「概念は理解できたが、なんだか抽象的すぎて腑に落ちない！」と思っている方は私だけではないと思います。腑に落ちるための必要な道筋は人によって異なると思いますが、自分の場合、基礎方程式を用いて数値シミュレーションを行って想定どおりの結果を得ることができると、現象や動作原理を理解できたという実感がようやく湧いてきます。本書は、量子コンピュータの動作原理を理解するための、私なりの腑に落ちるために必要な手順をまとめたものです。
現在、量子コンピュータは物理的な原理の違いによって大きく 2 つの方式に分けられます。1
つ目は量子アニーリング（量子焼きなまし法）と呼ばれる物理現象を動作原理として最適化問題を解くことに特化した「量子アニーリング方式」、2 つ目は汎用的な量子コンピュータを目指す「量子ゲート方式」です。両者とも数学的には同等の計算が可能とされています。本書では、量子力学を勉強して初めに学習する「量子井戸」を用いる量子ドットコンピュータを題材として、量子ビッ
ト・量子ゲート・量子もつれという量子コンピュータに必要不可欠な要素を、量子力学の基礎方程式であるシュレディンガー方程式を用いて数値シミュレーションを行います。以上の目的を達成するために、数値計算に必要な計算アルゴリズム導出はすべて端折らずに詳しく解説しています。その一方で、「量子力学についての詳しい解説」や「量子アルゴリズムについての解説」といった一般的な内容は省いていることをご了承ください。
本書の読者層は量子力学の初歩をすでに学習している方を想定していますが、これから量子力学を勉強したい方も、一般的な量子力学のテキストと一緒に本書を活用していただくことで、量子力学の基礎習得に役立つと考えています。また、量子コンピュータの動作原理、量子アルゴリズムについて深く学習したい方は、参考文献として次の 2 冊をお勧めします。本書はこれらの書籍を学習する上での基礎となります。
（1） 量子情報理論（佐川 弘幸 著、吉田 宣章 著、丸善出版、第 3 版 2019 年）（2） 量子アルゴリズム（中山 茂 著、技報堂出版、2014 年、ISBN:4765533433）

iii

最後に、本書の執筆の機会を頂きました株式会社カットシステムの石塚勝敏さん、非常に丁寧な編集を行なって頂きました同社編集部の皆さん、また、本書の内容について貴重なコメントを頂きました東北大学理学部物理学科 4 年生の李俊錫（이준석、イ・ジュンソク）さん、日常的に議論に付き合って頂いている特定非営利活動法人 natural science の皆さんには、深く感謝申し上げ
ます。

自己紹介
僕は「シミュ君」です。物理現象をシミュレーションするのが僕の趣味です。わからないことはいつもプログラム仙人に質問して指導してもらっているよ。今回は、これまで疑問に思っていた量子コンピュータの動作原理に指導してもらうよ。

わしは「プログラム仙人」と呼ばれているぞ。シミュ君の趣味に付き合うのを老後の楽しみとしているのじゃ。今回は量子コンピュータの要である「量子ビット」「量子ゲート」「量子もつれ」を最小構成 14
日で理解してもらえるよう努力するぞ。

iv

目

次

はじめに............................................................................................................................................... iii

0 日目

実行環境を整えよ！ .............................................. 1

0.1

Visual Studio の準備................................................................................................................1

0.2

Visual Studio のプロジェクト作成方法...............................................................................3

0.3

C++ プログラムソースの記述と実行...................................................................................5

0.4

GNU 科学技術計算ライブラリの導入..................................................................................80.5

数値積分の実行方法..............................................................................................................11

1 日目

量子力学の「超」基礎を習得せよ！ ...................... 15

1.1

電子は「粒」と「波」の性質を併せ持つ量子粒子！.....................................................15

1.2

シュレディンガー方程式......................................................................................................17

1.3

ポテンシャル項が時間に依存しない場合..........................................................................21

2 日目

自由空間中の電子の運動を計算せよ！ ................... 25

2.1

自由空間中の波動関数..........................................................................................................25

2.2

平面波の時間依存性..............................................................................................................29

2.3

平面波の規格化.......................................................................................................................32

3 日目

ディラックのデルタ関数を習得せよ！ ................... 37

3.1

ディラックのデルタ関数の導入..........................................................................................37

3.2

ディラックのデルタ関数を用いた平面波の規格化.........................................................42

v

4 日目

電子波束の運動を計算せよ！ ................................ 494.1

電子波束の作り方..................................................................................................................49

4.2

ガウス波束の運動シミュレーション..................................................................................524.3

波束の速度（群速度）の導出..............................................................................................57

5 日目

井戸型ポテンシャル中の電子の運動を計算せよ！.... 61

5.1

無限に深い井戸型ポテンシャルに対する固有状態.........................................................615.2電子の固有状態の運動アニメーション..............................................................................64

5.3

エネルギー固有関数の直交性の確認..................................................................................67

6 日目

量子井戸に静電場を加える方法を解説するぞ！ ....... 73

6.1

静電場を加えたときのハミルトニアンと固有方程式.....................................................736.2

展開係数が満たす連立方程式の導出..................................................................................786.3行列の固有値と固有ベクトル..............................................................................................83

7 日目

静電場を加えたときの電子の運動を計算せよ！ ....... 87

7.1 〈m | V | n〉の数値積分だ！....................................................................................................877.2行列の固有値問題の数値計算しよう！..............................................................................907.3

固有関数の空間依存性を調べよう！..................................................................................98

7.4

静電場強度依存性を確かめよう！................................................................................... 101

7.5

空間分布の中心を計算しよう！....................................................................................... 105

8 日目

vi

量子井戸の形状を改良するぞ！ ........................... 109

8.1

量子井戸の固有状態と量子ビットの関係....................................................................... 109

8.2

ポテンシャル障壁あり量子井戸の固有状態................................................................... 111

8.3

ポテンシャル障壁あり量子井戸に静電場を加えてみよう！...................................... 113

目次

9 日目

量子井戸へ電磁波を加える方法を解説するぞ！ ..... 117

9.1

マクスウェル方程式の復習だ！....................................................................................... 117

9.2

電磁場中の電子のハミルトニアン................................................................................... 124

9.3

計算アルゴリズムの導出................................................................................................... 127

9.4

電磁波を入射するための方法........................................................................................... 131

10 日目

量子井戸に電磁波を入射せよ！ ........................... 135

10.1 一番簡単な系でルンゲ・クッタ法の動作確認！.......................................................... 135
10.2 Xnm の計算確認.................................................................................................................... 139
10.3 電磁波で状態遷移をシミュレーション！....................................................................... 140
10.4 角振動数をずらしたときのラビ振動を確認................................................................... 146
10.5 ラビ振動の解析解............................................................................................................... 147

11 日目

1 量子ビット量子ゲートを完成させるぞ！ ........... 153

11.1 改良版量子井戸でラビ振動を確認せよ！....................................................................... 153
11.2 1 量子ビットの基本量子ゲートについて....................................................................... 158
11.3 量子ゲートと物理的操作の対応....................................................................................... 161
11.4 1 量子ビットの全ユニタリーゲートの完成！............................................................... 163

12 日目

量子井戸を並べる方法を解説するぞ！ ................. 165

12.1 2 粒子に対するシュレディンガー方程式....................................................................... 165
12.2 2 つの量子井戸のクーロン相互作用................................................................................ 169
12.3 クーロン相互作用を考慮したときの固有状態の計算法.............................................. 172
12.4 量子井戸を改良したときの固有状態の計算法............................................................... 174
12.5 独立した 2 電子の確率分布の計算方法........................................................................... 175vii

13 日目

2 量子井戸の定常状態を計算せよ！ ..................... 179

13.1 〈l1,l2 | V12 | m1,m2〉の計算.................................................................................................. 179
13.2 クーロン相互作用のみを考慮したときの固有状態の計算.......................................... 183
13.3 改良量子井戸でクーロン相互作用のみを考慮したときの固有状態の計算.............. 190
13.4 改良量子井戸でクーロン相互作用と静電場を考慮したときの固有状態の計算..... 193

14 日目

2 量子井戸のラビ振動を計算せよ！ ..................... 197

14.1 2 量子井戸へ電磁波を加える方法.................................................................................... 198
14.2 Xnm =〈n | x1+x2 | m〉を計算.............................................................................................. 200
14.3 2 量子井戸のラビ振動の計算結果.................................................................................... 204
14.4 制御 NOT ゲートの定義..................................................................................................... 207
14.5 量子もつれ（量子エンタングルメント）の生成方法.................................................. 209
14.6 |10〉→ |01〉間接遷移による量子もつれの生成........................................................... 211

終わりに........................................................................................................................................... 214
索  引................................................................................................................................................. 215

viii

0日目

実行環境を整えよ！

0 日目 実行環境を整えよ！

量子コンピュータの動作原理を指導するためのプログラミング環境を整えてもらうぞ。今回は、Microsoft が提供する C++ 言語の統合開発環境である Visual C++ を利用するぞ。Visual C++ は Windows だけでなく Mac でも、個人利用であれば無償で利用することができるぞ。また、数値シミュレーションを行う際に、積分と行列の固有値問題を行うのじゃが、これらは「GNU 科学技術計算ライブラリ」という優れたライブラリを利用するので、これの利用方法も解説するぞ。

0.1 Visual Studio の準備
Visual C++ の最新版は Visual Studio 2019 の一部として提供されているので、これを以下のページでダウンロードしてインストールするぞ。
https://visualstudio.microsoft.com/ja/free-developer-offers/

参考：2020 年 2 月時点で「visual studio ダウンロード 無償版」をキーワードに Google 検索す
ると、2 番目に掲載されています。

1

0

日目

実行環境を整えよ！

2020 年 1 月時点で図 0.1 のような Visual Studio の公式ダウンロードページが表示されるはずじゃ。
「Visual Studio Community」というのが Visual Studio の無料版に相当するぞ。Windowsで利用する場合は点線で示した枠内の「無料ダウンロード」ボタンをクリックするのじゃ。Macの場合は「Visual Studio Community for Mac」の枠内の「無料ダウンロード」ボタンをクリック
するのじゃ。以下の説明はすべて Windows 10 を想定して環境構築の方法を解説するぞ。
図 0.1 ● Visual Studio の公式ダウンロードページ

図 0.2 ● Visual Studio のインストーラー実行ファイル「無料ダウンロード」をクリックすると、図 0.2 のような「vs_community__ 〇〇〇〇 .exe」（「〇〇〇〇」は数字と記号）という実行ファイルがダウンロードされるな。これをダブルクリッ
クして実行すると、Visual Studio のインストーラーがダウンロードされると同時に実行され、図0.3 のような画面が現れるぞ。Visual Studio は Visual C++ の他にも C#、Visual Basic などの言語を利用して、数値計算の他にも、デスクトップアプリケーションやウェブシステムを開発したりす2

0.2 Visual Studio のプロジェクト作成方法

ることができるぞ。この画面では Visual Studio を用いて行いたいことに応じて必要なコンポーネ0ントを選択して、インストールを行うのじゃ。今回は、C++ を用いるので点線で囲んだ「C++ によるデスクトップ開発」の左上のチェックボックスをチェックして、画面右下の「インストール」ボ

1

タンをクリックするぞ。必要なディスクサイズが「6.82GB」であることが表示されるぞ。

2

図 0.3 ● Visual Studio インストーラー実行画面

3
4
5
6
7
8
9
10

インターネット回線の太さにも依るが、インストールは 10 分程度かかるな。インストールが完了すると Windows の再起動を促すダイアログが表示されるので、クリックして再起動するのじ11ゃ。これで Visual Studio のインストールは完成じゃ。

12
13

0.2 Visual Studio のプロジェクト作成方法

14

続いて、Visual C++ の利用方法を解説するぞ。まず、Windows のプログラム一覧から「Visual

Studio 2019」をクリックして起動するぞ。初めて起動する場合にはユーザー登録を促すダイアロ
グが表示されるが、ユーザー登録せずとも利用することができるぞ。起動すると図 0.4 のようなウィンドウが表示されるな。今回は初めて利用するので、画面右下の「新しいプロジェクトの作成」
をクリックするのじゃ。Visual Studio はプロジェクト単位でプログラムが管理されており、プロジェクトは 1 つのフォルダにまとめられているので、フォルダごとコピーすることでプロジェク
トそのものをコピーすることもできるぞ。

3

0

日目

実行環境を整えよ！

図 0.4 ● Visual Studio 2019 の起動画面と新しいプロジェクトの作成用画面

図 0.4 右は「新しいプロジェクトの作成」をクリック後に表示される画面じゃ。Visual C++ は
数値計算の他にもデスクトップアプリケーションやその他の用途の開発で利用することができるのじゃが、ここでは目的に対応したテンプレートを選択するぞ。数値計算を行うだけなら余計なテンプレートは必要ないので、「空のプロジェクト」をクリックして選択後、右下の「次へ」ボタンをクリックするのじゃ。
図 0.5 ●新しいプロジェクトの構成画面

最後に設定するのが「プロジェクト名」と「ファイルを作成する場所」じゃ。「プロジェクト
名」は任意の名前（英数、日本語）をつけることができ、入力すると「ソリューション名」も同じ
名前がつけられるぞ。名前はそんなにこだわる必要はないが「ファイルを作成する場所」は注意が必要じゃ。デフォルトでは「C:¥Users¥( ユーザー名 )¥source¥repos」と設定されているが、どこ4

0.3 C++ プログラムソースの記述と実行に保存したかわからなくなってしまうので、デスクトップ上に保存することを勧めるぞ。最後に右0下の「作成」をクリックし、デスクトップにプロジェクト名のフォルダが生成されていることを確認するのじゃ。なお、作成したプロジェクト（フォルダ）は自由に移動することができるので、後1で管理しやすい場所に移動させれば良いな。

23

0.3 C++ プログラムソースの記述と実行

4

プロジェクトの作成が完了すると図 0.6 のようなアプリケーションが起動するぞ。空のプロジェ

5

クトの場合、プログラムソースはまだ存在しないので、C++ のプログラムソースの作成方法を解説するぞ。まず、右メニューの「プログラムソース」を右クリックせよ。そして表示されるメニュー

6の一番上の「追加」にマウスポインターを乗せると、さらに新しいメニューが表示されるな。さらに表示されるメニューの一番上の「新しい項目」をクリックするのじゃ。

7

図 0.6 ● Visual C++ の実行画面とプログラムソースの作成方法①「ソースファイル」
を右クリック8②「追加」を
マウスオーバー91011③「新しい項目」
をクリック

12
13
14

「main.cpp」に変更

図 0.6（右）のようなダイアログが表示されるぞ。ここで作成できるファイルは拡張子が「cpp」

5

0

日目

実行環境を整えよ！

の C++ ファイルと、拡張子が「h」のヘッダーファイルじゃ。上段の「C++ ファイル」を選択後、ファイル名を指定する下部の「名前」の欄を「main.cpp」に変更後、「追加ボタン」をクリックするのじゃ。ファイル名は任意なのじゃが、C++ 言語で特別な意味を持つ main 関数がこのファイル内で定義されていることをわかりやすくするために、このように指定しておくと良いぞ。うまく行っていると図 0.7（左）のようにファイルリストに「main.cpp」が追加され、ファイルの内容が表示されるな。まだ何も記述していないから真っ白じゃな。
図 0.7 ●統合開発環境（Visual Studio）の実行画面

C++ プログラムソースを記述

ファイルリストコンパイル & 実行
「x64」「x86」が選択可能「Debug」「Release」が選択可能

次に C++ ソースファイルのコンパイルと実行の方法を解説するぞ。以下のサンプルプログラムを用意したので、全文をコピー＆ペーストせよ。

6

0.3 C++ プログラムソースの記述と実行

プログラムソース 0.1 ● C++ 動作確認用（test.cpp）0#include <iostream>////////////////////////////////////////////////////////////////////// メイン関数1

int main(void) {2////////////////////////////////////////////////////////////////////
std::cout << "実行できました" << std::endl;}

return 0;

3
4

このプログラムソースはコンソール画面に「実行できました」と文字列を出力するためのものじゃ。図 0.7（右）上段の「▶ローカル Windows デバッガー」をクリックしてみよ。C++ プログラ

5

ムソースのコンパイル後にエラーがなければそのまま実行されるぞ。図 0.8 が出力結果じゃ。

6

図 0.8 ●コンソール画面への出力結果

7

文字列を出力

8
9
10
11
12
13
なお、コンパイル時に注意してほしいのが、統合開発環境の上段にてプルダウンで選択すること14のできる「Debug ／ Release」と「x64 ／ x86」の違いについてじゃ。「Debug」はデバッガーを用いてプログラムのデバッグを行う際に利用し、「Release」は実際に計算する際に利用するぞ。
「Debug」でももちろん数値計算を行うことができるが、「Release」よりも計算速度が遅いのじゃ。また、「x64」と「x86」はコンパイル後の実行ファイル（拡張子 exe）の動作環境を 64 ビットマシン用とするか 32 ビットマシン用にするかじゃが、特にこだわりがなければ「x64」のまま利用すれば良いぞ。
最後に、統合開発環境を一度終了した後に、同じプロジェクトを立ち上げる一番簡単な方法を解

7

0

日目

実行環境を整えよ！

説するぞ。プロジェクトを作成するとプロジェクト名のフォルダが生成されることはすでに述べたな。このフォルダの直下に拡張子「sln」のファイルがあるじゃろ。これはソリューションファイ
ルと呼ばれており、これをダブルクリックすることで統合開発環境の起動が起動して、該当するプ
ロジェクトを引き継ぐことができるぞ。

0.4 GNU 科学技術計算ライブラリの導入
GNU 科学技術計算ライブラリの正式名称は「GNU Scientiﬁc Library」（以下、GSL と表記）で、「GNU General Public License」というライセンスの元、誰でも自由に利用することができる C 言
語による数値計算用のライブラリじゃ。数値計算の専門家集団によって作成されメンテナンスされているから、安心して利用することができるな。以下のページからソースファイルをダウンロード
して利用することができるぞ。
https://www.gnu.org/software/gsl/

ただし、Windows で利用するにはソースファイルをコンパイルする必要があるのじゃが、面倒なのでコンパイル済みのファイルを用意したので、それをこれから指定するフォルダに配置するだ
けで良いぞ。

（1）インクルードファイルの配置

サンプルプログラムの GSL フォルダ内の include フォルダを開いてみよ。
「gsl」というフォル

ダがあるじゃろ。このフォルダ内には GSL で利用する関数が定義されたインクルードファイルがたくさんあるな。この「gsl」フォルダを以下のフォルダにそのままコピーするのじゃ。
C:¥Program Files (x86)¥Microsoft Visual Studio¥2019¥Community¥VC¥Tools¥MSVC¥〇〇〇〇¥include「〇〇〇〇」は Visual Studio のマイナーバージョンを表す数字じゃ。複数のマイナーバージョンが存在する場合には、念の為にすべてのバージョンの include フォルダにコピーしておくと良いぞ。

（2）ライブラリファイルの配置

サンプルプログラムの GSL フォルダ内の「lib」というフォルダがあるじゃろ。このフォルダの80.4 GNU 科学技術計算ライブラリの導入

中には 64 ビット用（x64）と 32 ビット用（x86）の静的ライブラリが格納されているぞ。これ

0

らのファイル（gsl.lib、gsl.pdb、cblas.lib、cblas.pdb）を以下のフォルダ内にそれぞれコピーするぞ。

1

C:¥Program Files (x86)¥Microsoft Visual Studio¥2019¥Community¥VC¥Tools¥MSVC¥〇〇〇〇

2

C:¥Program Files (x86)¥Microsoft Visual Studio¥2019¥Community¥VC¥Tools¥MSVC¥〇〇〇〇

3¥atlmfc¥lib¥x64¥atlmfc¥lib¥x32

4

ライブラリの準備は以上じゃ。

5（3）統合開発環境の設定

最後に作成したプロジェクトで GSL を利用するための準備じゃ。プロジェクトの各種設定を行

6には、上段メニューの「プロジェクト」をクリックすると図 0.9 のようなメニューが表示されるな。その一番下の「〇〇のプロパティ」をクリックするのじゃ。「〇〇」はプロパティ名が表示さ7

れているぞ。

8

図 0.9 ●プロジェクトのプロパティの表示方法

①

9
10
11
12
13
14

②

表示ダイアログを見ると、一番上に「Debug ／ Release」を選択するプルダウン、左側にプロ
パティの大まかな種類を表す項目一覧があるな。この中の「リンカー」をクリックするとサブメニューが現れるな。その中から「入力」をクリックするぞ。するとこの項目に対応するプロパティ一

9

0

日目

実行環境を整えよ！

覧が表示されるな。今回設定する必要があるのは、その中にある「追加依存ファイル」に GSL で用いる 2 つのライブラリ「gsl.lib」と「cblas.lib」を追加することなのじゃ。「追加依存ファイル」の項目をクリックすると、右側にプルダウンを表す［∨］が現れるので、それをクリックすると「編集」というメニューが表示されるのでそれをクリックすると、図 0.10（右）のダイアログが表示されるぞ。この欄に先の「gsl.lib」と「cblas.lib」を記述して、下の「OK」ボタンを押すのじゃ。これを設定することで、このプロジェクトで自動的にこれらのライブラリが読み込まれるぞ。
図 0.10 ●プロパティの設定画面

ファイル名を記述

図 0.10 の④で指定する「Debug」と「Release」でそれぞれ同じ設定を行えば準備は完了だ。

10

0.5 数値積分の実行方法

00.5 数値積分の実行方法

1

GSL の動作確認のために数値積分を試してみよう。プログラムソース 0.2 は、ガウス・ルジャ

2

ンドル法という計算アルゴリズムで任意の関数を積分するためのサンプルプログラムじゃ。数値計
算の誤差を調べるために解析解が得られる

I=

 1

3

sin(πx)dx405の積分を計算してみよう。解析解は I = 2/π じゃな。次のサンプルプログラムを前節で準備した
プロジェクトの C++ プログラムソースにコピー＆ペーストして、コンパイル＆実行してみよ。

6

プログラムソース 0.2 ●数値積分：ガウス・ルジャンドル積分（gsl_integral.cpp）#include <iostream>7#include <iomanip>#include <string>8#include <gsl/gsl_integration.h>// 被積分関数の定義

double f(double x, void * params) {// 計算パラメータ9< ----------------------------------------------------------------------（※1）

double alpha = *(double *)params;

10// 被積分関数}

return alpha * sin(M_PI * x);

11

int main(void) {// 積分結果と推定誤差を保持する作業領域

gsl_integration_glfixed_table * w = gsl_integration_glfixed_table_alloc(10);// 解析解

double expected = 2.0 / M_PI;// 被積分関数のパラメータ
double alpha = 1.0;

< ----------------------------------------------------------------------------（※3）

13< ---------------------------------------------------------------------------------------------（※4）

14// GSLにおくる被積分関数の構造体

gsl_function F = { &f, &alpha };// ガウス・ルジャンドル積分<------------------------------------------------------------------------（※5）

double result = gsl_integration_glfixed(
&F,

0, 1,
w

12

<（※2）

// 被積分関数の定義< ----------------------------------------------------------（※6）// 積分範囲(a,b));

std::cout << "【計算結果】" << std::endl;
std::cout << std::setprecision(15);<-------------------------------------------------------------------（※7）

11

0

日目

実行環境を整えよ！

std::cout << "計算結果 = " << result << std::endl;

std::cout << "理論値 = " << expected << std::endl;

std::cout << "計算誤差 = " << result - expected << std::endl;// 作業領域の解放

gsl_integration_glfixed_table_free(w);}return 0;<--------------------------------------------------------------（※8）（※ 1） 被積分関数を定義するぞ。第 1 引数は積分変数、第 2 引数は関数内で使用する変数が格納された変数（や構造体）じゃ。
（※ 2） 数値積分を計算するために必要なメモリを確保するぞ。引数がメモリ量に対応する値で、大きい値ほど計算誤差は減るが、計算時間が必要になるぞ。
（※ 3） 比較のための解析解の値を準備しておくぞ。
（※ 4） 今回、被積分関数内で積分変数以外のパラメータは利用しないが、動作確認のために変数

alpha を用意しておくぞ。
（※ 5） 被積分関数と変数をメンバとした構造体を用意するぞ。
（※ 6） この関数がガウス・ルジャンドル法による数値積分を実行する関数じゃ。第 1 引数に（※5）の構造体を、第 2 引数と第 3 引数に積分範囲の両端の値を、第 4 引数に（※ 2）の値をそれぞれ与えるぞ。計算結果が戻り値として得られるぞ。
（※ 7） 計算結果をコンソール画面に出力するのじゃが、その際の表示する有効桁数を 15 桁にしているぞ。
（※ 8） （※ 2）で確保したメモリを解放する必要があるぞ。

図 0.11 が計算結果を出力したコンソール画面じゃ。今回の積分はおとなしい関数じゃからか、驚くことに 15 桁まで計算誤差がないことを表しているぞ。
図 0.11 ●数値積分の結果

以上で準備は完了じゃ。今後、新しいプログラムを作成するたびに Visual Studio のプロジェ
クトを新規に作成していくとプロジェクトだらけになってしまうので、使用するプロジェクトを12

0.5 数値積分の実行方法

1 つだけ用意して、あとは C++ プログラムソースはテキストファイルに保存しておくことを勧め

0

るぞ。

1
2
3
4
5
6
7
8
9
10
11
12
13
14

13

1日目

量子力学の「超」基礎を習得せよ！

1 日目 量子力学の「超」基礎を習得せよ！

1.1 電子は「粒」と「波」の性質を併せ持つ量子粒子！
1 日目は、量子ドットコンピュータの主役となる電子の性質を解説するぞ。電子のよ
うに軽い粒子（量子粒子）の運動は量子力学という理論で記述できることが知られているぞ。量子粒子の最大の特徴は「粒」であると同時に「波」の性質を持つというところじゃ。これは「粒子と波動の二重性」と呼ばれ、過去の様々な実験によって確かめられている
事実なのじゃ。
図 1.1 ●粒子と波動の二重性

「粒子」

「波動」

15

1

日目

量子力学の「超」基礎を習得せよ！

電子って電気の元となる物質だよね。電子を扱う理論は「電磁気学」があったけれど
も、これじゃだめなの？ 「量子力学」と何が違うの？
電磁気学で扱う電子は、点電荷といって粒子として扱っているんじゃよ。波動の性質は全く利用していないのじゃ。その結果、電磁気学では実は、原子核のまわりを回る
電子を説明できないのじゃ。
そうだったんだね。電子に波動の性質があるから原子は存在できるってことなんだね。そんな量子粒子を表現できる量子力学ってすごいね。
量子力学では量子粒子の状態を「波動関数」という複素数のスカラー関数（ベクトルではない）で表すぞ。1 次元の場合、位置 x 、時刻 t の量子粒子の波動関数は

波動関数：
位置

時刻

と表されるぞ。 ψ はプサイというギリシャ文字じゃ。この波動関数で波動の性質を表現すると同時に、なんと |ψ(x, t)| がその地点（位置 x 、時刻 t ）に粒子が存在する確率を表しているぞ。こ2

れは「ボルンの確率解釈」と呼ばれ、まだ誰にも証明されていないけれども、すべての実験で矛盾なく確かめられている事実なのじゃ。
じゃあ、ボルンの確率解釈は量子力学の原理（証明不要で用いることができる事象）ってことだね。それにしても波動関数はすごいね。 ψ(x, t) はそのままで波動性を有しつつ、|ψ(x, t)|2 で粒子性も担保できるなんて。
そうなんじゃ。そして、この波動関数が従う方程式が「シュレディンガー方程式」じゃ。今日は、シュレディンガー方程式の基本的な解き方を解説するぞ。

16

1.2 シュレディンガー方程式

1.2 シュレディンガー方程式

0（1）シュレディンガー方程式とは

21波動関数 ψ(x, t) は時間と空間を引数に持つ 2 変数関数なので、微分方程式ではなく

3

偏微分方程式となる点に注意が必要じゃ。シュレディンガー方程式の導出はさてお

4

き、次のとおりじゃ。
基礎方程式

5

シュレディンガー方程式----------------------------------------------------------------------------∂ψ(x, t)= Ĥ(x, t)ψ(x, t)
∂t

（1.1）

6

--------------------------------------------------------------------------------------------------------------------------------7i

Ĥ(x, t) はハミルトニアンと呼ばれるもので、次で詳しく解説するぞ。「 i」は虚数、「  」はデ8

ィラック定数（ 1.055 × 10−34 [Js]）と呼ばれ、プランク定数（ h = 6.626 × 10−34 [Js]）という
量子力学で基本となる量を 2π で割った量で定義されるぞ。プランク定数の意味は後で詳しく解説

9

するぞ。

∂ψ(x, t)/∂t が時刻 t による偏微分を表しているのじゃが、これは t 以外を定数とみなして、t で10微分を行うという数学的操作を表すのじゃ。通常の微分の場合には「 d 」の記号を用いたが、偏微分は ∂ の記号を用いるぞ。
数学定義

11

偏微分の定義------------------------------------------------------------------------------------------f (x + ∆x, y) − f (x, y)∂f (x, y)
≡ lim
∆x→0
∂x
∆x

12

（1.2）

13

--------------------------------------------------------------------------------------------------------------------------------

14式（1.1）のシュレディンガー方程式は、対象とする問題に対応するハミルトニアンを与えることではじめて波動関数に対する偏微分方程式が完成するのじゃ。

（2）古典力学のハミルトニアンと量子力学のハミルトニアン
古典力学のハミルトニアンはエネルギーに対応する量で、粒子に加わる力が速度に依存しない場合、運動エネルギー（ T ）とポテンシャルエネルギー（ V ）の和で表され
るぞ。

17

1

日目

量子力学の「超」基礎を習得せよ！

定義

ハミルトニアン（古典力学）----------------------------------------------------------------------（1.3）

H =T +V-------------------------------------------------------------------------------------------------------------------------------ポテンシャルエネルギーが陽に時間に依存しない場合、ハミルトニアンは一定値となり、エネル
ギー保存則に対応するぞ。古典力学の運動エネルギーは粒子の質量 m 、速度 v あるいは運動量 p（ = mv ）を用いて

T =

1
p2
mv 2 =
22m（1.4）となるな。ポテンシャルエネルギー V は粒子が受ける力 F の源を表す量で、力 F と

F =−

dV
,
dx

V =−



F dx

（1.5）

の関係があるわけじゃな。つまり、ポテンシャルエネルギーの空間的な傾きが粒子が受ける力であることを表しているな。次に量子力学のハミルトニアンについてだけれども、古典力学の場合と形式的には同じじゃ。粒子に加わる力が速度に依存しない場合には運動エネルギーとポテンシャルエ
ネルギーの和で表されるぞ。
定義----------------------------------------------------------------------ハミルトニアン（量子力学）（1.6）

Ĥ = T̂ + V̂-------------------------------------------------------------------------------------------------------------------------------それぞれの記号の上の「^」は「ハット（帽子）」と呼ばれ、古典力学から量子力学への変換は、
位置 x と運動量 p を位置演算子 x̂ 、運動量演算子 p̂ に置き換えることに対応するぞ。

T =

p2
p̂2
→ T̂ =,2m
2m

V (x, t) → V̂ (x̂, t)

この x̂ と p̂ は古典的な数ではなく、演算子であることに注意が必要だ。

（3）位置演算子と運動量演算子の正準交換関係
位置演算子 x̂ と運動量演算子 p̂ は古典的な数ではないことは先に述べたが、次に示す
正準交換関係と呼ばれる関係を要請することで、古典力学からの量子力学への移行が完成するぞ。まず、交換関係という数学的操作を次のとおりに定義するぞ。

18

1.2 シュレディンガー方程式

数学

交換関係の定義- --------------------------------------------------------------------------------------

0[A, B] ≡ AB − BA1--------------------------------------------------------------------------------------------------------------------------------A や B が普通の数の場合、積は順番に依らないので 0 になるが、演算子や行列の場合、積の順

2番で結果が異なるので 0 にはならないな。先の位置演算子 x̂ と運動量演算子 p̂ の交換関係に次の関係を要請するぞ。

3

物理

4

正準交換関係------------------------------------------------------------------------------------------[x̂, p̂] = x̂p̂ − p̂x̂ = i

（1.7）

5

-------------------------------------------------------------------------------------------------------------------------------この x̂ と p̂ の関係は正準交換関係と呼ばれ、この関係を課すことは量子化と呼ばれるぞ。先に6導入した波動関数は位置と時刻を引数とする関数としたが、実は位置演算子 x̂ を通常の変数 x とみなすことができるという性質を持つのじゃ。このような波動関数 ψ(x, t) は位置表示と呼ばれる

7

ぞ。反対に、運動量と時刻を引数とする波動関数 ψ(p, t) も定義することができて、この場合には8

運動量演算子 p̂ を通常の変数 p とみなすことができるのじゃ。このような波動関数 ψ(p, t) は運動量表示と呼ばれるぞ。

9

話を元に戻して、シュレディンガー方程式を位置表示の波動関数に対応させるには、運動量演算子 p̂ を変数 x で表す必要があるのじゃ。式（1.7）の正準交換関係を満たす p̂ は次のように表され

10

るぞ。
物理

11

位置表示における運動量演算子-------------------------------------------------------------------

 ∂
i ∂x

（1.8）

12

--------------------------------------------------------------------------------------------------------------------------------

13

p̂ =

x の偏微分となっているのは、 p̂ は 2 変数関数である ψ(x, t) に作用することを前提にしている14

ためじゃ。 p̂ を式（1.8）に与えた場合に式（1.7）の正準交換関係を満たすことは【メモ 1】で確認するぞ。

（4）位置表示におけるシュレディンガー方程式
シュレディンガー方程式（1.1）に式（1.6）の量子化したハミルトニアンを代入して、位置表示の波動関数であることを考慮すると、シュレディンガー方程式は次のとおりになるぞ。

19

1

日目

量子力学の「超」基礎を習得せよ！

基礎方程式

i

シュレディンガー方程式----------------------------------------------------------------------------
2 ∂ 2∂ψ(x, t)= −+Vψ(x, t)∂t2m ∂x2（1.9）--------------------------------------------------------------------------------------------------------------------------------（5）波動関数の規格化条件|ψ(x, t)|2 は時刻 t に粒子が位置 x に存在する確率を表すことは述べたが、確率は全空間で保存されている必要があるぞ。そのため波動関数は全確率を 1 として次の式が要請されるぞ。

 ∞|ψ(x, t)|2 dx = 1（1.10）−∞

これは波動関数の規格化条件と呼ばれ、すべての時刻で成り立つ必要があるぞ。

【メモ 1】位置表示における正準交換関係の確認
もともと演算子は波動関数に作用することを前提としているので、式（1.7）の正準交換関係を確認するに右から位置表示波動関数 ψ(x, t) を作用させてから x̂ と p̂ の交換関係を計算する必要があるぞ。

 ∂ψ  ∂−(xψ)
i ∂x 
i ∂x

 ∂ψ

 ∂ψ
−
ψ+ x
=x
i ∂x
i
i ∂x

= − ψ = iψi[x̂, p̂]ψ(x, t) = x̂

（1.11）

左辺と右辺最後の式を見比べると式（1.7）の正準交換関係が満たされていることが確認できたかな。ちなみに、上記の計算で注意が必要なのは 2 点あって、1 つ目は x̂ は ψ(x, t) とその導関数に作用することで演算子からただの変数 x に置き換わること、2 つ目は p̂ は直後の x だけでなくその後に続く ψ にも作用する点じゃ。ちなみに分母に虚数 i がある場合、分母と分子に i を掛けることで分母の i はなくなるぞ。

20