题目

编写程序,对一组实验采样数据向量,依次计算其元素个数(length)、总和(sum)、算术平均值(mean)、最大值及其所在位置、最小值及其所在位置。

输入格式:无需外部输入。

输出格式:格式化输出各个统计量以及极值所在的索引下标。

数据范围与约定:双精度实数向量。

思路与算法

1. max 与 min 的双输出特性
调用 [val, idx] = max(v) 时,第一个返回值是极值数值,第二个返回值是该极值第一次出现的下标位置。

2. 向量统计首选内置函数
严禁手写 for 循环累加或冒泡求最值,内置 sum、mean 由底层的 BLAS/LAPACK 高度优化并自动支持 SIMD 指令集,速度比脚本循环快数十倍。

3. 空向量安全
对于空向量,mean([]) 返回 NaN,max([]) 返回空,计算前宜判定 ~isempty(v)。

完整程序

% Octave / MATLAB 第19题:向量基础统计量
data = [12.5, 45.2, 8.7, 91.0, 34.6, 91.0, 15.3];

n = length(data);
total = sum(data);
avg = mean(data);
[max_val, max_idx] = max(data);
[min_val, min_idx] = min(data);

fprintf("样本数据: %s\n", mat2str(data));
fprintf("样本总数: %d\n", n);
fprintf("累加和 sum: %.2f\n", total);
fprintf("平均值 mean: %.2f\n", avg);
fprintf("最大值 max: %.2f (首次出现在下标 %d)\n", max_val, max_idx);
fprintf("最小值 min: %.2f (首次出现在下标 %d)\n", min_val, min_idx);

运行示例

输出:

样本数据: [12.5 45.2 8.7 91 34.6 91 15.3]
样本总数: 7
累加和 sum: 298.30
平均值 mean: 42.61
最大值 max: 91.00 (首次出现在下标 4)
最小值 min: 8.70 (首次出现在下标 3)