所以我们知道randn会产生高斯噪声,让我们看看它是如何工作的。
>> some_number = randn();
>> disp(some_number);
运行后,我们得到0.76388。
再次运行它。我们得到另一个数字1.3958。
您可以将尺寸传递给randn以生成填充有随机数的矢量或矩阵。
假设我们想要一个五列1行向量。([1 5])
>> some_numbers = randn([1 5]);
>> disp(some_numbers);
运行后,我们得到:
每次我们运行它,我们得到不同的数字集。
正如您可能已经猜到的那样,我们也可以生成随机数的二维矩阵。
假设我们想要两行三列。([2 3]),由于这些是一堆随机数,我们称之为噪音。
>> some_number = randn([2 3]);
>> disp(some_number);
有趣的是,randn从高斯或随机正态分布中提取这些数字。因此,randn.A高斯分布中的n具有看起来像这样的概率分布函数。
randn的中心或平均值为零,标准差为1。标准偏差是度量分布如何扩展的度量。
我提到这是一个概率分布,这意味着很可能找回接近零的数字,而远离零的数字则不太可能。
我们怎么知道randn实际上是从高斯分布中采样的呢?
好,如果我们有足够的样本并将它们分配到箱子中,并且我们计算了每个箱子中落入的数量,
那么我们将看到类似于概率分布函数的模式。
我们试试吧。
我们从一百个数字的向量开始怎么样?([1 100])
>> noise = randn([1 100]);
>> disp(noise);
我们不是直接显示数字,而是计算直方图。
>> noise = randn([1 100]);
>> [n, x] = hist(noise, [-3 -2 -1 0 1 2 3]);
>> disp([x; n]);
Hist函数:接受数字的向量或矩阵作为第一个参数,作为可选的第二个参数,您可以传入bin center。
假设我们希望中心是整数,从负3到正3。
Hist返回两个值:一个是我们想要的元素的数量,第二个是bin中心。
让我们以表格形式显示bin中心和列。
我们将创建一个小的临时矩阵,第一行是bin中心,第二行是统计数:
正如预期的那样,该中心的数量很高,而且两端的数量很少,实际上是零。
无论您运行多少次,都会看到相同的行为。
为了直观地表示正在发生的事情,我们如何绘制这些数字?
>> noise = randn([1 100]);
>> [n, x] = hist(noise, [-3 -2 -1 0 1 2 3]);
>> disp([x; n]);
>> plot(x, n)
我们使用plot函数:x轴将包含bin中心,计数将在y轴上。
运行代码,我们得到:
我们看到的东西类似于高斯概率分布。
为了得到更好的图像,我们需要更多的数字。
您可以使用linspace函数生成一系列均匀间隔的数字。
>> noise = randn([1 100]);
>> [n, x] = hist(noise, linspace(-3,3,7));
>> disp([x, n]);
>> plot(x, n);
在linspace函数,我们可以通过写-3到3,7不同的数字来替换这个向量,这包括零。
(技术点:linspace函数解析。例如:X=linspace(5,100,20) 为 产生从5到100范围内的20个数据,相邻数据跨度相同,
X = 5 10 15 20 25 30 35 40 45 50 55 60 65 70 75 80 85 90 95 100。正如我们上面的代码:linspace(-3,3,7),所以
X = -3 -2 -1 0 3 2 1。)
让我们确保这和以前一样。
请注意,bin中心与预期相同。
现在我们可以轻松增加事件的数量。
>> noise = randn([1 100]);
>> [n, x] = hist(noise, linspace(-3,3,21));
>> disp([x; n]);
>> plot(x, n);
比如说,我们想要21个。
我选择奇数,因为我想把0包含在中间。
显示这么多的数字是没有用的,所以让我们注释一下,看看图是什么样子。
显然,我们沿着X轴有更好的分辨率,但是这些尖端是怎么回事?
我认为我们需要更多数据,让我们将矢量提升到1,000个数字。([1 1000])
现在你看到熟悉的钟形曲线慢慢浮现。
让我们进一步增加样本数量。
越来越明显。
除了randn之外,您还可以在Octave或MATLAB中找到其他随机数生成函数。例如:
Rand:它从均匀分布中抽样出来的;
Randi:生成随机整数。
可以随意玩这些功能。
——学会编写自己的代码,才能练出真功夫。