static inline void GradientImpl(const LRSDPFunction<SDPType>& function, const arma::mat& coordinates, const arma::vec& lambda, const double sigma, arma::mat& gradient) { // We can calculate the gradient in a smart way. // L'(R, y, s) = 2 * S' * R // with // S' = C - sum_{i = 1}^{m} y'_i A_i // y'_i = y_i - sigma * (Trace(A_i * (R R^T)) - b_i) const arma::mat rrt = coordinates * trans(coordinates); arma::mat s(function.SDP().C()); UpdateGradient( s, rrt, function.SDP().SparseA(), function.SDP().SparseB(), lambda, 0, sigma); UpdateGradient( s, rrt, function.SDP().DenseA(), function.SDP().DenseB(), lambda, function.SDP().NumSparseConstraints(), sigma); gradient = 2 * s * coordinates; }
void tMercuryControlSeparator::resizeEvent(QResizeEvent*) { UpdateGradient(); }