好的,所以我的功能最多可以使用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很新,因此,我不熟悉典型的方法。
答案 0 :(得分:0)
最大功能是不可微分的。大多数求解器都期望平滑函数(包括fmincon
)。幸运的是,有一个简单的线性公式:
min y
y >= v(i) for all i
y
将自动采用v(i)
的最大值。
你的约束是
y = v(1)
在这种情况下,我们甚至可以删除min y
。
这会强制第一组观察结果为最大v
。我不确定,但这可能导致一个不可行的模型(如果它不能以这种方式安排a,b,c)。