在 3-D 中模拟第一次击球时的布朗运动?

计算科学 模拟 平流扩散 扩散
2021-12-03 16:05:10

我想在以下条件下模拟 3-D 布朗运动:

p(x=0,y=0,z=0,t=0)=1
p(x,y,z=c,t)=0
在哪里p是在 3-D 环境中找到分子的概率。我想在 5 秒内找到吸收壁上某个区域的粒子数。可以推断,吸收边界在z=c,我想要分子撞击中心圆形区域的概率(0,0,2.5×104)有一个半径5×106米。流体环境有漂移,即u,v,w在三个方向。中的粒子x,y,z方向正在移动
dXj(t)=udt+2DdBj(t),dYj(t)=vdt+2DdBj(t),dZj(t)=wdt+2DdBj(t),
在哪里dB是我通过正态随机变量模拟的布朗过程的导数。

我正在使用以下 MATLAB 代码来模拟粒子扩散:

close all; 
clear all;
clc;
TotalNumberReceivedUp=0;
Ts=5;
TotalSimulations1=100000;
flg=0;
for particlesNum=1:TotalSimulations1
flg=flg+1
D=4*10^-9; 
c=250*10^-6;u=5*10^-6;v=2*10^-6;w=3*10^-6; 
e=5*10^-6;
X=zeros;Y=zeros;Z=zeros;
X(1)=0;Y(1)=0;Z(1)=0;
j=1;
for i=5*10^-4:5*10^-4:Ts
t2=i;    
t1=t2-5*10^-4;
j=j+1;
r = normrnd(0,1);
q= normrnd(0,1);
p= normrnd(0,1);
X(j)=X(j-1)+(sqrt(2*D))*sqrt(t2-t1)*p+u*(t2-t1);
Y(j)=Y(j-1)+(sqrt(2*D))*sqrt(t2-t1)*q+v*(t2-t1);
Z(j)=Z(j-1)+(sqrt(2*D))*sqrt(t2-t1)*r+w*(t2-t1);
if ((Z(j)>=c) && ...
    (sqrt((X(j))^2+(Y(j))^2)<=e))
TotalNumberReceivedUp=TotalNumberReceivedUp+1;
break
end
end
end
ProbabilityUp=TotalNumberReceivedUp/TotalSimulations1

但是我的结果并不好,可能撞击的粒子比我通过分析得到的要多。我认为这可能是因为在“模拟扩散过程的四种方法的比较”中讨论过的边界问题,用于具有两个吸收障碍的一维运动。我曾尝试在 3-D 中使用相同的因子,但效果不佳。

1个回答

如果整面墙都在吸水,那么您应该更换:

    if ((Z(j)>=c) && ...
        (sqrt((X(j))^2+(Y(j))^2)<=e))
        TotalNumberReceivedUp=TotalNumberReceivedUp+1;
        break
    end

经过

    if Z(j) >= c
        if sqrt(X(j)^2 + Y(j)^2) <= e
            TotalNumberReceivedUp = TotalNumberReceivedUp + 1;
        end

        break
    end

否则,当前的吸收边界是圆柱体{(x,y,z)R3|x2+y2=e2,zc}.