function randwalk
tic
nn=0;
N=500:500:10000;
for j=N
ra=0;
for i=1:30
ra=ra+walk(i,j);
end
nn=nn+1;
mr(nn)=ra/30;%10次运行平均值
end
plot(N,mr,'ro')
toc
function rr=walk(x,n)
clc;close all;
z=0; % 设置初始数值,这里利用一个复数来表示位置
rand('state',x); % 初始化随机数的状态
%ph=plot(z);hold on; % 绘图
T=1; % 计算时间的参数
z1=1; % 位置的中间变量
ti=title('time = 0','Fontsize',14,'Fontname','Times new roman'); % 在图题处实时显示时间
while T
[dx,dy]=choose_D(0.25,0.25,0.25,0.25); % 随机生成一个位移量
z1=z+[dx+i*dy]; % 更新位置数值
% plot(real([z,z1]),imag([z,z1])); % 连接t时刻和t+1时刻两点绘制线段
z=z1; % 更新z的数值
% set(ti,'String',['time = ',num2str(T)]); % 更新图题处的时间数值
T=T+1; % 时间值更新
%pause(0.01); % 暂停一下,显示动画效果
end
rr=abs(z);
function [dx,dy]=choose_D(p1,p2,p3,p4);
% p1=0.2; % 向左运动的几率
% p2=0.3; % 向上运动的几率
% p3=0.1; % 向右运动的几率
% p4=0.4; % 向下运动的几率
r=rand; % 产生一个随机数
if r
dx=-1; % x方向的随机移动量
dy=0; % y方向的随机移动量
elseif r
dx=0; % x方向的随机移动量
dy=-1; % y方向的随机移动量
elseif r
dx=1; % x方向的随机移动量
dy=0; % y方向的随机移动量
else
dx=0; % x方向的随机移动量
dy=1; % y方向的随机移动量
end