如何在Octave中找到数组的最小值?

时间:2015-04-28 13:06:53

标签: arrays matlab octave minimum

我是Octave的初学者! 我正在努力弄清楚数组mse_array中的最小值。我不断收到错误说:“下标索引必须是小于2 ^ 31的正整数或逻辑”

有人可以帮助我吗?这是我的代码:

function randomLines(data1, data2)
mse_array = []
A = rand(2,10)*100
 for i = columns(A)
    max = A (1, i) 
    min = A (2, i)
    m = (max-min)/0.16
    p = [m min];
    array_function_values = polyval(p,data2);
    current_mse = mseFunction(data1,array_function_values);
    mse_array(end + 1) = current_mse
 endfor
min_value = min(mse_array)
endfunction

2 个答案:

答案 0 :(得分:2)

您的代码有几个问题。以下是一些可以帮助您入门的内容。

错误可能发生在这一行:

min_value = min(mse_array)

您使用mse_array作为min的索引,但mse_array中的值可能是错误状态的有效数组索引。 (我猜测这纯粹基于变量的名称mse_array,它似乎来自某种形式的均方误差计算。)检查错误消息中的行号和其他所有内容非常重要。

另一个问题是你的for循环只评估一次。 columns函数将返回A的标量列数。因此,你的循环声明等同于:

for i = 10

换句话说,代码只会查看A的最后一列。您可能想要使用:

for i = 1:columns(A)

最后,使用您自己的变量名称覆盖Octave中的内置minmax函数是个坏主意。如果您覆盖内置的min功能,在拨打clear min之前,您将无法再直接使用它(或者,您可以拨打builtin,但是您应该避免使用)。相反,只需选择更好的变量名称。

答案 1 :(得分:1)

问:如何在Octave中找到数组的最小值?

octave 内置自我描述文档,可以怀疑使用一次

答:请务必重读 help min doc min

octave-3.2.4.exe:1> help min
`min' is a function from the file C:\Octave\3.2.4_gcc-4.4.0\libexec\octave\3.2.4\oct\i686-pc-mingw32\max.oct

 -- Loadable Function:  min (X)
 -- Loadable Function:  min (X, Y)
 -- Loadable Function:  min (X, Y, DIM)
 -- Loadable Function: [W, IW] = min (X)
     For a vector argument, return the minimum value.  For a matrix
     argument, return the minimum value from each column, as a row
     vector, or over the dimension DIM if defined.  For two matrices
     (or a matrix and scalar), return the pair-wise minimum.  Thus,

          min (min (X))

     returns the smallest element of X, and

          min (2:5, pi)
             =>  2.0000  3.0000  3.1416  3.1416
     compares each element of the range `2:5' with `pi', and returns a
     row vector of the minimum values.

     For complex arguments, the magnitude of the elements are used for
     comparison.

     If called with one input and two output arguments, `min' also
     returns the first index of the minimum value(s).  Thus,

          [x, ix] = min ([1, 3, 0, 2, 0])
             =>  x = 0
                 ix = 3

     See also: max, cummin, cummax

重新定义(因此渲染不可用)元素作为保留字只会增加麻烦。尝试使用您自己的命名约定,这不会损害系统的其他部分 - 即 anArrayMinimumVALUE aSmallestVALUE ,而不是“查杀” “Octave函数 min() 通过创建一个偶然命名的变量”也“min