首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在向量旁边寻找参数以得到所需的向量

在向量旁边寻找参数以得到所需的向量
EN

Stack Overflow用户
提问于 2014-10-08 13:41:57
回答 1查看 54关注 0票数 4

我能用什么最简单的算法来找到这样的m1, m2, m3, ..., mn值,即满足以下方程(当然,达到一定的精度阈值):

代码语言:javascript
复制
m1*v1 + m2*v2 + ... + mn*vn = vd

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

我需要一个可靠且快速的算法。问题的大小将很小(不大于n=100),因此速度不是一个非常重要的问题,特别是精确性将相当宽松。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-10-08 14:11:11

您所描述的是一个线性方程组。您可以将它写成以下矩阵方程:

代码语言:javascript
复制
A * x = b

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

代码语言:javascript
复制
    / 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 > 0m2 > 0等限制,并使用单纯形算法来解决问题。

无论您使用什么,都不建议自己编写算法。每种语言都有大量的库来处理这类问题。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26258437

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档