题目

编写一个多返回值自定义函数 <code>my_statistics(x)</code>,接收一个一维数组,同时返回其均值 $\mu$ 与样本无偏标准差 $s$。演示主程序中接收多个返回值的语法。

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

输出格式:输出输入样本向量及函数计算返回的均值与标准差。

数据范围与约定:多返回值。

思路与算法

1. 多返回值声明
函数头中用中括号声明多个返回值:function [m, s] = my_statistics(x)。

2. 样本方差无偏估计
标准差分母为 $N-1$:$s = \sqrt{\frac{1}{N-1}\sum (x_i - \mu)^2}$。样本点数必须满足 $N \ge 2$。

3. 选择性接收
调用时用 [mean_val, std_val] = my_statistics(data) 接收;如果只需要第一个返回值,可简写为 mean_val = my_statistics(data);若需要忽略某一个,可用波浪线忽略:[~, std_val] = my_statistics(data)。

完整程序

% Octave / MATLAB 第62题:多返回值函数设计
1;

function [mu, sigma] = my_statistics(v)
    n = length(v);
    if n < 2
        error("样本点数量不足 2,无法计算样本无偏标准差。");
    end
    mu = sum(v) / n;
    sigma = sqrt(sum((v - mu) .^ 2) / (n - 1));
end

% 主程序
samples = [10, 12, 23, 23, 16, 23, 21, 16];

[m, s] = my_statistics(samples);

fprintf("样本数据集: %s\n", mat2str(samples));
fprintf("计算样本均值 mu: %.2f\n", m);
fprintf("计算无偏标准差 sigma: %.2f\n", s);
fprintf("内置 std() 函数验证: %.2f\n", std(samples));

运行示例

输出:

样本数据集: [10 12 23 23 16 23 21 16]
计算样本均值 mu: 18.00
计算无偏标准差 sigma: 5.24
内置 std() 函数验证: 5.24