[英]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.