找到向量旁边的参数以获得所需的向量

时间:2014-10-08 13:41:57

标签: algorithm linear-algebra

我可以使用哪种最简单的算法来查找m1, m2, m3, ..., mn的这些值,以下方程式是满意的(当然达到一定的准确度阈值):

m1*v1 + m2*v2 + ... + mn*vn = vd

其中v1, v2, ..., vnvd是否为3-10维度的向量?参数m1, ..., mn应为正实数。

我需要一种可靠且快速编码的算法。问题规模会很小(不大于n = 100),因此速度不是一个非常重要的问题,特别是准确性会相当自由。

1 个答案:

答案 0 :(得分:2)

您所描述的是system of linear equations。您可以将其写为以下矩阵方程:

A * x = b

其中,如果k是向量的维度:

    / v1[1] v2[1] ... vn[1] \
    | v1[2] v2[2] ... vn[2] |
A = | ..................... |
    | ..................... |
    \ v1[k] v2[k] ... vn[k] /

     / m1 \
     | m2 |
 x = | .. |
     | .. |
     \ mn /

    / vd[1] \
    | vd[2] |
b = | ..... |
    | ..... |
    \ vd[k] /

有几种方法可以解决这些问题。如果n等于k并且问题有解决方案(可能有也可能没有),那么您可以通过反转系数矩阵A并计算inverse(A) * b来解决它,使用Cramer's rule或最常见的Gaussian elmination。如果n不等于k,可能会发生一些事情,您可以通过Google搜索来了解它。

顺便说一下,你说m1 ... mn必须是正数(非零?)。在这种情况下,您可能希望从linear programming处理问题,添加m1 > 0m2 > 0等限制,并使用simplex algorithm来解决问题。

无论您使用什么,建议您自己编程算法是不可取的。每种语言都有大量的库可以解决这类问题。