13 using rbf_base::rbf_base;
15 explicit biharmonic3d(
const std::vector<double>& params) { set_parameters(params); }
17 [[nodiscard]] std::unique_ptr<rbf_base> clone()
const override {
return std::make_unique<biharmonic3d>(*
this); }
19 [[nodiscard]]
int cpd_order()
const override {
return 1; }
21 [[nodiscard]]
double evaluate_isotropic(
const vector3d& diff)
const override {
22 auto slope = parameters().at(0);
28 [[nodiscard]] vector3d evaluate_gradient_isotropic(
const vector3d& )
const override {
29 throw std::runtime_error(
"biharmonic3d::evaluate_gradient_isotropic() is not implemented");
32 [[nodiscard]] matrix3d evaluate_hessian_isotropic(
const vector3d& )
const override {
33 throw std::runtime_error(
"biharmonic3d::evaluate_hessian_isotropic() is not implemented");
36 [[nodiscard]]
int num_parameters()
const override {
return 1; }
38 [[nodiscard]]
const std::vector<double>& parameter_lower_bounds()
const override {
39 static const std::vector<double> lower_bounds{0.0};
43 [[nodiscard]]
const std::vector<double>& parameter_upper_bounds()
const override {
44 static const std::vector<double> upper_bounds{std::numeric_limits<double>::infinity()};