让我们假设我们有以下任务:找到权重的最佳值
以便最小化以下等式
其中var-表示给定x1变量的方差,我们也有约束,这些权重的总和应该等于1
我初始化了匿名函数和初始点的权重
w=[0.5; 0.5];
>> f=@(x1,x2) (w(1)*w(1)*var(x1)+w(2)*w(2)*var(x2))
f =
@(x1,x2)(w(1)*w(1)*var(x1)+w(2)*w(2)*var(x2))
我想我应该使用函数fmincon, 我创建了一个矩阵
A=[1;1];
和b列
b=[1];
然后我尝试了以下乐趣
weighs=fmincon(f(x1,x2),w,A,b)
但它给了我错误
Error using optimfcnchk (line 287)
FUN must be a function, a valid string expression, or an inline function
object.
你可以帮我解决有什么问题吗?提前谢谢
答案 0 :(得分:2)
您需要在fmincon
中指定函数作为函数句柄或匿名函数; f(x1,x2)
计算为标量double,而不是函数句柄。 fmincon
会想要使用w
的当前值评估此函数,以检查解决方案的质量,因此需要一种方式将w
作为输入。
因此,你需要
f(w,x1,x2)
,即
f=@(w,x1,x2) (w(1)*w(1)*var(x1)+w(2)*w(2)*var(x2))
fmincon
来电标记为fmincon(@(u)f(u,x1,x2),...)
但是,我建议在问题中用1-w(2)
代替w(1)
(反之亦然),将其重新表述为一个变量的无约束优化(除非w
是真正的权重,并且必须保持在0和1之间,在这种情况下,您仍然需要约束。)