如何在MATLAB中生成指定边界定义域D内的随机浮点数数组
MATLAB 生成定义域D内随机点实现方案
实现思路
- 采用拒绝采样法实现,先确定D的外接矩形采样范围,再筛选符合区域规则的点即可,实现逻辑简单、准确率高。
- 本题中的定义域D本质是极坐标方程
r = 0.6 + 0.1*cos(3t)(t∈[0,π])与x轴(y=0)围成的上半闭合区域,点是否在区域内的判断规则非常容易落地。
完整实现代码
% 配置需要生成的有效随机点数量 n_points = 1000; % 初始化存储结果的数组 result = zeros(n_points, 2); valid_count = 0; while valid_count < n_points % 在外接矩形[-0.7, 0.7] × [0, 0.7]范围内生成随机点,边界极径最大值为0.7,保证覆盖全区域 x = -0.7 + 1.4 * rand(); y = 0.7 * rand(); % 计算当前点的极角、极径 t = atan2(y, x); r = sqrt(x^2 + y^2); % 计算当前角度对应的边界极径 r_bound = 0.6 + 0.1 * cos(3 * t); % 满足极径小于等于边界极径即为区域内有效点 if r <= r_bound valid_count = valid_count + 1; result(valid_count, :) = [x, y]; end end % 可选:可视化验证生成效果,不需要可直接删除 t_bound = linspace(0, pi, 1000); r_bound = 0.6 + 0.1 * cos(3 * t_bound); x_bound = r_bound .* cos(t_bound); y_bound = r_bound .* sin(t_bound); plot(x_bound, y_bound, 'r', 'LineWidth', 1.5) hold on plot([min(x_bound), max(x_bound)], [0, 0], 'r', 'LineWidth', 1.5) scatter(result(:, 1), result(:, 2), 10, 'b', 'filled') axis equal xlabel('x') ylabel('y') legend('D区域边界', '内部随机点')
代码说明
- 如需调整生成点的数量,直接修改
n_points的数值即可,该区域拒绝采样的效率很高,生成万级以上的点也不会有明显卡顿。 - 最终所有有效点都存储在
result数组中,第一列为x坐标、第二列为y坐标,可以直接取出做后续计算。
内容的提问来源于stack exchange,提问作者FA mn
相关产品推荐
相关产品推荐

