请帮助我了解如何计算在给定时间内随机移动的单个粒子的均方位移。我已经阅读了很多关于此的文章(包括Saxton,1991,单粒子跟踪:扩散系数的分布),但仍然感到困惑(没有得到正确的答案)。
首先让我告诉你我是怎么做的,如果我错了,请纠正我:
我这样做的方式如下:
1.将程序从t = 0运行到t = 100
2.计算位移,(s(t)-s(t + tau)),在每个时间步长(即在t = 1,2,3,... 100)并将其存储在矢量中
3.Square 2号答案
4.找到3的答案的平均值
从本质上讲,这就是我在Matlab中所做的事情
%使用由16个非零晶格点组成的正方形初始化晶格然后按如下方式进行%计算MSD:
for t=1:tend
% Allow the particle to move randomly in the lattice. Then do the following
[row,col]=find(lattice>0);
centroid=mean([row col]);
xvec=[xvec centroid(2)];
yvec=[yvec centroid(1)];
k=length(xvec)-1; % Time
dt=1;
diffx = xvec(1:k) - xvec((1+dt):(k+dt));
diffy = yvec(1:k) - yvec((1+dt):(k+dt));
xsquare = diffx.^2;
ysquare = diffy.^2;
MSD=mean(xsquare+ysquare);
end
我正在尝试找到MSD以计算扩散系数。请注意,我正在建模一个网格点(16)的集合来表示单个粒子(更具生物学真实性),而不仅仅是一个。我对for循环中的评论很简短,因为它很长,但我很高兴将它发送给你。
到目前为止,我的MSD值非常小(在0.001-1范围内),而我应该得到的值在(10-50)范围内。粒子移动距离非常远,所以我的0.001-1范围肯定是不对的!
这是我试图重现他们的文章的文章的摘录:
“我们开始在一维中运行一些模拟 细胞。我们让细胞移动了一定数量的细胞 蒙特卡洛时间步长(MCS),计算出均方 在那个时间旅行的距离,重复这个过程500 时间,并评估此t的均方距离。 然后我们重复这个过程十次以获得平均值 。选择重复的原因是 保持合理运行模拟所需的时间 水平,但确保标准偏差 平均值相对较小(<7%)“ 您可以在此处访问文章“从离散到生物细胞运动的连续模型,2004,Turner等人,物理评论E”。
非常感谢任何提示。
答案 0 :(得分:0)
粒子移动了多少维度?
我现在没有Matlab,但这是我如何在一个方面做到这一点:
% pos is the vector of positions
delta = pos(2:100) - pos(1:99);
meanSquared = mean(delta .* delta);
答案 1 :(得分:0)
首先,为什么粒子会覆盖多个晶格位置?最重要的是MSD的重心是质心的位移,它可以表示为一个点。如果您的粒子(或单元格)很大,或者只需要大步,那么您总是可以制作更宽的网格。此外,如果你试图从其他地方重现一个数字,你应该使用相同的算法。
对于您的蒙特卡罗模拟,您会怎么做?如果您真正想要的是获得位移,您可以一次性生成一组随机运动向量(使用rand
或randi
),并使用cumsum
来计算位置。此外,您是否已绘制随机游走以确保数据合理?
然后,你的代码看起来有点搞笑(见评论)。为什么不直接使用this answer中提供的代码从位置计算MSD?
for t=1:tend
% Allow the particle to move randomly in the lattice. Then do the following
[row,col]=find(lattice>0); %# what do you do this for?
centroid=mean([row col]);
xvec=[xvec centroid(2)];
yvec=[yvec centroid(1)]; %# till here, I have no idea what you want to do
k=length(xvec)-1; % Time %# you should subtract dt here
dt=1; %# dt should depend on t!
diffx = xvec(1:k) - xvec((1+dt):(k+dt));
diffy = yvec(1:k) - yvec((1+dt):(k+dt));
xsquare = diffx.^2;
ysquare = diffy.^2;
MSD=mean(xsquare+ysquare);
end