我是优化的初学者,欢迎该领域的任何指导。
我有 15 个矩阵(即Di
大小为(n*m)
),并希望找到最佳权重(即)wi
以对它们进行加权平均,并制作一个更类似于给定矩阵(即Dt
事实上我的目标函数是这样的:
min [norm2(sum(wi * Di) - Dt) + norm2(W)]
for i=1 ... 15 s.t. sum(wi) = 1 , wi >= 0
如何在 Matlab 中优化此功能?
我是优化的初学者,欢迎该领域的任何指导。
我有 15 个矩阵(即Di
大小为(n*m)
),并希望找到最佳权重(即)wi
以对它们进行加权平均,并制作一个更类似于给定矩阵(即Dt
事实上我的目标函数是这样的:
min [norm2(sum(wi * Di) - Dt) + norm2(W)]
for i=1 ... 15 s.t. sum(wi) = 1 , wi >= 0
如何在 Matlab 中优化此功能?
您正在描述一个简单的二次规划,可以使用 Matlab 轻松优化quadprog
。
这是怎么回事:
你的目标函数[norm2(sum(wi * Di) - Dt) + norm2(W)]
受到一些线性约束w
。让我们用一些简化的符号重写它。设w
为 15×1 的未知向量。让我们D
成为一个n*m
-by-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
是恒定的 wrt 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 );
应该为您解决问题!