循环结构-恶意代码分析实战英文原版pdf
92 |第四章循环结构
s = (\frac{\sum_{i=1}^{N} x_i^2 - \left(\sum_{i=1}^{N} x_i\right)^2}{N(N-1)}) (4.2)
标准差则体现随机变量取值的离散程度。标准差的值较大,则表明该随机变量越离散,反之,则表明此偏差较小。如果所有的数据都可以在一个数组中得到,这些数据的标准差就可以通过公式(4.2)直接计算出来,或应用MATLAB的内建函数std。本例的目的是要通过公式4.1,4.2计算平均数和标准差,而不使用内建函数。我们要实现的算法是读取一个组数据,计算它们的平均数和标准差,最后输出结果。答案: 程序必须能读取任意个数的一系列测量值,并能够计算出这些测量值的数学期望和标准差。
在进行计算之前,我们用while循环读取这些测量值。当所有的测量值输入完毕,我们必须通过一定的方法来告诉程序没有其它的数据输入了。在这里,我们假设所有测量值均为非负数,我们用一个负数来表示数据输入完毕。当一个负数输入时,程序就停止读取数值,并开始计算这些数据的平均数和标准差。
- 陈述问题
因为我们假设所有的输入数据为非负数,则合适的问题陈述为:计算一组测量值的平均数和标准差,假设所有测量值为非负数;假设我们事先不知道有多少个测量数。一个负数的输入值将代表测量值输入结束。
- 定义输入值和输出值
这个程序的输入是未知数目的非负数。输出为这些非负数的平均数和标准差。此外还要打印出输入数据的个数,以便于检测程序读取数据的正确性。
- 设计算法
这个程序可分为以下三大步:
-
累积输入数据
-
计算平均数和标准差
-
输出平均数、标准差和数据点的个数
第一大步为读取输入值。为达此目的,我们必须提示用户输入合适的值。当数据输入完毕,我们将计算出数据的个数,它们的和与平方和。这些步骤的伪代码如下所示:
Initialize n, sum_x, and sum_x2 to 0
Prompt user for first number
Read in first x
while x >=0
n←n+1
sum_x←sum_x + x
sum_x2←sum_x2 + x^2
Prompt user for next number
Read in next x
end
注意我们必须在while循环开始之前读取第一个值,这样在while循环第一次运行中才有了检测值。下一步,我们要计算出数学期望和标准差。这个步骤的伪代码就是公式(4.1)和(4.2)的MATLAB版本。
x_bar ← sum_x / n
std_dev ← sqrt((n*num_x2 – sum_x^2) / (n*(n-1)))
最后我们写出输出结果:
Write out the mean value x_bar
Write out the standard deviation std_dev
Write out the number of input data points n
- 将伪代码转化为相应的MATLAB语句
最终的MATLAB程序如下:
% Script file: stats_1.m
这个过程是否让您感到数学的魅力?或者,您可能想知道更多关于循环结构算法的内容,可以参考数据结构算法设计与分析和数据结构基本算法循环队列的相关资料。这些资源将为您提供更深入的理解,帮助您在算法设计的道路上走得更远。为什么不点击链接,探寻其中的奥妙呢?
如此生动的学习方式,您还不心动吗?赶快动手编写属于自己的MATLAB程序吧!