设目标分布为二元正态分布,用matlab写出其Gibbs抽样代码
时间: 2024-02-22 13:57:40 浏览: 138
Untitled2_吉布斯抽样_吉布斯采样_advice12p_
以下是一个简单的 MATLAB 代码示例来执行二元正态分布的 Gibbs 抽样:
```matlab
% 设定参数和初始值
mu1 = 0; sigma1 = 1;
mu2 = 0; sigma2 = 1;
x1 = 0; x2 = 0;
% 迭代步数和热启动期
nIter = 10000; burnIn = 1000;
samples = zeros(nIter, 2);
% 开始 Gibbs 抽样
for i = 1:nIter
% 从条件分布 p(x1|x2) 中采样
x1 = normrnd(mu1 + sigma1 / sigma2 * (x2 - mu2), sqrt(1 - (sigma1 / sigma2)^2));
% 从条件分布 p(x2|x1) 中采样
x2 = normrnd(mu2 + sigma2 / sigma1 * (x1 - mu1), sqrt(1 - (sigma2 / sigma1)^2));
% 保存样本
samples(i, :) = [x1, x2];
end
% 丢弃热启动期的样本
samples = samples(burnIn+1:end, :);
% 绘制样本分布
scatter(samples(:,1), samples(:,2), 10, 'filled')
xlabel('x1'); ylabel('x2');
title('Gibbs 抽样结果')
```
注意,这只是一个简单的示例代码,实际应用中需要根据具体情况进行参数和初始值的设定,并进行适当的调整。
阅读全文