【问题标题】:MATLAB min(array) gives index exceeds array dimensions [duplicate]MATLAB min(array) 给出的索引超出了数组维度[重复]
【发布时间】:2012-09-12 01:08:40
【问题描述】:

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

我的方法是通过变量的几个值来迭代函数,然后使用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)

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

【问题讨论】:

    标签: arrays matlab indexing


    【解决方案1】:

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

    which min
    

    它告诉你什么?

    请注意,可以通过创建具有相同名称的变量来重载 MATLAB 中的函数。这样做会阻止 MATLAB 访问该函数。这很少是一个好主意,所以不要这样做。解决办法是

    clear min
    

    所以你将删除你创建的那个变量。当然,如果该变量中有什么重要的东西,请先将其填充到其他地方。

    【讨论】:

      【解决方案2】:

      确实看起来您已经声明了一个名为 min 的变量,因此 Matlab 现在将其视为变量而不是函数,因此它认为您正在尝试使用向量 f 来索引变量 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(:))

      【讨论】:

      • 我看到 : 运算符使 F 向量和 F(:)' 使它成为一个数组。这是它在做什么?
      • F 是一个二维矩阵,F(:) 将其展平为行向量,F(:)' 将行向量转置为列向量。
      【解决方案3】:

      当我将这段代码插入我的 Matlab 版本时,它可以完美运行。

      如果错误发生在第 65 行,那么您的程序中肯定有其他事情发生。试着把你程序的这一部分变成一个函数,这样它就不会受到你正在处理的所有其他事情的影响。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-06-30
        • 1970-01-01
        • 2011-04-11
        • 2018-04-16
        • 1970-01-01
        相关资源
        最近更新 更多