我能用什么最简单的算法来找到这样的m1, m2, m3, ..., mn值,即满足以下方程(当然,达到一定的精度阈值):
m1*v1 + m2*v2 + ... + mn*vn = vd其中v1, v2, ..., vn和vd给出了3-10维的向量?参数m1, ..., mn应为正实数。
我需要一个可靠且快速的算法。问题的大小将很小(不大于n=100),因此速度不是一个非常重要的问题,特别是精确性将相当宽松。
发布于 2014-10-08 14:11:11
您所描述的是一个线性方程组。您可以将它写成以下矩阵方程:
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来解决这个问题,方法是使用克雷默法则,或者最常见的是使用高斯峰。如果n不等于k,可能会发生一些事情,您可以在googling上了解一下。
顺便说一句,你说过m1 ... mn必须是正数(非零?)。在本例中,您可能希望从线性规划中解决问题,添加诸如m1 > 0、m2 > 0等限制,并使用单纯形算法来解决问题。
无论您使用什么,都不建议自己编写算法。每种语言都有大量的库来处理这类问题。
https://stackoverflow.com/questions/26258437
复制相似问题