这段代码在做什么?机器学习

时间:2014-09-25 00:54:41

标签: matlab

我只是在学习matlab,而且我有一段代码,我不明白它的语法。 x是n x 1向量。

代码低于

p  = (min(x):(max(x)/300):max(x))';

稍后使用p向量来绘制函数

plot(p,pp*model,'r');

3 个答案:

答案 0 :(得分:1)

它会生成arithmetic progression

算术级数是一系列数字,其中下一个数字等于前一个数字加上一个常数。在算术级数中,此常数必须保持相同的值。

在您的代码中,

  • min(x)是序列的初始值
  • max(x) / 300是增量
  • max(x)是停止标准。当增量结果超过此停止标准时,不再为该序列生成项目。

我无法评论这个特定的初始值和增量的选择,而不会看到使用它的周围代码。

然而,从一个天真的角度来看,MATLAB有linspace command做了类似的事情,但不完全相同。

答案 1 :(得分:1)

当然看起来像是一件奇怪的事情。基本上,它创建了一个值p的向量,范围从x的最小值到最大值,这很好,但它使用了max(x)/300的连续值之间的步骤。

如果min(x)=300max(x)=300.5那么这只会为p提供1分。

另一方面,如果min(x)=-1000max(x)=0.3p会有数千个元素。

事实上,情况更糟。如果max(x)为否定,那么您会收到错误,因为p会从min(x)开始,某个负数低于max(x),然后每个元素都会小于最后一个

我认为p必须以某种方式创建ppmodel,以便情节有效,并且不知道我怎么不建议如何解决这个问题,但是我想不出有这么好的理由。使用linspace(min(x),max(x),300)或将步骤设置为(max(x)-min(x))/299对我来说会更有意义。

答案 2 :(得分:0)

此代码检查名为x的数组,并查找其最小值min(x)及其最大值max(x)。它取最大值并将其除以常数300.

它没有明确命名任何变量,将其设置为max(x)/300,但为了便于解释,我将其命名为“incr”,为增量的缩写。

并且,它创建了一个名为p的向量。 p看起来像这样:

p = [min(x), min(x) + incr, min(x) + 2*incr, ..., min(x) + 299*incr, max(x)];