求解线性组合的算法?

时间:2012-10-13 08:59:21

标签: math linear-algebra

我遇到了以下需要在我正在处理的项目中解决的问题:

给定一定数量的向量v_i(在数学意义上)和目标向量H,计算最接近匹配目标向量H的向量v_i的线性组合,其中约束系数必须在[0 ,1]。

我不太了解应该使用什么样的算法/数学来解决这样的问题。任何正确方向的刺激都会非常感激!

3 个答案:

答案 0 :(得分:2)

这是一个受约束的最小二乘问题。基本上你想解决优化问题:

  argmin ||Ax-H||
    x
  s.t.  0<=x_j<=1

其中x=(x_1, ..., x_j, ..., x_n)包含您要搜索的系数,A列对应于矢量v_i。

答案 1 :(得分:1)

假设您想要以最小二乘意义求解,那么您就会遇到二次规划问题。例如,假设您的矢量集是

x1 = 1 2 3]'    x2 = [3 2 1]'

你的目标载体是

H = [1 -1 1]'

然后你可以创建其列为矢量的矩阵:

A = [1 3;
     2 2;
     3 1]

你想要最小化的是

norm(A*x - H) = (A*x - H)' * (A*x - H) = x' * (A'*A) * x - (2*H'*A) * x + const

如果你定义

B = A' * A
C = -2 * H' * A

那么你有一个问题可以通过我的Matlab quadprog函数

得到最佳解决
quadprog(B,C,[],[],[],[],0,1)
ans = 
    0.16667
    0.16667

所以这种情况下的最佳解决方案是

1/6 * x1 + 1/6 * x2 = [2/3, 2/3, 2/3]

答案 2 :(得分:0)

这是一个组合优化问题。这种问题是NP难的。但我想对于二进制算法,应该有多项式算法可以解决,或者可能有一些放松来获得近似解。一些关于“整数编程”的谷歌搜索可能有所帮助。