C#,《小白学程序》第十七课:随机数(Random)第四,移动平均值(Moving Average)的计算方法与代码

1 文本格式

/// <summary>

/// 《小白学程序》第十七课:随机数(Random)第四,移动平均值的计算方法与代码

/// 继续学习数据统计,移动平均值的计算方法

/// 移动平均值就是一定步长内数值的平均值,用于反映阶段性的数值变化。

/// 股票软件,金融软件及一些忽悠人的预测都是这个技术。

/// 当然移动平均值也可以用于机器人、AI等等很多正能量的事情。

/// </summary>

/// <param name="sender"></param>

/// <param name="e"></param>

private void button17_Click(object sender, EventArgs e)

{

// 生成一些随机数

int n = 60;

double[] temp = new double[n];

double asum = 0.0;

for (int i = 0; i < n; i++)

{

temp[i] = global_rnd.NextDouble() * 10.0 + 25.0;

asum += temp[i];

}

// 计算平均值(总体平均值)

double aavg = asum / n;

// 保存移动平均值的数组

double[] ma = new double[n];

// 步长

int step = 5;

for (int i = 0; i < (n - step); i++)

{

double sum = 0.0;

for (int j = 0; j < step; j++)

{

sum += temp[i + j];

}

double avg = sum / step;

ma[i] = avg;

}

StringBuilder sb = new StringBuilder();

sb.AppendLine("<style>td { padding:0px;text-align:center;text-size:0px; } </style>");

// 显示随机数

sb.AppendLine("<table width=420 border=0 style='border-collapse:collapse;'>");

sb.AppendLine("<tr>");

for (int i = 0; i < n - step; i++)

{

sb.AppendLine("<td style='vertical-align:bottom;'><div style='width:7px;height:" + (temp[i] * 3) + "px;border:solid 1px #FF0000;background-color:rgb(255,255,0);'></div></td>");

}

sb.AppendLine("</tr>");

sb.AppendLine("</table>");

sb.AppendLine("<br>");

sb.AppendLine("<br>");

// 显示移动平均值

sb.AppendLine("<table width=420 border=0 style='border-collapse:collapse;'>");

sb.AppendLine("<tr>");

// 左端第一个为平均值(总体平均值)

sb.AppendLine("<td style='vertical-align:bottom;'><div style='width:7px;height:" + (aavg * 3) + "px;border:solid 2px #0000FF;background-color:rgb(255,0,255);'></div></td>");

for (int i = 0; i < n - step; i++)

{

sb.AppendLine("<td style='vertical-align:bottom;'><div style='width:7px;height:" + (ma[i] * 3) + "px;border:solid 1px #FF0000;background-color:rgb(255,255,0);'></div></td>");

}

// 右端第一个也是平均值(总体平均值)

sb.AppendLine("<td style='vertical-align:bottom;'><div style='width:7px;height:" + (aavg * 3) + "px;border:solid 2px #0000FF;background-color:rgb(255,0,255);'></div></td>");

sb.AppendLine("</tr>");

sb.AppendLine("</table>");

webBrowser1.DocumentText = sb.ToString();

}

2 代码格式

cs 复制代码
/// <summary>
/// 《小白学程序》第十七课:随机数(Random)第四,移动平均值的计算方法与代码
/// 继续学习数据统计,移动平均值的计算方法
/// 移动平均值就是一定步长内数值的平均值,用于反映阶段性的数值变化。
/// 股票软件,金融软件及一些忽悠人的预测都是这个技术。
/// 当然移动平均值也可以用于机器人、AI等等很多正能量的事情。
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void button17_Click(object sender, EventArgs e)
{
    // 生成一些随机数
    int n = 60;
    double[] temp = new double[n];
    double asum = 0.0;
    for (int i = 0; i < n; i++)
    {
        temp[i] = global_rnd.NextDouble() * 10.0 + 25.0;
        asum += temp[i];
    }
    // 计算平均值(总体平均值)
    double aavg = asum / n;

    // 保存移动平均值的数组
    double[] ma = new double[n];
    // 步长
    int step = 5;
    for (int i = 0; i < (n - step); i++)
    {
        double sum = 0.0;
        for (int j = 0; j < step; j++)
        {
            sum += temp[i + j];
        }
        double avg = sum / step;
        ma[i] = avg;
    }

    StringBuilder sb = new StringBuilder();
    sb.AppendLine("<style>td { padding:0px;text-align:center;text-size:0px; } </style>");

    // 显示随机数
    sb.AppendLine("<table width=420 border=0 style='border-collapse:collapse;'>");
    sb.AppendLine("<tr>");
    for (int i = 0; i < n - step; i++)
    {
        sb.AppendLine("<td style='vertical-align:bottom;'><div style='width:7px;height:" + (temp[i] * 3) + "px;border:solid 1px #FF0000;background-color:rgb(255,255,0);'></div></td>");
    }
    sb.AppendLine("</tr>");
    sb.AppendLine("</table>");
    sb.AppendLine("<br>");
    sb.AppendLine("<br>");

    // 显示移动平均值
    sb.AppendLine("<table width=420 border=0 style='border-collapse:collapse;'>");
    sb.AppendLine("<tr>");
    // 左端第一个为平均值(总体平均值)
    sb.AppendLine("<td style='vertical-align:bottom;'><div style='width:7px;height:" + (aavg * 3) + "px;border:solid 2px #0000FF;background-color:rgb(255,0,255);'></div></td>");
    for (int i = 0; i < n - step; i++)
    {
        sb.AppendLine("<td style='vertical-align:bottom;'><div style='width:7px;height:" + (ma[i] * 3) + "px;border:solid 1px #FF0000;background-color:rgb(255,255,0);'></div></td>");
    }
    // 右端第一个也是平均值(总体平均值)
    sb.AppendLine("<td style='vertical-align:bottom;'><div style='width:7px;height:" + (aavg * 3) + "px;border:solid 2px #0000FF;background-color:rgb(255,0,255);'></div></td>");
    sb.AppendLine("</tr>");
    sb.AppendLine("</table>");

    webBrowser1.DocumentText = sb.ToString();

}

下面图片第一行是 若干随机数;

第二个是随机数的 移动平均值;蓝色条 为 总体平均值。

相关推荐
He1955014 分钟前
Go初级之十:错误处理与程序健壮性
开发语言·python·golang
一支鱼11 分钟前
leetcode常用解题方案总结
前端·算法·leetcode
m0_7381207229 分钟前
CTFshow系列——PHP特性Web93-96
开发语言·安全·web安全·php·ctfshow
ulias21229 分钟前
各种背包问题简述
数据结构·c++·算法·动态规划
m0_5704664139 分钟前
代码随想录算法训练营第二十八天 | 买卖股票的最佳实际、跳跃游戏、K次取反后最大化的数组和
java·开发语言·算法
程序喵大人40 分钟前
分享个C++线程池的实现源码
开发语言·c++·线程池
吃着火锅x唱着歌1 小时前
LeetCode 1537.最大得分
算法·leetcode·职场和发展
数模加油站1 小时前
25高教社杯数模国赛【C题超高质量思路+可运行代码】第十弹
算法·数学建模·数模国赛·高教社杯全国大学生数学建模竞赛
ulias2121 小时前
动态规划入门:从记忆化搜索到动态规划
算法·动态规划
山河君1 小时前
webrtc之语音活动上——VAD能量检测原理以及源码详解
算法·音视频·webrtc·信号处理