形状匹配软体动力学 - 实施公式



我正在尝试实现软体物理学,基于Müller等人的这篇论文。我的数学不是很差,但是在实现公式(7)时,我就是无法弄清楚语义。

它是这样的:

A = left( sum_i m_i p_i q_i^T) right) left( sum_i m_i q_i q_i^T right)^{-1}
with q_i and p_i being vectors (from center of mass current position,
to be exact)

(请原谅我的TeX)。这对我来说没有意义 - 向量积之和的乘积应该给出一个标量,但结果被视为矩阵。

在clojure(core.matrix)中直接实现公式会给我标量结果。

我试图修改实现,将 N 向量 p 和 q 替换为零的 NxN 矩阵,p 和 q 作为重复的第一行/列。这给了我矩阵结果,但由此产生的变换使我的坐标错误地偏离了原始位置。

有人有这个算法的经验吗?

clojure.core.matrix 的实现导致了这个问题。通常,列向量和行向量的乘积应生成矩阵(而行向量和列向量的乘积应生成标量)。

core.matrix 在这两种情况下都返回标量,尽管其 api 文档另有说明。所以我不得不扩展强制乘法的技巧:

     a1
mmul a2 (b1 b2 b3)    = (mmul [[a1][a2][a3]] [b1 b2 b3])
     a3                 or (mmul [a1 a2 a3] [b1 b2 b3])
is done wrongly, so instead:
     (a1 0 0) (b1 b2 b3)
mmul (b2 0 0) (0  0  0 ) = (mmul [[a1 0 0] [a2 0 0] [a3 0 0]]
     (b3 0 0) (0  0  0 )         [[b1 b2 b3] [0 0 0] [0 0 0]] )

相关内容

  • 没有找到相关文章

最新更新