void CutOffPlaneSolver::_buildSubgradient( Vector &x ) { NumberSet I; _findMax(x, I); Vector subgradient; int i_max = I[0]; if (i_max == -1) { subgradient = _helpfulFuncGrad(x); } else { subgradient = _T._phi_grad[i_max]->eval(x); } double b; if (i_max == -1) b = -_helpfulFunc(x) + subgradient * x; else b = -_T._phi[i_max]->eval(x) + subgradient * x; _Sk.b.pushBack(b); Vector new_vec(_Sk.m + 1); new_vec[new_vec.size() - 1] = 1.0; _Sk.A << new_vec; for (int i = 0; i != _Sk.n; i++) { double b = 0; _Sk.A[i].pushBack(b); } for (int i = 0; i != subgradient.size(); i++) { _Sk.A[i][_Sk.A.m() - 1] = subgradient[i]; _Sk.A[i + subgradient.size()][_Sk.A.m() - 1] = -subgradient[i]; } b = 0; _Sk.c.pushBack(b); _Sk.n = _Sk.A.n(); _Sk.m = _Sk.A.m(); // cout << _Sk; }
TCBinaryTreeNode* TCGenBinaryTree::prev(TCBinaryTreeNode* node) const /**************************************************************************** * * Function: TCGenBinaryTree::prev * Parameters: node - Current node to find predecessor of * Returns: Predecessor node to the specified node, NULL if none. * * Description: Finds the previous node in the binary tree defined by an * inorder traversal of the tree. If there is no predecessor, * this routine returns NULL. * ****************************************************************************/ { if (node->left != z) return _findMax(node->left); TCBinaryTreeNode *p = node->parent; while (p != root && p->left == node) { node = p; p = p->parent; } return (p == root) ? NULL : p; }
TCBinaryTreeNode* findMax() const { return _findMax(root->right); };