計算物理学２

第 3 回演習

ver. 2018/4/24
以下の例題を Fortran もしくは C 言語を用いてプログラム化せよ。
IF 文（８） 実数 a を標準入力から読み込み、その絶対値を出力(IF 文を使って書く)（９） ３つの実数 a, b, c を標準入力から読み込み、最大値と最小値を出力(IF 文を使って書く)（１０）実数 a を標準入力から読み込み、その平方根を出力。これを DO 文で繰り返す。
読み込んだ a が負の数であればプログラムを終了する。

（１１） ax + bx + c = 0 の係数 a, b, c(倍精度実数とする)を標準入力から読み取り、解22ｘを出力。a=0 の場合、a=b=0 の場合、b -4ac の正負などを正しく場合分けする。解が複素数になる場合は複素数解を表示。
関数副プログラム（１２）階乗 N!を実数で計算する関数副プログラムを作り、それを用いて N が 1 から 30までの階乗を出力（１２ʼ）階乗 N!を実数で再帰的に計算する関数副プログラムを作り、それを用いて N が1 から 30 までの階乗を出力

x（１３） e の x=0 でのテーラー展開はex =<latexit sha1_base64="R/5ngm7CidF+1mZn6uOeZ/GC25s=">AAACq3ichVG/SxxBFP7cGDVnohdtAjarh5LG460IBuHgME1K9XIqcb1jd53TYX+yO3d4We4fEPsUqRJIEezSpNDOJv+AhX9CSGkgTYq821sIiahvmJlvvnnfm/l4duTJRBFdDWkPhh+OjI49Kow/fjIxWXw6tZWE7dgRdSf0wnjHthLhyUDUlVSe2IliYfm2J7Zt92X/frsj4kSGwWvVjcSebx0EsiUdSzHVLC6IxpFe0c2k7TdTt0K9himDlurqZiu2nPSo4fZSd7bXLJaoTFnoN4GRgxLyWA+LX2FiHyEctOFDIIBi7MFCwmMXBggRc3tImYsZyexeoIcCa9ucJTjDYtbl9YBPuzkb8LlfM8nUDr/i8YxZqWOeLukzXdM3OqXv9PvWWmlWo/+XLu/2QCui5uTxs9qve1U+7wqHf1V3KGzOvtuTQgsvMi+SvUUZ03fpDOp33r67rq1uzqcL9JF+sL8PdEUX7DDo/HQ+bYjN9yhwg4z/23ETbC2VDSobG8ul6lreqjHMYA7PuR8rqOIV1lHnd0/wBWc41xa1mvZGMwep2lCumcY/oYk/L6ifaw==</latexit>

1X
xk

k=0k!

で与えられる。
（１２）で作った階乗を計算する関数副プログラムに加えて、x と n を引数として n 次までのテーラー展開を計算する関数副プログラムを作成し、x が­１０から１０まで 0.5 刻みで、組み込み関数 EXP(x)の値と１０，２０，３０、４０次までのテーラー展開の値を出力して比較。
1

（１４）行列指数関数はべき級数によって定義される
A

e =

1X
Ak

k=0

<latexit sha1_base64="R2as3lEde4KkWYY/gI2M9yFpC8A=">AAACq3ichVG/SxxBFP5cY2LOJF60EdJsPJQ0Hm9DIEEQ7rSxVC+nEtc7dtc5HfYnu3MH53L/gNhbWEWwkHRpUiRdmvwDKfwTxNJAmhR5t7cgiahvmJlvvnnfm/l4duTJRBGdD2nDD0YePhp9XBh78vTZePH5xHoStmNH1J3QC+NN20qEJwNRV1J5YjOKheXbntiw3aX+/UZHxIkMg/eqG4lt39oNZEs6lmKqWZwVjaq+oJtJ22+m7gL1GqYMWqqrm63YctJqw+2l7stes1iiMmWh3wRGDkrIYyUsfoGJHYRw0IYPgQCKsQcLCY8tGCBEzG0jZS5mJLN7gR4KrG1zluAMi1mX110+beVswOd+zSRTO/yKxzNmpY4Z+klndEU/6BNd0J9ba6VZjf5furzbA62ImuMHU7Xf96p83hX2rlV3KGzOvtuTQgvvMi+SvUUZ03fpDOp39o+uavNrM+ksndAl+/tI5/SdHQadX87pqlg7RoEbZPzfjptg/XXZoLKx+qZUWcxbNYoXmMYr7sdbVLCMFdT53UN8xld80+a0mvZBMwep2lCumcQ/oYm/PNOe/Q==</latexit>

ここで A は nｘｎの行列である。

k!

Pauli 行列として以下の３つの 2x2 の複素行列を定義する。
x =<latexit sha1_base64="AFcyFGRXAb6nZGAL5gswIqN0F4w=">AAADPnichVHNShxBEK6ZJGo2Rtd4CXhI4+KSQ1xqRDAEBEkQPBn/VgVHlp7Z3rVx/pzpXVwXXyAvkIMnhRyCDxByC3jxBTz4AoIE8aCgBw+pmR0SNv51M91VX9X39XyUFTgyUojHmv7k6bOOzq7nmRfdL3t6s32vFiO/FtqiaPuOHy5bPBKO9ERRSeWI5SAU3LUcsWStf4rrS3URRtL3FlQjEKsur3qyIm2uCCplf5qRrLq8tMnGmWmJqvSagctVKDe3GbI8M5hp0pGnxBRe+W/xHTM3arycSemNe+jDMubLu/jtAlt3CKTPmi0lo10gU8rmsIDJYrcDIw1ykK4ZP/sDTCiDDzbUwAUBHiiKHeAQ0V4BAxACwlahSVhIkUzqArYhQ9wadQnq4ISu01mlbCVFPcpjzShh2/SKQ19ITAZDeITf8QIPcR9P8eZerWaiEf9Lg26rxRVBqffL6/mrR1ku3QrW/rEeYFjU/bAnBRV4n3iR5C1IkNil3dKvb329mP8wN9TM4x7+Jn+7eIwH5NCrX9rfZsXcDsQDMv4fx+1gcaRgYMGYHc1NfExH1QUDMAhvaR5jMAFTMANFsLU32qQ2rX3Wf+kn+pl+3mrVtZTTD21Lv/4DIu7P7A==</latexit>✓◆
0 1,
1 0y =✓0i◆i,0z =

✓10◆01

このとき、ei✓ k = I cos ✓ + i k sin ✓(k = x, y, z)<latexit sha1_base64="8tvUIeVpk1V2tbDyw922Cx+rJP8=">AAAC1HichVG/TxRBFP5YUeBQObUxsZlwwWAkl7eERGNiQrTBSn54BwmHl9llOCa3v9ydu3icVITGwpaCShILQ034A2z8BywIrRbGEhMbC9/uLTFKxLeZnTff+7438+U5kacTQ3TUZ13ov3hpYHCoMHz5ytWR4rXr1SRsxa6quKEXxkuOTJSnA1Ux2nhqKYqV9B1PLTrNx2l9sa3iRIfBM9OJ1IovG4Fe0640DNWLT9Xzrq6ZdWWkqCW64ct6c1M8FE9EzQ2TvHBX6NNaSgpO+S9aclWI8SbzX06IzoTYuFMvlqhMWYiziZ0nJeQxGxYPUcMqQrhowYdCAMO5B4mEv2XYIESMraDLWMyZzuoKmyiwtsUsxQzJaJP/DT4t52jA57RnkqldvsXjFbNSYIw+0Xs6oY+0T1/p5z97dbMe6Vs6vDs9rYrqI69vLvz4r8rn3WD9t+ochcPs8z0ZrOF+5kWztyhDUpdur397Y+dk4cH8WPc27dE39veWjugDOwza3913c2p+FwUekP33OM4m1cmyTWV7bqo0/Sgf1SBuYRTjPI97mMYMZlHhew9wjM/4YlWtV9aWtd2jWn255gb+COvNLyMnrYA=</latexit>となることが知られている。ただし I は 2x2 の単位行列である。以下の方法でこの左辺と右辺が数値的に一致することを示す。
k・行列のべき乗 A を再帰的に計算する関数副プログラムを作成
・これを用いて行列指数関数をテーラー展開で計算する関数副プログラムを作成
・30 次までのテーラー展開で左辺を計算し、θが-180 から 180 まで 30 ごとに、k=x,y,z それぞれについて左辺と右辺が数値的に一致することを示す。

2