假设我们有以下任务:找到权重的最佳值
最小化以下方程
其中 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.
你能帮我看看哪里出了问题吗?提前致谢
最佳答案
需要将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/