공부하는 북극성
[양자화학, 파이썬] matplotlib를 이용하여 궤도함수 별 가리움 효과를 설명하기 위한 확률 밀도 함수 그래프 그리기 본문
[양자화학, 파이썬] matplotlib를 이용하여 궤도함수 별 가리움 효과를 설명하기 위한 확률 밀도 함수 그래프 그리기
북극성 ✰ 2023. 8. 12. 13:59
0. 들어가며
학생들과 양자역학을 공부하게 되면서 필요한 자료들이 많이 생겼다.
한국어로 검색하면 나오지 않는 그래프들도 많고,
영어로 검색해서 얻어내도 썩 마음에 들지 않는 데다가
서적이나 논문에 있는 자료가 아닌데, 이 자료를 믿으라고 제시하는 것이 썩 꺼림칙해서
직접 주어져있는 수식을 이용하여 그래프나 오비탈의 등가곡선을 구현하여 이해를 도와보고자 했다.
코딩의 ㅋ도 모르는 내가 파이썬을 이용하여 구현할 수 있게 용기를 준 소스는

KMOOC 에서 제공하는 이 강의이다.
교수님께서 설명을 엄청 잘하셔서 정말 1도 모르는 사람도 잘 따라갈 수 있기 때문에 관심 있으면 추천한다.
http://www.kmooc.kr/courses/course-v1:POSTECHk+CHEM101+2021_T1/course/
강좌 | CHEM101 | K-MOOC
www.kmooc.kr
1. 준비해야하는 것
가. 파이썬 설치하기
나. numpy 설치하기
다. matplotlib 설치하기
라. plotly 설치하기
다. matplotlib까지 설치하면 확률 밀도 함수 그래프까지 그릴 수 있고
라. plotly까지 설치하면 오비탈 등가곡면을 그려서 다양한 오비탈 모양을 구현해 줄 수 있다.
2. 내가 그린 확률 밀도 함수
고등학교 교육과정 내에서는 궤도함수의 에너지 준위는 유효 핵전하
가. 주 양자수 에 의한 가리움 효과
주 양자수
(※ 확률을

이렇게 보면 딱히 도움이 되지 않는다.
확대해 보자.

딱히 도움이 되는 것 같지 않다.
이거는 극대값 구하는 거 배우고 나서 ㅎㅎㅎ 적용을 해보겠다.
나. 각운동량 양자수 에 의한 가리움 효과
교과서나 전공서적에서 자주 등장하는 2s 와 2p 궤도함수를 비교하면 다음과 같다.

하지만, 학생들이 d 궤도함수까지 공부하는데, 여기서 멈추기에는 아쉽다.
그래서 s, p, d 궤도함수의 가리움 효과를 비교하기 위하여 주 양자수 n 이 3인 궤도함수의 확률밀도를 비교해 보았다.

다. 4s 궤도함수와 3d 궤도함수의 에너지 준위 역전

여기서 주의해야 할 점은 전자가 발견될 확률이 핵으로부터 가장 가까운 지점에 있는 궤도함수는 덜 가려져있어 유효 핵전하가 크다고 설명하면 된다.
간혹 최대 전자 발견 확률이라고 설명하는 경우가 있는데, 3d의 전자 발견 최대 지점 은 맞지만 4s에서는 맞지 않는다.
확률 밀도의 봉우리 위치를 비교해주어야 한다.
(침투효과로 이야기하기도 함.)
3. 수업시간 활용
이번 학기에 사용할 예정이라 아직 경험이 없지만,
학생들은 중학생 때부터 코딩 공부가 잘 되어 있기 때문에 코드를 보여주고 나눔 하면 금방 이해할 것이라고 생각한다.
수업 시간에 보여줄 때는 Carnets라는 IOS 어플을 이용하여 아이패드에서 구현해서 보여줄 예정이다.
Carnets라는 어플은 주피터 노트북을 모바일에서 쓸 수 있게 해 준다.

4. 코드 공유 (2023.0916. 업데이트)
KMOOC 보며 배운 것에다가 내가 전공서적 뒤져가며 방사파트의 파동함수를 입력한 코드를 공유한다.
코드 내에서 보여주고 싶은 파동함수를 고르고, 그래프 색을 지정하고, 보여줄 축의 범위만 지정하면 된다.
# plot radial wave function
import plotly.graph_objects as go
import matplotlib.pyplot as plt
import numpy as np
r = np.arange(0,50,0.1)
a0 = 0.529 # in A
sig = r/a0
row_1 = 2 * sig
R1s = a0 **(-3/2) * np.exp(-row_1/2) * 2
row_2 = sig
R2s = a0 **(-3/2) * np.exp(-row_2/2) * 8 ** (-1/2) * (2-row_2)
R2p = a0 **(-3/2) * np.exp(-row_2/2) * 24**(-1/2) * row_2
row_3 = (2/3)*sig
R3s = a0 **(-3/2) * np.exp(-row_3/2) * (81*3)**(-1/2) * (6-6*row_3+row_3**2)
R3p = a0**(-3/2) * (16/(81*81*6))**(1/2) * (6*sig - sig**2) * np.exp(-sig/3)
R3d = a0**(-3/2) * np.exp(-row_3/2) * (81*30)**(-1/2) * row_3**2
row_4 = (1/2)*sig
R4s = a0**(-3/2) * np.exp(-row_4/2) * (1/96) * (24-(36*row_4)+12*row_4**2-row_4**3)
#필요한 오비탈 식 앞에서는 #를 지우면 됩니다.
#plt.plot(r,(R1s*r)**2,'b-',label='1s')
#plt.plot(r,(R2s*r)**2,'skyblue',label='2s')
#plt.plot(r,(R2p*r)**2,'r-',label='2p')
plt.plot(sig,a0*(R3s*r)**2,color='#1f77b4',label='3s')
plt.plot(sig,a0*(R3p*r)**2,color='#e35f62',label='3p')
plt.plot(sig,a0*(R3d*r)**2,color='#ff7f0e',label='3d')
#plt.plot(r,(R4s*r)**2,'violet',label='4s')
plt.legend()
#축 눈금 범위입니다.
plt.ylim(0,0.115)
plt.xlim(0,20)
#축 이름이에요. 수식으로 써서 이렇게 나타나져있습니다. 문자로 쓰시려먼 괄호 안에 "" 치고 쓰시면 됩니다.
plt.ylabel(r'$r^2*{R(r)}^2$')
plt.xlabel(r'$r/{a_0}$')
#plt.xlabel("r in Å")
plt.grid()
plt.plot()
#아래는 그림이 저장되게 하는 코드입니다. 필요없다면 앞에 # 처리해주세요.
plt.savefig('n이 3인 s,p,d 오비탈.png')
plt.show()
5. 파일 나눔
주피터 노트북에서 작성한 코드(2023.09.16. 업데이트)
나가며
일단 극대값 구하여 표시하는 것을 알게 되면 업데이트할 예정.
수업 시간에 쓰고 나면 경험 나눔도 할 예정.
다음은 오비탈 등가곡면 구현하는 것을 공유해보고자 한다.
모두에게 도움이 되길.
'나누는 삶 > 수업자료' 카테고리의 다른 글
[양자화학, 파이썬] matplotlib를 이용하여 수소원자의 선 스펙트럼 그리기(라이먼, 발머, 파셴) (0) | 2023.09.11 |
---|---|
[학생실험] 온도에 따른 황산구리(Ⅱ) 수용액의 전기분해 속도 (0) | 2023.09.03 |
<중3 과학> 귀의 구조, 코의 구조, 혀의 구조, 피부의 구조/감각기관의 구조/귀의 구조 수업활동 예시 (8) | 2021.09.06 |
<중2 과학> 2단원 전기와 자기 수업지도안/전기력/정전기유도/번개의원리 (1) | 2021.08.22 |
<중2과학> 전기와 자기, 마찰전기/대전/정전기유도/원자모형 수업자료, 과학에서의 모형과 이미지화 (22) | 2021.08.19 |