用mcmc方法生成多个变量通用的markov链 的MATLAB代码
时间: 2024-05-03 14:19:37 浏览: 7
以下是 MATLAB 代码,可以用 MCMC 方法生成多个变量通用的 Markov 链:
```matlab
% 设定参数
numVars = 3; % 变量数目
numSamples = 10000; % 样本数目
proposalStd = 0.1; % 提议分布标准差
% 初始化变量
samples = zeros(numSamples, numVars);
currentSample = rand(1, numVars);
% 定义目标概率密度函数
targetPDF = @(x)exp(-sum(x.^2)/2);
% 循环生成样本
for i = 1:numSamples
% 从当前样本中采样一个提议
proposal = currentSample + randn(1, numVars) * proposalStd;
% 计算接受率
acceptProb = min(1, targetPDF(proposal) / targetPDF(currentSample));
% 决定是否接受提议
if rand < acceptProb
currentSample = proposal;
end
% 将样本保存到样本集合中
samples(i, :) = currentSample;
end
% 绘制样本分布
figure;
scatter3(samples(:, 1), samples(:, 2), samples(:, 3), '.', 'MarkerEdgeAlpha', 0.3);
xlabel('Variable 1');
ylabel('Variable 2');
zlabel('Variable 3');
title('Sample Distribution');
```
其中,`numVars` 表示需要生成的变量数量,`numSamples` 表示样本数量,`proposalStd` 表示提议分布的标准差。在代码中,我们使用高斯分布作为提议分布。通过循环生成样本,并计算接受率来决定是否接受提议。最终,我们将样本保存到 `samples` 中,并用 `scatter3` 函数绘制样本分布。