气体压强的产生(图形动画)

气体的压强是大量分子的对器壁的碰撞产生的,求证:压强的公式为

\[p = \frac{1}{3}nm{\bar v^2}\]

其中,m是分子的质量,n是分子数密度,\({\bar v^2}\)是速度平方的平均值。进而求证:分子的平均平动动能为

\[{\bar \varepsilon _k} = \frac{3}{2}kT\]

不考虑分子之间的碰撞,演示分子运动的动画。

证明

一个分子对器壁的碰撞是断续的,它什么时候与器壁发生碰撞,在什么地方发生碰撞,给器壁施加了多大的冲量都是偶然的。但是大量分子时时刻刻与器壁碰撞,在宏观上就产生持续的压力,单位面积上的压力就是压强。

图1如图1所示,取垂直于容器壁指向外侧的方向为x轴正向,设容器中理想气体分子的质量为m,某分子的速度为vi,三个分量分别为vixviyviz。由于碰撞是完全弹性的,所以碰撞前后yz方向的速度分量保持不变,x方向的速度分量由vix变为-vix。根据动量定理,分子所受器壁的冲量为-mvix - (mvix) = -2mvix。根据牛顿第三定律,分子施加给器壁的冲量为

\[{I_i} = 2m{v_{ix}}\]

如图2所示,在容器壁上取一面积元dA,在一段时间间隔dt内,分子恰好与器壁发生碰撞时运动的距离为dli = vixdt

图2

这个距离和面积元形成的柱体的体积为

\[d{V_i} = {\rm{ }}d{l_i}dA = {v_{ix}}dtdA\]

在所有以速度vi运动的分子中,只有位于柱体内的分子才能与器壁发生碰撞。单位体积内以速度vi运动的分子数为ni,所以柱体内这种分子数为

\[d{N_i} = {n_i}d{V_i} = {n_i}{v_{ix}}dtdA\]

这些分子施加给器壁的冲量为

\[d{I_i} = {\rm{ }}2m{v_{ix}}d{N_i} = 2m{n_i}{v_{ix}}^2dtdA\]

对所有速度求和即可求得所有分子施加给面积元的总冲量dI。但是速度条件限制为vix > 0,这是因为vix < 0的分子背离dA运动,在dt时间内不会与dA发生碰撞。可得

\[dI = \sum\limits_{_{i({v_{ix}} > 0)}} {d{I_i} = \sum\limits_{_{i({v_{ix}} > 0)}} {2m{n_i}v_{ix}^2dAdt} } {\rm{ }}\]

当气体处于平衡态时,气体分子朝x轴正向和负向运动的机会均等,平均来说,vix > 0和vix < 0的分子各占一半。

因此,将上式右边除以2就可以取消速度限制

\[dI = \sum\limits_i {m{n_i}v_{ix}^2dAdt} \]

这就是一群分子施加给器壁的冲量。根据冲量的定义可得气体施加给器壁的压力为dI/dt,所产生的压强为

\[p = \frac{{dI}}{{dtdA}} = m\sum\limits_i {{n_i}v_{ix}^2} \]

气体处于平衡态时,x方向速度平方的平均值为

\[\overline {v_x^2} = \frac{{\sum\limits_i {{n_i}v_{ix}^2} }}{n}\]

由于

\[\overline {v_x^2} + \overline {v_y^2} + \overline {v_z^2} = \overline {{v^2}} \]

所以

\[\overline {v_x^2} = \frac{{\overline {{v^2}} }}{3}\]

从而证得

\[p = nm\overline {v_x^2} = \frac{1}{3}nm\overline {{v^2}} \]

可见:气体分子的质量越大,速度平方的平均值越大,单位体积内分子的个数越多,气体产生的压强就越大。从公式的推导过程可知:压强是大量分子集体行为的宏观表现,是一个统计结果,单个分子不存在压强的概念。

根据阿伏伽德罗定律p=nkT,联立上式可得

\[\sqrt {\overline {{v^2}} } = \sqrt {\frac{{3kT}}{m}} \]

这是方均根速率。分子的平均平动动能为

\[\overline {{\varepsilon _k}} = \frac{1}{2}m\overline {{v^2}} = \frac{3}{2}kT\]

结果说明:大量分子的平均平动动能与绝对温度成正比,与气体种类无关。气体的温度是大量气体分子平均平动动能的量度,是大量分子无规则热运动的集体表现,具有统计的意义,单个分子或少数几个分子是没有温度概念的。这就是温度的微观实质。

图示

在一个平面上取1000个分子,初始状态如图3所示,箭杆表示分子运动的方向和相对大小,但是第一个分子例外,其箭杆特别长。当分子运动时,箭杆指示了第一个分子的运动方向。分子运动有快有慢,每时每刻都有分子与器壁发生碰撞,从而产生持续的压强。注意:由于不考虑分子的碰撞,而分子与器壁的碰撞是弹性的,因此一个分子的速率在运动中是不变的。实际上,分子之间存在着频繁的碰撞,正是通过分子间的碰撞,能量才能按自由度均分。

气体压强的产生

算法

按均匀分布随机产生分子的坐标,按正态分布随机产生分子的速度。不考虑分子之间的碰撞,分子在与器壁发生碰撞前做匀速直线运动。设分子速度为vxvy,经过时间Δt,发生的位移分别为Δx=vxΔt和Δy=vyΔ。设分子的初始坐标为(x0,y0),经过时间Δt的坐标分别为xt=x0xyt=y0y

图4如图4所示,当分子与右壁发生碰撞时,横坐标为xm,纵坐标为

\[y = {y_0} + \frac{{\Delta y}}{{\Delta x}}({x_m} - {x_0})\]

取(xm,y)为新的起点,碰撞后速度vx的方向发生改变,位移为

Δx′=-[Δx – (xmx0)],Δy′=-[Δy – (yy0)]

从而可确定碰撞后的坐标:xi=xmx′,yi=yy′。

当分子与左壁(上壁或下壁)发生碰撞时,同样可求得碰撞点的坐标和碰撞后的坐标。

分子的个数是可调节的参数。

程序

%气体分子运动的动画(不考虑分子之间的碰撞)
clear                                  %清除变量
n=input('请输入分子个数:');            %键盘输入分子个数
%n=1000;                                %不加箭杆时分子个数参考值
%n=50;                                 %加箭杆时分子个数参考值
rand('state',0)                        %均匀分布随机数初始化
randn('state',0)                       %正态分布随机数初始化
xm=1.4e-6;                             %横坐标范围
ym=1e-6;                               %纵坐标范围
x0=xm*(2*rand(1,n)-1);                 %分子初始横坐标
y0=ym*(2*rand(1,n)-1);                 %分子初始纵坐标
figure                                 %创建图形窗口
plot([-1,1,1,-1,-1]*xm,[-1,-1,1,1,-1]*ym,'LineWidth',3)%画器壁
axis equal off                         %使纵横坐标间隔相等
axis([-xm,xm,-ym,ym])                  %设置坐标范围
title('气体分子与器壁的碰撞(不考虑分子间的碰撞)','FontSize',16)%标题
text(xm,ym,['\itN\rm=',num2str(n)],'FontSize',12)%显示粒子数
vx=randn(1,n);                         %分子x速度
vy=randn(1,n);                         %分子y速度
hold on                                %保持图像
for i=1:n                              %按分子循环
    h(i)=plot(x0(i),y0(i),'.','MarkerSize',15,'Color',rand(1,3));%画点并取句柄
%    hh(i)=quiver(x0(i),y0(i),vx(i),vy(i),1e-7);%画分子的箭杆取句柄
end                                    %结束循环
hh=quiver(x0,y0,vx,vy);                %画所有分子的箭杆取句柄
h1=quiver(x0(1),y0(1),vx(1),vy(1),1e-6);%画第一个分子的箭杆取句柄
dt=1e-7;                               %时间间隔
pause                                  %暂停
set(hh,'UData',zeros(1,n),'VData',zeros(1,n))%去箭杆
%while 1                                %无限循环
%    if get(gcf,'CurrentCharacter')==char(27) break,end%按ESC键结束
while get(gcf,'CurrentCharacter')~=char(27)%不按ESC键循环
    for i=1:n                          %按分子循环
        xx=x0(i);                      %取横坐标
        yy=y0(i);                      %取纵坐标
        dx=vx(i)*dt;                   %取横位移
        dy=vy(i)*dt;                   %取纵位移
        if xx+dx>xm                    %如果超过右边界
            y=yy+dy/dx*(xm-xx);        %计算与右壁碰撞的纵坐标
            set(h(i),'XData',xm,'YData',y)%设置点的坐标
            x0(i)=xm;                  %右壁横坐标
            y0(i)=y;                   %右壁纵坐标
            dx=-(dx-(xm-xx));          %反弹横位移
            dy=dy-(y-yy);              %反弹纵位移
            vx(i)=-vx(i);              %速度反向
        end                            %结束条件
        if xx+dx<-xm                   %如果超过左边界
            y=yy+dy/dx*(-xm-xx);       %计算与左壁碰撞的纵坐标
            set(h(i),'XData',-xm,'YData',y)%设置点的坐标
            x0(i)=-xm;                 %左壁横坐标
            y0(i)=y;                   %左壁纵坐标
            dx=-(dx-(-xm-xx));         %反弹横位移
            dy=dy-(y-yy);              %反弹纵位移
            vx(i)=-vx(i);              %速度反向
        end                            %结束条件
        if yy+dy>ym                    %如果超过上边界
            x=xx+dx/dy*(ym-yy);        %计算与上壁碰撞的横坐标
            set(h(i),'XData',x,'YData',ym)%设置点的坐标
            x0(i)=x;                   %上壁横坐标
            y0(i)=ym;                  %上壁纵坐标
            dx=dx-(x-xx);              %反弹横位移
            dy=-(dy-(ym-yy));          %反弹纵位移
            vy(i)=-vy(i);              %速度反向
        end                            %结束条件
        if yy+dy<-ym                   %如果超过下边界
            x=xx+dx/dy*(-ym-yy);       %计算与下壁碰撞的横坐标
            set(h(i),'XData',x,'YData',-ym)%设置点的坐标
            x0(i)=x;                   %下壁横坐标
            y0(i)=-ym;                 %下壁纵坐标
            dx=dx-(x-xx);              %反弹横位移
            dy=-(dy-(-ym-yy));         %反弹纵位移
            vy(i)=-vy(i);              %速度反向
        end                            %结束条件
        x0(i)=x0(i)+dx;                %新的起点横坐标
        y0(i)=y0(i)+dy;                %新的起点纵坐标
        set(h(i),'XData',x0(i),'YData',y0(i))%设置点的坐标
%        set(hh(i),'XData',x0(i),'YData',y0(i),'UData',vx(i),'VData',vy(i))%设置箭杆
    end                                %结束循环
    set(h1,'XData',x0(1),'YData',y0(1),'UData',vx(1),'VData',vy(1))%设置第一个分子的箭杆
    drawnow                            %刷新屏幕
end                                    %结束循环
quiver(x0,y0,vx,vy);                   %画所有分子的箭杆

说明

(1)程序执行时从键盘输入分子个数,例如1000。

(2)将正态分布随机数和均匀分布随机数初始化之后,可重复相同的运动,否则可演示不同的运动。

(3)分子的坐标是随机选取的。

(4)分子的速度也是随机选取的。

(5)用随机点表示分子,分子的颜色也是随机选取的。

(6)用箭杆表示分子速度的方向。

(7)第一个分子的箭杆单独画出来。如果要演示所有分子运动的方向,句柄要取在循环中,此句改为

hh(i)=quiver(x0(i),y0(i),vx(i),vy(i),le – 6);

(8)在显示分子初始状态后,按回车键就演示分子的运动。

(9)将分子箭杆的长度设置为零就消除了箭杆。

(10)设置分子的坐标就演示分子的运动。

(11)设置第一个分子的箭杆,可指示第一个分子的运动方向。如果要显示所有分子的速度方向,此句要放在循环中

set(hh(i),'Xdata’,x0(i),'YData', y0(i),'UData',vx(i),’VData',vy(i))

但是,如果分子数很多,分子运动就显得太慢。

(12)用简单的方法画第一个分子的轨迹,轨迹在分子与墙碰撞前有一点断裂。

(13)最后用箭杆表示分子运动的方向。

文件下载(已下载 16 次)

发布时间:2019/5/21 12:17:07  阅读次数:3685

2006 - 2024,推荐分辨率1024*768以上,推荐浏览器Chrome、Edge等现代浏览器,截止2021年12月5日的访问次数:1872万9823 站长邮箱

沪ICP备18037240号-1

沪公网安备 31011002002865号