Pythonによる数値計算

IDLEなどでは, 以下の左側にある In [1]: のような表示は出ない。枠内のコードを入力すればよい。

基本計算

In [1]:
from math import sqrt  # mathライブラリから平方根を計算する関数sqrtをインポート
a = 2.0
print('sqrt(a) =', sqrt(a))
print('sqrt(', a, ') =', sqrt(a))
print('sqrt(%3.1f) = %10.5f' % (a, sqrt(a)))  # %10.5f は浮動小数点(floating point)実数 10コラムに小数点以下5桁
sqrt(a) = 1.4142135623730951
sqrt( 2.0 ) = 1.4142135623730951
sqrt(2.0) =    1.41421

繰り返しループ

for 変数 in リスト:
    実行文1
    実行文2
    ...

forブロックの範囲は, インデント(字下げ)によって指定される. すなわち, インデントされた実行文が順次繰り返される.

In [2]:
for i in range(3):  # range(N)は, リスト [0, 1, 2, ..., N-1] を返す. CやJavaの for(i=0;i<N;i++)と同じ.
    print(i)
0
1
2
In [3]:
for i in [1, 2, 5]:  # リスト(配列)は, []内に数字や文字列を並べたもの.
    print(i)
1
2
5

Homework 01 問2

白金表面の仕事関数は4.09 eVである。波長250 nmの光を白金表面に照射したとき、光電効果によって放出される電子の運動エネルギー$\frac{1}{2}m_e v^2$と速さ$v$を計算せよ(単位はJとm/s)。

In [4]:
from math import sqrt  # mathライブラリから平方根を計算する関数sqrtをインポート

# 定数の定義
c = 2.998e8    # 光速 m/s
h = 6.626e-34  # プランク定数 Js
e = 1.602e-19  # 電荷素量 C
m = 9.109e-31  # 電子質量 kg

wl = 250e-9  # 波長 m
W = 4.09     # 仕事関数 eV

E = h*c/wl - e*W  # 電子の運動エネルギー
v = sqrt(2*E/m)   # 電子速度

print('E =', E, 'J')
print('v =', v, 'm/s')

print('E = %11.5g J, v = %10.4g m/s' % (E, v))  # 書式付き出力
E = 1.3937192000000004e-19 J
v = 553181.0423012819 m/s
E =  1.3937e-19 J, v =  5.532e+05 m/s

Homework 02 問1

可視光の波長は420 nm(紫)から700 nm(赤)である。対応する振動数とエネルギーの範囲をs$^{-1}$とJ(ジュール)単位で求めよ。(1 nm = 10$^{-9}$ m, ナノメートル)

In [5]:
c = 2.998e8    # m/s
h = 6.626e-34  # Js

for wl in [420e-9, 700e-9]:  # 繰り返しループ for 変数 in リスト:
    nu = c/wl  # 振動数 = 光速/波長
    E = h*nu   # エネルギー = プランク定数 * 振動数
    print('wl = %3d nm, nu = %10.4g s^-1, E = %10.4g J' % (wl*1e9, nu, E))
wl = 420 nm, nu =  7.138e+14 s^-1, E =   4.73e-19 J
wl = 700 nm, nu =  4.283e+14 s^-1, E =  2.838e-19 J

Homework 07

準備: k=3の場合

In [6]:
c = 2.998e8    # 光速 m/s
h = 6.626e-34  # プランク定数 Js
e = 1.602e-19  # 電荷素量 C
m = 9.109e-31  # 電子質量 kg 
    
L0 = 0.6  # k=0のときのL. 単位はnm
k = 3
L  = L0 + k*0.25
print('k =', k, '-> L =', L, 'nm')

L = L*1e-9  # nm -> mへ変換
E = h**2/(8*m*L**2)*(6**2 - 5**2)  # E6-E5
wl = h*c/E*1e9
print('E = %8.2e J = %5.2f eV => wl = %4.0f nm' % (E, E/e, wl))
k = 3 -> L = 1.35 nm
E = 3.64e-19 J =  2.27 eV => wl =  546 nm

課題:

以上を参考に、Homework 07のk=0,1,2,3の表を完成させるためのプログラムを作成せよ。