如何在MATLAB中创建1e-7到1e-5、末尾分辨率更高的对数递减间隔向量?
生成末尾高分辨率的时间向量
要创建从1e-7到1e-5且末尾(靠近1e-5)分辨率更高的时间向量,直接用logspace无法实现——它始终保持等对数间隔,反转顺序也只会改变数值排列而非间隔大小。你可以通过分段构造或自定义步长的方式达成需求,以下是几种实用方案:
方法1:分段线性组合
将向量拆分为前后两段,前半段用较大间隔快速覆盖大部分范围,后半段用小间隔细化末尾区域:
% 前半段:1e-7 到 5e-6,间隔 1e-7 part1 = 1e-7:1e-7:5e-6; % 后半段:5e-6+1e-8 到 1e-5,间隔 1e-8(分辨率提升10倍) part2 = (5e-6+1e-8):1e-8:1e-5; % 合并两段得到目标向量 t = [part1, part2];
方法2:对数+线性混合
前半段用对数间隔高效跨越范围,后半段用密集线性点提升末尾分辨率:
% 前半段:对数间隔生成1e-7到5e-6的20个点 part1 = logspace(log10(1e-7), log10(5e-6), 20); % 后半段:线性生成5e-6到1e-5的50个密集点 part2 = linspace(5e-6+1e-8, 1e-5, 50); % 合并并去重,避免衔接点重复 t = unique([part1, part2]);
方法3:连续非线性步长
通过指数函数让步长随数值增大逐渐缩小,实现末尾分辨率平滑提升:
% 生成0到1的基础控制向量 x = linspace(0, 1, 100); % 定义步长规则:越靠近1e-5(x越接近1),步长越小 step = 1e-7 .* exp(-5*x); % 累积步长生成时间向量 t = 1e-7 + cumsum(step); % 强制最后一个点精确等于1e-5 t(end) = 1e-5;
内容的提问来源于stack exchange,提问作者user38635
相关产品推荐
相关产品推荐

