如何为线性同余生成器绘制带周期重复竖线的循环图?
线性同余生成器周期重复标记绘图实现
你需要先定位序列中所有等于种子X0的重复位置(排除初始的第一个值),再在这些位置绘制竖线标记周期重复点。下面是修改后的完整代码,包含完整绘图逻辑:
clear all; clc % 输入参数 m = 59; % 模数 a = 17; % 乘数 c = 43; % 增量 X0 = 27; % 种子 n = 100; % 采样长度 % 初始化序列 y = [X0 zeros(1,n-1)]; % 递归生成序列 for i = 2:n y(i) = mod(a*y(i-1)+c,m); end x = 0:1:n-1; % 绘制原始序列折线图 figure; plot(x, y, '-o', 'LineWidth', 1.2, 'MarkerSize', 4); hold on; % 保留当前画布,用于叠加竖线 % 筛选出所有周期重复的位置(跳过初始种子点) repeat_indices = find(y == X0); repeat_indices = repeat_indices(repeat_indices > 1); % 获取序列最值,确定竖线上下范围 y_min = min(y); y_max = max(y); % 在每个重复位置绘制红色虚线竖线 for idx = repeat_indices x_pos = x(idx); plot([x_pos, x_pos], [y_min, y_max], 'r--', 'LineWidth', 1); end % 图表美化 xlabel('序列索引'); ylabel('生成值'); title('线性同余生成器序列(周期重复处标记竖线)'); grid on; hold off;
关键逻辑说明
- 定位重复点:用
find(y == X0)抓取所有等于种子的索引,再排除第一个初始值,剩下的就是周期重复的触发点。 - 绘制竖线:通过
plot([x_pos, x_pos], [y_min, y_max])生成垂直于x轴的线段,用红色虚线区分,清晰标记周期循环的起点。 - 画布锁定:
hold on和hold off确保原始序列图和标记竖线能在同一张图中显示。
内容的提问来源于stack exchange,提问作者SimoPape
相关产品推荐
相关产品推荐

