我希望通过更改参数{{1来最小化函数f(a,b,c)
对某些下限和上限l <= c <= u
和l
的范围u
的最大值}和a
。我想我需要一个双重迭代,但除此之外我不知道如何开始。
我非常感谢以下任何一个:一个答案,帮助更清楚地表达这一点,或者有关我可以在哪里寻找答案的信息。我试图寻找其他地方的答案,但我很难知道要搜索什么。
编辑:例如,假设b
是f(a,b,c)
。我尝试改变abs(g(a,c)-b)
,以便a
最小化p(a) = max(g(a,c)) - min(g(a,c))
,这样可以轻松地让我计算c
应该是什么,但我遇到的问题是b
不一定很容易使用功能。
答案 0 :(得分:1)
您可以使用fminsearch并为超出范围的解决方案添加较大的负值:
% Your input
f = @(a,b,c) (a-2).^2+(b.^2-9)^2+sin(2*pi*c).^2;
u = 0.7;
l = -0.01;
% function to optimize
f2 = @(a) abs(f(a(1),a(2),a(3))+1e15*(a(3)>u|a(3)<l));
% Find a minima
fminsearch(f2,[1.6 1 0.2])
答案 1 :(得分:0)
如果您有优化工具箱,请使用fmincon
:
X = fmincon(@(X) max(g(X(1),X(3))) - min(g(X(1),X(3))),... % the "cost function", i.e., what you want to minimize
[0 0 1],... % an initial guess for [a b c]
[],[], [],[],... % (irrelevant for your problem)
[-inf -inf 1], [+inf +inf u]); % lower and upper bounds for [a b c]
如果您没有优化工具箱,则可以完全相同的方式使用我的fminsearch
包装器minimize
。 minimize
使用fminsearch
(包含在标准MATLAB中),但fminsearch
无法处理约束,minimize
可以。
更重要的是,&#34;初步估算&#34;可能很难得到。您可以进行简单的网格搜索(如您所建议的那样),但这往往是单调乏味和缓慢的,特别是对于较大的问题。 minimize
可以在没有初始估计的情况下运行,在这种情况下,它会对绑定约束中的一堆随机初始值尝试多次优化,并返回最佳值。