Matlab中高斯样本与理论高斯曲线匹配绘图问题
问题:直方图与高斯PDF曲线尺度不匹配的原因及解决方法
问题背景
我正在进行高斯过程的基础示例实验,想要手动生成高斯过程的样本向量并绘图。首先通过以下代码创建均值μ=2、标准差σ=1的正态分布并生成样本向量s:
% CLEAR ALL clear all close all % CREATE GAUSSIAN PROCESS mu = 2 sigma = 1 d = makedist('Normal','mu',mu,'sigma',sigma); % CREATE SAMPLE OF ABOVE GAUSSIAN PROCESS s = random(d, [1000, 1]);
随后绘制样本直方图并叠加理论高斯曲线:
% DISPLAY HOW DISTRIBUTION LOOKS LIKE figure('Name', 'PDF') title('GAUSSIAN DISTRIBUTION \mu=2 and \sigma=1') histogram(s,100); hold on; % DISPLAY HOW DISTRIBUTION SHALL LIKE gauss_x = -5:0.01:5 gauss_y = ... (1/(sigma*sqrt(2*pi))) ... *exp( ... (-1/2)*((gauss_x-mu)/sigma).^2 ... ) plot(gauss_x, gauss_y); hold off;
但两者尺度不匹配,理论高斯曲线远低于直方图。尝试使用Normalization='probability'参数归一化:
% NORMALIZE SAMPLE figure('Name', 'PDF NORMALISED') title('GAUSSIAN DISTRIBUTION \mu=2 and \sigma=1 NORM.') histogram(s,100, 'Normalization','probability'); hold on; plot(gauss_x, gauss_y); hold off;
仍未实现直方图与理论曲线的匹配,请问问题出在哪里?是对Normalization参数理解有误,还是高斯概率相关知识有遗漏?
原因分析
问题核心是直方图归一化模式与理论PDF的定义不匹配:
- 默认的直方图(无归一化)纵轴是区间内的样本数量,而理论PDF的纵轴是概率密度(单位区间内的概率),两者尺度完全不同,无法对齐。
- 使用
Normalization='probability'时,直方图纵轴是区间内样本的占比(概率值),但你计算的gauss_y是概率密度,两者仍不属于同一尺度范畴。
解决方法
要让直方图与理论PDF匹配,需将直方图的归一化模式设置为'pdf',此时直方图纵轴直接对应概率密度,与理论计算的gauss_y完全一致。
修正后的代码如下:
% 绘制匹配的直方图与PDF曲线 figure('Name', 'PDF MATCHED') title('GAUSSIAN DISTRIBUTION \mu=2 and \sigma=1 (PDF MATCH)') % 使用pdf模式归一化,纵轴对应概率密度 histogram(s,100, 'Normalization','pdf'); hold on; % 理论高斯PDF计算保持不变 gauss_x = -5:0.01:5; gauss_y = (1/(sigma*sqrt(2*pi))) * exp( (-1/2)*((gauss_x-mu)/sigma).^2 ); plot(gauss_x, gauss_y, 'LineWidth', 2, 'Color', 'r'); hold off; legend('样本直方图(PDF)', '理论高斯PDF');
补充:Matlab直方图归一化模式说明
'count'(默认):纵轴为区间内的样本数量'probability':纵轴为区间样本占总样本的比例(概率值)'pdf':纵轴为概率密度(区间概率除以区间宽度),与理论PDF定义一致'cumcount':纵轴为累计样本数量'cdf':纵轴为累计分布函数值
内容的提问来源于stack exchange,提问作者M.E.
相关产品推荐
相关产品推荐

