什么是最简单的算法,我可以用来找到m1,m2,m3,…,mn这样的值,以下方程式满足(当然达到一定的精度阈值):
m1*v1 + m2*v2 + ... + mn*vn = vd
其中v1,v2,…,vn和vd给出了3-10维的向量?参数m1,…,mn应为正实数.
我需要一种可靠且快速编码的算法.问题规模会很小(不大于n = 100),因此速度不是一个非常重要的问题,特别是准确性会相当自由.
最佳答案 你所描述的是一个
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和计算逆(A)* b来解决它,使用Cramer’s rule,或者最常见的是,使用Gaussian elmination如果n不等于k,可能会发生几件事,你可以通过谷歌搜索一下.
顺便说一下,你说m1 …… mn必须是正数(非零?).在这种情况下,您可能希望从linear programming处理您的问题,添加限制,如m1> 0,m2> 0等,并使用simplex algorithm来解决它.
无论你使用什么,真的不建议自己编程算法.每种语言都有大量的库可以解决这类问题.