matlab中的非线性平方优化任务

时间:2016-05-03 09:21:59

标签: matlab optimization mathematical-optimization

让我们假设我们有以下任务:找到权重的最佳值

enter image description here

以便最小化以下等式

enter image description here

其中var-表示给定x1变量的方差,我们也有约束,这些权重的总和应该等于1 enter image description here

我初始化了匿名函数和初始点的权重

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.
你可以帮我解决有什么问题吗?提前谢谢

1 个答案:

答案 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之间,在这种情况下,您仍然需要约束。)