重要性采样实例MATLAB代码
时间: 2024-02-03 10:15:00 浏览: 73
以下是一个重要性采样的简单示例MATLAB代码:
```matlab
% 目标分布函数,这里使用标准正态分布
target_pdf = @(x) normpdf(x);
% 提议分布函数,这里使用均匀分布
proposal_pdf = @(x) unifpdf(x, -10, 10);
% 生成样本数
N = 10000;
% 存储样本和权重
samples = zeros(N, 1);
weights = zeros(N, 1);
% 重要性采样算法
for i = 1:N
% 从提议分布中抽取样本
x = rand() * 20 - 10;
% 计算权重
w = target_pdf(x) / proposal_pdf(x);
% 存储样本和权重
samples(i) = x;
weights(i) = w;
end
% 归一化权重
weights = weights ./ sum(weights);
% 计算期望
expectation = dot(samples, weights)
% 绘制目标分布和提议分布
x = linspace(-10, 10, 1000);
figure;
plot(x, target_pdf(x), 'b-', 'LineWidth', 2);
hold on;
plot(x, proposal_pdf(x), 'r--', 'LineWidth', 2);
legend('Target Distribution', 'Proposal Distribution');
```
在上述示例中,我们使用标准正态分布作为目标分布函数,使用均匀分布作为提议分布函数。我们生成10,000个样本,并计算每个样本的权重。最后,我们计算所有样本的带权平均值,并绘制目标分布和提议分布。
阅读全文