如何在Matlab中生成样本、估计协方差与特征值并完成实验统计
Matlab 实验流程实现操作
实验整体逻辑
- 单轮试验执行流程:生成10个二维随机样本 → 计算样本协方差矩阵 → 求解协方差矩阵对应的两个特征值
- 循环执行上述单轮流程共50次,累计每轮得到的两个特征值结果
- 基于50轮的特征值样本,分别计算两个特征值的长期均值、样本标准差
可直接运行的代码实现
以下代码逻辑完全匹配实验要求,核心参数可根据实际实验定义调整:
% 实验参数初始化 sample_size = 10; % 单轮生成的样本数量 repeat_times = 50; % 重复试验总轮次 eig_record = zeros(repeat_times, 2); % 预分配数组存储每轮的两个特征值 % 自定义二维随机变量的生成参数,可根据实验需求替换为自己的分布逻辑 % 以下以二元正态分布作为示例 mu = [0, 0]; % 二维随机变量的均值向量 real_cov = [3, 1.2; 1.2, 1.5]; % 二维随机变量的真实协方差矩阵 for iter = 1:repeat_times % 生成当前轮次的10个二维样本 sample_set = mvnrnd(mu, real_cov, sample_size); % 计算样本协方差矩阵,默认采用n-1为分母的无偏估计 current_cov = cov(sample_set); % 求解协方差矩阵的特征值,输出结果默认按从小到大排序 current_eig = eig(current_cov); % 将当前轮次的特征值存入记录数组 eig_record(iter, :) = current_eig'; end % 统计50轮试验的特征值统计量 eig_avg = mean(eig_record, 1); % 两个特征值的逐列均值 eig_sd = std(eig_record, 0, 1); % 两个特征值的逐列样本标准差 % 在命令行窗口输出最终结果 fprintf('小特征值统计结果:均值=%.4f,标准差=%.4f\n', eig_avg(1), eig_sd(1)); fprintf('大特征值统计结果:均值=%.4f,标准差=%.4f\n', eig_avg(2), eig_sd(2));
实操注意事项
- 协方差计算的分母定义可按需调整:如果需要采用n为分母的极大似然协方差估计,只需将
cov(sample_set)修改为cov(sample_set, 1)即可,避免和实验要求的协方差定义错位 eig函数的输出默认按特征值升序排列,50轮试验中两个特征值的列位置固定,不会出现数值错位导致的统计结果偏差- 若需要固定复现的实验结果,可在脚本最开头添加
rng(种子值)类语句,固定随机数生成的种子,避免每次运行生成的随机样本存在差异 - 如果实验采用的不是二元正态分布作为样本来源,仅需替换循环内
mvnrnd对应的样本生成代码,后续协方差、特征值计算、统计的逻辑无需修改
内容的提问来源于stack exchange,提问作者Harman
相关产品推荐
相关产品推荐

