【问题标题】:Nonlinear square optimization task in matlabmatlab中的非线性平方优化任务
【发布时间】:2016-08-28 06:30:41
【问题描述】:

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

使下列方程最小化

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

你能帮我看看有什么问题吗?提前致谢

【问题讨论】:

    标签: matlab optimization mathematical-optimization


    【解决方案1】:

    需要将fmincon中的函数指定为函数句柄或匿名函数; f(x1,x2) 计算为双精度标量,而不是函数句柄。 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,在这种情况下你仍然需要一个约束)。

    【讨论】:

    • 那么我的函数将如何具有最终形式?
    • 由于 w 是权重,我们可能需要添加边界 0
    • 权重也可以是负数,请问您能否发布完整的解决方案和答案?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-11-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-20
    相关资源
    最近更新 更多