在命令窗口中调用该函数时效果很好。
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行)
用户提供的目标函数必须返回标量值。
为什么会发生这种情况以及如何解决?
答案 0 :(得分:0)
问题似乎是你的目标函数没有为某些值返回任何值(空)。我只是将输入值(x1)打印到控制台。第一个测试是x1 = 2,这是初始值。然后MATLAB测试2.1。然而,对于x1 = 2.1,a是emtpy,因为abs(x-2.1)不是&lt;对于x中的任何值,为0.001。
因此您会收到错误。
编辑:我也真的不知道objectuve函数应该做什么。