matlab 产生任意概率密度的联合分布
用Slice sampling 来得到某单个分布的样本算法:
已知分布f(x)
1. 选择一个初始点,x0.
2. 在[0,f(x0)] 之间,通过均分分布产生一个采样y
3. 在 f(x) 上画一条通过 y的 水平线
4. 在线段内再次均匀采样得到一个点x ,此x就是此次迭代得到的新采样点。
5. 最后用新得的x作为初始值,重复step 2~step5
Y截得f(x)两点(L,R) ,称为f(x)的切片,经过不断迭代,得到很多切片,其中,切片的长度越长,被选取到的概率越大。
难点在于:对于多峰函数,切片所在的边界往往是不连续的,解决方法是拒绝更短的切片。
Matlab 程序1,生成单个拉普拉斯分布的采样
%%
laplaceDis1=@(y)exp(-abs(y))/2; % mu=0,b=1的拉斯分布
N=2000; %产生N个采样点
x = slicesample(1,N,'pdf',laplaceDis1,'thin',5,'burnin',1000);%thin, burn-in 具体设置看介绍
histogram(x,50); %显示采样点的直方图
如图:
%%matlab 程序2
%% 生成拉普拉斯分布的联合分布,每个随机变量成分都是独立的(方便演示)
% 类似Gibbs 多变量采样的方法,对某个确定的x1,在条件概率密度下P(x2|x1)得到x2的采样,然后对此x2,得到P(x1|x2)的一个采样
% 由于此处x1,x2独立,p(x2|x1)=p(x2),且slicesampling 得到的对概率密度积分和是否为1没有关联,所以可以直接生成联合分布
laplaceDis1=@(y)exp(-abs(y))/2; %mu=0,b=1的拉普拉斯分布
laplaceDis2=@(y)exp(-sqrt(2)*abs(y-2))/sqrt(2);%mu=2,b=1/sqrt(2) 拉普拉斯分布
limitL=-5; % 概率密度函数左边界
limitR=5;
x=zeros(N,2);
for i=1:N
start=unifrnd(limitL,limitR,1,2); %均布产生一个初值
x(i,1)=slicesample(start(1),1,'pdf',laplaceDis1);
x(i,2)=slicesample(start(2),1,'pdf',laplaceDis2);
end
figure
plot(x(:,1),x(:,2),'ro');
如图:
matlab 产生任意概率密度的联合分布相关推荐
- plotcylinder matlab,Matlab在任意两点之间绘制三维圆柱
Matlab在任意两点之间绘制三维圆柱 Matlab在任意两点之间绘制三维圆柱 此函数可能存在一些不足,请多多指教! function plotcylinder(u1,u2,color_a,r) L= ...
- Matlab代码生成任意边长等间距正六边形采样点
Matlab代码生成任意边长等间距正六边形采样点 https://blog.csdn.net/Hanghang_/article/details/87064184 本文以n代表正六边形在x轴正轴上的长 ...
- matlab 绘制任意方向和位置的空间圆锥体
matlab 绘制任意方向和位置的空间圆锥体 function cone3(X1,X2,r,color) %一个简单的例子:cone3([1 2 3],[7 8 9],1,'b');%两个空间点位置, ...
- 利用Matlab将任意曲线旋转任意角度
利用Matlab将任意曲线旋转任意角度 公式计算 数据 matlab代码 结果 公式计算 对于如上图所示的任意曲线,需要绕固定点O旋转某一角度,取曲线上任意一点A计算旋转后的坐标值. 设OA的长度为L ...
- MATLAB 求任意一个数的所有因子
MATLAB 求 任意一个数的所有因子 我们都知道matlab 有自带的求最大公约数和最小公倍数的函数,但是缺少求取任意一个数所有 因子 的函数, 我么有时候将一个数组进行分段截取的时候希望每段长度都 ...
- matlab生成任意波形发生器(AWG)所需波形文件程序
matlab生成任意波形发生器(AWG)所需波形文件程序 环境 matlab2016a 简介 使用Matlab生成任意波形发生器(AWG)所需波形文件,使得任意波形发生器产生你所需波形,本文使用高斯脉 ...
- matlab snapnow,任意倾斜椭圆方程的画法.pdf
任意倾斜椭圆方程的画法 椭圆的旋转变换 标准椭圆方程为 .下面介绍两种画任意形式的椭圆方法,比如椭圆心不在原点,带有倾斜角的椭圆,结合基本 公式和程序画任意形式的倾斜椭圆. Contents 初始 ...
- matlab系列之(一)——利用matlab实现任意两个多项式相加
上课时的课程作业,后续我会持续整理出来注释好,供大家共同学习!致谢课程老师! 一.问题描述 输入任意两个多项式,相加后输出结果: 二.问题分析 输入多项式可以采用输入系数矩阵或完整多项式的方式,为了符 ...
- matlab生成任意区间的随机数
使用matlab中的rand函数生成任意区间的随机数公式 r = a + (b-a)*rand(m,n) 其中[a,b]是范围,[m,n]是生成的数据形状.比如我想生成[-5,5]之内10个随机数 a ...
- matlab中任意两边之和大于第三边,MATLAB教程第三章.ppt
<MATLAB教程第三章.ppt>由会员分享,可在线阅读,更多相关<MATLAB教程第三章.ppt(34页珍藏版)>请在人人文库网上搜索. 1.MATLAB程序语言设计, ,第 ...
最新文章
- OAuth2.0文档
- Jzoj3931【NOIP2014day1官方数据】联合权值
- spring20:Aspectj实现前置通知@Before
- Day03:文件打开;错误处理
- Dijkstra 算法——计算有权最短路径(边有权值)
- Matlab——对比度拉伸
- 一款简单实用的桌面电子邮件客户端
- Kubernetes 上容器的启动顺序如何把控?
- Java多线程优化方法及使用方式
- 分享一个电脑截动图的软件LICEcap
- 重庆钢铁泛微oa系统服务器更新时间,泛微全新OA系统-协同办公系统
- 客户下单邮件跟进书写
- PhpStorm10最新版破解注册激活码(图文版)
- 【论文笔记】FlowNet:有监督的光流估计(optical flow estimation)网络
- C语言—内存的管理和释放
- 一年来终于用实际案例把matplotlib的绘图坐标轴说清楚了-太给力了
- 【关于3D-R2N2的配置和使用】
- html圣诞快乐英文,圣诞快乐英语,圣诞快乐英语简写?
- 什么是Smalltalk
- 吴恩达《机器学习》——SVM支持向量机