2016-01-19 23 views
1

我試圖根據this paper by Müller et al.來實現軟體物理學。我在數學上並不是很糟糕,但是在實現公式(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替換爲零和p和q的NxN矩陣作爲第一行/列。這給了我矩陣結果,但由此產生的變換使我的座標錯誤地遠離原始位置。

有沒有人有這種算法的經驗?

回答

0

這是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]])