0
我想实现一个阻尼伪反函数与特征的任何大小的矩阵。我不明白为什么这个实现不起作用。Eigen,矩阵调整大小问题时,实施阻尼伪逆
功能:
template<typename Derived>
Derived dampedPinv(const Eigen::MatrixBase<Derived>& a, double rho = 1e-4) {
return a.transpose() * (a*a.transpose() + rho*rho*Eigen::MatrixBase<Derived>::Identity(a.rows(), a.rows())).inverse();
}
函数调用:
Eigen::MatrixXd a = Eigen::MatrixXd::Zero(6,1);
a(3,0) = 1;
Eigen::MatrixXd ainv = Eigen::MatrixXd::Zero(6,1);
ainv = dampedPinv(a);
错误消息:
/usr/include/eigen3/Eigen/src/Core/PlainObjectBase.h:258:
void Eigen::PlainObjectBase<Derived>::resize(Eigen::Index, Eigen::Index) [with Derived = Eigen::Matrix<double, 6, -1>; Eigen::Index = long int]:
Assertion `(!(RowsAtCompileTime!=Dynamic) || (rows==RowsAtCompileTime)) &&
(!(ColsAtCompileTime!=Dynamic) || (cols==ColsAtCompileTime)) &&
(!(RowsAtCompileTime==Dynamic && MaxRowsAtCompileTime!=Dynamic) || (rows<=MaxRowsAtCompileTime)) &&
(!(ColsAtCompileTime==Dynamic && MaxColsAtCompileTime!=Dynamic) || (cols<=MaxColsAtCompileTime)) &&
rows>=0 && cols>=0 &&
"Invalid sizes when resizing a matrix or array."' failed.
Aborted (core dumped)
如何去调试呢? –
尝试在几个步骤中分解函数中的表达式。 然后在调试器中运行你的代码,看看哪些步骤触发了断言。这应该指向你正确的方向。 – Louen
呵呵。错误表示您尝试调整为6 x -1。你能告诉我们哪个函数调用行是258行吗?你有没有尝试再次输入,假设有一些奇怪的隐藏的字符,以某种方式使1负面?顺便说一下,不应该是1x6? – Aziuth