示例代码-Matlab绘制高斯分布曲面图(2)

 

高斯分布

\quad 在数据建模时,经常会用到高斯分布模型[1,2],其曲面绘制也可以参考 示例代码-Matlab绘制高斯分布曲面图(1),下面介绍另一种绘制高斯分布曲面的方法。
 

1. 首先,根据高斯分布的均值以及协方差矩阵来得到符合该高斯分布的样本点,我们需要使用 matlab 中的 mvnrnd 函数。
2. 然后,根据高斯分布的均值、协方差矩阵来计算每个样本点的概率密度。这里,我们需要使用 matlab 中的 mvnpdf 函数
3. 最后,将得到的样本点及其概率值网格化,形成一个曲面。这里,我们需要使用 matlab 中的 griddata 和 surf 函数。将得到的样本点及其概率值网格化。
 

代码如下:

clear;
clc;

mu = zeros(1,2);                            %该高斯分布的均值向量
sigma = [0.9 0.5; 0.5 0.9];                 %该高斯分布的协方差矩阵

% 第1步.
% 使用 mvnrnd 函数得到符合该高斯分布的样本点
data = mvnrnd(mu,sigma,1000);
x = data(:,1);                              %样本点横坐标
y = data(:,2);                              %样本点纵坐标

% 第2步.
% 使用 mvnpdf 函数得到每个点的概率密度
z = mvnpdf(data,mu,sigma);

% 第3步.
% 使用  griddata 和 surf 函数 对已经得到的样本点网格化,其中插值法我们选择使用 'v4'
[X,Y,Z]=griddata(x,y,z,linspace(min(x),max(x))',linspace(min(y),max(y)),'v4'); %插值
figure; surf(X,Y,Z);                    %画曲面 

 
此段代码的效果图如下:

在这里插入图片描述

 
此外绘制高斯曲面还可以只用 mesh, surfc 和 meshc函数,其中最后两个函数可以显示等高线。可自行运行如下代码观察效果:

surf(X,Y,Z);                %画曲面 
mesh(X,Y,Z);                %画网格

surfc(X,Y,Z);               %画曲面 ,可以显示等高线
meshc(X,Y,Z);               %画网格 ,可以显示等高线

 
示例代码地址: https://github.com/Kai-Xuan/MyNote/blob/master/Matlab/Gaussian/gaussian_surf2.m/ [link]

 
参考:


1. Chen K X, Ren J Y, Wu X J, et al. Covariance Descriptors on a Gaussian Manifold and their Application to Image Set Classification[J]. Pattern Recognition, 2020: 107463. [link]
2. https://ww2.mathworks.cn/help/stats/multivariate-normal-distribution-1.html [link]

  • 1
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值