在MATLAB中查找受约束条件限制的最小函数的最小值

时间:2017-11-06 18:41:55

标签: matlab mathematical-optimization nonlinear-optimization

好的,所以我的功能最多可以使用16种不同的功能。我想在这个函数等于另一个函数的条件下找到这个函数的最小值。这就是代码的样子,(H1,...,H16都是列向量):

function f = opt(a,b,c)
F1 = a*mean(H1) + b*var(H1)+ c*skewness(H1);
...*more functions here*...
F15 = a*mean(H15) + b*var(H15)+ c*skewness(H15);
F16 = a*mean(H16) + b*var(H16)+ c*skewness(H16);
FVEC = [F1,F2,F3,F4,F5,F6,F7,F8,F9,F10,F11,F12,F13,F14,F15,F16];
[ max, max_index ] = max(FVEC);
f = max;
end

约束我基本上希望上面的函数应该等于列表中的第一个函数:

opt(a,b,c) = a*mean(H1) + b*var(H1)+ c*skewness(H1)

我想我应该使用fmincon,但是尽管我一再尝试,但我似乎遇到了问题,而且看起来它看起来不像其他函数支持约束(尽管我可能会误读文件)。这是正确的功能吗?解决这个问题的最佳方法是什么?我对MATLAB很新,因此,我不熟悉典型的方法。

1 个答案:

答案 0 :(得分:0)

最大功能是不可微分的。大多数求解器都期望平滑函数(包括fmincon)。幸运的是,有一个简单的线性公式:

min y
y >= v(i) for all i

y将自动采用v(i)的最大值。

你的约束是

y = v(1)

在这种情况下,我们甚至可以删除min y

这会强制第一组观察结果为最大v。我不确定,但这可能导致一个不可行的模型(如果它不能以这种方式安排a,b,c)。