繁体   English   中英

倍频程:高斯分布的3D表面图

[英]Octave: 3D Surface plot for Gaussian distribution

我是Octave和Matlab的新手,

我正在尝试绘制高斯分布的表面图,以使用数据集的两个特征(x轴和y轴)和高斯值(z轴)可视化异常检测。

   X1           X2       Z(the Gaussian value )  

0.00000       3.0000          0.0153130  
2.00000       2.8000          0.0457589
2.20000       3.0000          0.0550785
2.30000       2.0000          0.0163526
2.40000       2.2000          0.0252592
2.70000       3.5000          0.0615501
2.70000       4.2000          0.0259381
2.90000       3.0000          0.0695891
4.10000       1.6000          0.0088349
4.40000       3.5000          0.0812291
4.40000       4.5000          0.0179289
4.80000       3.2000          0.0886546
5.90000       3.0000          0.0734376
6.30000       3.0000          0.0658523
5.90000       4.0000          0.0407246
6.40000       4.0000          0.0353848
6.20000       3.0000          0.0678455
6.30000       3.6000          0.0576709
8.20000       3.8000          0.0195292
10.00000      2.7000          0.0054764

下面给出的是与我想要的图相似的图:

在此处输入图片说明

我的尝试:

我尝试为每个维度创建一个网格网格,并在矩阵上做一个曲面图,但是没有用。 它给了我一个怪异的情节,如下所示

[X1,Y1]=meshgrid(x1',x2');
[Z]=meshgrid(z');
surf (X,Y,Z)

在此处输入图片说明

如果有人帮助我正确获取图表,我会很高兴

谢谢 :)

我假设您想在给定的2D坐标之间进行插值,以尝试创建高斯曲面。 您需要使用的是griddata (Octave doc) (MATLAB doc) ,您可以在其中指定(x,y,z)点,然后指定形成所需输出表面的2D坐标。 为此,您可以结合使用meshgrid (Octave doc) (MATLAB doc)linspace (Octave doc) (MATLAB doc)来帮助您生成这些点。

我们可以使用linspace为每个轴从每个轴的最小到最大生成线性的点集。 默认情况下, linspace会在给定的最小值和最大值之间生成100个点,因此我们坚持使用这些点。 之后,使用meshgrid生成您希望高斯曲面占据的2D点的最终网格。 然后,使用griddata使用输入(x,y,z)点以及从生成的二维点的最终网格meshgrid以产生最终表面。 由于高斯曲线的“弯曲度”,我将指定cubic标记以在定义高斯曲线的控制点之外的区域中执行双三次插值。 默认情况下, griddata使用双线性插值,但让我们重写并使用双三次插值。

事不宜迟,假设X1X2Z都是在工作空间中加载的所有矢量,这是内插并生成曲面的代码:

limitsX = linspace(min(X1), max(X1));
limitsY = linspace(min(X2), max(X2));
[X1out,X2out] = meshgrid(limitsX, limitsY);
Zout = griddata(X1, X2, Z, X1out, X2out, 'cubic');
surf(X1out, X2out, Zout);
title('Interpolated Gaussian Surface');
xlabel('X1');
ylabel('X2');
zlabel('Z');

这是我得到的表面:

在此处输入图片说明

这与实际的高斯曲线不一样(...更像是一个倾斜的高架帐篷),其原因是因为从高斯分布中采样的数据太稀疏,并且控制点之间的距离很远。 对于控制点之间的点,您必须进行插值,插值的精度将不及高斯分布本身的实际值。

如果您对构建高斯曲面很认真,则实际上应该从高斯的数学定义中生成点,那么曲面图肯定会看起来很准确。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM