matlab画二维正态分布图,不使用normpdf函数
时间: 2024-12-19 21:22:27 浏览: 108
在MATLAB中,你可以使用`randn`函数生成随机数,并结合直方图函数`hist`来绘制二维正态分布图,无需直接使用`normpdf`。以下是步骤:
1. 首先,创建两个正态分布变量,假设它们分别代表X和Y轴的数据:
```matlab
mu = [0; 0]; % 均值向量
sigma = [1; 1]; % 标准差向量
x = mu(1) + sigma(1) * randn(1, 1000); % X轴数据
y = mu(2) + sigma(2) * randn(1, 1000); % Y轴数据
```
2. 然后,创建一个新的直方图网格,将X和Y数据组合在一起,通常选择的范围比实际数据略大一些:
```matlab
[xgrid, ygrid] = meshgrid(-4:0.1:4, -4:0.1:4);
```
3. 使用`surf`或`mesh`函数来绘制二维密度图,这里以`surf`为例:
```matlab
Z = exp(-(xgrid - mu(1)).^2 ./ (2 * sigma(1)^2) - (ygrid - mu(2)).^2 ./ (2 * sigma(2)^2));
colormap(jet); % 设置颜色映射
surf(xgrid, ygrid, Z); % 绘制表面图
xlabel('X'); ylabel('Y'); zlabel('Density'); % 添加坐标轴标签
title('Two-Dimensional Normal Distribution'); % 图表标题
```
这将会生成一个二维正态分布的图形。
相关问题
如何用matlab绘制二维正态概率密度
在Matlab中绘制二维正态概率密度图可以通过使用normpdf函数实现。
步骤如下:
1.定义正态分布的参数——均值和方差
```Matlab
mu = [0 0]; % 均值
sigma = [1 0; 0 1]; % 协方差矩阵
```
2.生成网格数据并计算概率密度
```Matlab
[X,Y] = meshgrid(-3:.1:3); % 生成网格数据
Z = mvnpdf([X(:) Y(:)],mu,sigma); % 计算概率密度
Z = reshape(Z,size(X));
```
3.绘制概率密度图
```Matlab
surf(X,Y,Z); % 用surf函数绘制三维曲面图
view(2); % 将视角旋转为二维平面视角
colorbar; % 显示颜色条
```
完整代码如下:
```Matlab
mu = [0 0]; % 均值
sigma = [1 0; 0 1]; % 协方差矩阵
[X,Y] = meshgrid(-3:.1:3); % 生成网格数据
Z = mvnpdf([X(:) Y(:)],mu,sigma); % 计算概率密度
Z = reshape(Z,size(X));
surf(X,Y,Z); % 用surf函数绘制三维曲面图
view(2); % 将视角旋转为二维平面视角
colorbar; % 显示颜色条
```
执行代码后,就能够看到绘制的二维正态概率密度图了。可以通过修改mu和sigma的值来控制概率密度图的形状和大小。
matlab生成一个正态分布的图片
### 使用 Matlab 绘制正态分布图
以下是通过 Matlab 实现绘制一维和二维正态分布图像的示例代码。
#### 一维正态分布曲线图
在一维情况下,可以利用 `normpdf` 函数生成标准正态分布的概率密度函数 (PDF),并将其绘制成图形:
```matlab
% 定义变量范围
x = linspace(-4, 4, 100);
% 计算正态分布的概率密度值
mu = 0; % 均值
sigma = 1; % 标准差
y = normpdf(x, mu, sigma);
% 绘制正态分布曲线
figure;
plot(x, y, 'LineWidth', 2);
title('一维正态分布曲线');
xlabel('x');
ylabel('概率密度 f(x)');
grid on;
```
上述代码定义了一个从 -4 到 4 的线性空间作为输入向量 \( x \)[^1]。接着调用了 `normpdf` 来计算对应于给定均值 (\( \mu=0 \)) 和标准差 (\( \sigma=1 \)) 下的一系列概率密度值 \( y \) 并最终使用 plot() 将其可视化。
#### 二维高斯分布曲面图
对于二维情况,则按照如下方法操作:
```matlab
% 设置随机数种子以便结果可重复
rng default;
% 参数设置
mu = [0, 0]; % 均值向量
Sigma = [1 .5; .5 2]; % 协方差矩阵
% 创建服从指定多维正态分布的数据集
[X1,X2] = meshgrid(linspace(-3,3),linspace(-3,3));
X = [X1(:), X2(:)];
% 计算每个点处的 PDF 值
Y = mvnpdf(X,mu,Sigma);
% 转换回网格形式用于surf作图
Y = reshape(Y,size(X1));
% 可视化三维表面图
figure;
surf(X1,X2,Y,'EdgeColor','none')
colormap jet
colorbar
view([-18 72])
title('二维高斯分布曲面图');
xlabel('X_1'); ylabel('X_2'); zlabel('f(\vec{x})');
axis square tight
```
此部分首先设定了一个多变量正态分布所需的均值向量与协方差矩阵[^2]。之后创建了一组覆盖整个平面的坐标对集合\( X=[X_{1},X_{2}]^{T} \)。再应用 `mvnpdf()` 方法获取各位置上的联合概率密度估计值 Y。最后借助 surf() 构建出了完整的三维立体图表展示出来。
阅读全文
相关推荐
















