在一个范围内最小化三个变量的函数(MATLAB)

时间:2017-12-01 15:20:30

标签: matlab variables

我希望通过更改参数{{1来最小化函数f(a,b,c)对某些下限和上限l <= c <= ul的范围u的最大值}和a。我想我需要一个双重迭代,但除此之外我不知道如何开始。

我非常感谢以下任何一个:一个答案,帮助更清楚地表达这一点,或者有关我可以在哪里寻找答案的信息。我试图寻找其他地方的答案,但我很难知道要搜索什么。

编辑:例如,假设bf(a,b,c)。我尝试改变abs(g(a,c)-b),以便a最小化p(a) = max(g(a,c)) - min(g(a,c)),这样可以轻松地让我计算c应该是什么,但我遇到的问题是b不一定很容易使用功能。

2 个答案:

答案 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包装器minimizeminimize使用fminsearch(包含在标准MATLAB中),但fminsearch无法处理约束,minimize可以。

更重要的是,&#34;初步估算&#34;可能很难得到。您可以进行简单的网格搜索(如您所建议的那样),但这往往是单调乏味和缓慢的,特别是对于较大的问题。 minimize可以在没有初始估计的情况下运行,在这种情况下,它会对绑定约束中的一堆随机初始值尝试多次优化,并返回最佳值。