我能用什么最简单的算法来找到m1, m2, m3, ..., mn
的这些值,满足以下方程(当然达到一定的精度阈值):
m1*v1 + m2*v2 + ... + mn*vn = vd
其中CCD_ 2和CCD_?参数m1, ..., mn
应该是正实数。
我需要一个可靠且快速编码的算法。问题的大小会很小(不大于n=100),所以速度不是一个很重要的问题,尤其是精度会相当自由。
您所描述的是一个线性方程组。您可以将其写成以下矩阵方程:
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
来解决它,使用克雷默规则,或者最常见的是,使用高斯elmination。如果n
不等于k
,可能会发生一些事情,你可以在谷歌上了解一下。
顺便说一下,你说m1 ... mn
必须是正数(非零?)。在这种情况下,您可能希望从线性规划中解决问题,添加m1 > 0
、m2 > 0
等限制,并使用单纯形算法来解决它
无论你用什么,都不建议自己编程算法。每种语言都有大量的库来处理这类问题。