用matlab生成高斯函数f(x,y)
时间: 2024-12-13 09:28:39 浏览: 1
在MATLAB中,可以使用内置的函数`mvnpdf`来生成二维高斯函数(也称为多元正态分布函数)`f(x,y)`,其数学表达式为:
\[ f(x, y | \mu_x, \mu_y, \sigma_x^2, \sigma_y^2, \rho) = \frac{1}{2\pi\sqrt{\det(\Sigma)}} e^{-\frac{1}{2}((x-\mu_x)^T\Sigma^{-1}(x-\mu_x) + (y-\mu_y)^T\Sigma^{-1}(y-\mu_y))} \]
其中:
- `x` 和 `y` 是变量,
- `\mu_x` 和 `\mu_y` 是均值(中心点),
- `\sigma_x^2` 和 `\sigma_y^2` 是每个维度的方差,
- `\rho` 是两个变量之间的皮尔逊相关系数(0表示独立,-1到1之间表示负相关到正相关),
- `\Sigma` 是协方差矩阵,`\Sigma = \begin{bmatrix} \sigma_x^2 & \rho\sigma_x\sigma_y \\ \rho\sigma_x\sigma_y & \sigma_y^2 \end{bmatrix}`。
下面是一个简单的例子,展示如何生成一个二维高斯函数:
```matlab
% 定义参数
mu_x = 0;
mu_y = 0;
sigma_x = 1;
sigma_y = 1;
rho = 0.5; % 正相关
% 创建网格
[x, y] = meshgrid(-4:.1:4, -4:.1:4);
% 计算协方差矩阵
covariance = [sigma_x^2 rho * sigma_x * sigma_y; rho * sigma_x * sigma_y sigma_y^2];
% 生成高斯函数
f_xy = mvnpdf([x(:), y(:)], [mu_x, mu_y], covariance); % reshape返回原大小的矩阵
% 绘制结果
surf(x, y, reshape(f_xy, size(x)))
xlabel('X')
ylabel('Y')
zlabel('f(x,y)')
title('二维高斯分布')
```
在这个例子中,你可以通过改变`mu_x`, `mu_y`, `sigma_x`, `sigma_y`, 和 `rho`的值,生成不同位置、尺度和相关性的二维高斯函数。
阅读全文