如何在 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);
我正在使用 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);