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

标签 matlab optimization mathematical-optimization

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

enter image description here

最小化以下方程

enter image description here

其中 var-means 给定 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.

你能帮我看看哪里出了问题吗?提前致谢

最佳答案

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

关于matlab - matlab中的非线性平方优化任务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37000281/

相关文章:

python - 在 R : Rsolnp or Auglag 中使用线性约束最大化二次目标

matlab - 行归一化矩阵

c - 使用 A Vedaldi 的 sift 实现

arrays - 从 Meshgrid Matlab 创建一列数组

matlab - 在 Matlab 中读取或转换 Midi 文件

sql-server - 哪些列通常是好的索引?

algorithm - 大O,您如何计算/近似?

php - 插入两行时 stmt->execute 不起作用

c++ - 将 n 维 "square"空间划分为立方体

algorithm - 确定哪一组边会导致负循环?