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