写出matlab进行二元正态分布Gibbs抽样的代码
时间: 2023-09-10 15:15:14 浏览: 46
以下是一个简单的 MATLAB 代码,用于使用 Gibbs 抽样从二元正态分布中抽样:
```matlab
% 设定参数
mu = [0, 0];
sigma = [1, 0.5; 0.5, 1];
num_samples = 1000; % 抽样次数
% 初始化
samples = zeros(num_samples, 2);
x = 0; y = 0;
% 进行抽样
for i = 1:num_samples
% 根据条件概率分布计算 x 的值
mu_x = mu(1) + sigma(1,2) * (y - mu(2)) / sigma(2,2);
sigma_x = sigma(1,1) - sigma(1,2)^2 / sigma(2,2);
x = normrnd(mu_x, sqrt(sigma_x));
% 根据条件概率分布计算 y 的值
mu_y = mu(2) + sigma(2,1) * (x - mu(1)) / sigma(1,1);
sigma_y = sigma(2,2) - sigma(2,1)^2 / sigma(1,1);
y = normrnd(mu_y, sqrt(sigma_y));
% 记录抽样结果
samples(i, :) = [x, y];
end
% 绘制结果
scatter(samples(:,1), samples(:,2), 'filled');
xlabel('x');
ylabel('y');
title('Gibbs抽样结果');
```
在这个例子中,我们假设二元正态分布的均值为 `[0, 0]`,协方差矩阵为 `[1, 0.5; 0.5, 1]`,我们使用 Gibbs 抽样方法从中抽取了 1000 个样本,并将结果绘制出来。