我有一組矩陣形式的線性代數方程組,Ax = By。其中甲是和X矩陣是大小20
,乙是36x13
和ÿ是13x1
的向量。 等級(A)= 20。因爲系統是超定的(有更多的方程數比變量),所以最小二乘解是可能的,我,e; x =(A^TA)^ - 1A^TBy。我想要解決方案,以便剩餘誤差e = Ax-By應該最小化。線性阿爾克馬爾方程的最小二乘解Ax = by Eigen C++
使用Eigen/Dense
C++庫我已經制定了所有的矩陣等。
我猜這個頁面描述的方法只適用於方陣。因爲當它試圖運行它會給出錯誤。
x = A.jacobiSvd(ComputeThinU | ComputeThinV).solve(B*y);
錯誤
/usr/include/eigen3/Eigen/src/SVD/JacobiSVD.h: In member function 'const
Eigen::internal::solve_retval<Eigen::JacobiSVD<MatrixType, QRPreconditioner>, Rhs>
Eigen::JacobiSVD<MatrixType, QRPreconditioner>::solve(const
Eigen::MatrixBase<OtherDerived>&) const [with Rhs =
Eigen::GeneralProduct<Eigen::Matrix<float, 36, 13>, Eigen::Matrix<double, -1, 1>, 4>;
_MatrixType = Eigen::Matrix<float, 36, 20>; int QRPreconditioner = 2]':
/usr/include/eigen3/Eigen/src/SVD/JacobiSVD.h:658:5: warning: control reaches end of
non-void function [-Wreturn-type]
make[2]: *** [src/CMakeFiles/spacebot_actuationKinematics.dir
/ActuationKinematics.cpp.o] Error 1
make[1]: *** [src/CMakeFiles/spacebot_actuationKinematics.dir/all] Error 2
make: *** [all] Error 2
頁面支持QR分解。你試過了嗎?它也適用於最小二乘的矩形矩陣A以及SVD方法。您的錯誤來自於報告函數的一些特殊情況中缺少的return語句,請檢查Eigen的錯誤報告。 – LutzL
你是什麼意思? LS方法是找到x的線性組合的參數,這些參數是觀察到的y觀察到的最佳擬合。所以你可以用x值和y值代入方程。你有36個觀察結果嗎? – 4pie0
@LutzL是的我試過了。這是輸出。斷言失敗,因爲rows == cols。 ActuationKinematicsTest:/usr/include/eigen3/Eigen/src/LU/Inverse.h:334:const Eigen :: internal :: inverse_impl Eigen :: MatrixBase :: inverse()const [with Derived = Eigen :: Matrix ]:聲明'rows()== cols()'失敗。 Aborted(核心轉儲) –