20 static Interval fwd(
const Interval& x1,
const Interval& x2);
21 static ScalarType fwd_natural(
const ScalarType& x1,
const ScalarType& x2);
22 static ScalarType fwd_centered(
const ScalarType& x1,
const ScalarType& x2);
23 static void bwd(
const Interval& y, Interval& x1,
int x2);
24 static void bwd(
const Interval& y, Interval& x1, Interval& x2);
31 pow(
const ScalarExpr& x1,
const ScalarExpr& x2)
33 return { std::make_shared<AnalyticOperationExpr<PowOp,ScalarType,ScalarType,ScalarType>>(x1,x2) };
37 operator^(
const ScalarExpr& x1,
const ScalarExpr& x2)
39 return { std::make_shared<AnalyticOperationExpr<PowOp,ScalarType,ScalarType,ScalarType>>(x1,x2) };
49 inline ScalarType PowOp::fwd_natural(
const ScalarType& x1,
const ScalarType& x2)
53 x1.def_domain && x2.def_domain
57 inline ScalarType PowOp::fwd_centered(
const ScalarType& x1,
const ScalarType& x2)
59 if(centered_form_not_available_for_args(x1,x2))
60 return fwd_natural(x1,x2);
62 IntervalMatrix d(1,x1.da.size());
63 for(Index i = 0 ; i < d.size() ; i++)
64 d(0,i) = x2.a*x1.da(0,i)*
pow(x1.a,x2.a-1.);
70 x1.def_domain && x2.def_domain
82 Interval proj =
root(y, x2);
83 Interval pos_proj = proj & x1;
84 Interval neg_proj = (-proj) & x1;
85 x1 = pos_proj | neg_proj;
94 assert_release(x2.is_degenerated() &&
"PowOp::bwd(y,x1,x2) (with x1 and x2 intervals) not implemented yet with Gaol");
95 assert_release(x2 == (
int)(x2.mid()) &&
"PowOp::bwd(y,x1,x2) (x2 not integer) not implemented yet with Gaol");
96 PowOp::bwd(y, x1, x2.mid());
Interval class, for representing closed and connected subsets of .
Definition codac2_Interval.h:62
Interval pow(const Interval &x, int n)
Returns , .
Definition codac2_Interval_operations_impl.h:33
Interval root(const Interval &x, int p)
Returns the p-th root: .
Definition codac2_Interval_operations_impl.h:60