所以,如果你有4个向量,你知道它们的方向(所有方向都可能不同),你可以改变它们的所有幅度,如果你想让所有4个向量加成另一个你知道的向量,你会把幅度设置为多少?
这可能看起来有点太具体了,但我问这个问题的原因是我用kRPC为KSP制作的一个程序,在这个程序中,4个倾斜的发动机悬停在飞机上,即使整个飞机都倾斜了。我试着搜索它,但我不知道该搜索什么。我对向量的数学不太了解。谢谢
这可能并不总是可能的,它将取决于向量。从技术上讲,目标向量必须在四个输入向量的线性范围内。
您可以将其写成以下矩阵方程:
Ax = b
其中,b
是目标向量,x
是系数求和,A
是通过按列堆叠四个向量而形成的矩阵。x
向量存在,当且仅当A
矩阵是可逆的。
您可以使用numpy.linalg.solve
函数来解决此问题。
在您的情况下,如果您有4个维度为3(或2)的向量,您可能会遇到问题:在这种情况下,不仅有一个解决方案,而且会变得棘手。在实践中,您需要丢弃一个(或两个)向量,以便只保留3个(或2个)独立向量。
不过,您仍然可以使用numpy.linalg.lstsq
来获得近似解。
据我所知,您正在尝试求和向量,并且正在寻找一个特定的解决方案来获得结束向量。在某种程度上,你在问如何解决一个看起来像这样的问题:
a1V1+a2V2+a3V3+a4V4=aV
其中V是矢量,a是幻像。我假设V是固定的(你的喷气式飞机的定位方式?)。我还假设你的矢量是三维
因此,仅从数学角度来看,就有3个维度和4个参数。意思是其中一个"a"可以是任何东西。如果不知道确切的矢量,我想我再也帮不了什么了。
就代码而言,求解"a"是试图求解线性方程组,通常通过使用scipy的线性代数来完成:https://docs.scipy.org/doc/scipy-0.15.1/reference/linalg.html特别是scipy.linalg.solve().
同样,你必须非常清楚问题的维度,如果你在矩阵中使用4个向量,你会遇到很多问题。在试图求解方程之前,必须先确定其中一个"a"值。
编辑:我对这个问题想了更多,我意识到系统中有一个约束,那就是"a"不能是负数。因此,这个系统似乎有一些独特的解决方案。