我是优化的初学者,欢迎此领域的任何指南。
我有15个矩阵(即大小为Di
的{{1}}),并想要找到最佳权重(即(n*m)
)进行加权平均,并制作更好的矩阵类似于一个给定的矩阵(即wi
)。
实际上我的目标函数是这样的:
Dt
如何在Matlab中优化此功能?
答案 0 :(得分:2)
您正在描述一个简单的Quadratic programming,可以使用Matlab' quadprog
轻松优化。
这是怎么回事:
您的目标函数[norm2(sum(wi * Di) - Dt) + norm2(W)]
受w
的某些线性约束。让我们用一些简化的符号重写它。让w
成为未知数的15乘1矢量。让D
成为n*m
- 乘15矩阵(每列是您拥有的Di
矩阵之一 - 写为单列),Dt
是{ {1}} - by-1向量(与n*m
相同,但写为列向量)。现在一些线性代数(使用|| x || ^ 2 = x' * x和argmin x相当于argmin x ^ 2的事实)
Dt
最后一个术语[norm2(sum(wi * Di) - Dt)^2 + norm2(W)^2] =
(D*w-Dt)'*(D*w-Dt) + w'*w =
w'D'Dw - 2w'D'Dt + Dt'Dt + w'w =
w'(D'D+I)w - 2w'D'Dt + Dt'Dt
是常量w.r.t Dt'Dt
,因此可以在最小化期间丢弃,留下
w
对于约束H = 2*(D'*D+eye(15));
f = -2*Dt'*D;
,可以通过
sum(w)=1
下限Aeq = ones(1,15);
beq = 1;
将确保所有lb = zeros(15,1)
。
二次优化:
w_i>=0
应该为你做的伎俩!