矩阵加权和

时间:2015-04-13 08:15:34

标签: matlab optimization mathematical-optimization quadratic-programming

我是优化的初学者,欢迎此领域的任何指南。

我有15个矩阵(即大小为Di的{​​{1}}),并想要找到最佳权重(即(n*m))进行加权平均,并制作更好的矩阵类似于一个给定的矩阵(即wi)。

实际上我的目标函数是这样的:

Dt

如何在Matlab中优化此功能?

1 个答案:

答案 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

应该为你做的伎俩!