【问题标题】:Error using fminsearch and fminbnd使用 fminsearch 和 fminbnd 时出错
【发布时间】:2017-12-26 16:05:57
【问题描述】:

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

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】:

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

    因此你得到错误。

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

    【讨论】:

    • 感谢您的回答。目标函数旨在最小化函数值。实际上,我已经以离散形式定义了 x 和 y 值。感谢您指出这一点......我应该定义“x”值取 2、2.1、2.2 等的数组及其对应的函数“y”值。那么 'a' 就不会返回一个空集。
    • 如果您只是在 2.1、2.2 等处添加值,它将适用于下一步,但不是一般情况下。你需要什么,以及我要求目标函数的原因,是你必须以某种参数形式写下函数,即它返回任何 x1 的值。
    • 是的,我需要用最低均方根值曲线拟合最高阶多项式方法。通过这样做,目标函数是多项式方程。需要最小化这个目标函数才能找到局部最小值。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多