【问题标题】:Unexpected error due to lower and upper limits when using fminbnd function in Matlab在 Matlab 中使用 fminbnd 函数时由于上下限导致的意外错误
【发布时间】:2012-11-20 02:33:40
【问题描述】:

我根据我的系数的合法域值在fminbnd函数中使用下限和上限,如下所示:

[x,fval,exitflag] = fminbnd(@(x) minimize_me(sill, x(1), x(2), x(3), cov), [x1l x2l x3l], [x1u x2u x3u], opts);

其中[x1l x2l x3l][x1u x2u x3u] 是表示优化系数下限和上限的向量。我的问题的领域如下:

0<=x1l<=5
0<=x1u<=5

0<=x2l<=5
0<=x2u<=5

0<=x3l<=180
0<=x3u<=180

奇怪的问题是,即使在我的域中选择一些值,我也会收到如下所示的错误:

??? Error using ==> mtimes
Inner matrix dimensions must agree.

Error in ==> fminbnd at 271
    x = xf + si * max( abs(d), tol1 );

例如,如果我选择,我会收到错误:

[x1l x2l x3l], [x1u x2u x3u] = [0 0 0], [5 5 180][x1l x2l x3l], [x1u x2u x3u] = [1 1 0], [5 5 180][x1l x2l x3l], [x1u x2u x3u] = [1 2 0], [5 5 180]

但是,如果我选择 [x1l x2l x3l], [x1u x2u x3u] = [5 5 0], [5 5 180][x1l x2l x3l], [x1u x2u x3u] = [3 0 0], [3 5 180] 等,我不会收到错误消息。

【问题讨论】:

    标签: matlab optimization constraints limit runtime-error


    【解决方案1】:

    根据documentationfminbnd 仅适用于将单个标量作为参数的函数。

    在文件交换上看看fminsearchbnd

    http://www.mathworks.com/matlabcentral/fileexchange/8277-fminsearchbnd.

    【讨论】:

    • 我有标量作为参数。正如我所说,它适用于某些限制,即使在限制域内也不适用于其他一些限制。
    • 您传递给fminbnd 的匿名函数采用单个参数,但它是一个三元素向量,而不是标量。还是我很困惑?不知道为什么它会在一些限制而不是其他限制下“工作”,但如果我的理解是正确的,它实际上并没有给你正确的答案......它只是没有给出错误。
    • @DanBecker:你是对的 :-)。我传递多个参数的原因是因为我首先查看了fminsearchbnd 函数(用户共享的 Matlab 函数),它允许传递多个系数进行优化。我认为fminbndfminsearchbnd 似乎没有任何区别,之后当我使用前一个函数时,我得到了结果。但是,正如您所说的结果不正确,我使用多个系数和fminbnd 也不正确。谢谢!
    猜你喜欢
    • 2015-01-06
    • 1970-01-01
    • 1970-01-01
    • 2012-09-05
    • 1970-01-01
    • 2011-05-03
    • 2021-01-21
    • 2016-03-09
    • 1970-01-01
    相关资源
    最近更新 更多