#pragma once #include #include #include #include #include template void newton( Eigen::VectorXd& x, Func& func, Solver& solver, int max_iters = 1000, double lim = 1e-6, bool verbose = true, std::vector fixedIdx = {}, const std::function& callBack = [](const auto&) {}); template void newton( geometrycentral::surface::IntrinsicGeometryInterface& geometry, Eigen::MatrixXd& V, Func& func, int max_iters, double lim, bool verbose = true, std::vector fixedIdx = {}, const std::function& callBack = [](const auto&) {}); void sparse_gauss_newton(geometrycentral::surface::IntrinsicGeometryInterface& geometry, Eigen::MatrixXd& V, const Eigen::VectorXd& xTarget, const geometrycentral::surface::FaceData& MrInv, geometrycentral::surface::FaceData& theta1, geometrycentral::surface::VertexData& theta2, TinyAD::ScalarFunction<1, double, Eigen::Index>& adjointFunc, std::vector& fixedIdx, int max_iters, double lim, double wM, double wL, double E1, double lambda1, double lambda2, double deltaLambda, double thickness, const std::function& callback = [](const auto&) {});