我可以使用哪种最简单的算法来查找m1, m2, m3, ..., mn
的这些值,以下方程式是满意的(当然达到一定的准确度阈值):
m1*v1 + m2*v2 + ... + mn*vn = vd
其中v1, v2, ..., vn
和vd
是否为3-10维度的向量?参数m1, ..., mn
应为正实数。
我需要一种可靠且快速编码的算法。问题规模会很小(不大于n = 100),因此速度不是一个非常重要的问题,特别是准确性会相当自由。
答案 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 > 0
,m2 > 0
等限制,并使用simplex algorithm来解决问题。
无论您使用什么,建议您自己编程算法是不可取的。每种语言都有大量的库可以解决这类问题。