C++使用Eigen库进行矩阵计算
公式:m_Xk_1 = (B.transpose()*B).inverse()*B.transpose()*L;
问题关键点: (B.transpose()*B).inverse()
计算过程及结果
首先验证了B.transpose()*B,在使用Eigen库时与使用matlab时的计算结果,虽然有细微差异,但随后将Eigen库计算的B.transpose()*B替换matlab中相应部分,matlab计算结果仍可靠,说明不是B.transpose()*B的问题。
随后验证了将Eigen库计算的 (B.transpose()*B).inverse()替换matlab中相应部分,发现matlab结果出错,因此确定了是Eigen矩阵求逆有问题。
解决方式
采用矩阵分解的方式求逆。
在此案例中,将m_Xk_1 = (B.transpose()*B).inverse()*B.transpose()*L改为:
m_Xk_1 = (B.transpose()*B).colPivHouseholderQr().solve(B.transpose()*L);