题目
在科学计算中,经常需要把区间等分为精确的 N 个采样点。编写程序,使用 <code>linspace(a, b, n)</code> 生成包含端点的等间隔点,并使用 <code>logspace(d1, d2, n)</code> 生成对数等分点。
输入格式:无需外部输入。
输出格式:分行展示生成的线性等分序列与对数等分序列。
数据范围与约定:数值采样。
思路与算法
1. linspace 的工程价值
相比 a:step:b 难以精确控制采样总点数,linspace(a, b, n) 强制在 $[a, b]$ 区间内均匀生成 $n$ 个点,首尾点必定严格吻合 $a$ 与 $b$,步长自动为 $(b-a)/(n-1)$。绘图网格点首选 linspace。
2. logspace 的对数基底logspace(d1, d2, n) 生成在 $[10^{d1}, 10^{d2}]$ 区间内按对数刻度均匀分布的点。例如 logspace(1, 3, 3) 生成的是 $10^1, 10^2, 10^3$(即 10, 100, 1000)。
3. 频域采样
Bode 图或高频振荡扫频分析时,必须使用对数采样以兼顾低频与高频分辨率。
完整程序
% Octave / MATLAB 第13题:linspace 与 logspace
% 在 [0, 1] 区间生成 5 个均匀采样点
x_lin = linspace(0, 1, 5);
% 在 [10^1, 10^4] 区间生成 4 个对数采样点
x_log = logspace(1, 4, 4);
fprintf("linspace(0, 1, 5) 线性等分点:\n");
disp(x_lin);
fprintf("logspace(1, 4, 4) 对数等分点 (10^1 到 10^4):\n");
disp(x_log);运行示例
输出:
linspace(0, 1, 5) 线性等分点:
0 0.2500 0.5000 0.7500 1.0000
logspace(1, 4, 4) 对数等分点 (10^1 到 10^4):
10 100 1000 10000