Labfans是一个针对大学生、工程师和科研工作者的技术社区。 | 论坛首页 | 联系我们(Contact Us) |
![]() |
![]() |
#1 |
高级会员
注册日期: 2019-11-21
帖子: 3,006
声望力: 66 ![]() |
![]()
到目前为止,我已经做到了:
编辑 - - - - - - - - steps=@ (m) 2*randi([0,1],[1,m])-1; Walk1D =@ (n) [0,cumsum(steps(n))]; findend=@ (x) x(end); LastPoint1D=@(n) findend(Walk1D(n)); nsteps=200; nsq=floor(sqrt(nsteps)); MeanSquareDistance1D= @ (n,m) m.*sum((LastPoint1D(n)).^2)./m; r2D=MeanSquareDistance1D(100,1000) data=[ ]; for i=10:20:90 data=[data; i , MeanSquareDistance1D(i,2000)] end 现在唯一的问题是,“数据”的第二列必须给我值 10 30 50 70 90 但不完全是。仅是近似值。例如,“数据”必须为: 10 10.184 30 27.51 50 50.306 70 68.394 90 90.414 这可能是某事不对吗? 回答: 根据您的代码,我想您想计算一维随机游走的均方距离。 滞后tt处的均方距离是沿着tt间隔的随机游走的两个位置之间的均方差。我假设data应该是一个数组,其中第一列是tt ,第二列是对应的均方根距离,并且还有一个附加参数指示随机游走的总步数。 这是我计算data %# define parameters nSteps = 2000; listOfLags = 10:20:90; %# must be 1-by-n vector %# create random walk %# steps can be +1 or -1, add all of them via cumsum randomWalk = cumsum(randi([0 2],nSteps)-1); %# calculate msd for the desired lags %# use a loop for readability nLags = length(listOfLags); data = zeros(nLags,2); data(:,1) = listOfLags; for lag = listOfLags %# lag takes on every lag value, so use logical indexing to find %# which lag (in terms of entry into data) we're currently working on %# This line corresponds to %# 1. get all distances traveled within a duration of `lag` %# vectorOfDistances = randomWalk(lag+1:end) - randomWalk(1:nSteps-lag) %# ie the first element is randomWalk(lag+1)-randomWalk(1) %# 2. square all: (vectorOfDistances).^2 %# 3. average all squared distances data(listOfLags==lag,2) = mean( (randomWalk(lag+1:end) - randomWalk(1:end-lag)).^2); end %# plot the results plot(data(:,1),data(:,2),'.') xlabel('lag'),ylabel('mean squared displacement') 更多&回答... |
![]() |
![]() |