MATLAB MAX问题

>> x = linspace(0,67,1000);
y = linspace(0,52,100);
z = (2927-3*x-2*y).*(891+x+y);
a=find(z==max(z))
x(a),y(a),z(a)

结果是67 52 2648220

但是明显x=0,y=52时候Z为2662089,比程序算得的最大值还大?
问题出在哪?
确实是笔误,是都是1000,不过问题还是最大值不对。
如果是步长问题,怎么修改解决,求z = (2927-3*x-2*y).*(891+x+y)最大值,约束条件为0<=x<=67,0<=y<=52,x-y<=15

你用linspace还不行
x是1*1000矩阵,
y是1*1000矩阵

如果要寻找最大值,需要比较1000*1000个点,
而你这里只是比较了1000个对应的点,显然找不到最大值的

应该应用这个函数meshgrid

具体如下:
x=linspace(0,67,1000);
y=linspace(0,52,1000);
[X,Y]=meshgrid(x,y);
for i=1:1000
for j=1:1000
if X(i,j)-Y(i,j)>15
X(i,j)=nan;Y(i,j)=nan;
end
end
end
z=(2927-3.*X-2.*Y).*(891+X+Y);
[a,b]=find(z==max(z(:)));
x=X(a,b),y=Y(a,b)
z=z(a,b)

结果是:
>>
x =

0

y =

52

z =

2662089
温馨提示:答案为网友推荐,仅供参考
第1个回答  2009-11-01
前两句写错了一句吧, 应该都是1000或者都是100。 假设都是100吧

z向量也是100点的, 每一点对应的x, y的序号相同。 所以 x=0, y=52不可能存在
第2个回答  2009-11-01
x,y的size不一样,导致算出来的z大小有问题,用a来定位出错。
相似回答
大家正在搜