二维有限格点上的随机行走

对于一个10x10的网格,从网格的中心出发,向四个方向行进的概率都是1/4,如果行走过程中遇到边界(撞到墙了),那么拒绝这一步行走。那么最终得到的分布是不是均匀分布呢?从结果上来最终得到的是均匀分布。我们可以用Metroplis抽样来解释。首先抽样过程中满足细致平衡,因为我们在撞墙的时候进行了REJECT,算法中隐含的Markov转移矩阵显然也是各态遍历的,所以最终得到均匀分布并不奇怪。

% random_walk bounded 001
% 2 dimensional random walk on a 100x100 lattice

fprintf(‘Random walk on a bounded lattice\n‘);

% lattice size
lsize = 10;
lattice = zeros(lsize);
fprintf(‘Lattice size = %d\n‘, lsize);

% number of random walks
maxn = 1000000;
fprintf(‘Number of random walks = %d\n‘, maxn);

% start from the center
x0 = floor(lsize/2);
y0 = floor(lsize/2);
for i=1:maxn
    x1 = x0 + randi(2)*2-3;
    y1 = y0 + randi(2)*2-3;
    if x1<=0
        x1 = 1;
    end
    if x1>lsize
        x1 = lsize;
    end
    if y1<=0
        y1 = 1;
    end
    if y1>lsize
        y1 = lsize;
    end
    lattice(x1, y1) = lattice(x1,y1) + 1;
    x0 = x1;
    y0 = y1;
end
mean_value = mean(reshape(lattice, [lsize*lsize,1]));
std_value = std(reshape(lattice, [lsize*lsize,1]));
fprintf(‘Mean = %f std = %g\n‘, mean_value, std_value);
fprintf(‘Std/mean = %f\n‘, std_value/mean_value);

部分输出结果

>> rand_walk_bounded
Random walk on a bounded lattice
Lattice size = 10
Number of random walks = 1000000
Mean = 10000.000000 std = 117.798
Std/mean = 0.011780

笨手笨脚地画了一个概率分布图(无视花花绿绿的颜色,我不清楚怎么弄下去@[email protected]),注意Z轴的标度。

时间: 2024-08-05 15:25:50

二维有限格点上的随机行走的相关文章

Java生成二维码并用FastDFS上传到文件服务器返回图片地址

1. maven依赖 <dependency> <groupId>com.google.zxing</groupId> <artifactId>core</artifactId> <version>3.1.0</version> </dependency> <dependency> <groupId>commons-codec</groupId> <artifactId

微信小程序获取二维码(直接上代码)https://api.weixin.qq.com/cgi-bin/wxaapp/createwxaqrcode?access_token=ACCESS_TOKEN

应为是直接返回二进制数据所有与其他接口些许差别,希望能帮助现在的你! 谢谢!!!    /** * 37.微信二维码生成 */ public String getWeiXinCourseMap() { String courseId = StringUtils.defaultString(getPara("courseId")); String codeUrl = ""; String path = "你的二维码指向路径(可以拼接参数)"; tr

数组(随机生成一维数组),二维数组的概念和题目设计(利用二维数组 :任意给定分数去计算科目和人均平均分)

1 //数组间的关系arr[]中的数字为几,[]内就有几个数 2 //{ }内的数是从0开始,如需要打印应从0开数 3 如{2,6,9,8,7}打印arr[4]就是7 4 #include <stdio.h> 5 #include <stdlib.h> 6 int main() 7 { 8 int arr[] = { 1,2,3,4,8}; 9 10 printf("%d\n", arr[3]); 11 12 system("pause");

通过二维码上传手机文件到服务器

Hello,大家好.这是我的第一篇博客,给大家分享下手机扫码上传图片到服务器实现手机pc同步. 1.自动生成二维码--> 可以去二维码生成工具网站获取api也可以直接用这个:http://qr.topscan.com/api.php?text= ? 注意:问号代表二维码访问的路径如果后面跟www.baidu.com就会跳转百度 2.这里写了个h5页面用于手机扫一扫上传文件跳转 <!DOCTYPE html> <html lang="en"> <hea

蘑菇街网站的扫二维码登录是怎么做到的?

蘑菇街网站的扫二维码登录是怎么做到的? http://mp.weixin.qq.com/qa/index.php?qa=15867&qa_1=%E8%98%91%E8%8F%87%E8%A1%97%E7%BD%91%E7%AB%99%E7%9A%84%E6%89%AB%E4%BA%8C%E7%BB%B4%E7%A0%81%E7%99%BB%E5%BD%95%E6%98%AF%E6%80%8E%E4%B9%88%E5%81%9A%E5%88%B0%E7%9A%84%EF%BC%9F 想做一个类同蘑

扫二维码关注服务号同时发现金红包

本文只是记录一下自己最近开发的一个小功能,方便以后查看. 一.需求原文如下: 1.vip微信参数配置 1)是否启用 2)设置每单最大红包金额    (例如5 ) 3)设置各类别 红包金额范围 钻石    3-5 黄金    2-3  等等 2.质量保证单 打印二维码 参数传销售门店 以及销售单号 客户扫码 1)自动关注服务号 2)自动匹配客户档案 openid 匹配到档案的增加积分以及总积分 , 未匹配到档案的  客户填写  姓名,手机号 如果手机号匹配到记录  自动将客户档案关联上 手机号也未

实验九:二维数组和字符数组的应用

知识点: 二维数组的定义及引用:1.二维数组的定义: 二维数组的定义形式:类型名   数组名[行长度][列长度]:例如:        int  a[3][2]:        定义1个二维数组a,3行2列,6个元素: int   b[5][10]:        定义1个二维数组a,5行10列,50个元素: 二维数组的引用:行下标的范围:0~行长度-1:                        列下表的范围:0~列长度-1: 字符串的存储和运算可以用一维字符数组实现: 一维字符数组的定义

【学习笔记】【C语言】二维数组

1. 什么是二维数组 一个数组能表示一个班人的年龄,如果想表示很多班呢? 什么是二维数组?int ages[3][10]; 三个班,每个班10个人 相当于3行10列 相当于装着3个一维数组 二维数组是一个特殊的一维数组:它的元素是一维数组.例如int a[2][3]可以看作由一维数组a[0]和一维数组a[1]组成,这两个一维数组都包含了3个int类型的元素 2.二维数组的定义 二维数组定义的一般形式是:     类型说明符 数组名[常量表达式1][常量表达式2] 其中常量表达式1表示第一维下标的

二维数组的输出--(指针输出 和 指针数组输出)

当我第一次看见数组指针和指针数组这两个名字的时候,我以为是一个东西呢,当看到英文解释就知道这两个是不一样的了. 指针数组:array of pointers,用于存储指针的数组,也就是数组元素都是指针 数组指针:a pointer to an array,指向数组的指针,数组可以是任意维的 下面举例说明: int a[3][4]   --->这个无需多说,就是一个二维数组. int (*p)[4]   --->就相当于int p[][4],它是一个二维数组的指针,可以指向一个第二维度为4的二维