230 std::pair<int,int> rc=std::make_pair(0,0);
241 bool didOperate=
true;
255 for (
int i=1;i<N;++i)
263 for (
int j=1;j<N;++j)
282 rc=std::make_pair(-1,-1);
290 D.template block<N-1,N-1>(1,1)=sd.matrixD();
291 U.template block<N-1,N>(1,0)=sd.matrixU()*
U.template block<N-1,N>(1,0);
292 V.template block<1,N-1>(0,1)=
V.template block<1,N-1>(0,1)*sd.matrixV();
293 V.template block<N-1,N-1>(1,1)=
V.template block<N-1,N-1>(1,1)*sd.matrixV();
295 Y.template block<N-1,N>(1,0)=sd.matrixY()*
Y.template block<N-1,N>(1,0);
296 X.template block<1,N-1>(0,1)=
X.template block<1,N-1>(0,1)*sd.matrixX();
297 X.template block<N-1,N-1>(1,1)=
X.template block<N-1,N-1>(1,1)*sd.matrixX();
305 if (UAVD!=0 || XDYA!=0)
307 throw std::runtime_error(
"Smith decomposition failed\n");