用Octave计算随机变量的标准差
广告
{{v.name}}
标准差的定义公式
标准差定义为方差的平方根:\(\sigma = \sqrt{D(X)}\)
离散型随机变量的标准差
设离散型随机变量 \(X\) 的分布律为 \(P(X=x_i)=p_i\)(\(i=1,2,\dots\)),且 \(E(X)\) 存在,则:
1. 先计算数学期望:\(E(X) = \sum_{i=1}^{\infty} x_i p_i\)
2. 再计算 \(X^2\) 的数学期望:\(E(X^2) = \sum_{i=1}^{\infty} x_i^2 p_i\)
3. 代入实用公式得方差:\(D(X) = \sum_{i=1}^{\infty} x_i^2 p_i - \left(\sum_{i=1}^{\infty} x_i p_i\right)^2\)
4. 最后计算标准差:\(\sigma = \sqrt{D(X)}\)
例如:掷均匀骰子,设 \(X\) 为骰子点数,取值 \(1\sim6\),概率均为 \(\frac{1}{6}\)。
计算 \(E(X)\):\(E(X)=3.5\)(之前已算)
计算 \(E(X^2)\):\(E(X^2) = 1^2\times\frac{1}{6}+2^2\times\frac{1}{6}+\dots+6^2\times\frac{1}{6} = \frac{91}{6}\)
计算方差:\(D(X) = \frac{91}{6} - (3.5)^2 = \frac{91}{6} - \frac{49}{4} = \frac{35}{12} \approx 2.917\)
计算标准差:\(\sigma = \sqrt{\frac{35}{12} } \approx 1.7078\)
程序代码如下
function ret = get_standard_variance_discrete(p_list, x_list)
    ret = sqrt(get_variance_discrete(p_list, x_list));
endfunction

>> get_standard_variance_discrete([1/6,1/6,1/6,1/6,1/6,1/6], [1,2,3,4,5,6])
ans = 1.7078
连续型随机变量的标准差
设连续型随机变量 \(X\) 的概率密度函数为 \(f(x)\),且 \(E(X)\) 存在,则:
1. 先计算数学期望:\(E(X) = \int_{-\infty}^{+\infty} x f(x) dx\)
2. 再计算 \(X^2\) 的数学期望:\(E(X^2) = \int_{-\infty}^{+\infty} x^2 f(x) dx\)
3. 代入实用公式得方差:\(D(X) = \int_{-\infty}^{+\infty} x^2 f(x) dx - \left(\int_{-\infty}^{+\infty} x f(x) dx\right)^2\)
4. 最后计算标准差:\(\sigma = \sqrt{D(X)}\)
例如:均匀分布 \(X\sim U(a,b)\)。
\(X\) 的概率密度为 \(f(x)=\frac{1}{b-a}\)(\(a\le x\le b\))。
- 已知 \(E(X)=\frac{a+b}{2}\)
- 计算 \(E(X^2)\):
\(E(X^2) = \int_{a}^{b} x^2 \cdot \frac{1}{b-a} dx = \frac{b^3 - a^3}{3(b-a)} = \frac{a^2 + ab + b^2}{3}\)
计算方差:
\(D(X) = \frac{a^2 + ab + b^2}{3} - \left(\frac{a+b}{2}\right)^2 = \frac{(b-a)^2}{12}\)
计算标准差:\(\sigma = \sqrt{\frac{(b-a)^2}{12} } = \frac{b-a}{\sqrt{12} }\)
程序代码如下
function ret = get_standard_variance_continuous(f, a, b)
    pkg load symbolic;
    syms x;
    try
        ret = double(sqrt(int(x^2 * f, x, a, b) - int(x * f, x, a, b)^2));
    catch
        ret = sqrt(int(x^2 * f, x, a, b) - int(x * f, x, a, b)^2);
    end_try_catch
endfunction

>> a = sym('a');
>> b = sym('b');
>> f = 1 / (b - a);
>> get_standard_variance_continuous(f, a, b)
ans = (sym)

        __________________________________________________
       ╱                                              2
      ╱      3           3     ⎛    2           2  ⎞
     ╱      a           b      ⎜   a           b   ⎟
    ╱    -------- - -------- - ⎜-------- - --------⎟
  ╲╱     3⋅a - 3⋅b   3⋅a - 3⋅b   ⎝2⋅a - 2⋅b   2⋅a - 2⋅b⎠
友链