20 template<
typename X1,
typename X2>
21 static std::string str(
const X1& x1,
const X2& x2)
23 return x1->str(!x1->is_str_leaf()) +
"^" + x2->str(!x2->is_str_leaf());
26 template<
typename X1,
typename X2>
27 static std::pair<Index,Index> output_shape([[maybe_unused]]
const X1& s1, [[maybe_unused]]
const X2& s2)
32 static Interval fwd(
const Interval& x1,
const Interval& x2);
33 static ScalarType fwd_natural(
const ScalarType& x1,
const ScalarType& x2);
34 static ScalarType fwd_centered(
const ScalarType& x1,
const ScalarType& x2);
35 static void bwd(
const Interval& y, Interval& x1,
int x2);
36 static void bwd(
const Interval& y, Interval& x1, Interval& x2);
43 pow(
const ScalarExpr& x1,
const ScalarExpr& x2)
45 return { std::make_shared<AnalyticOperationExpr<PowOp,ScalarType,ScalarType,ScalarType>>(x1,x2) };
49 operator^(
const ScalarExpr& x1,
const ScalarExpr& x2)
51 return { std::make_shared<AnalyticOperationExpr<PowOp,ScalarType,ScalarType,ScalarType>>(x1,x2) };
61 inline ScalarType PowOp::fwd_natural(
const ScalarType& x1,
const ScalarType& x2)
65 x1.def_domain && x2.def_domain
69 inline ScalarType PowOp::fwd_centered(
const ScalarType& x1,
const ScalarType& x2)
71 if(centered_form_not_available_for_args(x1,x2))
72 return fwd_natural(x1,x2);
74 IntervalMatrix d(1,x1.da.size());
75 for(Index i = 0 ; i < d.size() ; i++)
76 d(0,i) = x2.a*x1.da(0,i)*
pow(x1.a,x2.a-1.);
82 x1.def_domain && x2.def_domain
94 Interval proj =
root(y, x2);
95 Interval pos_proj = proj & x1;
96 Interval neg_proj = (-proj) & x1;
97 x1 = pos_proj | neg_proj;
106 assert_release(x2.is_degenerated() &&
"PowOp::bwd(y,x1,x2) (with x1 and x2 intervals) not implemented yet with Gaol");
107 assert_release(x2 == (
int)(x2.mid()) &&
"PowOp::bwd(y,x1,x2) (x2 not integer) not implemented yet with Gaol");
108 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