如果我不理解fminsearch或只是屠杀术语,请随时关闭它,但这是我的问题。
我可以将 fminsearch 与对多个参数的约束一起使用吗?
fminsearch(@(x) func(x(1), x(2)), [2,2], such that x(1) * x(2) = 4 or something like that)
非线性优化是一个非常困难的问题,因此没有一种方法可以保证适用于所有情况。对于您的情况,您可以从 x(1) 解析求解 x(2)。因此,您可以将其变成一个不受约束的优化问题。
func_cstr = @(x) func(x, 4/x);
fminsearch(func_cstr, initial_x1)
如果你不能在 x(1) 和 x(2) 之间建立明确的关系,那么你可以尝试一个惩罚方法:
pen = 1e5;
constraint = @(x) (x(1)*x(2)-4)
func_cstr = @(x) func(x)+pen*constraint(x)^2;
[x,fval] = fminsearch(func_cstr, initial_x1_and_x2);
还有一个由 MATLAB 提供的约束优化求解器fmincon
。