matlab mvnpdf函数例子
时间: 2023-08-06 22:16:54 浏览: 187
下面是一个简单的例子,演示如何使用matlab的mvnpdf函数计算多元正态分布概率密度函数。
假设我们有一个二维正态分布,其均值向量为[1,2],协方差矩阵为[2,1;1,2],现在要计算点[2,3]处的概率密度值。
```matlab
% 定义均值向量和协方差矩阵
mu = [1, 2];
sigma = [2, 1; 1, 2];
% 计算点[2,3]处的概率密度值
x = [2, 3];
pdf = mvnpdf(x, mu, sigma);
% 输出结果
fprintf('点[%d,%d]处的概率密度值为%f\n', x(1), x(2), pdf);
```
运行结果为:
```
点[2,3]处的概率密度值为0.048394
```
这说明点[2,3]处的概率密度值为0.048394,即点[2,3]处的概率密度比较低,相对而言比较稀疏。
相关问题
matlab中mvnpdf函数用法
Matlab中的`mvnpdf`函数用于计算多元正态分布的概率密度函数值。多元正态分布是指具有多个随机变量的正态分布,其概率密度函数形式如下:
$$
f(x) = \frac{1}{\sqrt{(2\pi)^k |\Sigma|}} \exp\left(-\frac{1}{2}(x-\mu)^T\Sigma^{-1}(x-\mu)\right)
$$
其中,$x$ 是一个 $k$ 维列向量,$\mu$ 是一个 $k$ 维列向量,表示分布的均值向量,$\Sigma$ 是一个 $k\times k$ 的协方差矩阵。
`mvnpdf`函数的用法如下所示:
```matlab
p = mvnpdf(X, mu, Sigma)
```
其中,`X` 是一个 $n\times k$ 的矩阵,表示 $n$ 个 $k$ 维样本点,`mu` 是一个 $1\times k$ 的行向量,表示分布的均值向量,`Sigma` 是一个 $k\times k$ 的协方差矩阵。
`mvnpdf`函数的返回值 `p` 是一个 $n\times 1$ 的列向量,表示每个样本点的概率密度函数值。
以下是一个使用`mvnpdf`函数计算多元正态分布概率密度函数值的例子:
```matlab
% 定义多元正态分布的均值向量和协方差矩阵
mu = [0 0];
Sigma = [1 0.5; 0.5 2];
% 生成样本点
x1 = linspace(-3,3,100);
x2 = linspace(-3,3,100);
[X1,X2] = meshgrid(x1,x2);
X = [X1(:) X2(:)];
% 计算概率密度函数值
p = mvnpdf(X, mu, Sigma);
% 绘制概率密度函数图像
p = reshape(p, length(x2), length(x1));
figure;
surf(x1,x2,p);
xlabel('x1');
ylabel('x2');
zlabel('Probability Density');
```
上述代码将绘制出多元正态分布的概率密度函数图像。
贝叶斯最小风险决策的matlab实例
下面是一个简单的贝叶斯最小风险决策的 Matlab 实例,该例演示了如何实现贝叶斯最小风险决策,并且可以使用它来帮助分类来自两个不同种类的数据。
假设有两种类型的数据,其中每种类型的数据都来自一个高斯分布。我们可以使用贝叶斯最小风险决策来确定给定一个新的数据点属于哪种类型的数据。
首先,我们需要生成一些示例数据:
```matlab
% 生成数据
mu1 = [1, 1]; % 类别 1 的均值
sigma1 = [1, 0; 0, 1]; % 类别 1 的协方差矩阵
X1 = mvnrnd(mu1, sigma1, 100); % 从类别 1 的高斯分布中生成 100 个数据点
mu2 = [-1, -1]; % 类别 2 的均值
sigma2 = [1, 0; 0, 1]; % 类别 2 的协方差矩阵
X2 = mvnrnd(mu2, sigma2, 100); % 从类别 2 的高斯分布中生成 100 个数据点
% 绘制数据
figure;
scatter(X1(:,1), X1(:,2), 'r');
hold on;
scatter(X2(:,1), X2(:,2), 'b');
legend('Class 1', 'Class 2');
```
然后,我们可以计算每个类别的先验概率,以及每个类别的条件概率密度函数:
```matlab
% 计算先验概率
p1 = 0.5; % 类别 1 的先验概率
p2 = 0.5; % 类别 2 的先验概率
% 计算条件概率密度函数
pdf1 = @(x) mvnpdf(x, mu1, sigma1); % 类别 1 的条件概率密度函数
pdf2 = @(x) mvnpdf(x, mu2, sigma2); % 类别 2 的条件概率密度函数
```
接下来,我们可以定义一个函数,该函数将一个新的数据点作为输入,并通过计算每个类别的期望损失来确定该数据点属于哪个类别:
```matlab
function [label, loss] = bayes_decision(x, p1, p2, pdf1, pdf2)
% 计算每个类别的期望损失
l11 = 0; % 类别 1 被误认为是类别 1 的损失
l12 = 1; % 类别 2 被误认为是类别 1 的损失
l21 = 1; % 类别 1 被误认为是类别 2 的损失
l22 = 0; % 类别 2 被误认为是类别 2 的损失
E1 = l11 * pdf1(x) * p1 + l21 * pdf2(x) * p2; % 类别 1 的期望损失
E2 = l12 * pdf1(x) * p1 + l22 * pdf2(x) * p2; % 类别 2 的期望损失
% 确定数据点属于哪个类别
if E1 < E2
label = 1;
loss = E1;
else
label = 2;
loss = E2;
end
end
```
最后,我们可以使用这个函数来分类一些新的数据点,并将其可视化:
```matlab
% 分类新数据
N = 100;
X = [linspace(-4, 4, N)', linspace(-4, 4, N)'];
labels = zeros(N, N);
losses = zeros(N, N);
for i = 1:N
for j = 1:N
[labels(i,j), losses(i,j)] = bayes_decision([X(i,j), X(i,j)], p1, p2, pdf1, pdf2);
end
end
% 绘制分类结果
figure;
contourf(X(:,1), X(:,2), labels, 1);
hold on;
scatter(X1(:,1), X1(:,2), 'r');
scatter(X2(:,1), X2(:,2), 'b');
legend('Decision boundary', 'Class 1', 'Class 2');
```
运行这个脚本,你将看到一个分类器将数据点分成两个类别的图形输出。
阅读全文