17
CHIBA UNIVERSITY NANOSCIENCE DEPARTMENT テーマ A 第二日目 氏名 : TANG MINH QUANG 学生番号 : 11T1121Y 実験日 :4 30 提出日 :5 7

VBA

Embed Size (px)

DESCRIPTION

VBA

Citation preview

Page 1: VBA

     

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  

Page 2: VBA

   

 

1. 目的  Microsoft  Office  Excelと VBAを利用し  てプログラミングの基礎を理解すること  

2. はじめに  図のように、距離  a  だけはなれた  2  つのスリットに単一の振動数からなる光

を照射し、距  離  L  だけはなれたスクリーンの位置  y  における光の強度を観測する。  

 

 

Page 3: VBA

   

干渉:  

 図  1(左)  は、左から進んできた平面波が波面と平行な障害物の隙間を通過する様子をイ  メージで描いている。波は隙間を通った後、障害物の背後に回り込んでいる。このような  現象を波の回折といい、回折した波を回折波という。実際には波の波長と隙間の大きさに  よって回折の様子は異なり、光の場合は波長が非常に短いので、ある程度幅の狭いスリッ  トなどを通るときに限り回折現象が顕著にみられる。障害物の隙間が複数あるときには  それぞれの隙間を通って回折した波が重なり合うことになる。図   1(右)  は、2  カ所の隙間   S1、S2  から進んできた波がある点で重なり合う場合を表している。2  つの波は点  P1  で  は山と山、谷と谷が重なっている  (同位相)  ので強めあい、点  P2  では山と谷が重なって  いる  (逆位相)  ので打ち消しあうことになる。このように複数の波が重なり合って振動を  強めあったり打ち消しあったりする現象を波の干渉という。  

 3. 結果  

Comment  は      Eg.  'Calculate  wave  number  k  のように書く  

問題1のグラフ  

Page 4: VBA

   

 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

強度

Page 5: VBA

   

       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    

Page 6: VBA

   

       Next          

End  Sub  

‘  Function  Tave  

Function  TAVE(p1  As  Double,  p2  As  Double)  As  Double  

       TAVE  =  Cos(p1  -­‐  p2)  /  2  

End  Function  

//////////////////////////////////  

問題 2のグラフ  

Page 7: VBA

   

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)  

Page 8: VBA

   

       ‘説明:  ‘問題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)  

Page 9: VBA

   

         '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  の場合  

Page 10: VBA

   

               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のグラフ  

Page 11: VBA

   

問  

 

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  

Page 12: VBA

   

       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  

Page 13: VBA

   

               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  は、次式で与  えられる。  

 

Page 14: VBA

   

                             

Page 15: VBA

   

             

                                                                             

Page 16: VBA

   

 

   5. まとめ  今回の実験より、プログラミングと干渉について、勉強できた。  

Page 17: VBA

   

   

参考文献:  

1) FrontPage  -­‐  慶應義塾大学日吉キャンパス  特色GP  文系学生への実験を重視した自然科学教育 — 光の干渉  http://www.sci.keio.ac.jp/gp/