簡體   English   中英

如何將 Eigen::matrix 除以 Eigen::vector?

[英]How can I divide the Eigen::matrix by Eigen::vector?

以下是我的代碼。

    Eigen::Matrix3d first_rotation = firstPoint.q.matrix();
    Eigen::Vector3d first_trans= firstPoint.t;
    for(auto &iter:in_points )
    {
                
                iter.second.t= first_rotation / (iter.second.t-first_trans).array();
    }

然而,vscode 說“沒有運算符/匹配操作數”用於除法。我怎樣才能用向量除以矩陣?

在 Matlab 中,直線為t2 = R1 \ (R2 - t1);

Matlab 定義了/\運算符,當應用於矩陣時,作為求解線性方程系統,您可以在他們的運算符文檔中閱讀。 尤其

x = A\B求解線性方程組A*x = B

本征不這樣做。 而且我認為大多數其他語言或庫也不會這樣做。 要點是有多種方法可以分解矩陣進行求解。 每個都有自己的優點和缺點。 您可以在他們的文檔中閱讀它。

在您的情況下,您可以通過多次重復使用分解來節省時間。 是這樣的:

Eigen::PartialPivLU<Eigen::Matrix3d> first_rotation =
      firstPoint.q.matrix().partialPivLu();
for(auto &iter: in_points)
    iter.second.t = first_rotation.solve(
          (iter.second.t-first_trans).eval());

注意:我選擇了 LU 而不是 householderQr,因為這就是 Matlab 對一般方矩陣所做的 如果您對輸入矩陣了解更多,例如它是對稱的或不可逆的,請嘗試其他方法。

注 2:我不確定在這種情況下是否有必要,但我添加了對eval的調用,以便賦值的左側不是右側任何內容的別名。 對於動態大小的向量,這將引入額外的 memory 分配,但在這里沒問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM