vba
DESCRIPTION
VBATRANSCRIPT
C H I B A U N I V E R S I T Y – N A N O S C I E N C E D E P A R T M E N T
テーマ A第二日目
氏名 : TANG MINH QUANG 学生番号 : 11T1121Y 実験日 : 4月 30日 提出日 : 5月 7日
08 Fall
1. 目的 Microsoft Office Excelと VBAを利用し てプログラミングの基礎を理解すること
2. はじめに 図のように、距離 a だけはなれた 2 つのスリットに単一の振動数からなる光
を照射し、距 離 L だけはなれたスクリーンの位置 y における光の強度を観測する。
干渉:
図 1(左) は、左から進んできた平面波が波面と平行な障害物の隙間を通過する様子をイ メージで描いている。波は隙間を通った後、障害物の背後に回り込んでいる。このような 現象を波の回折といい、回折した波を回折波という。実際には波の波長と隙間の大きさに よって回折の様子は異なり、光の場合は波長が非常に短いので、ある程度幅の狭いスリッ トなどを通るときに限り回折現象が顕著にみられる。障害物の隙間が複数あるときには それぞれの隙間を通って回折した波が重なり合うことになる。図 1(右) は、2 カ所の隙間 S1、S2 から進んできた波がある点で重なり合う場合を表している。2 つの波は点 P1 で は山と山、谷と谷が重なっている (同位相) ので強めあい、点 P2 では山と谷が重なって いる (逆位相) ので打ち消しあうことになる。このように複数の波が重なり合って振動を 強めあったり打ち消しあったりする現象を波の干渉という。
3. 結果
Comment は Eg. 'Calculate wave number k のように書く
問題1のグラフ
CODE:
Sub PROGRAM01()
Const a As Double = 0.1, l As Double = 200, lambda As Double = 0.0005
Const nsource As Integer = 2
Dim ysource(nsource -‐ 1) As Double
Const ymax As Double = 5, dy As Double = 0.1
Dim y As Double
Dim ny As Integer
Dim iy As Integer
Dim Intensity As Double
' ÉJÉEÉìÉ^ïœêî
0
0.5
1
1.5
2
2.5
-6 -4 -2 0 2 4 6
強度
Dim i As Integer, j As Integer
Dim k As Double, p1 As Double, p2 As Double
' Set the source position
ysource(0) = -‐a / 2
ysource(1) = a / 2
'Calculate wave number k
k = 2 * WorksheetFunction.Pi / lambda
ny = Int((2 * ymax) / dy) + 1
For iy = 1 To ny
y = -‐ymax + (iy -‐ 1) * dy
Intensity = 0
For i = 0 To nsource -‐ 1
p1 = k * Sqr(l ^ 2 + (y -‐ ysource(i)) ^ 2)
For j = 0 To nsource -‐ 1
p2 = k * Sqr(l ^ 2 + (y -‐ ysource(j)) ^ 2)
'Using Tave function to calculate intensity
Intensity = Intensity + TAVE(p1, p2)
Next
Next
' Write data value back to cells
Cells(4 + iy, 1) = y
Cells(4 + iy, 2) = Intensity
Next
End Sub
‘ Function Tave
Function TAVE(p1 As Double, p2 As Double) As Double
TAVE = Cos(p1 -‐ p2) / 2
End Function
//////////////////////////////////
問題 2のグラフ
0
2
4
6
8
10
12
14
-20 -15 -10 -5 0 5 10 15 20
強度(N=05)
0
10
20
30
40
50
60
-20 -15 -10 -5 0 5 10 15 20
強度(N=10)
‘説明: ‘問題1と同じ計算方で、但光源の数が増えるため、それぞれの場合、光源
‘の位置を設定することが必要である。 Code: Sub PROGRAM02() ‘Declare variables Const a As Double = 0.01, l As Double = 200, lambda As Double = 0.0005 Const nsource As Integer = 5 Const nsource2 As Integer = 10 Const nsource3 As Integer = 15 Dim ysource(nsource -‐ 1) As Double Dim ysource2(nsource2 -‐ 1) As Double Dim ysource3(nsource3 -‐ 1) As Double Const ymax As Double = 15, dy As Double = 0.1 Dim y As Double Dim ny As Integer Dim iy As Integer Dim Intensity As Double Dim i As Integer, j As Integer Dim k As Double, p1 As Double, p2 As Double
0
50
100
150
200
250
-20 -15 -10 -5 0 5 10 15 20
強度(N=20)
'Set value for slip position For i = 0 To nsource -‐ 1 ysource(i) = i * a -‐ (nsource -‐ 1) / 2 * a Next For i = 0 To nsource2 -‐ 1 ysource2(i) = i * a -‐ (nsource2 -‐ 1) / 2 * a Next For i = 0 To nsource3 -‐ 1 ysource3(i) = i * a -‐ (nsource3 -‐ 1) / 2 * a Next k = 2 * WorksheetFunction.Pi / lambda ny = Int((2 * ymax) / dy) + 1 For iy = 1 To ny ' yç¿ïW y = -‐ymax + (iy -‐ 1) * dy Intensity = 0 For i = 0 To nsource -‐ 1 p1 = k * Sqr(l ^ 2 + (y -‐ ysource(i)) ^ 2) For j = 0 To nsource -‐ 1 p2 = k * Sqr(l ^ 2 + (y -‐ ysource(j)) ^ 2) Intensity = Intensity + TAVE(p1, p2) Next Next Cells(4 + iy, 4) = y Cells(4 + iy, 5) = Intensity 'Repeat the calculation with different number of light sources (Copy code from ******** aboved) 'nsource=10 の場合
Intensity = 0 For i = 0 To nsource2 -‐ 1 p1 = k * Sqr(l ^ 2 + (y -‐ ysource2(i)) ^ 2) For j = 0 To nsource2 -‐ 1 p2 = k * Sqr(l ^ 2 + (y -‐ ysource2(j)) ^ 2)
Intensity = Intensity + TAVE(p1, p2) Next Next ' ÉZÉãÇ…yç¿ïWÇ∆ã≠ìxÇèëÇ´èoÇ∑ Cells(4 + iy, 6) = Intensity 'nsource=15 の場合 Intensity = 0 For i = 0 To nsource3 -‐ 1 p1 = k * Sqr(l ^ 2 + (y -‐ ysource3(i)) ^ 2) For j = 0 To nsource3 -‐ 1 p2 = k * Sqr(l ^ 2 + (y -‐ ysource3(j)) ^ 2) Intensity = Intensity + TAVE(p1, p2) Next Next Cells(4 + iy, 7) = Intensity Next End Sub Function TAVE(p1 As Double, p2 As Double) As Double TAVE = Cos(p1 -‐ p2) / 2 End Function
//////////////////////////////////
題 3のグラフ
問
Code:
Sub PROGRAM03()
‘Declare variables
Const a As Double = 0.1, l As Double = 200, lambda As Double = 0.0005, w As Double = 0.2
‘Nsource is big source/split , 100 small sources in side
Const nsource As Integer = 2, m As Integer = 100
Dim ysource(2 * m -‐ 1) As Double
Const ymax As Double = 5, dy As Double = 0.1
'## ǪÇÃëºåvéZDžǬǩǧÉpÉâÉÅÅ[É^ ##
Dim y As Double
Dim ny As Integer
Dim iy As Integer
0 0.2 0.4 0.6 0.8 1
1.2 1.4 1.6
-‐6 -‐4 -‐2 0 2 4 6
問題3
Dim Intensity As Double
Dim i As Integer, j As Integer, g As Integer
Dim k As Double, p1 As Double, p2 As Double
‘Set up position for the light source ( divided into upper and lower part)
For i = 0 To m -‐ 1
ysource(i) = (a + w) / 2 -‐ w * i / 99
Next
For i = m To 2 * m -‐ 1
ysource(i) = (-‐1) * (a -‐ w) / 2 -‐ w * i / 99
Next
'Calculate wave number k
k = 2 * WorksheetFunction.Pi / lambda
ny = Int((2 * ymax) / dy) + 1
For iy = 1 To ny
y = -‐ymax + (iy -‐ 1) * dy
Intensity = 0
For i = 0 To nsource -‐ 1
p1 = k * Sqr(l ^ 2 + (y -‐ ysource(i)) ^ 2)
For j = 0 To nsource -‐ 1
p2 = k * Sqr(l ^ 2 + (y -‐ ysource(j)) ^ 2)
'Using Tave function to calculate intensity
Intensity = Intensity + TAVE(p1, p2)
Next
Next
' Write data value back to cells
Cells(4 + iy, 1) = y
Cells(4 + iy, 2) = Intensity
Next
End Sub
‘ Function Tave
Function TAVE(p1 As Double, p2 As Double) As Double
TAVE = Cos(p1 -‐ p2) / 2
End Function
4. 解説 (1) 2 重スリット — ヤング (Young) の干渉実験
図 2 のように、レーザー光源から出て 2 つのスリット S1、S2 を通った光がそれぞれ 回折して進み、スクリーン上のある点 P で干渉する場合を考える。このとき l ≫ x であるので、2 つのスリットから点 P までの距離の差 (光路差) l2 − l1 は、次式で与 えられる。
5. まとめ 今回の実験より、プログラミングと干渉について、勉強できた。
参考文献:
1) FrontPage -‐ 慶應義塾大学日吉キャンパス 特色GP 文系学生への実験を重視した自然科学教育 — 光の干渉 http://www.sci.keio.ac.jp/gp/