void BaseOfSupport::buildA(const Eigen::MatrixXd& Ci, const Eigen::MatrixXd& Q, const Eigen::MatrixXd& T){ // Create first column of Aeq Eigen::MatrixXd AColumn(Ci.rows()*_miqpParams.N, T.cols()); for (unsigned int i=0; i<_miqpParams.N; i++){ AColumn.block(i*Ci.rows(), 0, Ci.rows(), T.cols()) = Ci * Q.pow(i) * T; } // Shift AeqColumn into every column of Aeq to take the form of a lower diagonal toeplitz matrix unsigned int j=0; while (j<_miqpParams.N){ _A.block(j*Ci.rows(), j*T.cols(), Ci.rows()*(_miqpParams.N-j), T.cols()) = AColumn.topRows((_miqpParams.N-j)*Ci.rows()); j=j+1; } OCRA_INFO("Built A"); }