我试图找出一个两个变量的函数的最小值,然后求出这些变量的值。
我的方法是迭代函数,遍历变量的几个值,然后使用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)为什么会这样呢?任何帮助都是非常感谢的。
发布于 2012-09-12 18:03:59
它看起来确实像你声明了一个名为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(:))
发布于 2012-09-12 09:26:59
不要定义名为min的变量。试试这个:
which min它告诉你什么?
请注意,可以通过创建具有相同名称的变量来重载MATLAB中的函数。当您这样做时,您将阻止MATLAB访问该函数。这很少是个好主意,所以不要这么做。解决方案是
clear min因此,您将删除已创建变量。当然,如果这个变量中有重要的东西,就先把它放在其他地方。
发布于 2012-09-12 12:32:02
当我将这段代码插入到我的Matlab版本中时,它运行得很好。
如果错误发生在第65行,那么一定是您的程序中发生了其他事情。试着把你程序的这一部分变成一个函数,这样它就不会受到你正在做的其他事情的影响。
https://stackoverflow.com/questions/12379978
复制相似问题