使用fminsearch和fminbnd时出错

时间:2017-12-26 16:05:58

标签: matlab optimization minimization

在命令窗口中调用该函数时效果很好。

function z = values(x1)   
y = [9; 8; 6; 5; 6; 7; 8];    
x = [1; 2; 3; 4 ;5; 6; 7];    
a = find(abs(x-x1) < 0.001);    
z = y(a);    
plot(x,y);    
end

>>values(3)

ans=6

当我尝试使用fminsearch内置MATLAB函数时,如下所示:

>> f = @values;                     
>> options = optimset('Display','iter','TolX',0.001);      
>> [xc, FunVal] = fminsearch(f, 2, options);

我在命令窗口中收到以下错误:

Iteration   Func-count     min f(x)         Procedure

     0            1                8    
     

订阅分配维度不匹配   fminsearch中的错误(第255行)

fv(1,j+1) = f; 

当我尝试使用fminbnd内置MATLAB函数时,如下所示:

>> f = @values;   
>> options = optimset('Display','iter','TolX',0.001);   
>> [xc, FunVal, EF, output] = fminbnd(f, 2, 6, options)

我在命令窗口中收到以下错误:

  

a = ‍‍‍‍‍‍ ‍‍ ‍‍‍‍‍‍ ‍‍ ‍‍‍‍‍‍ ‍‍ ‍‍‍‍‍‍ ‍‍ ‍‍‍‍‍‍ ‍‍ ‍‍‍‍‍‍ ‍‍ ‍‍‍‍‍‍ ‍‍ ‍‍‍‍‍‍ ‍‍ ‍‍‍‍‍‍ ‍‍ ‍‍‍‍‍‍ ‍‍ ‍‍‍‍‍‍ ‍‍ ‍‍‍‍‍‍ ‍‍ ‍‍‍‍‍‍ ‍‍ ‍‍‍‍‍‍ ‍‍ ‍‍‍‍‍‍ ‍‍ ‍‍‍‍‍‍ ‍‍ ‍‍‍‍‍‍ ‍‍ ‍‍‍‍‍‍ ‍‍ ‍‍‍‍‍‍ ‍‍ ‍‍‍‍‍‍ ‍‍ ‍‍‍‍‍‍ ‍‍ Empty matrix: 0-by-1 ‍‍‍‍‍‍ ‍‍ ‍‍‍‍‍‍ ‍‍ ‍‍‍‍‍‍ ‍‍ ‍‍‍‍‍‍ ‍‍ ‍‍‍‍‍‍ ‍‍ ‍‍‍‍‍‍ ‍‍ ‍‍‍‍‍‍ ‍‍ ‍‍‍‍‍‍ ‍‍

     

使用fminbnd时出错(第220行)
  用户提供的目标函数必须返回标量值。

为什么会发生这种情况以及如何解决?

1 个答案:

答案 0 :(得分:0)

问题似乎是你的目标函数没有为某些值返回任何值(空)。我只是将输入值(x1)打印到控制台。第一个测试是x1 = 2,这是初始值。然后MATLAB测试2.1。然而,对于x1 = 2.1,a是emtpy,因为abs(x-2.1)不是&lt;对于x中的任何值,为0.001。

因此您会收到错误。

编辑:我也真的不知道objectuve函数应该做什么。