由4个正态分布的函数与2行1列的矩阵相乘组成的2行1列的矩阵组成的二维概率密度函数,用MATLAB画出2d的高斯分布图
时间: 2024-06-01 09:11:40 浏览: 145
假设4个正态分布函数的均值向量分别为mu1、mu2、mu3、mu4,协方差矩阵分别为sigma1、sigma2、sigma3、sigma4,2行1列的矩阵为a,则二维概率密度函数为:
f(x,y) = [1/(2*pi*det(sigma1))^0.5 * exp(-0.5 * ([x;y]-mu1)' * inv(sigma1) * ([x;y]-mu1))] * a(1) +
[1/(2*pi*det(sigma2))^0.5 * exp(-0.5 * ([x;y]-mu2)' * inv(sigma2) * ([x;y]-mu2))] * a(2) +
[1/(2*pi*det(sigma3))^0.5 * exp(-0.5 * ([x;y]-mu3)' * inv(sigma3) * ([x;y]-mu3))] * a(3) +
[1/(2*pi*det(sigma4))^0.5 * exp(-0.5 * ([x;y]-mu4)' * inv(sigma4) * ([x;y]-mu4))] * a(4)
其中,^0.5表示开根号,inv表示矩阵求逆,det表示矩阵的行列式。
可以使用MATLAB中的meshgrid函数生成x、y网格点,然后计算每个点的概率密度函数值,利用surf函数将结果可视化,代码示例:
% 定义4个正态分布函数的均值向量和协方差矩阵
mu1 = [0; 0];
sigma1 = [1 0.5; 0.5 1];
mu2 = [2; 2];
sigma2 = [1 -0.5; -0.5 1];
mu3 = [-2; 2];
sigma3 = [2 0; 0 0.5];
mu4 = [2; -2];
sigma4 = [0.5 0; 0 2];
% 定义2行1列的矩阵
a = [1; 2];
% 生成x、y网格点
x = linspace(-5, 5, 100);
y = linspace(-5, 5, 100);
[X, Y] = meshgrid(x, y);
% 计算每个点的概率密度函数值
f = zeros(size(X));
for i = 1:numel(X)
f(i) = (1/(2*pi*det(sigma1))^0.5 * exp(-0.5 * ([X(i);Y(i)]-mu1)' * inv(sigma1) * ([X(i);Y(i)]-mu1))) * a(1) + ...
(1/(2*pi*det(sigma2))^0.5 * exp(-0.5 * ([X(i);Y(i)]-mu2)' * inv(sigma2) * ([X(i);Y(i)]-mu2))) * a(2) + ...
(1/(2*pi*det(sigma3))^0.5 * exp(-0.5 * ([X(i);Y(i)]-mu3)' * inv(sigma3) * ([X(i);Y(i)]-mu3))) * a(3) + ...
(1/(2*pi*det(sigma4))^0.5 * exp(-0.5 * ([X(i);Y(i)]-mu4)' * inv(sigma4) * ([X(i);Y(i)]-mu4))) * a(4);
end
% 绘制图像
surf(X, Y, f);
xlabel('x');
ylabel('y');
zlabel('Probability density');
title('2D Gaussian distribution');
阅读全文