如何在 Matlab 中正确优化参数范围的函数?

How to optimise a function with parameters bounds correctly in Matlab?

我正在使用 Matlab 2015a。

这里是我要优化的功能:

function result = fig_of_merit(x, a, b, c, d) 
    result = 1;
end

我想这样优化功能:

x1 = [10*10^-6, 120]; 
x2 = [300*10^-6, 175];
fminbnd(@(x) fig_of_merit(x, 1, 2, 3, 4),x1,x2);

我不断收到以下错误:

Error using * Inner matrix dimensions must agree.

Error in fminbnd (line 291)

x = xf + si * max( abs(d), tol1 );

Error in test (line 5)

fminbnd(@(x) fig_of_merit(x, 1, 2, 3, 4),x1,x2);

我的代码有什么问题?我使用 fminsearch 函数对无边界优化做了同样的事情,一切都很好。

这与我使用的匿名函数有关 - 当我将向量 x1 和 x2 简化为标量时,它起作用了:

fminbnd(@(x) fig_of_merit(x, 1, 2, 3, 4),-4, 5);

我不满意,因为我想一次优化2个参数。

fminbnd 函数仅适用于标量参数。它不能同时优化两个参数。但是,fmincon 函数可以做到这一点:

x1 = [10*10^-6, 120]; 
x2 = [300*10^-6, 175];
fmincon(@(x) fig_of_merit(x, 1, 2, 3, 4),ones(size(x1)),[],[],[],[],x1,x2);