首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MATLAB min( array )给出的索引超过数组的维数

MATLAB min( array )给出的索引超过数组的维数
EN

Stack Overflow用户
提问于 2012-09-12 09:08:40
回答 3查看 1.8K关注 0票数 0

我试图找出一个两个变量的函数的最小值,然后求出这些变量的值。

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

代码语言:javascript
复制
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)

问题出在最后一行:

代码语言:javascript
复制
fmin = min(f)

我得到了错误

代码语言:javascript
复制
??? Index exceeds matrix dimensions.

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

为什么会这样呢?任何帮助都是非常感谢的。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-09-12 18:03:59

它看起来确实像你声明了一个名为min的变量,所以Matlab现在把它当作一个变量,而不是一个函数,所以它认为你试图用向量f来索引变量min。

但只需对你的代码进行注释,去掉f(442),你可以用一种更具matlabesque风格的方式来实现同样的事情,而不需要像这样的循环:

代码语言:javascript
复制
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(:))

票数 1
EN

Stack Overflow用户

发布于 2012-09-12 09:26:59

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

代码语言:javascript
复制
which min

它告诉你什么?

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

代码语言:javascript
复制
clear min

因此,您将删除已创建变量。当然,如果这个变量中有重要的东西,就先把它放在其他地方。

票数 6
EN

Stack Overflow用户

发布于 2012-09-12 12:32:02

当我将这段代码插入到我的Matlab版本中时,它运行得很好。

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12379978

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档