MATLAB生成等递增区间均匀随机数运行结果异常求助
问题原因
- 区间更新逻辑错误:X轴区间参数
k/l的更新放在了行循环末尾,导致每遍历完整行的所有X列才切换一次X区间,完全不符合每列对应一个X区间的设计逻辑。Y轴区间参数m/n的更新位置对应行维度迭代,逻辑正确。 - 网格维度不匹配:X轴014按步长1划分共14个区间,而初始化的`Data`矩阵为13行15列,X维度多1列,最终会生成超出014范围的X值。
- 可选优化:原代码中
Data = round(rand(13,15))每个元素取值为0或1,即每个网格单元最多生成1个随机点,若需要每个单元生成多个随机点可自行调整Data的生成逻辑。
修正后可运行代码
% 初始化轴区间参数 x_start = 0; x_step = 1; x_interval_cnt = 14; % X轴共14个区间,覆盖0~14范围 y_start = 0.5; y_step = 0.5; y_interval_cnt = 13; % Y轴共13个区间,覆盖0.5~7范围 % 初始化随机点计数矩阵,行对应Y维度、列对应X维度 Data = round(rand(y_interval_cnt, x_interval_cnt)); total_point = sum(Data(:)); Z = zeros(total_point, 2); current_idx = 1; [row_total, col_total] = size(Data); for i = 1:row_total % 计算当前行对应的Y区间上下限 y_low = y_start + (i-1)*y_step; y_high = y_low + y_step; for j = 1:col_total % 计算当前列对应的X区间上下限 x_low = x_start + (j-1)*x_step; x_high = x_low + x_step; if Data(i,j) ~= 0 point_cnt = Data(i,j); % 生成当前网格内的均匀分布随机点 Z(current_idx:current_idx+point_cnt-1, 1) = x_low + (x_high - x_low).*rand(point_cnt, 1); Z(current_idx:current_idx+point_cnt-1, 2) = y_low + (y_high - y_low).*rand(point_cnt, 1); current_idx = current_idx + point_cnt; end end end plot(Z(:,1), Z(:,2), '+') xlim([0 14]) ylim([0.5 7]) xlabel('X轴') ylabel('Y轴')
原问题异常散点图

内容的提问来源于stack exchange,提问作者Saeid
相关产品推荐
相关产品推荐

