C#, Lección 18 de "Programación Xiaobai": Números aleatorios (aleatorios) Quinto, métodos de cálculo y códigos para la varianza y la desviación estándar (desviación estándar)

1 formato de texto


/// <summary>
/// "Programa de aprendizaje Xiaobai" Lección 18: Número aleatorio (aleatorio) Quinto, el método de cálculo y el código de varianza y desviación estándar (desviación estándar) ///
Varianza = SUM((Xi - X) ^2 ) / n i=0...n-1 X = Promedio de X[i]
/// La varianza es la suma de cuadrados (cada valor menos el promedio), dividida por el número.
/// El cuadrado de la varianza = la desviación estándar; de lo contrario, simplemente saca la raíz cuadrada.
/// Esta lección es para verificar la función de distribución normal anterior.
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
botón vacío privado18_Click(objeto remitente, EventArgs e)
{     // Número de números aleatorios     int m = 50000;     // Rango de números aleatorios (0---1023)     int n = 1024;     int[] num = new int[m];     int i = 0;     while (i < m)     {         // Genera números aleatorios según distribución normal         // Promedio = 0.











        int a = (int)(Rand(0,5, 0,1) * n);

        si (a < 0) continúa;
        si (a >= n) continúa;
        número[i++] = a;
    }

    // Calcular la
    suma doble promedio = 0.0;
    for (int j = 0; j < m; j++)
    {         suma += num[j];     }     double avg = suma / (double)m;


    // Calcular la varianza
    doble delta = 0.0;
    for (int j = 0; j < m; j++)
    {         // Método de escritura original         // delta = delta + (num[j] - avg) * (num[j] - promedio);         // otra forma de escribir         delta += Math.Pow((num[j] - promedio), 2);     }     // varianza     doble varianza_1 = delta / (doble)m;     // desviación estándar     doble varianza_estándar_1 = Matemáticas .Sqrt (delta / (doble)(m)) / (doble)n;








    #region Un algoritmo más serio debería normalizar los datos primero,
    // normalizar los datos a (0 --- 1.0) y luego calcular la varianza y así sucesivamente.
    double[] xnum = new double[m];
    for (int j = 0; j < m; j++)
    {         xnum[j] = num[j] / (double)n;     }     // La media también debe normalizarse     avg /= n;     // Calcular varianza     delta = 0.0;     for (int j = 0; j < m; j++)     {         delta += Math.Pow((xnum[j] - avg), 2.0);     }     double standard_variance_2 = Math.Sqrt (delta / (doble)(m));     #endregion











    StringBuilder sb = new StringBuilder();
    sb.AppendLine("Promedio = " + promedio + "<br>");
    sb.AppendLine("Variance=" + variance_1 + "<br>");
    sb.AppendLine(" Estándar variance=" + standard_variance_1 + "<br>");
    sb.AppendLine("Standard variance=" + standard_variance_2 + " (calculado después de normalizar los datos)<br>");
    webBrowser1.DocumentText = sb.ToString();
}
 

2 formato de código


/// <summary>
/// 《小白学程序》第十八课:随机数(Random)第五,方差及标准方差(标准差)的计算方法与代码
/// 方差 = SUM((Xi - X)^2 ) / n  i=0...n-1 X = Average of X[i]
/// 方差是 (各数值减去平均值)的平方 之和,再除以个数。
/// 方差的平方 = 标准差,反之,开平方即可。
/// 本课是为了验证前面的正态分布函数。
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void button18_Click(object sender, EventArgs e)
{
    // 随机数个数
    int m = 50000;
    // 随机数的范围(0---1023)
    int n = 1024;
    int[] num = new int[m];
    int i = 0;
    while (i < m)
    {
        // 按正太分布生成随机数
        // 平均值 = 0.5 * n
        // 标准差 = 0.1 * n
        int a = (int)(Rand(0.5, 0.1) * n);

        if (a < 0) continue;
        if (a >= n) continue;
        num[i++] = a;
    }

    // 计算平均值
    double sum = 0.0;
    for (int j = 0; j < m; j++)
    {
        sum += num[j];
    }
    double avg = sum / (double)m;

    // 计算方差
    double delta = 0.0;
    for (int j = 0; j < m; j++)
    {
        // 原始写法
        //delta = delta + (num[j] - avg) * (num[j] - avg);
        // 另一种写法
        delta += Math.Pow((num[j] - avg), 2);
    }
    // 方差
    double variance_1 = delta / (double)m;
    // 标准差
    double standard_variance_1 = Math.Sqrt(delta / (double)(m)) / (double)n;

    #region 更严肃的算法,应该先进行数据规范化,
    // 将数据规整到(0 --- 1.0)再计算方差等等。
    double[] xnum = new double[m];
    for (int j = 0; j < m; j++)
    {
        xnum[j] = num[j] / (double)n;
    }
    // 均值也需要规范化
    avg /= n;
    // 计算方差
    delta = 0.0;
    for (int j = 0; j < m; j++)
    {
        delta += Math.Pow((xnum[j] - avg), 2.0);
    }
    double standard_variance_2 = Math.Sqrt(delta / (double)(m));
    #endregion

    StringBuilder sb = new StringBuilder();
    sb.AppendLine("平均值=" + avg + "<br>");
    sb.AppendLine("方差= " + variance_1 + "<br>");
    sb.AppendLine("标准方差=" + standard_variance_1 + "<br>");
    sb.AppendLine("标准方差=" + standard_variance_2 + " (规范数据后计算)<br>");
    webBrowser1.DocumentText = sb.ToString();
}

3 Resultados del cálculo

Supongo que te gusta

Origin blog.csdn.net/beijinghorn/article/details/132747026
Recomendado
Clasificación