import numpy as np
import matplotlib.pyplot as plt
from scipy import constants as const
import random
'''
分子在重力场中的分布
h=0处的分子密度为n0,任一高度h处的分子数密度
n = n0 * math.exp(-u*g*h/kT)
u是分子重量,T是温度
这里把kT用T用一个参数T来表示
'''
#为便于表示,参数设置与实际不符
T = 30
u1 = 0.01 #第一种粒子
u2 = 0.1 #第二种粒子
g = const.g
n0 = 10
#最初两种粒子分别设置100个随机的,python自带的random一次只能生成一个,用np的
data1_x = np.random.randint(0,50,100)#范围内的整数
data1_y = np.random.randint(0,60,100)
data2_x = np.random.randint(0,50,100)
data2_y = np.random.randint(0,60,100)
fix, ax = plt.subplots(nrows=2,ncols=1)
#随机分布
ax[0].set_title("Random")
dots1 = ax[0].plot([data1_x],[data1_y],'bo')
dots2 = ax[0].plot([data2_x],[data2_y],'ro')
#气体分子在重力场分布
h = np.linspace(0,60,20)
data1_g_n = n0 * np.exp(-u1*g*h/T)
data2_g_n = n0 * np.exp(-u2*g*h/T) #计算出粒子在每个高度上的数量,接下来按数量在横坐标上随机分布就好
print(data1_g_n)
print(data2_g_n)
data1_g_x = []
data1_g_y = []
data2_g_x = []
data2_g_y = []
for i in range(0,20):
#注意extend和append
for j in range(len(data1_g_n)):
x = random.uniform(0, 50)
data1_g_x.append(x)
for j in range(len(data2_g_n)):
data2_g_x.append(random.uniform(0, 50))
data1_g_y.extend([3 * i] * int(data1_g_n[i]))
data2_g_y.extend(([3 * i] * int(data2_g_n[i])))
ax[1].set_title("Distribution in gravity field")
ax[1].set_ylabel('High')
dots1_g = ax[1].plot([data1_g_x],[data1_g_y],'bo',label='Weight=0.01')
dots2_g = ax[1].plot([data2_g_x],[data2_g_y],'ro',label='Weight=0.1')
plt.savefig('aa.jpg')
plt.show()
图中上子图是随机分布的粒子, 下子图是重力场分布的粒子,粒子在底部分布较多,其中红色粒子重量是蓝色粒子的10倍,看起来更直观。
将温度设置为100再看图,发现粒子的分布明显发生了变化,高处粒子多了起来。