fortran中的移位点

计算科学 数值分析 正则 计算化学 随机数生成
2021-12-15 11:27:09

您好我正在尝试移动先前在正方形区域中生成的点。我在一些附加条件上遇到了麻烦,它们应该如何被转移。

xt=x(j)+2*rand()*shift - shift
yt=y(j)+2*rand()*shift - shift

我还有更多的条件可以申请:

a) xt<0
b)xt>a
c)yt<0
d)yt>a
d) the distance (x(i)-xt)**2+(y(i)-yt)**2 <1 for i=1,2,...n; i/=j

其中x(i)是一个随机生成的数字,shift是区间 [0.1,1] 中的一个参数。x(j)是再次从x(i)数组中随机生成的数字。y(j)y(i)一样x

我想知道条件是否没有被执行,我应该回到生成xtyt位置,还是有什么其他方法可以解决这个问题?

1个回答

为了应用最后一个条件,我建议您像这样替换这些点:

REAL, PARAMETER :: PI = 3.1415927
...
rt=shift*sqrt(rand())
tt=2.d0*PI*rand()
xt=x(j)+rt*cos(tt)
yt=y(j)+rt*sin(tt)

这里

将新点限制在区间内的最简单快捷的解决方案[0,a]2是施加某种形式的边界条件。例如,周期性边界条件:

if(xt<0) xt=xt+a
else if(xt>a) xt=xt-a
same for yt...

或者您可以将这些点反射回边界:

if(xt<0) xt=-xt
else if(xt>a) xt=2*a-xt
same for yt...