Differentiation::SD::Expression x_sd("x");
const Differentiation::SD::types::substitution_map substitution_map =
Differentiation::SD::make_substitution_map(
std::pair<Differentiation::SD::Expression, double>{x_sd, x});
std::cout << "Evaluate f(x) at x = " << x << std::endl;
Differentiation::SD::Expression f = abs(x_sd);
std::cout << "Function f(x)= " << f << std::endl;
const double computed_f =
f.substitute_and_evaluate<double>(substitution_map);
std::cout << "Computed Function f(x)= " << computed_f << std::endl;
Differentiation::SD::Expression df_dx_sd = f.differentiate(x_sd);
std::cout << "Derivative of f: " << df_dx_sd << std::endl;
const double computed_df_dx =
df_dx_sd.substitute_and_evaluate<double>(substitution_map);
std::cout << "Computed df_dx: " << computed_df_dx << std::endl;