8 Eigen::ArrayXd x = args, r0;
9 Eigen::MatrixXd J(args.size(), args.size());
10 for (
int iter = 0; iter < 30; ++iter) {
12 for (
auto i = 0; i < args.size(); ++i) {
13 auto dri = std::max(1e-6 * x[i], 1e-8);
16 J.col(i) = (f(argsplus) - r0) / dri;
18 Eigen::ArrayXd v = J.colPivHouseholderQr().solve(-r0.matrix());
20 auto err = r0.matrix().norm();
21 if (!std::isfinite(err)){
22 throw std::invalid_argument(
"err is now NaN");