Octave中如何在指定X值区间标注局部最小值
在Octave中指定X区间查找并标注局部最小值 + 大数据集分享方法
一、指定X区间筛选局部最小值
你通过反转y值将找极小值转化为找峰值的思路没问题,只需在现有逻辑基础上添加X区间筛选即可,以下两种方法任选:
方法1:先找所有候选极值,再筛选X区间
先保留原有逻辑找到所有符合Y阈值的极小值,再根据X(你的代码中变量为t)范围筛选目标区间内的点:
iny = 1 - y; % 反转数据,将极小值转为峰值 [pks, dm] = findpeaks(iny, "MinPeakHeight", 0.11); % 找到所有符合阈值的峰值(对应原y的极小值) % 定义目标X区间,示例为1400-1500(覆盖你要的1450附近) x_low = 1400; x_high = 1500; % 筛选出X在区间内的有效索引 valid_idx = (t(dm) >= x_low) & (t(dm) <= x_high); filtered_dm = dm(valid_idx); % 得到区间内的极小值位置 % 标注筛选后的结果 hold on; plot(t(filtered_dm), y(filtered_dm), "xm"); hold off;
方法2:提前过滤X区间外数据,再找极值
直接将区间外的反转数据设为NaN,让findpeaks自动忽略这些点,一步到位得到区间内的极值:
iny = 1 - y; x_low = 1400; x_high = 1500; % 屏蔽区间外的数据,findpeaks会跳过NaN值 iny(t < x_low | t > x_high) = NaN; % 直接查找区间内符合阈值的峰值 [pks, dm] = findpeaks(iny, "MinPeakHeight", 0.11); % 标注结果 hold on; plot(t(dm), y(dm), "xm"); hold off;
注:X轴反转不影响区间判断逻辑,只要x_low和x_high设为你实际需要的X范围即可。
二、2000+行数据集的便捷分享方法
- Octave/Matlab专属格式:用
.mat文件保存,体积小且完整保留变量结构:
接收方只需执行save("my_dataset.mat", "t", "y"); % 将t、y变量保存到文件load("my_dataset.mat")即可直接加载数据。 - 跨工具通用格式:保存为CSV文件,支持Excel、Python等多工具读取:
csvwrite("my_dataset.csv", [t, y]); % 将t和y合并为矩阵保存 - 文本格式分享:保存为ASCII文本,适合论坛、聊天窗口直接粘贴:
对方可通过save("my_dataset.txt", "t", "y", "-ascii");load("my_dataset.txt", "-ascii")加载,或直接复制文本内容到变量。
内容的提问来源于stack exchange,提问作者dimidola
相关产品推荐
相关产品推荐

