MATLAB min(数组)给出的索引超出数组维度

时间:2012-09-12 01:08:40

标签: arrays matlab indexing

我试图找到两个变量的函数的最小值,然后找到变量的值。

我的方法是通过几个变量值迭代函数,然后使用min函数找到最低值。

minval = -10;
maxval = 10;
n = 1;

for x = minval:maxval
    for y = minval:maxval
        f(n) = abs(x-1)+abs(y-1)+abs(x-3)+abs(y-5)+abs(x-8)+abs(y-3);
        n=n+1;
    end
end
f(n) = abs(x-1)+abs(y-1)+abs(x-3)+abs(y-5)+abs(x-8)+abs(y-3);
fmin = min(f)

问题在于最后一行:

fmin = min(f)

我收到错误

??? Index exceeds matrix dimensions.

Error in ==> Lab2 at 65
fmin = min(f)

这是为什么?非常感谢任何帮助。

3 个答案:

答案 0 :(得分:6)

不要定义名为min的变量。试试这个:

which min

它告诉你什么?

请注意,通过创建具有相同名称的变量,可以重载MATLAB中的函数。执行此操作时,将阻止MATLAB访问该函数。这是一个好主意,所以不要这样做。解决方案是

clear min

因此,您将删除已创建的变量。当然,如果该变量中有重要内容,请先将其填入其他地方。

答案 1 :(得分:1)

当我将其插入我的Matlab版本时,此代码运行完美。

如果第65行出现错误,那么程序中肯定会发生其他事情。尝试将程序的这一部分转换为函数,这样它就不会受到您正在处理的其他任何事情的影响。

答案 2 :(得分:1)

确实看起来你已经声明了一个名为min的变量,所以Matlab现在将它视为一个变量而不是一个函数,所以它认为你试图用变量min对变量min进行索引。

但是只是评论你的代码,不管f(442)是什么,你可以用更多的matlabesque方式实现同​​样的东西而没有像这样的循环:

minval = -10;
maxval = 10;

X = minval:maxval;
Y = X;

[xx, yy] = meshgrid(X, Y);
F = abs(xx-1) + abs(yy-1) + abs(xx-3) + abs(yy-5) +abs(xx-8) + abs(yy-3);

您的f现在相当于F(:)'(没有最终价值......),请向您自己证明:sum(f(1:end-1) == F(:)')

作为矩阵的F可能比f作为平面向量更有意义,你可以像这样找到F的最小值:min(F(:))