60 const Eigen::MatrixXd& jacobian_data)
const
62 uint32_t rows = sorted_singular_values.rows();
63 return Eigen::MatrixXd::Zero(rows, rows);
73 const Eigen::MatrixXd& jacobian_data)
const
75 uint32_t rows = sorted_singular_values.rows();
87 const Eigen::MatrixXd& jacobian_data)
const
91 Eigen::MatrixXd prod = jacobian_data * jacobian_data.transpose();
92 double d = prod.determinant();
93 double w = std::sqrt(std::abs(
d));
94 double damping_factor;
95 uint32_t rows = sorted_singular_values.rows();
96 Eigen::MatrixXd damping_matrix = Eigen::MatrixXd::Zero(rows, rows);
100 double tmp_w = (1 - w / w_threshold);
101 damping_factor = lambda_max * tmp_w * tmp_w;
102 damping_matrix = Eigen::MatrixXd::Identity(rows, rows) * pow(damping_factor, 2);
105 return damping_matrix;
115 const Eigen::MatrixXd& jacobian_data)
const
118 double least_singular_value = sorted_singular_values(sorted_singular_values.rows() - 1);
119 uint32_t rows = sorted_singular_values.rows();
120 Eigen::MatrixXd damping_matrix = Eigen::MatrixXd::Zero(rows, rows);
125 double damping_factor = sqrt( (1.0 - pow(least_singular_value / this->
params_.
eps_damping, 2.0)) * lambda_quad);
126 damping_matrix = Eigen::MatrixXd::Identity(rows, rows) * pow(damping_factor, 2);
129 return damping_matrix;
138 const Eigen::MatrixXd& jacobian_data)
const
141 uint32_t rows = sorted_singular_values.rows();
142 Eigen::MatrixXd damping_matrix = Eigen::MatrixXd::Zero(rows, rows);
144 for (
unsigned i = 0; i < rows; i++)
148 damping_matrix(i, i) = lambda_sig;
151 return damping_matrix;