矩阵优化的加权和
weighted sum of matrices optimization
我是优化方面的初学者,欢迎该领域的任何指导。
我有 15 个矩阵(即大小为 (n*m)
的 Di
)并想找到最佳权重(即 wi
)以对它们进行加权平均并制作一个更好的矩阵更类似于一个给定的矩阵(即 Dt
)。
其实我的objective函数是这样的:
min [norm2(sum(wi * Di) - Dt) + norm2(W)]
for i=1 ... 15 s.t. sum(wi) = 1 , wi >= 0
如何在 Matlab 中优化这个函数?
您描述的是一个简单的 Quadratic programming, that can be easily optimized using Matlab's quadprog
。
事情是这样的:
您 objective 函数 [norm2(sum(wi * Di) - Dt) + norm2(W)]
受 w
上的一些线性约束。让我们使用一些简化的符号重写它。设 w
为未知数的 15×1 向量。设 D
为 n*m
×15 矩阵(每列是您拥有的 Di
矩阵之一 - 写为单列),而 Dt
是 n*m
-by-1 向量(与 Dt
相同,但写为列向量)。现在一些线性代数(使用 ||x||^2 = x'*x 和 argmin x 等价于 argmin x^2 的事实)
[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
最后一项 Dt'Dt
是常数 w.r.t 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
.
二次优化:
w = quadprog( H, f, [], [], Aeq, beq, lb );
应该为您解决问题![=30=]
我是优化方面的初学者,欢迎该领域的任何指导。
我有 15 个矩阵(即大小为 (n*m)
的 Di
)并想找到最佳权重(即 wi
)以对它们进行加权平均并制作一个更好的矩阵更类似于一个给定的矩阵(即 Dt
)。
其实我的objective函数是这样的:
min [norm2(sum(wi * Di) - Dt) + norm2(W)]
for i=1 ... 15 s.t. sum(wi) = 1 , wi >= 0
如何在 Matlab 中优化这个函数?
您描述的是一个简单的 Quadratic programming, that can be easily optimized using Matlab's quadprog
。
事情是这样的:
您 objective 函数 [norm2(sum(wi * Di) - Dt) + norm2(W)]
受 w
上的一些线性约束。让我们使用一些简化的符号重写它。设 w
为未知数的 15×1 向量。设 D
为 n*m
×15 矩阵(每列是您拥有的 Di
矩阵之一 - 写为单列),而 Dt
是 n*m
-by-1 向量(与 Dt
相同,但写为列向量)。现在一些线性代数(使用 ||x||^2 = x'*x 和 argmin x 等价于 argmin x^2 的事实)
[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
最后一项 Dt'Dt
是常数 w.r.t 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
.
二次优化:
w = quadprog( H, f, [], [], Aeq, beq, lb );
应该为您解决问题![=30=]