이번 포스팅에서는 위도에 따른 만유인력, 원심력, 표준중력의 변화를 파이썬을 활용해 그래프로 나타내는 방법을 알아보고자 합니다. 이와 관련하여 이미 많은 그래프가 나와 있지만, 이를 구체적인 과정을 통해 수학적으로 계산하고 그래프로 표현하는 방법은 없는것 같습니다.
코드 자체는 전혀 어렵지 않으나, 계산과정이 다소 더럽습니다.ㅋ 그래서 잘 보셔야 합니다.
1. 위도별 만유인력과 원심력의 변화
적도에서 극지방으로 갈 수록, 지구 반지름과 중심축으로부터의 회전반지름이 모두 감소합니다. 따라서 만유인력은 증가하고 원심력은 감소합니다. 이를 그래프로 표현해 보면, 아래와 같은 전체 코드가 필요한데요, 여기서는 for문을 사용하지 않고 numpy만을 이용하여 그래프를 그려볼 것입니다.
numpy라는 라이브러리는 행렬 데이터를 처리하는데 많이 사용됩니다. 그래서 numpy를 이용해 데이터를 불러오면, 행렬을 표현하기 위한 리스트형 데이터를 생성합니다. 따라서 궂이 for문을 사용하지 않고서도 여러가지 데이터를 한번에 처리할 수 있습니다.
우선 아래 전체코드를 보시고, 이 중 좀 자세히 봐야하는 부분에 대해서만 설명하겠습니다. 코드의 중요한 내용을 ##으로 주석을 달아 표시해 두었습니다.
##위도별 만유인력 원심력 변화
import numpy as np
from matplotlib import pyplot as plt
from math import pi
#import math
a=6378.135 #지구 적도 반지름
b=6356.75 #지구 극 반지름
lat=np.arange(0,90.1,0.1) # 위도
posx=a*np.cos(2*pi*lat/360) ##타원 x값
posy=b*np.sin(2*pi*lat/360) ##타원 y값
line=((posx-0)**2+(posy-0)**2)**0.5 ##posx,posy에서 계산한 값을 기준으로 위도별 지구 반지름 계산
R=line*np.cos(2*pi*lat/360) ## 위도별 지구 회전 반지름 계산
velocity=np.cos(2*pi*lat/360)*R*1000/(24*60*60) ## 위도별 회전선속도 계산
cen=velocity**2/(R*1000) ##위도별 원심력 계산
univgrav=6.67*10**(-11)*5.9742*10**(24)/(line*1000)**2 ##위도별 만유인력계산
#print(g)
fig,ax1 = plt.subplots()
plt.xlabel('latitude(deg)')
plt.grid(linestyle='--')
ax1.plot(lat,univgrav,c='green',label='universal gravitation')
plt.ylabel('universal gravitation(kg·m/$s^{2}$)')
ax2 = ax1.twinx()
ax2.plot(lat,cen,c='red', label='centrifugal force')
plt.ylabel('centrifugal force(kg·m/$s^{2}$)')
ax1.legend(bbox_to_anchor=(0.53, -0.15))
ax2.legend(bbox_to_anchor=(0.94,-0.15))
plt.xlim(0,90)
plt.tight_layout()
plt.savefig("C:\\111\\univ_cen_vs_lat.jpg",dpi=300)
plt.show()
1) lat=np.arange(0,90.1,0.1) 이라는 명령어로 0도에서 90도까지의 위도를 0.1까지 1차원 행렬로 불러오도록 하였습니다.
2) posx와 posy라는 변수를 통해, 위도별 반지름을 계산하기 위한 변수를 만들었습니다. 이렇게 변수에 수식을 집어넣으면, 해당 위도에 대한 타원의 점이 찍힙니다. 그럼 이걸 (0,0)에서부터 선의 길이를 재서 반지름을 계산할 것입니다.
3) 그 반지름을 계산하는 과정을 line이라는 변수에 넣었습니다. 피타고라스의 정리를 그대로 사용하였습니다.
4) R이라는 변수에 지정한 것은 해당 위도에서 중심축으로부터의 회전 반지름을 계산하기 위한것입니다. 그러니까 해당 위도에서 수평방향으로 중심축까지의 거리입니다. 원심력을 계산할 때 반드시 필요합니다.
5) velocity에는 해당위도에서 지구 자전에 의한 선속도를 계산하는 과정입니다. 마찬가지로 원심력을 계산할 때 반드시 필요합니다. 수식에 1000을 곱한 것은, 맨 처음 지구 장반경과 단반경 단위를 km로 하는 값으로 넣어서 계산과정에서 이를 m로 바꾸기 위함입니다.
6) cen이라는 변수에 원심력을 계산하는 과정을 집어 넣었고,
7) univgrav에는 만유인력을 계산하는 과정을 넣었습니다. 원심력이나 만유인력 모두 단위질량을 기준으로 하였습니다.
8) fig, ax1 부터는 그래프를 그리는 과정인데, 여기서 주목!!!
원심력과 만유인력은 같은 단위(kgm/s^2)를 사용하지만, 스케일이 너무 다릅니다. 만유인력은 9.8 정도이고, 원심력은 0.0008 수준으로, 만유인력에 비해 너무 작습니다. 그래서 두 물리량을 표현하는 y축의 범위를 같게 하면 원심력이 거의 일정한 형태로 그래프가 표현되 버립니다. 그래서 스케일이 다른 y축 그래프 2개를 그려야 합니다.
fig, ax1=plt.subplots()라고 하면서 그래프 2개를 동시에 그릴 때 일반적으로 많이 쓰는 코드를 넣었고,
ax1.plot(lat,univgrav)라고 하여 위도별 만유인력이 그려지도록 하였습니다.
그리고 ax2=ax1.twinx() 이놈이 또 중요한데, x축은 공유하며 y축이 다른 그래프를 그려라 라는 명령어라고 생각하시면 됩니다.
이렇게 하고, ax2.plot(lat, cen)이라고 하면 이제 x축은 공유하며 y축이 서로 다른 그래프를 그릴 수 있게 됩니다.
나머지는 단순히 그래프를 꾸미는 과정이니 설명은 생략하겠습니다.
다만, 여기서 범례(legend)를 자동 생성으로 해 두면, 이상한 위치에 잡힙니다. 그래서 저는 범례를 그래프 밖으로 빼기 위해 저리 하였습니다. 코드를 보시면,
ax1.legend(bbox_to_anchor=(x축위치,y축위치)
이렇게 되 있습니다. 저 숫자를 이리저리 집어넣어보시면, 범례의 위치가 달라지는것을 확인하실 수 있을 것입니다.
plt.tight_layout()의 경우 저는 범례를 아래쪽에 위치하게 잡았는데, 이러면 범례가 잘립니다. 그래서 저렇게 코드를 쳐 놓으면 알아서 범례에 꽉 맞춰서 그래프를 만들어 줍니다.
이렇게 하여 완성된 그래프는
교과서나 참고서에서 흔히들 많이 본 그래프가 똭 튀어나왔습니다. 물론 x, y축을 영어로 썼는데, 한글로 쓰는 코드 치는게 귀찮아 그냥 영어로 하였습니다.ㅎㅎㅎ
보시면 아시겠지만, 만유인력에 비해 원심력은 정말 무지하게 작습니다.
2. 위도별 표준중력의 변화
##위도별 표준중력
import numpy as np
from matplotlib import pyplot as plt
from math import pi
import math
lat=np.arange(0,90.1,0.1)
grav=978.0328*(1+0.005278895*(np.sin(2*pi*lat/360))**2+0.000023462*(np.sin(2*pi*lat/360)**2))/100
plt.grid(linestyle='--')
plt.plot(lat,grav,color='red')
plt.xlim(0,90)
plt.ylim(9.78,9.835)
plt.xlabel('latitude(deg)')
plt.ylabel('standard gravity(kg·m/$s^{2}$)')
plt.tight_layout()
plt.savefig("C:\\111\\grav_vs_lat.jpg",dpi=300)
plt.show()
위도별 표준중력의 변화는 내용이 굉장히 쉽습니다. 그러니 코드를 따로 설명하지는 않겠습니다.
아래 첨부파일로 전체 코드를 다운받아 쓰실수 있게 올려 두겠습니다. 필요하신 분은 다운받아 쓰세요.
'파이썬으로 배우는 지구과학' 카테고리의 다른 글
파이썬을 이용하여 크기가 같은 곳 선으로 잇기(countour line 그리기) (0) | 2022.09.22 |
---|---|
파이썬을 이용하여 허셜 우주망원경의 적외선 관측 데이터 분석하기 (4) | 2022.09.02 |
파이썬의 막대 그래프를 이용하여 월별 황사 발생 일수 알아보기 (0) | 2022.07.27 |
파이썬을 이용하여 타원 방정식 그래프 그리기 (0) | 2022.07.02 |
파이썬을 이용하여 위도별 지구 반지름 계산하기 (0) | 2022.06.27 |
댓글