如何在Matlab中生成指定协方差矩阵的二维正态分布随机数?
Matlab生成指定二维正态分布数对的实现方法
你提到的通过协方差矩阵平方根做线性变换的思路是完全正确的,完整实现步骤和代码如下:
方法1:基于矩阵平方根的手动实现
% 1. 定义基础参数 sample_num = 36; % 需要生成的数对数量 mu = [0, 0]; % 期望为零向量 C = [1, 0.8; 0.8, 1]; % 目标协方差矩阵 % 2. 计算协方差矩阵的平方根矩阵A A = sqrtm(C); % 3. 生成标准二维正态随机数,尺寸为2行sample_num列,每一列对应一组标准正态数对 std_normal = randn(2, sample_num); % 4. 线性变换得到符合目标分布的样本,转置后为sample_num行2列,每一行就是一组目标数对 result = (A * std_normal)';
运行后result变量就是你需要的36组二维数对。
方法2:调用内置函数快速实现
如果不需要手动实现变换逻辑,可直接调用Matlab统计工具箱的mvnrnd函数一步生成:
mu = [0, 0]; C = [1, 0.8; 0.8, 1]; result = mvnrnd(mu, C, 36);
验证小技巧
你可以执行cov(result)查看生成样本的协方差矩阵,因为样本量较小,结果会在[1, 0.8; 0.8, 1]附近小幅波动,属于正常现象。
内容的提问来源于stack exchange,提问作者Silverlik
相关产品推荐
相关产品推荐

