使用fminsearch和fminbnd时出错

问题描述 投票:0回答:1

在命令窗口中调用时,该函数运行良好。

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行) 用户提供的目标函数必须返回标量值。


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

matlab optimization minimization
1个回答
0
投票

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

因此,您会收到错误。

编辑:我也真的不明白目标函数应该做什么。

© www.soinside.com 2019 - 2024. All rights reserved.