在Matlab中使用fminbnd函数时,由于下限和上限导致的意外错误

在Matlab中使用fminbnd函数时,由于下限和上限导致的意外错误,matlab,optimization,constraints,limit,runtime-error,Matlab,Optimization,Constraints,Limit,Runtime Error,根据我的系数的合法域值,我在fminbnd函数中使用下限和上限,如下所示: [x,fval,exitflag] = fminbnd(@(x) minimize_me(sill, x(1), x(2), x(3), cov), [x1l x2l x3l], [x1u x2u x3u], opts); 0<=x1l<=5 0<=x1u<=5 0<=x2l<=5 0<=x2u<=5 0<=x3l<=180 0<=x3u<=1

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

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

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

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

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

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

0<=x3l<=180
0<=x3u<=180
例如,如果选择以下选项,则会出现错误:

[x1l x2l x3l]、[x1u x2u x3u]=[0 0]、[5 5 180]
[x1l x2l x3l]、[x1u x2u x3u]=[1 10]、[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]、[3 5 180]
等,则不会出现错误。

根据,
fminnd
仅适用于以单个标量作为参数的函数

查看文件交换上的
fminsearchbnd

.

根据,
fminbnd
仅适用于以单个标量作为参数的函数

查看文件交换上的
fminsearchbnd


.

我将标量作为参数。正如我所说,它适用于某些限制,但即使在限制域内,它也不适用于其他限制。传递到
fminbnd
的匿名函数只接受一个参数,但它是一个3元素向量,而不是标量。还是我很困惑?不知道为什么它会有一些限制而不是其他限制,但如果我的理解是正确的,它实际上并没有给你正确的答案。。。它只是没有给出一个错误。@DanBecker:你是对的:-)。我之所以要传递多个参数,是因为我首先查看了
fminsearchbnd
函数(一个用户共享的Matlab函数),它允许传递多个系数进行优化。我认为在使用前一个函数后,我得到的结果似乎没有任何区别。然而,正如你所说的,结果是不正确的,我使用多个系数与
fminbnd
也不正确。谢谢我有标量作为参数。正如我所说,它适用于某些限制,但即使在限制域内,它也不适用于其他限制。传递到
fminbnd
的匿名函数只接受一个参数,但它是一个3元素向量,而不是标量。还是我很困惑?不知道为什么它会有一些限制而不是其他限制,但如果我的理解是正确的,它实际上并没有给你正确的答案。。。它只是没有给出一个错误。@DanBecker:你是对的:-)。我之所以要传递多个参数,是因为我首先查看了
fminsearchbnd
函数(一个用户共享的Matlab函数),它允许传递多个系数进行优化。我认为在使用前一个函数后,我得到的结果似乎没有任何区别。然而,正如你所说的,结果是不正确的,我使用多个系数与
fminbnd
也不正确。谢谢