コード例 #1
0
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;
}
コード例 #2
0
void tMercuryControlSeparator::resizeEvent(QResizeEvent*)
{
    UpdateGradient();
}