假如数据实际取值范围为 X i ∈ [ − π π ] , i = 1 , 2 , 3 X_i \in [-\pi \ \ \pi], i=1,2,3 Xi∈[−π π],i=1,2,3,变量服从正态分布
示例如下:
%% 数据归一化处理及其概率密度函数
clear
clc
Mu = [0 0 0]; % 均值
Sigma = [1 1 1]; % 标准差
CovarianceMatrix = Sigma;
CovarianceMatrix = diag(CovarianceMatrix); % 转换为对角矩阵
N = 100000; % 样本点数目
X = lhsnorm(Mu, CovarianceMatrix, N); % 采用lhsnorm生成均值为Mu,标准差为Sigma的矩阵
% 绘制归一化之前的X的概率密度函数
[f,xi] = ksdensity(X(:,1)); % 计算概率密度函数,返回在xi点的概率密度f
pic1 = plot(xi,f,'LineWidth',2,'LineStyle','-','color','K'); % 绘制概率密度曲线
hold on % 保留当前figure,实现图层叠加
%% 归一化数据,并将数据放缩到实际取值范围
[x_pdf,ps1]=mapminmax(X' ,0 ,1); % mapminmax是按照行进行归一化的,因此要对矩阵X进行转置
x_pdf = x_pdf'; % 归一化后再将矩阵X转置回来
x_pdf = -pi+2.*pi.*x_pdf; % 放缩到原函数取值范围
% 绘制归一化之后的x_pdf的概率密度函数
[f,xi] = ksdensity(x_pdf(:,1));
pic2 = plot(xi,f,'LineWidth',2,'LineStyle','-','color','r');% 绘制概率密度曲线
hold on
%% 反归一化数据,注意一定要先把数据从实际范围归一化(或放缩)到[0 1]之后,再反归一化处理
[x_pdf,ps2]=mapminmax(x_pdf' ,0 ,1); % 首先将数据归一化到放缩前的范围
x_pdf = x_pdf';
X_re = mapminmax('reverse',x_pdf',ps1); % 反归一化到原分布下的数据
X_re = X_re';
% 绘制反归一化之后的x_pdf的概率密度函数
[f,xi] = ksdensity(X_re(:,1)); % 计算概率密度函数,返回在xi点的概率密度f
pic3 = plot(xi,f,'color','g','Marker','o');%绘制概率密度曲线
legend('原始数据','归一化后数据','反归一化后数据')